/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7294); /* harmony import */ var react_proptype_conditional_require__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6494); /* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8721); /* harmony import */ var lodash_isequal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9886); /* harmony import */ var lodash_isequal__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_isequal__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _PSSnippet__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(366); /* harmony import */ var _PSSnippet__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_PSSnippet__WEBPACK_IMPORTED_MODULE_3__); function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } /* global _ps */ var PSClickWrap = /*#__PURE__*/function (_React$Component) { _inheritsLoose(PSClickWrap, _React$Component); function PSClickWrap(props) { var _this; _this = _React$Component.call(this, props) || this; _defineProperty(_assertThisInitialized(_this), "_isMounted", false); _this.createClickWrap = _this.createClickWrap.bind(_assertThisInitialized(_this)); _this.state = { clickwrapGroupKey: null, dynamicGroup: false }; _this.propsEventMap = { onAll: 'all', onSent: 'sent', onRetrieved: 'retrieved', onSet: 'set', onSetSignerId: 'set:signer_id', onValid: 'valid', onInvalid: 'invalid', onChecked: 'checked', onUnchecked: 'unchecked', onRendered: 'rendered', onDisplayed: 'displayed', onScrolledContract: 'scrolled:contract', onScrolled: 'scrolled', onError: 'error' }; var _this$props = _this.props, accessId = _this$props.accessId, backupScriptURL = _this$props.backupScriptURL, debug = _this$props.debug, disableSending = _this$props.disableSending, dynamic = _this$props.dynamic, injectSnippetOnly = _this$props.injectSnippetOnly, oversized = _this$props.oversized, psScriptUrl = _this$props.psScriptUrl, signerId = _this$props.signerId, testMode = _this$props.testMode; if (!_PSSnippet__WEBPACK_IMPORTED_MODULE_3___default().isSnippetLoaded(psScriptUrl, backupScriptURL)) { _PSSnippet__WEBPACK_IMPORTED_MODULE_3___default().injectSnippet(psScriptUrl, backupScriptURL); } if (debug) { _ps.debug = true; } if (injectSnippetOnly) return _assertThisInitialized(_this); _ps('create', accessId, { test_mode: testMode, disable_sending: disableSending, dynamic: dynamic, signer_id: signerId, oversized: oversized }); _ps('set', 'client_library', 'react-sdk'); _ps('set', 'client_version', "2.15.0"); return _this; } var _proto = PSClickWrap.prototype; _proto.componentDidMount = function componentDidMount() { var injectSnippetOnly = this.props.injectSnippetOnly; this._isMounted = true; if (injectSnippetOnly) return; this.createClickWrap(); }; _proto.componentDidUpdate = function componentDidUpdate(prevProps) { var _this$props2 = this.props, acceptanceLanguage = _this$props2.acceptanceLanguage, clickWrapStyle = _this$props2.clickWrapStyle, customData = _this$props2.customData, filter = _this$props2.filter, groupKey = _this$props2.groupKey, injectSnippetOnly = _this$props2.injectSnippetOnly, renderData = _this$props2.renderData, signerId = _this$props2.signerId, snapshotLocation = _this$props2.snapshotLocation; var _this$state = this.state, clickwrapGroupKey = _this$state.clickwrapGroupKey, dynamicGroup = _this$state.dynamicGroup; var _psLoadedValidGroup = _ps && _ps.getByKey && typeof _ps.getByKey === 'function' && clickwrapGroupKey && _ps.getByKey(clickwrapGroupKey); if (injectSnippetOnly) return; if (clickWrapStyle !== prevProps.clickWrapStyle && !dynamicGroup && _psLoadedValidGroup) { _ps.getByKey(clickwrapGroupKey).site.set('style', clickWrapStyle); _ps.getByKey(clickwrapGroupKey).retrieveHTML(); } if (!lodash_isequal__WEBPACK_IMPORTED_MODULE_2___default()(customData, prevProps.customData)) { _ps('set', 'custom_data', customData); } if (acceptanceLanguage !== prevProps.acceptanceLanguage) { _ps('set', 'acceptance_language', acceptanceLanguage); } if (!lodash_isequal__WEBPACK_IMPORTED_MODULE_2___default()(renderData, prevProps.renderData)) { if (clickWrapStyle && _psLoadedValidGroup) { _ps.getByKey(clickwrapGroupKey).site.set('style', clickWrapStyle); } _ps(clickwrapGroupKey + ":retrieveHTML", renderData); } if (signerId !== prevProps.signerId) { if (clickWrapStyle && _psLoadedValidGroup) { _ps.getByKey(clickwrapGroupKey).site.set('style', clickWrapStyle); } _ps('set', 'signer_id', signerId); } if (snapshotLocation !== prevProps.snapshotLocation) { _ps('set', 'snapshot_location', snapshotLocation); } if (clickWrapStyle !== prevProps.clickWrapStyle && dynamicGroup) { this.createClickWrap(); } if (filter !== prevProps.filter) { this.createClickWrap(); } if (groupKey !== prevProps.groupKey && !dynamicGroup) { this.createClickWrap(); if (_psLoadedValidGroup) _ps.getByKey(clickwrapGroupKey).retrieveHTML(); } }; _proto.componentWillUnmount = function componentWillUnmount() { this._isMounted = false; var _this$props3 = this.props, injectSnippetOnly = _this$props3.injectSnippetOnly, groupKey = _this$props3.groupKey; if (injectSnippetOnly) return; if (_ps && _ps.getByKey && typeof _ps.getByKey === 'function' && _ps.getByKey(groupKey)) { if (_ps.getByKey(groupKey).rendered) { _ps.getByKey(groupKey).rendered = false; } _ps.getByKey(groupKey).resetData(); } this.unregisterEventListeners(); }; _proto.registerEventListener = function registerEventListener(eventProp, groupKey) { var _this2 = this; var eventCallbackFn = function eventCallbackFn() { var shouldFireListener = false; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } args.forEach(function (arg) { // We need to check the context variable and see if it matches the groupKey, if it does -> fire the event (context argument position varies) if (arg && arg.get && arg.get('key') && arg.get('key') === groupKey) { shouldFireListener = true; // Else we should check if the context is for the entire site, and as such the context variable is a Site object. } else if (arg && arg.toString() === '[object Site]') { shouldFireListener = true; } }); if (shouldFireListener) { var _this2$props; (_this2$props = _this2.props)[eventProp].apply(_this2$props, args); } }; // In order to handle unregistration of event listeners, we override the toString function to identify the // function by a UUID rather than the default toString of a function. var newEventListenerID = (0,uuid__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(); eventCallbackFn.toString = function () { return newEventListenerID; }; _ps.on(this.propsEventMap[eventProp], eventCallbackFn); return eventCallbackFn.toString(); }; _proto.registerEventListeners = function registerEventListeners(groupKey) { var _this3 = this; var eventListeners = {}; Object.keys(this.propsEventMap).forEach(function (eventProp) { if (_this3.props[eventProp]) { eventListeners[_this3.propsEventMap[eventProp]] = _this3.registerEventListener(eventProp, groupKey); } }); // Store event listeners in state so we can unregister them later on unmount if (this._isMounted) { this.setState({ eventListeners: eventListeners }); } }; _proto.unregisterEventListeners = function unregisterEventListeners() { var _this4 = this; if (this.state.eventListeners) { Object.keys(this.state.eventListeners).forEach(function (event) { var eventUUID = _this4.state.eventListeners[event]; // In order to unregister the event, we must create a fake function (typeof passed to _ps.off must be a function), // that returns the UUID we want to unregister. var fakeEventListener = function fakeEventListener() { return eventUUID; }; fakeEventListener.toString = function () { return eventUUID; }; _ps.off(event, fakeEventListener); }); } }; _proto.createClickWrap = function createClickWrap() { var _this5 = this; var _this$props4 = this.props, acceptanceLanguage = _this$props4.acceptanceLanguage, clickWrapStyle = _this$props4.clickWrapStyle, customData = _this$props4.customData, confirmationEmail = _this$props4.confirmationEmail, confirmationEmailSubject = _this$props4.confirmationEmailSubject, containerId = _this$props4.containerId, displayAll = _this$props4.displayAll, displayImmediately = _this$props4.displayImmediately, filter = _this$props4.filter, forceScroll = _this$props4.forceScroll, groupKey = _this$props4.groupKey, injectSnippetOnly = _this$props4.injectSnippetOnly, renderData = _this$props4.renderData, signerIdSelector = _this$props4.signerIdSelector, snapshotLocation = _this$props4.snapshotLocation, allowDisagreed = _this$props4.allowDisagreed; var options = _extends({}, allowDisagreed !== undefined && { allow_disagreed: allowDisagreed }, acceptanceLanguage !== undefined && { acceptance_language: acceptanceLanguage }, { auto_run: displayImmediately }, confirmationEmail !== undefined && { confirmation_email: confirmationEmail }, confirmationEmailSubject !== undefined && { confirmation_email_subject: confirmationEmailSubject }, { container_selector: containerId, display_all: displayAll }, filter !== undefined && { filter: filter }, forceScroll !== undefined && { force_scroll: forceScroll }, renderData !== undefined && { render_data: renderData }, signerIdSelector !== undefined && { signer_id_selector: signerIdSelector }, clickWrapStyle !== undefined && { style: clickWrapStyle }); if (injectSnippetOnly) return; if (groupKey && this._isMounted) { this.setState({ clickwrapGroupKey: groupKey, dynamicGroup: false }); } var isDynamic = !groupKey; var eventCallback = function eventCallback(err, group) { if (group) { var key = groupKey || group.get('key'); var state = { clickwrapGroupKey: key }; if (isDynamic) state.dynamicGroup = true; if (_this5._isMounted) { _this5.setState(state); } if (!isDynamic) group.render(); _this5.registerEventListeners(key); } }; if (customData) { _ps('set', 'custom_data', customData); } if (snapshotLocation) { _ps('set', 'snapshot_location', snapshotLocation); } if (groupKey) { _ps('load', groupKey, _extends({}, options, { event_callback: eventCallback })); } else _ps('load', _extends({}, options, { event_callback: eventCallback })); }; _proto.render = function render() { var containerId = this.props.containerId; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { id: containerId }); }; return PSClickWrap; }(react__WEBPACK_IMPORTED_MODULE_0__.Component); PSClickWrap.FILTER_OR_GROUPKEY_REQUIRED_ERROR_MESSAGE = 'PSClickWrap Error: You must provide either a groupKey or filter prop in order to use the PactSafe ClickWrap component!'; PSClickWrap.MUST_PROVIDE_RENDER_DATA_ERROR_MESSAGE = 'PSClickWrap Error: You must provide a renderData prop when passing down the dynamic prop'; PSClickWrap.MUST_PROVIDE_SIGNER_ID_OR_SIGNER_ID_SELECTOR = 'PSClickWrap Error: You must provide either a signer ID or a signer ID selector'; PSClickWrap.MUST_SET_ALLOW_DISAGREED = 'PSClickWrap Error: You must set allowDisagreed as true to make onInvalid work'; PSClickWrap.propTypes = false ? 0 : {}; PSClickWrap.defaultProps = { psScriptUrl: '//vault.pactsafe.io/ps.min.js', backupScriptURL: '//d3l1mqnl5xpsuc.cloudfront.net/ps.min.js', containerId: 'ps-clickwrap', displayImmediately: true, disableSending: false, displayAll: true, dynamic: false, testMode: false, oversized: false }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PSClickWrap);//# sourceURL=[module] //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0NC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsc0JBQXNCLHNFQUFzRSxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsaUNBQWlDLGtCQUFrQjtBQUMxUyx3Q0FBd0MsdUJBQXVCLHlGQUF5RjtBQUN4SixnREFBZ0QsMERBQTBELDJDQUEyQztBQUNySixpQ0FBaUMsMEdBQTBHLGlCQUFpQixhQUFhO0FBQ3pLLDRDQUE0QywyQkFBMkIsa0JBQWtCLGtDQUFrQyxvRUFBb0UsS0FBSyxPQUFPLG9CQUFvQjtBQUMvTiwrQkFBK0IsdUNBQXVDO0FBQ3RFLHFDQUFxQywrREFBK0Qsc0NBQXNDLDBCQUEwQiwrQ0FBK0MseUNBQXlDLHVFQUF1RTtBQUNuVTtBQUMwQjtBQUNTO0FBQzJCO0FBQzFCO0FBQ0M7QUFDRDtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxpRUFBeUI7QUFDbEMsTUFBTSwrREFBdUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMscURBQU87QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMscURBQU87QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEUsYUFBYTtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHlEQUFNO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBLE9BQU87QUFDUCxNQUFNLDRCQUE0QjtBQUNsQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0RBQW1CO0FBQzNDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDLENBQUMsNENBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsTUFBcUMsR0FBRyxDQXNEL0QsQ0FBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxXQUFXIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXRnYXZhZm9ybXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BwYWN0c2FmZS9wYWN0c2FmZS1yZWFjdC1zZGsvZXMvUFNDbGlja1dyYXAuanM/YWU4YiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7IHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzOyBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykgeyB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7IHJldHVybiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxuLyogZ2xvYmFsIF9wcyAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgaXNSZXF1aXJlZElmIGZyb20gJ3JlYWN0LXByb3B0eXBlLWNvbmRpdGlvbmFsLXJlcXVpcmUnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2guaXNlcXVhbCc7XG5pbXBvcnQgUFNTbmlwcGV0IGZyb20gJy4vUFNTbmlwcGV0JztcbnZhciBQU0NsaWNrV3JhcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShQU0NsaWNrV3JhcCwgX1JlYWN0JENvbXBvbmVudCk7XG4gIGZ1bmN0aW9uIFBTQ2xpY2tXcmFwKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcbiAgICBfdGhpcy5jcmVhdGVDbGlja1dyYXAgPSBfdGhpcy5jcmVhdGVDbGlja1dyYXAuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjbGlja3dyYXBHcm91cEtleTogbnVsbCxcbiAgICAgIGR5bmFtaWNHcm91cDogZmFsc2VcbiAgICB9O1xuICAgIF90aGlzLnByb3BzRXZlbnRNYXAgPSB7XG4gICAgICBvbkFsbDogJ2FsbCcsXG4gICAgICBvblNlbnQ6ICdzZW50JyxcbiAgICAgIG9uUmV0cmlldmVkOiAncmV0cmlldmVkJyxcbiAgICAgIG9uU2V0OiAnc2V0JyxcbiAgICAgIG9uU2V0U2lnbmVySWQ6ICdzZXQ6c2lnbmVyX2lkJyxcbiAgICAgIG9uVmFsaWQ6ICd2YWxpZCcsXG4gICAgICBvbkludmFsaWQ6ICdpbnZhbGlkJyxcbiAgICAgIG9uQ2hlY2tlZDogJ2NoZWNrZWQnLFxuICAgICAgb25VbmNoZWNrZWQ6ICd1bmNoZWNrZWQnLFxuICAgICAgb25SZW5kZXJlZDogJ3JlbmRlcmVkJyxcbiAgICAgIG9uRGlzcGxheWVkOiAnZGlzcGxheWVkJyxcbiAgICAgIG9uU2Nyb2xsZWRDb250cmFjdDogJ3Njcm9sbGVkOmNvbnRyYWN0JyxcbiAgICAgIG9uU2Nyb2xsZWQ6ICdzY3JvbGxlZCcsXG4gICAgICBvbkVycm9yOiAnZXJyb3InXG4gICAgfTtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgIGFjY2Vzc0lkID0gX3RoaXMkcHJvcHMuYWNjZXNzSWQsXG4gICAgICBiYWNrdXBTY3JpcHRVUkwgPSBfdGhpcyRwcm9wcy5iYWNrdXBTY3JpcHRVUkwsXG4gICAgICBkZWJ1ZyA9IF90aGlzJHByb3BzLmRlYnVnLFxuICAgICAgZGlzYWJsZVNlbmRpbmcgPSBfdGhpcyRwcm9wcy5kaXNhYmxlU2VuZGluZyxcbiAgICAgIGR5bmFtaWMgPSBfdGhpcyRwcm9wcy5keW5hbWljLFxuICAgICAgaW5qZWN0U25pcHBldE9ubHkgPSBfdGhpcyRwcm9wcy5pbmplY3RTbmlwcGV0T25seSxcbiAgICAgIG92ZXJzaXplZCA9IF90aGlzJHByb3BzLm92ZXJzaXplZCxcbiAgICAgIHBzU2NyaXB0VXJsID0gX3RoaXMkcHJvcHMucHNTY3JpcHRVcmwsXG4gICAgICBzaWduZXJJZCA9IF90aGlzJHByb3BzLnNpZ25lcklkLFxuICAgICAgdGVzdE1vZGUgPSBfdGhpcyRwcm9wcy50ZXN0TW9kZTtcbiAgICBpZiAoIVBTU25pcHBldC5pc1NuaXBwZXRMb2FkZWQocHNTY3JpcHRVcmwsIGJhY2t1cFNjcmlwdFVSTCkpIHtcbiAgICAgIFBTU25pcHBldC5pbmplY3RTbmlwcGV0KHBzU2NyaXB0VXJsLCBiYWNrdXBTY3JpcHRVUkwpO1xuICAgIH1cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIF9wcy5kZWJ1ZyA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpbmplY3RTbmlwcGV0T25seSkgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpO1xuICAgIF9wcygnY3JlYXRlJywgYWNjZXNzSWQsIHtcbiAgICAgIHRlc3RfbW9kZTogdGVzdE1vZGUsXG4gICAgICBkaXNhYmxlX3NlbmRpbmc6IGRpc2FibGVTZW5kaW5nLFxuICAgICAgZHluYW1pYzogZHluYW1pYyxcbiAgICAgIHNpZ25lcl9pZDogc2lnbmVySWQsXG4gICAgICBvdmVyc2l6ZWQ6IG92ZXJzaXplZFxuICAgIH0pO1xuICAgIF9wcygnc2V0JywgJ2NsaWVudF9saWJyYXJ5JywgJ3JlYWN0LXNkaycpO1xuICAgIF9wcygnc2V0JywgJ2NsaWVudF92ZXJzaW9uJywgXCIyLjE1LjBcIik7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIHZhciBfcHJvdG8gPSBQU0NsaWNrV3JhcC5wcm90b3R5cGU7XG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHZhciBpbmplY3RTbmlwcGV0T25seSA9IHRoaXMucHJvcHMuaW5qZWN0U25pcHBldE9ubHk7XG4gICAgdGhpcy5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICBpZiAoaW5qZWN0U25pcHBldE9ubHkpIHJldHVybjtcbiAgICB0aGlzLmNyZWF0ZUNsaWNrV3JhcCgpO1xuICB9O1xuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgYWNjZXB0YW5jZUxhbmd1YWdlID0gX3RoaXMkcHJvcHMyLmFjY2VwdGFuY2VMYW5ndWFnZSxcbiAgICAgIGNsaWNrV3JhcFN0eWxlID0gX3RoaXMkcHJvcHMyLmNsaWNrV3JhcFN0eWxlLFxuICAgICAgY3VzdG9tRGF0YSA9IF90aGlzJHByb3BzMi5jdXN0b21EYXRhLFxuICAgICAgZmlsdGVyID0gX3RoaXMkcHJvcHMyLmZpbHRlcixcbiAgICAgIGdyb3VwS2V5ID0gX3RoaXMkcHJvcHMyLmdyb3VwS2V5LFxuICAgICAgaW5qZWN0U25pcHBldE9ubHkgPSBfdGhpcyRwcm9wczIuaW5qZWN0U25pcHBldE9ubHksXG4gICAgICByZW5kZXJEYXRhID0gX3RoaXMkcHJvcHMyLnJlbmRlckRhdGEsXG4gICAgICBzaWduZXJJZCA9IF90aGlzJHByb3BzMi5zaWduZXJJZCxcbiAgICAgIHNuYXBzaG90TG9jYXRpb24gPSBfdGhpcyRwcm9wczIuc25hcHNob3RMb2NhdGlvbjtcbiAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgY2xpY2t3cmFwR3JvdXBLZXkgPSBfdGhpcyRzdGF0ZS5jbGlja3dyYXBHcm91cEtleSxcbiAgICAgIGR5bmFtaWNHcm91cCA9IF90aGlzJHN0YXRlLmR5bmFtaWNHcm91cDtcbiAgICB2YXIgX3BzTG9hZGVkVmFsaWRHcm91cCA9IF9wcyAmJiBfcHMuZ2V0QnlLZXkgJiYgdHlwZW9mIF9wcy5nZXRCeUtleSA9PT0gJ2Z1bmN0aW9uJyAmJiBjbGlja3dyYXBHcm91cEtleSAmJiBfcHMuZ2V0QnlLZXkoY2xpY2t3cmFwR3JvdXBLZXkpO1xuICAgIGlmIChpbmplY3RTbmlwcGV0T25seSkgcmV0dXJuO1xuICAgIGlmIChjbGlja1dyYXBTdHlsZSAhPT0gcHJldlByb3BzLmNsaWNrV3JhcFN0eWxlICYmICFkeW5hbWljR3JvdXAgJiYgX3BzTG9hZGVkVmFsaWRHcm91cCkge1xuICAgICAgX3BzLmdldEJ5S2V5KGNsaWNrd3JhcEdyb3VwS2V5KS5zaXRlLnNldCgnc3R5bGUnLCBjbGlja1dyYXBTdHlsZSk7XG4gICAgICBfcHMuZ2V0QnlLZXkoY2xpY2t3cmFwR3JvdXBLZXkpLnJldHJpZXZlSFRNTCgpO1xuICAgIH1cbiAgICBpZiAoIWlzRXF1YWwoY3VzdG9tRGF0YSwgcHJldlByb3BzLmN1c3RvbURhdGEpKSB7XG4gICAgICBfcHMoJ3NldCcsICdjdXN0b21fZGF0YScsIGN1c3RvbURhdGEpO1xuICAgIH1cbiAgICBpZiAoYWNjZXB0YW5jZUxhbmd1YWdlICE9PSBwcmV2UHJvcHMuYWNjZXB0YW5jZUxhbmd1YWdlKSB7XG4gICAgICBfcHMoJ3NldCcsICdhY2NlcHRhbmNlX2xhbmd1YWdlJywgYWNjZXB0YW5jZUxhbmd1YWdlKTtcbiAgICB9XG4gICAgaWYgKCFpc0VxdWFsKHJlbmRlckRhdGEsIHByZXZQcm9wcy5yZW5kZXJEYXRhKSkge1xuICAgICAgaWYgKGNsaWNrV3JhcFN0eWxlICYmIF9wc0xvYWRlZFZhbGlkR3JvdXApIHtcbiAgICAgICAgX3BzLmdldEJ5S2V5KGNsaWNrd3JhcEdyb3VwS2V5KS5zaXRlLnNldCgnc3R5bGUnLCBjbGlja1dyYXBTdHlsZSk7XG4gICAgICB9XG4gICAgICBfcHMoY2xpY2t3cmFwR3JvdXBLZXkgKyBcIjpyZXRyaWV2ZUhUTUxcIiwgcmVuZGVyRGF0YSk7XG4gICAgfVxuICAgIGlmIChzaWduZXJJZCAhPT0gcHJldlByb3BzLnNpZ25lcklkKSB7XG4gICAgICBpZiAoY2xpY2tXcmFwU3R5bGUgJiYgX3BzTG9hZGVkVmFsaWRHcm91cCkge1xuICAgICAgICBfcHMuZ2V0QnlLZXkoY2xpY2t3cmFwR3JvdXBLZXkpLnNpdGUuc2V0KCdzdHlsZScsIGNsaWNrV3JhcFN0eWxlKTtcbiAgICAgIH1cbiAgICAgIF9wcygnc2V0JywgJ3NpZ25lcl9pZCcsIHNpZ25lcklkKTtcbiAgICB9XG4gICAgaWYgKHNuYXBzaG90TG9jYXRpb24gIT09IHByZXZQcm9wcy5zbmFwc2hvdExvY2F0aW9uKSB7XG4gICAgICBfcHMoJ3NldCcsICdzbmFwc2hvdF9sb2NhdGlvbicsIHNuYXBzaG90TG9jYXRpb24pO1xuICAgIH1cbiAgICBpZiAoY2xpY2tXcmFwU3R5bGUgIT09IHByZXZQcm9wcy5jbGlja1dyYXBTdHlsZSAmJiBkeW5hbWljR3JvdXApIHtcbiAgICAgIHRoaXMuY3JlYXRlQ2xpY2tXcmFwKCk7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIgIT09IHByZXZQcm9wcy5maWx0ZXIpIHtcbiAgICAgIHRoaXMuY3JlYXRlQ2xpY2tXcmFwKCk7XG4gICAgfVxuICAgIGlmIChncm91cEtleSAhPT0gcHJldlByb3BzLmdyb3VwS2V5ICYmICFkeW5hbWljR3JvdXApIHtcbiAgICAgIHRoaXMuY3JlYXRlQ2xpY2tXcmFwKCk7XG4gICAgICBpZiAoX3BzTG9hZGVkVmFsaWRHcm91cCkgX3BzLmdldEJ5S2V5KGNsaWNrd3JhcEdyb3VwS2V5KS5yZXRyaWV2ZUhUTUwoKTtcbiAgICB9XG4gIH07XG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgaW5qZWN0U25pcHBldE9ubHkgPSBfdGhpcyRwcm9wczMuaW5qZWN0U25pcHBldE9ubHksXG4gICAgICBncm91cEtleSA9IF90aGlzJHByb3BzMy5ncm91cEtleTtcbiAgICBpZiAoaW5qZWN0U25pcHBldE9ubHkpIHJldHVybjtcbiAgICBpZiAoX3BzICYmIF9wcy5nZXRCeUtleSAmJiB0eXBlb2YgX3BzLmdldEJ5S2V5ID09PSAnZnVuY3Rpb24nICYmIF9wcy5nZXRCeUtleShncm91cEtleSkpIHtcbiAgICAgIGlmIChfcHMuZ2V0QnlLZXkoZ3JvdXBLZXkpLnJlbmRlcmVkKSB7XG4gICAgICAgIF9wcy5nZXRCeUtleShncm91cEtleSkucmVuZGVyZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIF9wcy5nZXRCeUtleShncm91cEtleSkucmVzZXREYXRhKCk7XG4gICAgfVxuICAgIHRoaXMudW5yZWdpc3RlckV2ZW50TGlzdGVuZXJzKCk7XG4gIH07XG4gIF9wcm90by5yZWdpc3RlckV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiByZWdpc3RlckV2ZW50TGlzdGVuZXIoZXZlbnRQcm9wLCBncm91cEtleSkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgIHZhciBldmVudENhbGxiYWNrRm4gPSBmdW5jdGlvbiBldmVudENhbGxiYWNrRm4oKSB7XG4gICAgICB2YXIgc2hvdWxkRmlyZUxpc3RlbmVyID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgdmFyaWFibGUgYW5kIHNlZSBpZiBpdCBtYXRjaGVzIHRoZSBncm91cEtleSwgaWYgaXQgZG9lcyAtPiBmaXJlIHRoZSBldmVudCAoY29udGV4dCBhcmd1bWVudCBwb3NpdGlvbiB2YXJpZXMpXG4gICAgICAgIGlmIChhcmcgJiYgYXJnLmdldCAmJiBhcmcuZ2V0KCdrZXknKSAmJiBhcmcuZ2V0KCdrZXknKSA9PT0gZ3JvdXBLZXkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlTGlzdGVuZXIgPSB0cnVlO1xuICAgICAgICAgIC8vIEVsc2Ugd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBjb250ZXh0IGlzIGZvciB0aGUgZW50aXJlIHNpdGUsIGFuZCBhcyBzdWNoIHRoZSBjb250ZXh0IHZhcmlhYmxlIGlzIGEgU2l0ZSBvYmplY3QuXG4gICAgICAgIH0gZWxzZSBpZiAoYXJnICYmIGFyZy50b1N0cmluZygpID09PSAnW29iamVjdCBTaXRlXScpIHtcbiAgICAgICAgICBzaG91bGRGaXJlTGlzdGVuZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChzaG91bGRGaXJlTGlzdGVuZXIpIHtcbiAgICAgICAgdmFyIF90aGlzMiRwcm9wcztcbiAgICAgICAgKF90aGlzMiRwcm9wcyA9IF90aGlzMi5wcm9wcylbZXZlbnRQcm9wXS5hcHBseShfdGhpczIkcHJvcHMsIGFyZ3MpO1xuICAgICAgfVxuICAgIH07XG4gICAgLy8gSW4gb3JkZXIgdG8gaGFuZGxlIHVucmVnaXN0cmF0aW9uIG9mIGV2ZW50IGxpc3RlbmVycywgd2Ugb3ZlcnJpZGUgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHRoZVxuICAgIC8vIGZ1bmN0aW9uIGJ5IGEgVVVJRCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCB0b1N0cmluZyBvZiBhIGZ1bmN0aW9uLlxuICAgIHZhciBuZXdFdmVudExpc3RlbmVySUQgPSB1dWlkdjQoKTtcbiAgICBldmVudENhbGxiYWNrRm4udG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV3RXZlbnRMaXN0ZW5lcklEO1xuICAgIH07XG4gICAgX3BzLm9uKHRoaXMucHJvcHNFdmVudE1hcFtldmVudFByb3BdLCBldmVudENhbGxiYWNrRm4pO1xuICAgIHJldHVybiBldmVudENhbGxiYWNrRm4udG9TdHJpbmcoKTtcbiAgfTtcbiAgX3Byb3RvLnJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZWdpc3RlckV2ZW50TGlzdGVuZXJzKGdyb3VwS2V5KSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgdmFyIGV2ZW50TGlzdGVuZXJzID0ge307XG4gICAgT2JqZWN0LmtleXModGhpcy5wcm9wc0V2ZW50TWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudFByb3ApIHtcbiAgICAgIGlmIChfdGhpczMucHJvcHNbZXZlbnRQcm9wXSkge1xuICAgICAgICBldmVudExpc3RlbmVyc1tfdGhpczMucHJvcHNFdmVudE1hcFtldmVudFByb3BdXSA9IF90aGlzMy5yZWdpc3RlckV2ZW50TGlzdGVuZXIoZXZlbnRQcm9wLCBncm91cEtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gU3RvcmUgZXZlbnQgbGlzdGVuZXJzIGluIHN0YXRlIHNvIHdlIGNhbiB1bnJlZ2lzdGVyIHRoZW0gbGF0ZXIgb24gdW5tb3VudFxuICAgIGlmICh0aGlzLl9pc01vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBldmVudExpc3RlbmVyczogZXZlbnRMaXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgX3Byb3RvLnVucmVnaXN0ZXJFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJFdmVudExpc3RlbmVycygpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICBpZiAodGhpcy5zdGF0ZS5ldmVudExpc3RlbmVycykge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5zdGF0ZS5ldmVudExpc3RlbmVycykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGV2ZW50VVVJRCA9IF90aGlzNC5zdGF0ZS5ldmVudExpc3RlbmVyc1tldmVudF07XG4gICAgICAgIC8vIEluIG9yZGVyIHRvIHVucmVnaXN0ZXIgdGhlIGV2ZW50LCB3ZSBtdXN0IGNyZWF0ZSBhIGZha2UgZnVuY3Rpb24gKHR5cGVvZiBwYXNzZWQgdG8gX3BzLm9mZiBtdXN0IGJlIGEgZnVuY3Rpb24pLFxuICAgICAgICAvLyB0aGF0IHJldHVybnMgdGhlIFVVSUQgd2Ugd2FudCB0byB1bnJlZ2lzdGVyLlxuICAgICAgICB2YXIgZmFrZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBmYWtlRXZlbnRMaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnRVVUlEO1xuICAgICAgICB9O1xuICAgICAgICBmYWtlRXZlbnRMaXN0ZW5lci50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnRVVUlEO1xuICAgICAgICB9O1xuICAgICAgICBfcHMub2ZmKGV2ZW50LCBmYWtlRXZlbnRMaXN0ZW5lcik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIF9wcm90by5jcmVhdGVDbGlja1dyYXAgPSBmdW5jdGlvbiBjcmVhdGVDbGlja1dyYXAoKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG4gICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICBhY2NlcHRhbmNlTGFuZ3VhZ2UgPSBfdGhpcyRwcm9wczQuYWNjZXB0YW5jZUxhbmd1YWdlLFxuICAgICAgY2xpY2tXcmFwU3R5bGUgPSBfdGhpcyRwcm9wczQuY2xpY2tXcmFwU3R5bGUsXG4gICAgICBjdXN0b21EYXRhID0gX3RoaXMkcHJvcHM0LmN1c3RvbURhdGEsXG4gICAgICBjb25maXJtYXRpb25FbWFpbCA9IF90aGlzJHByb3BzNC5jb25maXJtYXRpb25FbWFpbCxcbiAgICAgIGNvbmZpcm1hdGlvbkVtYWlsU3ViamVjdCA9IF90aGlzJHByb3BzNC5jb25maXJtYXRpb25FbWFpbFN1YmplY3QsXG4gICAgICBjb250YWluZXJJZCA9IF90aGlzJHByb3BzNC5jb250YWluZXJJZCxcbiAgICAgIGRpc3BsYXlBbGwgPSBfdGhpcyRwcm9wczQuZGlzcGxheUFsbCxcbiAgICAgIGRpc3BsYXlJbW1lZGlhdGVseSA9IF90aGlzJHByb3BzNC5kaXNwbGF5SW1tZWRpYXRlbHksXG4gICAgICBmaWx0ZXIgPSBfdGhpcyRwcm9wczQuZmlsdGVyLFxuICAgICAgZm9yY2VTY3JvbGwgPSBfdGhpcyRwcm9wczQuZm9yY2VTY3JvbGwsXG4gICAgICBncm91cEtleSA9IF90aGlzJHByb3BzNC5ncm91cEtleSxcbiAgICAgIGluamVjdFNuaXBwZXRPbmx5ID0gX3RoaXMkcHJvcHM0LmluamVjdFNuaXBwZXRPbmx5LFxuICAgICAgcmVuZGVyRGF0YSA9IF90aGlzJHByb3BzNC5yZW5kZXJEYXRhLFxuICAgICAgc2lnbmVySWRTZWxlY3RvciA9IF90aGlzJHByb3BzNC5zaWduZXJJZFNlbGVjdG9yLFxuICAgICAgc25hcHNob3RMb2NhdGlvbiA9IF90aGlzJHByb3BzNC5zbmFwc2hvdExvY2F0aW9uLFxuICAgICAgYWxsb3dEaXNhZ3JlZWQgPSBfdGhpcyRwcm9wczQuYWxsb3dEaXNhZ3JlZWQ7XG4gICAgdmFyIG9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgYWxsb3dEaXNhZ3JlZWQgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICBhbGxvd19kaXNhZ3JlZWQ6IGFsbG93RGlzYWdyZWVkXG4gICAgfSwgYWNjZXB0YW5jZUxhbmd1YWdlICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgYWNjZXB0YW5jZV9sYW5ndWFnZTogYWNjZXB0YW5jZUxhbmd1YWdlXG4gICAgfSwge1xuICAgICAgYXV0b19ydW46IGRpc3BsYXlJbW1lZGlhdGVseVxuICAgIH0sIGNvbmZpcm1hdGlvbkVtYWlsICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgY29uZmlybWF0aW9uX2VtYWlsOiBjb25maXJtYXRpb25FbWFpbFxuICAgIH0sIGNvbmZpcm1hdGlvbkVtYWlsU3ViamVjdCAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgIGNvbmZpcm1hdGlvbl9lbWFpbF9zdWJqZWN0OiBjb25maXJtYXRpb25FbWFpbFN1YmplY3RcbiAgICB9LCB7XG4gICAgICBjb250YWluZXJfc2VsZWN0b3I6IGNvbnRhaW5lcklkLFxuICAgICAgZGlzcGxheV9hbGw6IGRpc3BsYXlBbGxcbiAgICB9LCBmaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICBmaWx0ZXI6IGZpbHRlclxuICAgIH0sIGZvcmNlU2Nyb2xsICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgZm9yY2Vfc2Nyb2xsOiBmb3JjZVNjcm9sbFxuICAgIH0sIHJlbmRlckRhdGEgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICByZW5kZXJfZGF0YTogcmVuZGVyRGF0YVxuICAgIH0sIHNpZ25lcklkU2VsZWN0b3IgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICBzaWduZXJfaWRfc2VsZWN0b3I6IHNpZ25lcklkU2VsZWN0b3JcbiAgICB9LCBjbGlja1dyYXBTdHlsZSAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgIHN0eWxlOiBjbGlja1dyYXBTdHlsZVxuICAgIH0pO1xuICAgIGlmIChpbmplY3RTbmlwcGV0T25seSkgcmV0dXJuO1xuICAgIGlmIChncm91cEtleSAmJiB0aGlzLl9pc01vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjbGlja3dyYXBHcm91cEtleTogZ3JvdXBLZXksXG4gICAgICAgIGR5bmFtaWNHcm91cDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgaXNEeW5hbWljID0gIWdyb3VwS2V5O1xuICAgIHZhciBldmVudENhbGxiYWNrID0gZnVuY3Rpb24gZXZlbnRDYWxsYmFjayhlcnIsIGdyb3VwKSB7XG4gICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgdmFyIGtleSA9IGdyb3VwS2V5IHx8IGdyb3VwLmdldCgna2V5Jyk7XG4gICAgICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgICAgICBjbGlja3dyYXBHcm91cEtleToga2V5XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc0R5bmFtaWMpIHN0YXRlLmR5bmFtaWNHcm91cCA9IHRydWU7XG4gICAgICAgIGlmIChfdGhpczUuX2lzTW91bnRlZCkge1xuICAgICAgICAgIF90aGlzNS5zZXRTdGF0ZShzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0R5bmFtaWMpIGdyb3VwLnJlbmRlcigpO1xuICAgICAgICBfdGhpczUucmVnaXN0ZXJFdmVudExpc3RlbmVycyhrZXkpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGN1c3RvbURhdGEpIHtcbiAgICAgIF9wcygnc2V0JywgJ2N1c3RvbV9kYXRhJywgY3VzdG9tRGF0YSk7XG4gICAgfVxuICAgIGlmIChzbmFwc2hvdExvY2F0aW9uKSB7XG4gICAgICBfcHMoJ3NldCcsICdzbmFwc2hvdF9sb2NhdGlvbicsIHNuYXBzaG90TG9jYXRpb24pO1xuICAgIH1cbiAgICBpZiAoZ3JvdXBLZXkpIHtcbiAgICAgIF9wcygnbG9hZCcsIGdyb3VwS2V5LCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgICAgICBldmVudF9jYWxsYmFjazogZXZlbnRDYWxsYmFja1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSBfcHMoJ2xvYWQnLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgICAgZXZlbnRfY2FsbGJhY2s6IGV2ZW50Q2FsbGJhY2tcbiAgICB9KSk7XG4gIH07XG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIGNvbnRhaW5lcklkID0gdGhpcy5wcm9wcy5jb250YWluZXJJZDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgaWQ6IGNvbnRhaW5lcklkXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBQU0NsaWNrV3JhcDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblBTQ2xpY2tXcmFwLkZJTFRFUl9PUl9HUk9VUEtFWV9SRVFVSVJFRF9FUlJPUl9NRVNTQUdFID0gJ1BTQ2xpY2tXcmFwIEVycm9yOiBZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhIGdyb3VwS2V5IG9yIGZpbHRlciBwcm9wIGluIG9yZGVyIHRvIHVzZSB0aGUgUGFjdFNhZmUgQ2xpY2tXcmFwIGNvbXBvbmVudCEnO1xuUFNDbGlja1dyYXAuTVVTVF9QUk9WSURFX1JFTkRFUl9EQVRBX0VSUk9SX01FU1NBR0UgPSAnUFNDbGlja1dyYXAgRXJyb3I6IFlvdSBtdXN0IHByb3ZpZGUgYSByZW5kZXJEYXRhIHByb3Agd2hlbiBwYXNzaW5nIGRvd24gdGhlIGR5bmFtaWMgcHJvcCc7XG5QU0NsaWNrV3JhcC5NVVNUX1BST1ZJREVfU0lHTkVSX0lEX09SX1NJR05FUl9JRF9TRUxFQ1RPUiA9ICdQU0NsaWNrV3JhcCBFcnJvcjogWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgYSBzaWduZXIgSUQgb3IgYSBzaWduZXIgSUQgc2VsZWN0b3InO1xuUFNDbGlja1dyYXAuTVVTVF9TRVRfQUxMT1dfRElTQUdSRUVEID0gJ1BTQ2xpY2tXcmFwIEVycm9yOiBZb3UgbXVzdCBzZXQgYWxsb3dEaXNhZ3JlZWQgYXMgdHJ1ZSB0byBtYWtlIG9uSW52YWxpZCB3b3JrJztcblBTQ2xpY2tXcmFwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgYWNjZXB0YW5jZUxhbmd1YWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhY2Nlc3NJZDogaXNSZXF1aXJlZElmKFByb3BUeXBlcy5zdHJpbmcsIGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHJldHVybiAhcHJvcHMuaGFzT3duUHJvcGVydHkoJ2luamVjdFNuaXBwZXRPbmx5Jyk7XG4gIH0pLFxuICBjbGlja1dyYXBTdHlsZTogUHJvcFR5cGVzLm9uZU9mKFsnZnVsbCcsICdzY3JvbGwnLCAnY2hlY2tib3gnLCAnY29tYmluZWQnLCAnZW1iZWRkZWQnXSksXG4gIGNvbmZpcm1hdGlvbkVtYWlsOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29uZmlybWF0aW9uRW1haWxTdWJqZWN0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjdXN0b21EYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICBkaXNhYmxlU2VuZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc3BsYXlBbGw6IFByb3BUeXBlcy5ib29sLFxuICBkaXNwbGF5SW1tZWRpYXRlbHk6IFByb3BUeXBlcy5ib29sLFxuICBkeW5hbWljOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29udGFpbmVySWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZpbHRlcjogaXNSZXF1aXJlZElmKFByb3BUeXBlcy5zdHJpbmcsIGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHJldHVybiAhcHJvcHMuaGFzT3duUHJvcGVydHkoJ2dyb3VwS2V5JykgJiYgIXByb3BzLmhhc093blByb3BlcnR5KCdpbmplY3RTbmlwcGV0T25seScpO1xuICB9LCBQU0NsaWNrV3JhcC5GSUxURVJfT1JfR1JPVVBLRVlfUkVRVUlSRURfRVJST1JfTUVTU0FHRSksXG4gIGZvcmNlU2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgZ3JvdXBLZXk6IGlzUmVxdWlyZWRJZihQcm9wVHlwZXMuc3RyaW5nLCBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gIXByb3BzLmhhc093blByb3BlcnR5KCdmaWx0ZXInKSAmJiAhcHJvcHMuaGFzT3duUHJvcGVydHkoJ2luamVjdFNuaXBwZXRPbmx5Jyk7XG4gIH0sIFBTQ2xpY2tXcmFwLkZJTFRFUl9PUl9HUk9VUEtFWV9SRVFVSVJFRF9FUlJPUl9NRVNTQUdFKSxcbiAgaW5qZWN0U25pcHBldE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICBwc1NjcmlwdFVybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgYmFja3VwU2NyaXB0VVJMOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvdmVyc2l6ZWQ6IFByb3BUeXBlcy5ib29sLFxuICByZW5kZXJEYXRhOiBpc1JlcXVpcmVkSWYoUHJvcFR5cGVzLm9iamVjdCwgZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzLmhhc093blByb3BlcnR5KCdkeW5hbWljJykgJiYgcHJvcHMuZHluYW1pYyA9PT0gdHJ1ZTtcbiAgfSwgUFNDbGlja1dyYXAuTVVTVF9QUk9WSURFX1JFTkRFUl9EQVRBX0VSUk9SX01FU1NBR0UpLFxuICBzaWduZXJJZFNlbGVjdG9yOiBpc1JlcXVpcmVkSWYoUHJvcFR5cGVzLnN0cmluZywgZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuICFwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc2lnbmVySWQnKSAmJiAhcHJvcHMuaGFzT3duUHJvcGVydHkoJ2luamVjdFNuaXBwZXRPbmx5Jyk7XG4gIH0sIFBTQ2xpY2tXcmFwLk1VU1RfUFJPVklERV9TSUdORVJfSURfT1JfU0lHTkVSX0lEX1NFTEVDVE9SKSxcbiAgc2lnbmVySWQ6IGlzUmVxdWlyZWRJZihQcm9wVHlwZXMuc3RyaW5nLCBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gIXByb3BzLmhhc093blByb3BlcnR5KCdzaWduZXJJZFNlbGVjdG9yJykgJiYgIXByb3BzLmhhc093blByb3BlcnR5KCdpbmplY3RTbmlwcGV0T25seScpO1xuICB9LCBQU0NsaWNrV3JhcC5NVVNUX1BST1ZJREVfU0lHTkVSX0lEX09SX1NJR05FUl9JRF9TRUxFQ1RPUiksXG4gIHNuYXBzaG90TG9jYXRpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRlc3RNb2RlOiBQcm9wVHlwZXMuYm9vbCxcbiAgYWxsb3dEaXNhZ3JlZWQ6IGlzUmVxdWlyZWRJZihQcm9wVHlwZXMuYm9vbCwgZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzLmhhc093blByb3BlcnR5KCdvbkludmFsaWQnKTtcbiAgfSwgUFNDbGlja1dyYXAuTVVTVF9TRVRfQUxMT1dfRElTQUdSRUVEKSxcbiAgZGVidWc6IFByb3BUeXBlcy5ib29sLFxuICBvbkFsbDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2VudDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUmV0cmlldmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TZXQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblNldFNpZ25lcklkOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25WYWxpZDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uSW52YWxpZDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2hlY2tlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVW5jaGVja2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25SZW5kZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRGlzcGxheWVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TY3JvbGxlZENvbnRyYWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TY3JvbGxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRXJyb3I6IFByb3BUeXBlcy5mdW5jXG59IDoge307XG5QU0NsaWNrV3JhcC5kZWZhdWx0UHJvcHMgPSB7XG4gIHBzU2NyaXB0VXJsOiAnLy92YXVsdC5wYWN0c2FmZS5pby9wcy5taW4uanMnLFxuICBiYWNrdXBTY3JpcHRVUkw6ICcvL2QzbDFtcW5sNXhwc3VjLmNsb3VkZnJvbnQubmV0L3BzLm1pbi5qcycsXG4gIGNvbnRhaW5lcklkOiAncHMtY2xpY2t3cmFwJyxcbiAgZGlzcGxheUltbWVkaWF0ZWx5OiB0cnVlLFxuICBkaXNhYmxlU2VuZGluZzogZmFsc2UsXG4gIGRpc3BsYXlBbGw6IHRydWUsXG4gIGR5bmFtaWM6IGZhbHNlLFxuICB0ZXN0TW9kZTogZmFsc2UsXG4gIG92ZXJzaXplZDogZmFsc2Vcbn07XG5leHBvcnQgZGVmYXVsdCBQU0NsaWNrV3JhcDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0= //# sourceURL=webpack-internal:///3744