react-bootstrap-table-ng-editor 4.18.0 → 4.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see react-bootstrap-table-ng-editor.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgEditor=t(require("react")):e.ReactBootstrapTableNgEditor=t(e.React)}(self,e=>{return t={33(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(564),u=r(511);t.default=(e,t)=>{function r(r){return o.default.createElement(u.Consumer,null,n=>((r,n)=>{const u=r.value,a=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(u)>-1),l={};return t&&n.mode===i.DBCLICK_TO_CELL_EDIT&&(l.DELAY_FOR_DBCLICK=i.DELAY_FOR_DBCLICK),o.default.createElement(e,{...r,...l,editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:a,atstart:n.atstart,clickToEdit:n.mode===i.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===i.DBCLICK_TO_CELL_EDIT})})(r,n))}return r.displayName="WithCellEditingRowConsumer",r}},88(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(556)),i=n(r(442)),u=function(e){var t=e.invalidMessage;return i.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},i.default.createElement("strong",null,t))};u.propTypes={invalidMessage:o.default.string},t.default=u},98(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","autoSelectText","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=h(r(442)),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,a=(t.autoSelectText,t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),l=(0,m.default)(n,"form-control editor edit-text");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){return e.text=t},type:"text",className:l},a))}}],n&&a(r.prototype,n),l&&a(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,l}(O.Component);t.default=g},121(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e);let t=e.options??[];e.getOptions&&(t=e.getOptions(this.setOptions.bind(this),{row:e.row,column:e.column})||[]),this.state={options:t}}componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.select.value=e,this.select.focus(),t&&t()}setOptions(e){this.setState({options:e})}getValue(){return this.select.value}render(){const{defaultValue:e="",didMount:t,getOptions:r,className:n="",onUpdate:o,...i}=this.props,u={...i,className:(0,l.default)(n,"form-control editor edit-select")};return c.default.createElement("select",{...u,ref:e=>this.select=e,defaultValue:e},this.state.options.map(({label:e,value:t})=>c.default.createElement("option",{key:t,value:t},e)))}}t.default=s},137(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","autoSelectText"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=c(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},h=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return h(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=v(r(442)),_=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=s(this,t,[e])).handleKeyDown=r.handleKeyDown.bind(r),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?null:t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"handleKeyDown",value:function(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,i=(t.autoSelectText,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),a=(0,O.default)(n,"form-control editor edit-textarea");return g.default.createElement("textarea",u(u({ref:function(t){return e.text=t},className:a},i),{},{onKeyDown:this.handleKeyDown}))}}],n&&l(r.prototype,n),i&&l(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(g.Component);t.default=_},167(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(556)),i=n(r(442)),u=({invalidMessage:e})=>i.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},i.default.createElement("strong",null,e));u.propTypes={invalidMessage:o.default.string},t.default=u},205(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=a(r(556)),s=u(r(442)),f=r(564),d=a(r(937)),p=a(r(868)),b=a(r(121)),y=a(r(167)),h=a(r(871)),v=a(r(462));t.default=(e,t)=>{var r;return(r=class extends s.Component{constructor(e){super(e),this.indicatorTimer=null,this.clearTimer=this.clearTimer.bind(this),this.handleBlur=this.handleBlur.bind(this),this.handleClick=this.handleClick.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.beforeComplete=this.beforeComplete.bind(this),this.asyncbeforeCompete=this.asyncbeforeCompete.bind(this),this.displayErrorMessage=this.displayErrorMessage.bind(this),this.state={invalidMessage:null}}componentWillUnmount(){this.clearTimer()}componentDidUpdate({message:t}){e.isDefined(t)&&(this.createTimer(),this.setState(()=>({invalidMessage:t})))}clearTimer(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}createTimer(){this.clearTimer();const{timeToCloseMessage:t,onErrorMessageDisappear:r}=this.props;this.indicatorTimer=e.sleep(()=>{this.setState(()=>({invalidMessage:null})),e.isFunction(r)&&r()},t)}displayErrorMessage(e){this.setState(()=>({invalidMessage:e})),this.createTimer()}asyncbeforeCompete(e){return(t={valid:!0})=>{const{valid:r,message:n}=t,{onUpdate:o,row:i,column:u}=this.props;r?o(i,u,e):this.displayErrorMessage(n)}}beforeComplete(t){const{onUpdate:r,row:n,column:o}=this.props;if(e.isFunction(o.validator)){const r=o.validator(t,n,o,this.asyncbeforeCompete(t));if(e.isObject(r)){if(r.async)return;if(!r.valid)return void this.displayErrorMessage(r.message)}}r(n,o,t)}handleBlur(){const{onEscape:e,blurToSave:t}=this.props;t?this.beforeComplete(this.editor.getValue()):e()}handleKeyDown(e){const{onEscape:t}=this.props;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}handleClick(e){"TD"!==e.target.tagName&&e.stopPropagation()}render(){let r;const{row:n,column:o,className:i,style:u,rowIndex:a,columnIndex:c,autoSelectText:m}=this.props,{dataField:O}=o,g=e.get(n,O),_=e.isDefined(this.state.invalidMessage);let j=o.editorClasses||"";e.isFunction(o.editorClasses)&&(j=o.editorClasses(g,n,a,c));let E=o.editorStyle||{};e.isFunction(o.editorStyle)&&(E=o.editorStyle(g,n,a,c));let w={ref:e=>this.editor=e,defaultValue:g,style:E,className:(0,l.default)({animated:_,shake:_},j),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:()=>{},onUpdate:e=>{}};t&&(w.didMount=()=>t(n,o,a,c));const P=e.isObject(o.editor);return P?w={...w,...o.editor}:e.isFunction(o.editorRenderer)&&(w={...w,onUpdate:this.beforeComplete}),r=e.isFunction(o.editorRenderer)?o.editorRenderer(w,g,n,o,a,c):P&&o.editor?.type===f.EDITTYPE.SELECT?s.default.createElement(b.default,{...w,row:n,column:o}):P&&o.editor?.type===f.EDITTYPE.TEXTAREA?s.default.createElement(v.default,{...w,autoSelectText:m}):P&&o.editor?.type===f.EDITTYPE.CHECKBOX?s.default.createElement(d.default,{...w}):P&&o.editor?.type===f.EDITTYPE.DATE?s.default.createElement(p.default,{...w}):s.default.createElement(h.default,{...w,autoSelectText:m}),s.default.createElement("td",{className:(0,l.default)("react-bootstrap-table-editing-cell",i),style:u,onClick:this.handleClick},r,_?s.default.createElement(y.default,{invalidMessage:this.state.invalidMessage}):null)}}).propTypes={row:c.default.object.isRequired,rowIndex:c.default.number.isRequired,column:c.default.object.isRequired,columnIndex:c.default.number.isRequired,onUpdate:c.default.func.isRequired,onEscape:c.default.func.isRequired,timeToCloseMessage:c.default.number,autoSelectText:c.default.bool,className:c.default.string,style:c.default.object},r.defaultProps={timeToCloseMessage:f.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}},r}},282(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=v(r(556)),g=h(r(442)),_=r(564),j=v(r(512)),E=v(r(855)),w=v(r(900)),P=v(r(88)),C=v(r(98)),T=v(r(137));t.default=function(e,t){var r;return r=function(r){function n(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(t=c(this,n,[e])).indicatorTimer=null,t.clearTimer=t.clearTimer.bind(t),t.handleBlur=t.handleBlur.bind(t),t.handleClick=t.handleClick.bind(t),t.handleKeyDown=t.handleKeyDown.bind(t),t.beforeComplete=t.beforeComplete.bind(t),t.asyncbeforeCompete=t.asyncbeforeCompete.bind(t),t.displayErrorMessage=t.displayErrorMessage.bind(t),t.state={invalidMessage:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(n,r),o=n,u=[{key:"componentWillUnmount",value:function(){this.clearTimer()}},{key:"componentDidUpdate",value:function(t){var r=t.message;e.isDefined(r)&&(this.createTimer(),this.setState(function(){return{invalidMessage:r}}))}},{key:"clearTimer",value:function(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}},{key:"createTimer",value:function(){var t=this;this.clearTimer();var r=this.props,n=r.timeToCloseMessage,o=r.onErrorMessageDisappear;this.indicatorTimer=e.sleep(function(){t.setState(function(){return{invalidMessage:null}}),e.isFunction(o)&&o()},n)}},{key:"displayErrorMessage",value:function(e){this.setState(function(){return{invalidMessage:e}}),this.createTimer()}},{key:"asyncbeforeCompete",value:function(e){var t=this;return function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{valid:!0},n=r.valid,o=r.message,i=t.props,u=i.onUpdate,a=i.row,l=i.column;n?u(a,l,e):t.displayErrorMessage(o)}}},{key:"beforeComplete",value:function(t){var r=this.props,n=r.onUpdate,o=r.row,i=r.column;if(e.isFunction(i.validator)){var u=i.validator(t,o,i,this.asyncbeforeCompete(t));if(e.isObject(u)){if(u.async)return;if(!u.valid)return void this.displayErrorMessage(u.message)}}n(o,i,t)}},{key:"handleBlur",value:function(){var e=this.props,t=e.onEscape;e.blurToSave?this.beforeComplete(this.editor.getValue()):t()}},{key:"handleKeyDown",value:function(e){var t=this.props.onEscape;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}},{key:"handleClick",value:function(e){"TD"!==e.target.tagName&&e.stopPropagation()}},{key:"render",value:function(){var r,n,o,u,a,l=this,c=this.props,s=c.row,f=c.column,d=c.className,p=c.style,b=c.rowIndex,y=c.columnIndex,h=c.autoSelectText,v=f.dataField,O=e.get(s,v),S=e.isDefined(this.state.invalidMessage),D=f.editorClasses||"";e.isFunction(f.editorClasses)&&(D=f.editorClasses(O,s,b,y));var x=f.editorStyle||{};e.isFunction(f.editorStyle)&&(x=f.editorStyle(O,s,b,y));var M={ref:function(e){return l.editor=e},defaultValue:O,style:x,className:(0,m.default)({animated:S,shake:S},D),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:function(){},onUpdate:function(e){}};t&&(M.didMount=function(){return t(s,f,b,y)});var k=e.isObject(f.editor);return k?M=i(i({},M),f.editor):e.isFunction(f.editorRenderer)&&(M=i(i({},M),{},{onUpdate:this.beforeComplete})),a=e.isFunction(f.editorRenderer)?f.editorRenderer(M,O,s,f,b,y):k&&(null===(r=f.editor)||void 0===r?void 0:r.type)===_.EDITTYPE.SELECT?g.default.createElement(w.default,i(i({},M),{},{row:s,column:f})):k&&(null===(n=f.editor)||void 0===n?void 0:n.type)===_.EDITTYPE.TEXTAREA?g.default.createElement(T.default,i(i({},M),{},{autoSelectText:h})):k&&(null===(o=f.editor)||void 0===o?void 0:o.type)===_.EDITTYPE.CHECKBOX?g.default.createElement(j.default,i({},M)):k&&(null===(u=f.editor)||void 0===u?void 0:u.type)===_.EDITTYPE.DATE?g.default.createElement(E.default,i({},M)):g.default.createElement(C.default,i(i({},M),{},{autoSelectText:h})),g.default.createElement("td",{className:(0,m.default)("react-bootstrap-table-editing-cell",d),style:p,onClick:this.handleClick},a,S?g.default.createElement(P.default,{invalidMessage:this.state.invalidMessage}):null)}}],u&&a(o.prototype,u),l&&a(o,l),Object.defineProperty(o,"prototype",{writable:!1}),o;var o,u,l}(g.Component),r.propTypes={row:O.default.object.isRequired,rowIndex:O.default.number.isRequired,column:O.default.object.isRequired,columnIndex:O.default.number.isRequired,onUpdate:O.default.func.isRequired,onEscape:O.default.func.isRequired,timeToCloseMessage:O.default.number,autoSelectText:O.default.bool,className:O.default.string,style:O.default.object},r.defaultProps={timeToCloseMessage:_.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}},r}},351(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(898),s=a(r(282));t.default=function(e,t){var r=(0,s.default)(e,t);return function(t){return l.default.createElement(c.Consumer,null,function(n){return function(t,n){var o=e.get(t.row,t.column.dataField),u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(o,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(o,t.row,t.rowIndex,t.columnIndex)),l.default.createElement(r,i(i({},t),{},{className:a,style:u},n))}(t,n)})}}},404(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(511),u=n(r(205));t.default=(e,t)=>{const r=(0,u.default)(e,t);return t=>o.default.createElement(i.Consumer,null,n=>((t,n)=>{const i=e.get(t.row,t.column.dataField);let u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(i,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(i,t.row,t.rowIndex,t.columnIndex)),o.default.createElement(r,{...t,className:a,style:u,...n})})(t,n))}},442(t){"use strict";t.exports=e},462(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){const{defaultValue:e=null,didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}handleKeyDown(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-textarea");return c.default.createElement("textarea",{ref:e=>this.text=e,className:i,...o,onKeyDown:this.handleKeyDown})}}t.default=s},511(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;const o=n(r(556)),i=n(r(442)),u=r(564),a=i.default.createContext(null);t.default=(e,t,r,n)=>{class l extends i.default.Component{constructor(e){super(e),this.doUpdate=this.doUpdate.bind(this),this.startEditing=this.startEditing.bind(this),this.escapeEditing=this.escapeEditing.bind(this),this.completeEditing=this.completeEditing.bind(this),this.handleCellUpdate=this.handleCellUpdate.bind(this),this.state={ridx:null,cidx:null,message:null}}static getDerivedStateFromProps(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:{...n}}handleCellUpdate(r,n,o){const i=t.typeConvert(n.type,o),{cellEdit:u}=this.props,{beforeSaveCell:a}=u.options,l=e.get(r,n.dataField),c=(e=!0)=>{e?this.doUpdate(r,n,i):this.escapeEditing()};if(e.isFunction(a)){const t=a(l,i,r,n,c);if(e.isObject(t)&&t.async)return}this.doUpdate(r,n,i)}doUpdate(o,i,u){const{keyField:a,cellEdit:l,data:c}=this.props,{afterSaveCell:s}=l.options,f=e.get(o,a),d=e.get(o,i.dataField);r()?n(f,i.dataField,u):(t.editCell(c,a,f,i.dataField,u),e.isFunction(s)&&s(d,u,o,i),this.completeEditing())}completeEditing(){this.setState(()=>({ridx:null,cidx:null,message:null}))}startEditing(e,t){const r=()=>{this.setState(()=>({ridx:e,cidx:t}))},{selectRow:n}=this.props;n&&!n.clickToEdit&&n.clickToSelect||r()}escapeEditing(){this.setState(()=>({ridx:null,cidx:null}))}render(){const{cellEdit:{options:{nonEditableRows:t,errorMessage:r,...n},ridx:o,cidx:u,...l}}=this.props,c={...n,...l,ridx:null!==this.state.ridx?this.state.ridx:o??null,cidx:null!==this.state.cidx?this.state.cidx:u??null,message:this.state.message,nonEditableRows:e.isDefined(t)?t():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate};return i.default.createElement(a.Provider,{value:{...c}},this.props.children)}}return l.propTypes={data:o.default.array.isRequired,selectRow:o.default.object,options:o.default.shape({mode:o.default.oneOf([u.CLICK_TO_CELL_EDIT,u.DBCLICK_TO_CELL_EDIT]).isRequired,onErrorMessageDisappear:o.default.func,blurToSave:o.default.bool,beforeSaveCell:o.default.func,afterSaveCell:o.default.func,onStartEdit:o.default.func,nonEditableRows:o.default.func,timeToCloseMessage:o.default.number,errorMessage:o.default.any})},{Provider:l}},t.Consumer=a.Consumer},512(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,u,a=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(a.push(n.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(u=r.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e,t)||function(){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 c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var h,v=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},m=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},O=(h=function(e){return h=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},h(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=h(e),n=0;n<r.length;n++)"default"!==r[n]&&v(t,e,r[n]);return m(t,e),t}),g=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var _=g(r(942)),j=O(r(442)),E=function(e){function t(e){var r,n,o;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(o=d(this,t,[e])).state={checked:(null!==(r=e.defaultValue)&&void 0!==r&&r).toString()===(null!==(n=e.value)&&void 0!==n?n:"on:off").split(":")[0]},o.handleChange=o.handleChange.bind(o),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props.didMount;this.checkbox.focus(),e&&e()}},{key:"getValue",value:function(){var e,t=l((null!==(e=this.props.value)&&void 0!==e?e:"on:off").split(":"),2),r=t[0],n=t[1];return this.checkbox.checked?r:n}},{key:"handleChange",value:function(e){this.props.onChange&&this.props.onChange(e);var t=e.target;this.setState(function(){return{checked:t.checked}})}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,i=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),a=(0,_.default)("editor edit-chseckbox checkbox",n);return j.default.createElement("input",u(u({ref:function(t){return e.checkbox=t},type:"checkbox",className:a},i),{},{checked:this.state.checked,onChange:this.handleChange}))}}],n&&s(r.prototype,n),i&&s(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(j.Component);t.default=E},556(e,t,r){e.exports=r(694)()},564(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(898)),i=n(r(351)),u=n(r(810));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},694(e,t,r){"use strict";var n=r(925);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,i,u){if(u!==n){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return r.PropTypes=r,r}},810(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(564),s=r(898);t.default=function(e,t){function r(r){return l.default.createElement(s.Consumer,null,function(n){return function(r,n){var o=r.value,u=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(o)>-1),a={};return t&&n.mode===c.DBCLICK_TO_CELL_EDIT&&(a.DELAY_FOR_DBCLICK=c.DELAY_FOR_DBCLICK),l.default.createElement(e,i(i(i({},r),a),{},{editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:u,atstart:n.atstart,clickToEdit:n.mode===c.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===c.DBCLICK_TO_CELL_EDIT}))}(r,n)})}return r.displayName="WithCellEditingRowConsumer",r}},855(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=h(r(442)),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.date.valueAsDate=new Date(r),this.date.focus(),n&&n()}},{key:"getValue",value:function(){return this.date.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,a=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),l=(0,m.default)(n,"form-control editor edit-date");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){return e.date=t},type:"date",className:l},a))}}],n&&a(r.prototype,n),l&&a(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,l}(O.Component);t.default=g},856(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(511)),i=n(r(404)),u=n(r(33));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},868(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.date.valueAsDate=new Date(e),this.date.focus(),t&&t()}getValue(){return this.date.value}render(){const{defaultValue:e="",didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-date");return c.default.createElement("input",{ref:e=>this.date=e,type:"date",className:i,...o})}}t.default=s},871(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{componentDidMount(){const{defaultValue:e="",didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,onUpdate:o,...i}=this.props,u=(0,l.default)(r,"form-control editor edit-text");return c.default.createElement("input",{ref:e=>this.text=e,type:"text",className:u,...i})}}t.default=s},898(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["nonEditableRows","errorMessage"],i=["options","ridx","cidx"];function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?u(Object(r),!0).forEach(function(t){l(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function l(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var h=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;var v=h(r(556)),m=h(r(442)),O=r(564),g=m.default.createContext(null);t.default=function(e,t,r,n){var u=function(u){function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),(t=d(this,l,[e])).doUpdate=t.doUpdate.bind(t),t.startEditing=t.startEditing.bind(t),t.escapeEditing=t.escapeEditing.bind(t),t.completeEditing=t.completeEditing.bind(t),t.handleCellUpdate=t.handleCellUpdate.bind(t),t.state={ridx:null,cidx:null,message:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(l,u),f=l,p=[{key:"handleCellUpdate",value:function(r,n,o){var i=this,u=t.typeConvert(n.type,o),a=this.props.cellEdit.options.beforeSaveCell,l=e.get(r,n.dataField);if(e.isFunction(a)){var c=a(l,u,r,n,function(){arguments.length>0&&void 0!==arguments[0]&&!arguments[0]?i.escapeEditing():i.doUpdate(r,n,u)});if(e.isObject(c)&&c.async)return}this.doUpdate(r,n,u)}},{key:"doUpdate",value:function(o,i,u){var a=this.props,l=a.keyField,c=a.cellEdit,s=a.data,f=c.options.afterSaveCell,d=e.get(o,l),p=e.get(o,i.dataField);r()?n(d,i.dataField,u):(t.editCell(s,l,d,i.dataField,u),e.isFunction(f)&&f(p,u,o,i),this.completeEditing())}},{key:"completeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null,message:null}})}},{key:"startEditing",value:function(e,t){var r=this,n=this.props.selectRow;n&&!n.clickToEdit&&n.clickToSelect||r.setState(function(){return{ridx:e,cidx:t}})}},{key:"escapeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null}})}},{key:"render",value:function(){var t=this.props.cellEdit,r=t.options,n=r.nonEditableRows,u=(r.errorMessage,c(r,o)),l=t.ridx,s=t.cidx,f=c(t,i),d=a(a(a({},u),f),{},{ridx:null!==this.state.ridx?this.state.ridx:null!=l?l:null,cidx:null!==this.state.cidx?this.state.cidx:null!=s?s:null,message:this.state.message,nonEditableRows:e.isDefined(n)?n():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate});return m.default.createElement(g.Provider,{value:a({},d)},this.props.children)}}],b=[{key:"getDerivedStateFromProps",value:function(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:a({},n)}}],p&&s(f.prototype,p),b&&s(f,b),Object.defineProperty(f,"prototype",{writable:!1}),f;var f,p,b}(m.default.Component);return u.propTypes={data:v.default.array.isRequired,selectRow:v.default.object,options:v.default.shape({mode:v.default.oneOf([O.CLICK_TO_CELL_EDIT,O.DBCLICK_TO_CELL_EDIT]).isRequired,onErrorMessageDisappear:v.default.func,blurToSave:v.default.bool,beforeSaveCell:v.default.func,afterSaveCell:v.default.func,onStartEdit:v.default.func,nonEditableRows:v.default.func,timeToCloseMessage:v.default.number,errorMessage:v.default.any})},{Provider:u}},t.Consumer=g.Consumer},900(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","getOptions","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=c(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},h=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return h(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=v(r(442)),_=function(e){function t(e){var r,n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),n=s(this,t,[e]);var o=null!==(r=e.options)&&void 0!==r?r:[];return e.getOptions&&(o=e.getOptions(n.setOptions.bind(n),{row:e.row,column:e.column})||[]),n.state={options:o},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.select.value=r,this.select.focus(),n&&n()}},{key:"setOptions",value:function(e){this.setState({options:e})}},{key:"getValue",value:function(){return this.select.value}},{key:"render",value:function(){var e=this,t=this.props,r=t.defaultValue,n=void 0===r?"":r,i=(t.didMount,t.getOptions,t.className),a=void 0===i?"":i,l=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),c=(0,O.default)(a,"form-control editor edit-select"),s=u(u({},l),{},{className:c});return g.default.createElement("select",u(u({},s),{},{ref:function(t){return e.select=t},defaultValue:n}),this.state.options.map(function(e){var t=e.label,r=e.value;return g.default.createElement("option",{key:r,value:r},t)}))}}],n&&l(r.prototype,n),i&&l(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(g.Component);t.default=_},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},937(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e),this.state={checked:(e.defaultValue??!1).toString()===(e.value??"on:off").split(":")[0]},this.handleChange=this.handleChange.bind(this)}componentDidMount(){const{didMount:e}=this.props;this.checkbox.focus(),e&&e()}getValue(){const[e,t]=(this.props.value??"on:off").split(":");return this.checkbox.checked?e:t}handleChange(e){this.props.onChange&&this.props.onChange(e);const{target:t}=e;this.setState(()=>({checked:t.checked}))}render(){const{defaultValue:e=!1,didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)("editor edit-chseckbox checkbox",r);return c.default.createElement("input",{ref:e=>this.checkbox=e,type:"checkbox",className:i,...o,checked:this.state.checked,onChange:this.handleChange})}}t.default=s},942(e,t){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var r=arguments[t];r&&(e=u(e,i(r)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var r in e)n.call(e,r)&&e[r]&&(t=u(t,r));return t}function u(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()}},r={},function e(n){var o=r[n];if(void 0!==o)return o.exports;var i=r[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(856);var t,r});
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IuanMiLCJtYXBwaW5ncyI6IjtDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxFQUFRRyxRQUFRLFVBQ1IsbUJBQVhDLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxDQUFDLFNBQVVKLEdBQ1EsaUJBQVpDLFFBQ2RBLFFBQXFDLDRCQUFJRCxFQUFRRyxRQUFRLFVBRXpESixFQUFrQyw0QkFBSUMsRUFBUUQsRUFBWSxNQUMzRCxDQVRELENBU0dPLEtBQU9DLElBQ1YsTywrSkNUQSxrQkFDQSxTQUtBLFNBRUEsVUFBZSxDQUFDQyxFQUFnQkMsS0EyQjlCLFNBQVNDLEVBQWFDLEdBQ3BCLE9BQ0Usd0JBQUMsRUFBQUMsU0FBUSxLQUFHQyxHQTVCVyxFQUFDRixFQUFZRSxLQUN0QyxNQUFNQyxFQUFNSCxFQUFNSSxNQUNaQyxJQUNKSCxFQUFTSSxnQkFBZ0JDLE9BQVMsR0FDbENMLEVBQVNJLGdCQUFnQkUsUUFBUUwsSUFBUSxHQUdyQ00sRUFBaUQsQ0FBQyxFQU14RCxPQUpJWCxHQUFvQkksRUFBU1EsT0FBUyxFQUFBQyx1QkFDeENGLEVBQU1HLGtCQUFvQixFQUFBQSxtQkFJMUIsd0JBQUNmLEVBQVMsSUFDSkcsS0FDQVMsRUFDSkksY0FBZVgsRUFBU1ksS0FDeEJDLGNBQWViLEVBQVNjLEtBQ3hCQyxXQUFZWixFQUNaYSxRQUFTaEIsRUFBU2dCLFFBQ2xCQyxZQUFhakIsRUFBU1EsT0FBUyxFQUFBVSxtQkFDL0JDLGNBQWVuQixFQUFTUSxPQUFTLEVBQUFDLHdCQU1WVyxDQUFtQnRCLEVBQU9FLEdBRXZELENBR0EsT0FEQUgsRUFBYXdCLFlBQWMsNkJBQ3BCeEIsRSx5QkN6Q1QsSUFBSXlCLEVBQXdELFNBQVVDLEdBQ3BFLE9BQU9BLEdBQU9BLEVBQUlDLFdBQWFELEVBQU0sQ0FD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YWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL3Jvdy1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2VkaXRvci1pbmRpY2F0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL3RleHQtZWRpdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2Ryb3Bkb3duLWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL3RleHRhcmVhLWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9lZGl0b3ItaW5kaWNhdG9yLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9lZGl0aW5nLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9lZGl0aW5nLWNlbGwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2VkaXRpbmctY2VsbC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9lZGl0aW5nLWNlbGwtY29uc3VtZXIudHN4Iiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy90ZXh0YXJlYS1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9jaGVja2JveC1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9yb3ctY29uc3VtZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2RhdGUtZWRpdG9yLmpzIiwid2VicGFjazovLy9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9kYXRlLWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvdGV4dC1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9jb250ZXh0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9kcm9wZG93bi1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2NoZWNrYm94LWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nRWRpdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ0VkaXRvclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBDTElDS19UT19DRUxMX0VESVQsXG4gIERCQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICBERUxBWV9GT1JfREJDTElDSyxcbn0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBDb25zdW1lciB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgKENvbXBvbmVudDogYW55LCBzZWxlY3RSb3dFbmFibGVkOiBhbnkpID0+IHtcbiAgY29uc3QgcmVuZGVyV2l0aENlbGxFZGl0ID0gKHByb3BzOiBhbnksIGNlbGxFZGl0OiBhbnkpID0+IHtcbiAgICBjb25zdCBrZXkgPSBwcm9wcy52YWx1ZTtcbiAgICBjb25zdCBlZGl0YWJsZVJvdyA9ICEoXG4gICAgICBjZWxsRWRpdC5ub25FZGl0YWJsZVJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmluZGV4T2Yoa2V5KSA+IC0xXG4gICAgKTtcblxuICAgIGNvbnN0IGF0dHJzOiB7IERFTEFZX0ZPUl9EQkNMSUNLPzogbnVtYmVyIHwgc3RyaW5nIH0gPSB7fTtcblxuICAgIGlmIChzZWxlY3RSb3dFbmFibGVkICYmIGNlbGxFZGl0Lm1vZGUgPT09IERCQ0xJQ0tfVE9fQ0VMTF9FRElUKSB7XG4gICAgICBhdHRycy5ERUxBWV9GT1JfREJDTElDSyA9IERFTEFZX0ZPUl9EQkNMSUNLO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgey4uLmF0dHJzfVxuICAgICAgICBlZGl0aW5nUm93SWR4PXtjZWxsRWRpdC5yaWR4fVxuICAgICAgICBlZGl0aW5nQ29sSWR4PXtjZWxsRWRpdC5jaWR4fVxuICAgICAgICBpc0VkaXRhYmxlPXtlZGl0YWJsZVJvd31cbiAgICAgICAgYXRzdGFydD17Y2VsbEVkaXQuYXRzdGFydH1cbiAgICAgICAgY2xpY2tUb0VkaXQ9e2NlbGxFZGl0Lm1vZGUgPT09IENMSUNLX1RPX0NFTExfRURJVH1cbiAgICAgICAgZGJjbGlja1RvRWRpdD17Y2VsbEVkaXQubW9kZSA9PT0gREJDTElDS19UT19DRUxMX0VESVR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG4gIGZ1bmN0aW9uIHdpdGhDb25zdW1lcihwcm9wczogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25zdW1lcj57KGNlbGxFZGl0KSA9PiByZW5kZXJXaXRoQ2VsbEVkaXQocHJvcHMsIGNlbGxFZGl0KX08L0NvbnN1bWVyPlxuICAgICk7XG4gIH1cblxuICB3aXRoQ29uc3VtZXIuZGlzcGxheU5hbWUgPSBcIldpdGhDZWxsRWRpdGluZ1Jvd0NvbnN1bWVyXCI7XG4gIHJldHVybiB3aXRoQ29uc3VtZXI7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgRWRpdG9ySW5kaWNhdG9yID0gZnVuY3Rpb24gRWRpdG9ySW5kaWNhdG9yKF9yZWYpIHtcbiAgdmFyIGludmFsaWRNZXNzYWdlID0gX3JlZi5pbnZhbGlkTWVzc2FnZTtcbiAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJhbGVydCBhbGVydC1kYW5nZXIgaW5cIixcbiAgICByb2xlOiBcImFsZXJ0XCIsXG4gICAgXCJkYXRhLXRlc3RpZFwiOiBcImVkaXRvci1pbmRpY2F0b3JcIlxuICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIG51bGwsIGludmFsaWRNZXNzYWdlKSk7XG59O1xuRWRpdG9ySW5kaWNhdG9yLnByb3BUeXBlcyA9IHtcbiAgaW52YWxpZE1lc3NhZ2U6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uc3RyaW5nXG59O1xuLy8gRWRpdG9ySW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgaW52YWxpZE1lc3NhZ2U6IG51bGwsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBFZGl0b3JJbmRpY2F0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcImF1dG9TZWxlY3RUZXh0XCIsIFwib25VcGRhdGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRleHRFZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBUZXh0RWRpdG9yKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0RWRpdG9yKTtcbiAgICByZXR1cm4gX2NhbGxTdXBlcih0aGlzLCBUZXh0RWRpdG9yLCBhcmd1bWVudHMpO1xuICB9XG4gIF9pbmhlcml0cyhUZXh0RWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRleHRFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzJGF1dG9TZWxlYyA9IF90aGlzJHByb3BzLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzJGF1dG9TZWxlYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyRhdXRvU2VsZWM7XG4gICAgICB0aGlzLnRleHQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICAgIGlmIChhdXRvU2VsZWN0VGV4dCkgdGhpcy50ZXh0LnNlbGVjdCgpO1xuICAgICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRkZWZhdWx0ViA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMiRkZWZhdWx0ViA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRkZWZhdWx0VixcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wczIuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzMiRjbGFzc05hbSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMiRjbGFzc05hbSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRjbGFzc05hbSxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGF1dG9TZWxlID0gX3RoaXMkcHJvcHMyLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzMiRhdXRvU2VsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wczIkYXV0b1NlbGUsXG4gICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHRcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnRleHQgPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSwgcmVzdCkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7IC8vIFRleHRFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm9iamVjdFxuLy8gICBdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5udW1iZXJcbi8vICAgXSksXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuLy8gVGV4dEVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogbnVsbCxcbi8vICAgZGVmYXVsdFZhbHVlOiAnJyxcbi8vICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBUZXh0RWRpdG9yOyIsIi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIE9wdGlvbiB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59XG5cbmludGVyZmFjZSBEcm9wRG93bkVkaXRvclByb3BzIHtcbiAgcm93OiBvYmplY3Q7XG4gIGNvbHVtbjogb2JqZWN0O1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBvYmplY3Q7XG4gIG9wdGlvbnM/OiBPcHRpb25bXTtcbiAgZGlkTW91bnQ/OiAoKSA9PiB2b2lkO1xuICBnZXRPcHRpb25zPzogKFxuICAgIHNldE9wdGlvbnM6IChvcHRpb25zOiBPcHRpb25bXSkgPT4gdm9pZCxcbiAgICBjb250ZXh0OiB7IHJvdzogb2JqZWN0OyBjb2x1bW46IG9iamVjdCB9XG4gICkgPT4gT3B0aW9uW10gfCB2b2lkO1xuICBvblVwZGF0ZT86IGFueTtcbn1cblxuaW50ZXJmYWNlIERyb3BEb3duRWRpdG9yU3RhdGUge1xuICBvcHRpb25zOiBPcHRpb25bXTtcbn1cblxuY2xhc3MgRHJvcERvd25FZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQ8XG4gIERyb3BEb3duRWRpdG9yUHJvcHMsXG4gIERyb3BEb3duRWRpdG9yU3RhdGVcbj4ge1xuICBzZWxlY3Q6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBsZXQgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMgPz8gW107XG4gICAgaWYgKHByb3BzLmdldE9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPVxuICAgICAgICBwcm9wcy5nZXRPcHRpb25zKHRoaXMuc2V0T3B0aW9ucy5iaW5kKHRoaXMpLCB7XG4gICAgICAgICAgcm93OiBwcm9wcy5yb3csXG4gICAgICAgICAgY29sdW1uOiBwcm9wcy5jb2x1bW4sXG4gICAgICAgIH0pIHx8IFtdO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0geyBvcHRpb25zIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGRlZmF1bHRWYWx1ZSA9IFwiXCIsIGRpZE1vdW50IH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMuc2VsZWN0LmZvY3VzKCk7XG4gICAgaWYgKGRpZE1vdW50KSB7XG4gICAgICBkaWRNb3VudCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IG9wdGlvbnMgfSk7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QudmFsdWU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gXCJcIixcbiAgICAgIGRpZE1vdW50LFxuICAgICAgZ2V0T3B0aW9ucyxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtc2VsZWN0XCIpO1xuXG4gICAgY29uc3QgYXR0ciA9IHtcbiAgICAgIC4uLnJlc3QsXG4gICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNlbGVjdFxuICAgICAgICB7Li4uYXR0cn1cbiAgICAgICAgcmVmPXsobm9kZSkgPT4gKHRoaXMuc2VsZWN0ID0gbm9kZSl9XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5zdGF0ZS5vcHRpb25zLm1hcCgoeyBsYWJlbCwgdmFsdWUgfTogYW55KSA9PiAoXG4gICAgICAgICAgPG9wdGlvbiBrZXk9e3ZhbHVlfSB2YWx1ZT17dmFsdWV9PlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICApKX1cbiAgICAgIDwvc2VsZWN0PlxuICAgICk7XG4gIH1cbn1cblxuLy8gRHJvcERvd25FZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICByb3c6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMubnVtYmVyXG4vLyAgIF0pLFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuLy8gICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueVxuLy8gICAgIH0pKVxuLy8gICBdKSxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBnZXRPcHRpb25zOiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcblxuLy8gRHJvcERvd25FZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBzdHlsZToge30sXG4vLyAgIG9wdGlvbnM6IFtdLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gICBnZXRPcHRpb25zOiB1bmRlZmluZWRcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IERyb3BEb3duRWRpdG9yO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcImF1dG9TZWxlY3RUZXh0XCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBUZXh0QXJlYUVkaXRvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIFRleHRBcmVhRWRpdG9yKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0QXJlYUVkaXRvcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIFRleHRBcmVhRWRpdG9yLCBbcHJvcHNdKTtcbiAgICBfdGhpcy5oYW5kbGVLZXlEb3duID0gX3RoaXMuaGFuZGxlS2V5RG93bi5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKFRleHRBcmVhRWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRleHRBcmVhRWRpdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGRlZmF1bHRWYSA9IF90aGlzJHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMkZGVmYXVsdFZhID09PSB2b2lkIDAgPyBudWxsIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wcyRhdXRvU2VsZWMgPSBfdGhpcyRwcm9wcy5hdXRvU2VsZWN0VGV4dCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQgPSBfdGhpcyRwcm9wcyRhdXRvU2VsZWMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMkYXV0b1NlbGVjO1xuICAgICAgdGhpcy50ZXh0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgdGhpcy50ZXh0LmZvY3VzKCk7XG4gICAgICBpZiAoYXV0b1NlbGVjdFRleHQpIHRoaXMudGV4dC5zZWxlY3QoKTtcbiAgICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0LnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVLZXlEb3duXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMgJiYgIWUuc2hpZnRLZXkpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uS2V5RG93bikge1xuICAgICAgICB0aGlzLnByb3BzLm9uS2V5RG93bihlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRkZWZhdWx0ViA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMiRkZWZhdWx0ViA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRkZWZhdWx0VixcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wczIuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzMiRjbGFzc05hbSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMiRjbGFzc05hbSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRjbGFzc05hbSxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGF1dG9TZWxlID0gX3RoaXMkcHJvcHMyLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzMiRhdXRvU2VsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wczIkYXV0b1NlbGUsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIGVkaXRvckNsYXNzID0gKDAsIGNsYXNzbmFtZXNfMVtcImRlZmF1bHRcIl0pKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dGFyZWFcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnRleHQgPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICAvLyB0eXBlPVwidGV4dGFyZWFcIlxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzXG4gICAgICB9LCByZXN0KSwge30sIHtcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZUtleURvd25cbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBUZXh0QXJlYUVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKSxcbi8vICAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbi8vICAgYXV0b1NlbGVjdFRleHQ6IFByb3BUeXBlcy5ib29sLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmMsXG4vLyB9O1xuLy8gVGV4dEFyZWFFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIGRlZmF1bHRWYWx1ZTogXCJcIixcbi8vICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuLy8gICBvbktleURvd246IHVuZGVmaW5lZCxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZCxcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFRleHRBcmVhRWRpdG9yOyIsIi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmNvbnN0IEVkaXRvckluZGljYXRvciA9ICh7IGludmFsaWRNZXNzYWdlIH06IGFueSkgPT4gKFxuICA8ZGl2IGNsYXNzTmFtZT1cImFsZXJ0IGFsZXJ0LWRhbmdlciBpblwiIHJvbGU9XCJhbGVydFwiIGRhdGEtdGVzdGlkPVwiZWRpdG9yLWluZGljYXRvclwiPlxuICAgIDxzdHJvbmc+e2ludmFsaWRNZXNzYWdlfTwvc3Ryb25nPlxuICA8L2Rpdj5cbik7XG5cbkVkaXRvckluZGljYXRvci5wcm9wVHlwZXMgPSB7XG4gIGludmFsaWRNZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuLy8gRWRpdG9ySW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgaW52YWxpZE1lc3NhZ2U6IG51bGwsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3JJbmRpY2F0b3I7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBjbGFzcy1tZXRob2RzLXVzZS10aGlzOiAwICovXG4vKiBlc2xpbnQganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBFRElUVFlQRSwgVElNRV9UT19DTE9TRV9NRVNTQUdFIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgQ2hlY2tCb3hFZGl0b3IgZnJvbSBcIi4vY2hlY2tib3gtZWRpdG9yXCI7XG5pbXBvcnQgRGF0ZUVkaXRvciBmcm9tIFwiLi9kYXRlLWVkaXRvclwiO1xuaW1wb3J0IERyb3Bkb3duRWRpdG9yIGZyb20gXCIuL2Ryb3Bkb3duLWVkaXRvclwiO1xuaW1wb3J0IEVkaXRvckluZGljYXRvciBmcm9tIFwiLi9lZGl0b3ItaW5kaWNhdG9yXCI7XG5pbXBvcnQgVGV4dEVkaXRvciBmcm9tIFwiLi90ZXh0LWVkaXRvclwiO1xuaW1wb3J0IFRleHRBcmVhRWRpdG9yIGZyb20gXCIuL3RleHRhcmVhLWVkaXRvclwiO1xuXG5pbnRlcmZhY2UgRWRpdGluZ0NlbGxQcm9wcyB7XG4gIHJvdzogb2JqZWN0O1xuICByb3dJbmRleDogbnVtYmVyO1xuICBjb2x1bW46IHtcbiAgICBkYXRhRmllbGQ6IGFueTtcbiAgICB2YWxpZGF0b3I/OiBhbnk7XG4gICAgZWRpdG9yQ2xhc3Nlcz86IGFueTtcbiAgICBlZGl0b3JTdHlsZT86IGFueTtcbiAgICBlZGl0b3I/OiB7IHR5cGU6IGFueTsgb3B0aW9ucz86IGFueSB9O1xuICAgIGVkaXRvclJlbmRlcmVyPzogRnVuY3Rpb247XG4gICAgdGV4dDogYW55O1xuICB9O1xuICBjb2x1bW5JbmRleDogbnVtYmVyO1xuICBvblVwZGF0ZTogKHJvdzogb2JqZWN0LCBjb2x1bW46IG9iamVjdCwgdmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgb25Fc2NhcGU6ICgpID0+IHZvaWQ7XG4gIHRpbWVUb0Nsb3NlTWVzc2FnZT86IG51bWJlcjtcbiAgYXV0b1NlbGVjdFRleHQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogb2JqZWN0O1xuICBvbkVycm9yTWVzc2FnZURpc2FwcGVhcj86IGFueTtcbiAgYmx1clRvU2F2ZT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBFZGl0aW5nQ2VsbFN0YXRlIHtcbiAgaW52YWxpZE1lc3NhZ2U6IGFueTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKF86IGFueSwgb25TdGFydEVkaXQ/OiBhbnkpID0+XG4gIGNsYXNzIEVkaXRpbmdDZWxsIGV4dGVuZHMgQ29tcG9uZW50PEVkaXRpbmdDZWxsUHJvcHMsIEVkaXRpbmdDZWxsU3RhdGU+IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgcm93OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICByb3dJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBjb2x1bW5JbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgICAgb25VcGRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBvbkVzY2FwZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHRpbWVUb0Nsb3NlTWVzc2FnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGF1dG9TZWxlY3RUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIH07XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBUSU1FX1RPX0NMT1NFX01FU1NBR0UsXG4gICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4gICAgICBzdHlsZToge30sXG4gICAgfTtcblxuICAgIGVkaXRvcjogYW55O1xuICAgIGluZGljYXRvclRpbWVyOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmluZGljYXRvclRpbWVyID0gbnVsbDtcbiAgICAgIHRoaXMuY2xlYXJUaW1lciA9IHRoaXMuY2xlYXJUaW1lci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVCbHVyID0gdGhpcy5oYW5kbGVCbHVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVLZXlEb3duID0gdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmJlZm9yZUNvbXBsZXRlID0gdGhpcy5iZWZvcmVDb21wbGV0ZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5hc3luY2JlZm9yZUNvbXBldGUgPSB0aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlID0gdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnZhbGlkTWVzc2FnZTogbnVsbCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoeyBtZXNzYWdlIH06IGFueSkge1xuICAgICAgaWYgKF8uaXNEZWZpbmVkKG1lc3NhZ2UpKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lcigpIHtcbiAgICAgIGlmICh0aGlzLmluZGljYXRvclRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluZGljYXRvclRpbWVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVUaW1lcigpIHtcbiAgICAgIHRoaXMuY2xlYXJUaW1lcigpO1xuICAgICAgY29uc3QgeyB0aW1lVG9DbG9zZU1lc3NhZ2UsIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyIH0gPSB0aGlzLnByb3BzO1xuICAgICAgdGhpcy5pbmRpY2F0b3JUaW1lciA9IF8uc2xlZXAoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG51bGwsXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihvbkVycm9yTWVzc2FnZURpc2FwcGVhcikpIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyKCk7XG4gICAgICB9LCB0aW1lVG9DbG9zZU1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGRpc3BsYXlFcnJvck1lc3NhZ2UobWVzc2FnZTogYW55KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIGludmFsaWRNZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5jcmVhdGVUaW1lcigpO1xuICAgIH1cblxuICAgIGFzeW5jYmVmb3JlQ29tcGV0ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgICByZXR1cm4gKHJlc3VsdCA9IHsgdmFsaWQ6IHRydWUgfSkgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIG1lc3NhZ2UgfSA9IHJlc3VsdDtcbiAgICAgICAgY29uc3QgeyBvblVwZGF0ZSwgcm93LCBjb2x1bW4gfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG9uVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGJlZm9yZUNvbXBsZXRlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgb25VcGRhdGUsIHJvdywgY29sdW1uIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4udmFsaWRhdG9yKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZUZvcm0gPSBjb2x1bW4udmFsaWRhdG9yKFxuICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgdGhpcy5hc3luY2JlZm9yZUNvbXBldGUobmV3VmFsdWUpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KHZhbGlkYXRlRm9ybSkpIHtcbiAgICAgICAgICBpZiAodmFsaWRhdGVGb3JtLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIGlmICghdmFsaWRhdGVGb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UodmFsaWRhdGVGb3JtLm1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb25VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICBoYW5kbGVCbHVyKCkge1xuICAgICAgY29uc3QgeyBvbkVzY2FwZSwgYmx1clRvU2F2ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChibHVyVG9TYXZlKSB7XG4gICAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUodGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUtleURvd24oZTogYW55KSB7XG4gICAgICBjb25zdCB7IG9uRXNjYXBlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgLy8gRVNDXG4gICAgICAgIG9uRXNjYXBlKCk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgLy8gRU5URVJcbiAgICAgICAgdGhpcy5iZWZvcmVDb21wbGV0ZSh0aGlzLmVkaXRvci5nZXRWYWx1ZSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayhlOiBhbnkpIHtcbiAgICAgIGlmIChlLnRhcmdldC50YWdOYW1lICE9PSBcIlREXCIpIHtcbiAgICAgICAgLy8gVG8gYXZvaWQgdGhlIHJvdyBzZWxlY3Rpb24gZXZlbnQgYmUgdHJpZ2dlcmVkLFxuICAgICAgICAvLyBXaGVuIHVzZXIgZGVmaW5lIHNlbGVjdFJvdy5jbGlja1RvU2VsZWN0IGFuZCBzZWxlY3RSb3cuY2xpY2tUb0VkaXRcbiAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHRyaWdnZXIgc2VsZWN0aW9uIGV2ZW50IGV2ZW4gaWYgdXNlciBjbGljayBvbiB0aGUgY2VsbCBlZGl0b3IoaW5wdXQpXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgbGV0IGVkaXRvcjogYW55O1xuICAgICAgY29uc3Qge1xuICAgICAgICByb3csXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgcm93SW5kZXgsXG4gICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBkYXRhRmllbGQgfSA9IGNvbHVtbjtcblxuICAgICAgY29uc3QgdmFsdWUgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICBjb25zdCBoYXNFcnJvciA9IF8uaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW52YWxpZE1lc3NhZ2UpO1xuXG4gICAgICBsZXQgY3VzdG9tRWRpdG9yQ2xhc3MgPSBjb2x1bW4uZWRpdG9yQ2xhc3NlcyB8fCBcIlwiO1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yQ2xhc3NlcykpIHtcbiAgICAgICAgY3VzdG9tRWRpdG9yQ2xhc3MgPSBjb2x1bW4uZWRpdG9yQ2xhc3NlcyhcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXhcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGVkaXRvclN0eWxlID0gY29sdW1uLmVkaXRvclN0eWxlIHx8IHt9O1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yU3R5bGUpKSB7XG4gICAgICAgIGVkaXRvclN0eWxlID0gY29sdW1uLmVkaXRvclN0eWxlKHZhbHVlLCByb3csIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoXG4gICAgICAgIHtcbiAgICAgICAgICBhbmltYXRlZDogaGFzRXJyb3IsXG4gICAgICAgICAgc2hha2U6IGhhc0Vycm9yLFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21FZGl0b3JDbGFzc1xuICAgICAgKTtcblxuICAgICAgbGV0IGVkaXRvclByb3BzID0ge1xuICAgICAgICByZWY6IChub2RlOiBhbnkpID0+ICh0aGlzLmVkaXRvciA9IG5vZGUpLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHZhbHVlLFxuICAgICAgICBzdHlsZTogZWRpdG9yU3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3MsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duLFxuICAgICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlQmx1cixcbiAgICAgICAgZGlkTW91bnQ6ICgpID0+IHsgfSxcbiAgICAgICAgb25VcGRhdGU6IChuZXdWYWx1ZTogYW55KSA9PiB7IH0sXG4gICAgICB9O1xuXG4gICAgICBpZiAob25TdGFydEVkaXQpIHtcbiAgICAgICAgZWRpdG9yUHJvcHMuZGlkTW91bnQgPSAoKSA9PlxuICAgICAgICAgIG9uU3RhcnRFZGl0KHJvdywgY29sdW1uLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkID0gXy5pc09iamVjdChjb2x1bW4uZWRpdG9yKTtcblxuICAgICAgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQpIHtcbiAgICAgICAgZWRpdG9yUHJvcHMgPSB7XG4gICAgICAgICAgLi4uZWRpdG9yUHJvcHMsXG4gICAgICAgICAgLi4uY29sdW1uLmVkaXRvcixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JSZW5kZXJlcikpIHtcbiAgICAgICAgZWRpdG9yUHJvcHMgPSB7XG4gICAgICAgICAgLi4uZWRpdG9yUHJvcHMsXG4gICAgICAgICAgb25VcGRhdGU6IHRoaXMuYmVmb3JlQ29tcGxldGUsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclJlbmRlcmVyKSkge1xuICAgICAgICBlZGl0b3IgPSBjb2x1bW4uZWRpdG9yUmVuZGVyZXIhKFxuICAgICAgICAgIGVkaXRvclByb3BzLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXhcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiZcbiAgICAgICAgY29sdW1uLmVkaXRvcj8udHlwZSA9PT0gRURJVFRZUEUuU0VMRUNUXG4gICAgICApIHtcbiAgICAgICAgZWRpdG9yID0gPERyb3Bkb3duRWRpdG9yIHsuLi5lZGl0b3JQcm9wc30gcm93PXtyb3d9IGNvbHVtbj17Y29sdW1ufSAvPjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiZcbiAgICAgICAgY29sdW1uLmVkaXRvcj8udHlwZSA9PT0gRURJVFRZUEUuVEVYVEFSRUFcbiAgICAgICkge1xuICAgICAgICBlZGl0b3IgPSAoXG4gICAgICAgICAgPFRleHRBcmVhRWRpdG9yIHsuLi5lZGl0b3JQcm9wc30gYXV0b1NlbGVjdFRleHQ9e2F1dG9TZWxlY3RUZXh0fSAvPlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJlxuICAgICAgICBjb2x1bW4uZWRpdG9yPy50eXBlID09PSBFRElUVFlQRS5DSEVDS0JPWFxuICAgICAgKSB7XG4gICAgICAgIGVkaXRvciA9IDxDaGVja0JveEVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IC8+O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJlxuICAgICAgICBjb2x1bW4uZWRpdG9yPy50eXBlID09PSBFRElUVFlQRS5EQVRFXG4gICAgICApIHtcbiAgICAgICAgZWRpdG9yID0gPERhdGVFZGl0b3Igey4uLmVkaXRvclByb3BzfSAvPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvciA9IChcbiAgICAgICAgICA8VGV4dEVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IGF1dG9TZWxlY3RUZXh0PXthdXRvU2VsZWN0VGV4dH0gLz5cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3NOYW1lPXtjcyhcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1lZGl0aW5nLWNlbGxcIiwgY2xhc3NOYW1lKX1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja31cbiAgICAgICAgPlxuICAgICAgICAgIHtlZGl0b3J9XG4gICAgICAgICAge2hhc0Vycm9yID8gKFxuICAgICAgICAgICAgPEVkaXRvckluZGljYXRvciBpbnZhbGlkTWVzc2FnZT17dGhpcy5zdGF0ZS5pbnZhbGlkTWVzc2FnZX0gLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC90ZD5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgY2xhc3MtbWV0aG9kcy11c2UtdGhpczogMCAqL1xuLyogZXNsaW50IGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG52YXIgY2xhc3NuYW1lc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpKTtcbnZhciBwcm9wX3R5cGVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfXzEgPSByZXF1aXJlKFwiLi5cIik7XG52YXIgY2hlY2tib3hfZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vY2hlY2tib3gtZWRpdG9yXCIpKTtcbnZhciBkYXRlX2VkaXRvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2RhdGUtZWRpdG9yXCIpKTtcbnZhciBkcm9wZG93bl9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9kcm9wZG93bi1lZGl0b3JcIikpO1xudmFyIGVkaXRvcl9pbmRpY2F0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9lZGl0b3ItaW5kaWNhdG9yXCIpKTtcbnZhciB0ZXh0X2VkaXRvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3RleHQtZWRpdG9yXCIpKTtcbnZhciB0ZXh0YXJlYV9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi90ZXh0YXJlYS1lZGl0b3JcIikpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoXywgb25TdGFydEVkaXQpIHtcbiAgdmFyIF9hO1xuICByZXR1cm4gX2EgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICAgIGZ1bmN0aW9uIEVkaXRpbmdDZWxsKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRWRpdGluZ0NlbGwpO1xuICAgICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEVkaXRpbmdDZWxsLCBbcHJvcHNdKTtcbiAgICAgIF90aGlzLmluZGljYXRvclRpbWVyID0gbnVsbDtcbiAgICAgIF90aGlzLmNsZWFyVGltZXIgPSBfdGhpcy5jbGVhclRpbWVyLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuaGFuZGxlQmx1ciA9IF90aGlzLmhhbmRsZUJsdXIuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5oYW5kbGVDbGljayA9IF90aGlzLmhhbmRsZUNsaWNrLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuaGFuZGxlS2V5RG93biA9IF90aGlzLmhhbmRsZUtleURvd24uYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5iZWZvcmVDb21wbGV0ZSA9IF90aGlzLmJlZm9yZUNvbXBsZXRlLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuYXN5bmNiZWZvcmVDb21wZXRlID0gX3RoaXMuYXN5bmNiZWZvcmVDb21wZXRlLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuZGlzcGxheUVycm9yTWVzc2FnZSA9IF90aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9pbmhlcml0cyhFZGl0aW5nQ2VsbCwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgICByZXR1cm4gX2NyZWF0ZUNsYXNzKEVkaXRpbmdDZWxsLCBbe1xuICAgICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lcigpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoX3JlZikge1xuICAgICAgICB2YXIgbWVzc2FnZSA9IF9yZWYubWVzc2FnZTtcbiAgICAgICAgaWYgKF8uaXNEZWZpbmVkKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVUaW1lcigpO1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG1lc3NhZ2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY2xlYXJUaW1lclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyVGltZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGljYXRvclRpbWVyKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW5kaWNhdG9yVGltZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNyZWF0ZVRpbWVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlVGltZXIoKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICB0aW1lVG9DbG9zZU1lc3NhZ2UgPSBfdGhpcyRwcm9wcy50aW1lVG9DbG9zZU1lc3NhZ2UsXG4gICAgICAgICAgb25FcnJvck1lc3NhZ2VEaXNhcHBlYXIgPSBfdGhpcyRwcm9wcy5vbkVycm9yTWVzc2FnZURpc2FwcGVhcjtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JUaW1lciA9IF8uc2xlZXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyKSkgb25FcnJvck1lc3NhZ2VEaXNhcHBlYXIoKTtcbiAgICAgICAgfSwgdGltZVRvQ2xvc2VNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZGlzcGxheUVycm9yTWVzc2FnZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3BsYXlFcnJvck1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG1lc3NhZ2VcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jcmVhdGVUaW1lcigpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJhc3luY2JlZm9yZUNvbXBldGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc3luY2JlZm9yZUNvbXBldGUobmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge1xuICAgICAgICAgICAgdmFsaWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICB2YXIgdmFsaWQgPSByZXN1bHQudmFsaWQsXG4gICAgICAgICAgICBtZXNzYWdlID0gcmVzdWx0Lm1lc3NhZ2U7XG4gICAgICAgICAgdmFyIF90aGlzMyRwcm9wcyA9IF90aGlzMy5wcm9wcyxcbiAgICAgICAgICAgIG9uVXBkYXRlID0gX3RoaXMzJHByb3BzLm9uVXBkYXRlLFxuICAgICAgICAgICAgcm93ID0gX3RoaXMzJHByb3BzLnJvdyxcbiAgICAgICAgICAgIGNvbHVtbiA9IF90aGlzMyRwcm9wcy5jb2x1bW47XG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgX3RoaXMzLmRpc3BsYXlFcnJvck1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG9uVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImJlZm9yZUNvbXBsZXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gYmVmb3JlQ29tcGxldGUobmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgb25VcGRhdGUgPSBfdGhpcyRwcm9wczIub25VcGRhdGUsXG4gICAgICAgICAgcm93ID0gX3RoaXMkcHJvcHMyLnJvdyxcbiAgICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczIuY29sdW1uO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi52YWxpZGF0b3IpKSB7XG4gICAgICAgICAgdmFyIHZhbGlkYXRlRm9ybSA9IGNvbHVtbi52YWxpZGF0b3IobmV3VmFsdWUsIHJvdywgY29sdW1uLCB0aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZShuZXdWYWx1ZSkpO1xuICAgICAgICAgIGlmIChfLmlzT2JqZWN0KHZhbGlkYXRlRm9ybSkpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZUZvcm0uYXN5bmMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdmFsaWRhdGVGb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZSh2YWxpZGF0ZUZvcm0ubWVzc2FnZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiaGFuZGxlQmx1clwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIG9uRXNjYXBlID0gX3RoaXMkcHJvcHMzLm9uRXNjYXBlLFxuICAgICAgICAgIGJsdXJUb1NhdmUgPSBfdGhpcyRwcm9wczMuYmx1clRvU2F2ZTtcbiAgICAgICAgaWYgKGJsdXJUb1NhdmUpIHtcbiAgICAgICAgICB0aGlzLmJlZm9yZUNvbXBsZXRlKHRoaXMuZWRpdG9yLmdldFZhbHVlKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uRXNjYXBlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiaGFuZGxlS2V5RG93blwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZSkge1xuICAgICAgICB2YXIgb25Fc2NhcGUgPSB0aGlzLnByb3BzLm9uRXNjYXBlO1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIC8vIEVTQ1xuICAgICAgICAgIG9uRXNjYXBlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgIC8vIEVOVEVSXG4gICAgICAgICAgdGhpcy5iZWZvcmVDb21wbGV0ZSh0aGlzLmVkaXRvci5nZXRWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJoYW5kbGVDbGlja1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGUpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0LnRhZ05hbWUgIT09IFwiVERcIikge1xuICAgICAgICAgIC8vIFRvIGF2b2lkIHRoZSByb3cgc2VsZWN0aW9uIGV2ZW50IGJlIHRyaWdnZXJlZCxcbiAgICAgICAgICAvLyBXaGVuIHVzZXIgZGVmaW5lIHNlbGVjdFJvdy5jbGlja1RvU2VsZWN0IGFuZCBzZWxlY3RSb3cuY2xpY2tUb0VkaXRcbiAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgdHJpZ2dlciBzZWxlY3Rpb24gZXZlbnQgZXZlbiBpZiB1c2VyIGNsaWNrIG9uIHRoZSBjZWxsIGVkaXRvcihpbnB1dClcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIF90aGlzNCA9IHRoaXMsXG4gICAgICAgICAgX2NvbHVtbiRlZGl0b3IsXG4gICAgICAgICAgX2NvbHVtbiRlZGl0b3IyLFxuICAgICAgICAgIF9jb2x1bW4kZWRpdG9yMyxcbiAgICAgICAgICBfY29sdW1uJGVkaXRvcjQ7XG4gICAgICAgIHZhciBlZGl0b3I7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHJvdyA9IF90aGlzJHByb3BzNC5yb3csXG4gICAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM0LmNvbHVtbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczQuY2xhc3NOYW1lLFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM0LnN0eWxlLFxuICAgICAgICAgIHJvd0luZGV4ID0gX3RoaXMkcHJvcHM0LnJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbkluZGV4ID0gX3RoaXMkcHJvcHM0LmNvbHVtbkluZGV4LFxuICAgICAgICAgIGF1dG9TZWxlY3RUZXh0ID0gX3RoaXMkcHJvcHM0LmF1dG9TZWxlY3RUZXh0O1xuICAgICAgICB2YXIgZGF0YUZpZWxkID0gY29sdW1uLmRhdGFGaWVsZDtcbiAgICAgICAgdmFyIHZhbHVlID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgICB2YXIgaGFzRXJyb3IgPSBfLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmludmFsaWRNZXNzYWdlKTtcbiAgICAgICAgdmFyIGN1c3RvbUVkaXRvckNsYXNzID0gY29sdW1uLmVkaXRvckNsYXNzZXMgfHwgXCJcIjtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yQ2xhc3NlcykpIHtcbiAgICAgICAgICBjdXN0b21FZGl0b3JDbGFzcyA9IGNvbHVtbi5lZGl0b3JDbGFzc2VzKHZhbHVlLCByb3csIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVkaXRvclN0eWxlID0gY29sdW1uLmVkaXRvclN0eWxlIHx8IHt9O1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JTdHlsZSkpIHtcbiAgICAgICAgICBlZGl0b3JTdHlsZSA9IGNvbHVtbi5lZGl0b3JTdHlsZSh2YWx1ZSwgcm93LCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKSh7XG4gICAgICAgICAgYW5pbWF0ZWQ6IGhhc0Vycm9yLFxuICAgICAgICAgIHNoYWtlOiBoYXNFcnJvclxuICAgICAgICB9LCBjdXN0b21FZGl0b3JDbGFzcyk7XG4gICAgICAgIHZhciBlZGl0b3JQcm9wcyA9IHtcbiAgICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LmVkaXRvciA9IG5vZGU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHN0eWxlOiBlZGl0b3JTdHlsZSxcbiAgICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzLFxuICAgICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duLFxuICAgICAgICAgIG9uQmx1cjogdGhpcy5oYW5kbGVCbHVyLFxuICAgICAgICAgIGRpZE1vdW50OiBmdW5jdGlvbiBkaWRNb3VudCgpIHt9LFxuICAgICAgICAgIG9uVXBkYXRlOiBmdW5jdGlvbiBvblVwZGF0ZShuZXdWYWx1ZSkge31cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9uU3RhcnRFZGl0KSB7XG4gICAgICAgICAgZWRpdG9yUHJvcHMuZGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gb25TdGFydEVkaXQocm93LCBjb2x1bW4sIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCA9IF8uaXNPYmplY3QoY29sdW1uLmVkaXRvcik7XG4gICAgICAgIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkKSB7XG4gICAgICAgICAgZWRpdG9yUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwgY29sdW1uLmVkaXRvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JSZW5kZXJlcikpIHtcbiAgICAgICAgICBlZGl0b3JQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpLCB7fSwge1xuICAgICAgICAgICAgb25VcGRhdGU6IHRoaXMuYmVmb3JlQ29tcGxldGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JSZW5kZXJlcikpIHtcbiAgICAgICAgICBlZGl0b3IgPSBjb2x1bW4uZWRpdG9yUmVuZGVyZXIoZWRpdG9yUHJvcHMsIHZhbHVlLCByb3csIGNvbHVtbiwgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmICgoX2NvbHVtbiRlZGl0b3IgPSBjb2x1bW4uZWRpdG9yKSA9PT0gbnVsbCB8fCBfY29sdW1uJGVkaXRvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NvbHVtbiRlZGl0b3IudHlwZSkgPT09IF9fMS5FRElUVFlQRS5TRUxFQ1QpIHtcbiAgICAgICAgICBlZGl0b3IgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGRyb3Bkb3duX2VkaXRvcl8xW1wiZGVmYXVsdFwiXSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcyksIHt9LCB7XG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiYgKChfY29sdW1uJGVkaXRvcjIgPSBjb2x1bW4uZWRpdG9yKSA9PT0gbnVsbCB8fCBfY29sdW1uJGVkaXRvcjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb2x1bW4kZWRpdG9yMi50eXBlKSA9PT0gX18xLkVESVRUWVBFLlRFWFRBUkVBKSB7XG4gICAgICAgICAgZWRpdG9yID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudCh0ZXh0YXJlYV9lZGl0b3JfMVtcImRlZmF1bHRcIl0sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpLCB7fSwge1xuICAgICAgICAgICAgYXV0b1NlbGVjdFRleHQ6IGF1dG9TZWxlY3RUZXh0XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiYgKChfY29sdW1uJGVkaXRvcjMgPSBjb2x1bW4uZWRpdG9yKSA9PT0gbnVsbCB8fCBfY29sdW1uJGVkaXRvcjMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb2x1bW4kZWRpdG9yMy50eXBlKSA9PT0gX18xLkVESVRUWVBFLkNIRUNLQk9YKSB7XG4gICAgICAgICAgZWRpdG9yID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChjaGVja2JveF9lZGl0b3JfMVtcImRlZmF1bHRcIl0sIF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJiAoKF9jb2x1bW4kZWRpdG9yNCA9IGNvbHVtbi5lZGl0b3IpID09PSBudWxsIHx8IF9jb2x1bW4kZWRpdG9yNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NvbHVtbiRlZGl0b3I0LnR5cGUpID09PSBfXzEuRURJVFRZUEUuREFURSkge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoZGF0ZV9lZGl0b3JfMVtcImRlZmF1bHRcIl0sIF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudCh0ZXh0X2VkaXRvcl8xW1wiZGVmYXVsdFwiXSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcyksIHt9LCB7XG4gICAgICAgICAgICBhdXRvU2VsZWN0VGV4dDogYXV0b1NlbGVjdFRleHRcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJ0ZFwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoXCJyZWFjdC1ib290c3RyYXAtdGFibGUtZWRpdGluZy1jZWxsXCIsIGNsYXNzTmFtZSksXG4gICAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2tcbiAgICAgICAgfSwgZWRpdG9yLCBoYXNFcnJvciA/IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoZWRpdG9yX2luZGljYXRvcl8xW1wiZGVmYXVsdFwiXSwge1xuICAgICAgICAgIGludmFsaWRNZXNzYWdlOiB0aGlzLnN0YXRlLmludmFsaWRNZXNzYWdlXG4gICAgICAgIH0pIDogbnVsbCk7XG4gICAgICB9XG4gICAgfV0pO1xuICB9KHJlYWN0XzEuQ29tcG9uZW50KSwgX2EucHJvcFR5cGVzID0ge1xuICAgIHJvdzogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICByb3dJbmRleDogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBjb2x1bW46IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgY29sdW1uSW5kZXg6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgb25VcGRhdGU6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uRXNjYXBlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ubnVtYmVyLFxuICAgIGF1dG9TZWxlY3RUZXh0OiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgY2xhc3NOYW1lOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLnN0cmluZyxcbiAgICBzdHlsZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5vYmplY3RcbiAgfSwgX2EuZGVmYXVsdFByb3BzID0ge1xuICAgIHRpbWVUb0Nsb3NlTWVzc2FnZTogX18xLlRJTUVfVE9fQ0xPU0VfTUVTU0FHRSxcbiAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuICAgIHN0eWxlOiB7fVxuICB9LCBfYTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgY29udGV4dF8xID0gcmVxdWlyZShcIi4vY29udGV4dFwiKTtcbnZhciBlZGl0aW5nX2NlbGxfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9lZGl0aW5nLWNlbGxcIikpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoXywgb25TdGFydEVkaXQpIHtcbiAgdmFyIEVkaXRpbmdDZWxsID0gKDAsIGVkaXRpbmdfY2VsbF8xW1wiZGVmYXVsdFwiXSkoXywgb25TdGFydEVkaXQpO1xuICB2YXIgcmVuZGVyV2l0aEVkaXRpbmdDZWxsID0gZnVuY3Rpb24gcmVuZGVyV2l0aEVkaXRpbmdDZWxsKHByb3BzLCBjZWxsRWRpdCkge1xuICAgIHZhciBjb250ZW50ID0gXy5nZXQocHJvcHMucm93LCBwcm9wcy5jb2x1bW4uZGF0YUZpZWxkKTtcbiAgICB2YXIgZWRpdENlbGxzdHlsZSA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlIHx8IHt9O1xuICAgIHZhciBlZGl0Q2VsbGNsYXNzZXMgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUpKSB7XG4gICAgICBlZGl0Q2VsbHN0eWxlID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUoY29udGVudCwgcHJvcHMucm93LCBwcm9wcy5yb3dJbmRleCwgcHJvcHMuY29sdW1uSW5kZXgpO1xuICAgIH1cbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHByb3BzLmNvbHVtbi5lZGl0Q2VsbENsYXNzZXMpKSB7XG4gICAgICBlZGl0Q2VsbGNsYXNzZXMgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzKGNvbnRlbnQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgsIHByb3BzLmNvbHVtbkluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoRWRpdGluZ0NlbGwsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgY2xhc3NOYW1lOiBlZGl0Q2VsbGNsYXNzZXMsXG4gICAgICBzdHlsZTogZWRpdENlbGxzdHlsZVxuICAgIH0sIGNlbGxFZGl0KSk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChjb250ZXh0XzEuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChjZWxsRWRpdCkge1xuICAgICAgcmV0dXJuIHJlbmRlcldpdGhFZGl0aW5nQ2VsbChwcm9wcywgY2VsbEVkaXQpO1xuICAgIH0pO1xuICB9O1xufTsiLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ29uc3VtZXIgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgY3JlYXRlRWRpdGluZ0NlbGwgZnJvbSBcIi4vZWRpdGluZy1jZWxsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChfOiBhbnksIG9uU3RhcnRFZGl0PzogYW55KSA9PiB7XG4gIGNvbnN0IEVkaXRpbmdDZWxsID0gY3JlYXRlRWRpdGluZ0NlbGwoXywgb25TdGFydEVkaXQpO1xuICBjb25zdCByZW5kZXJXaXRoRWRpdGluZ0NlbGwgPSAocHJvcHM6IGFueSwgY2VsbEVkaXQ6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBfLmdldChwcm9wcy5yb3csIHByb3BzLmNvbHVtbi5kYXRhRmllbGQpO1xuICAgIGxldCBlZGl0Q2VsbHN0eWxlID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUgfHwge307XG4gICAgbGV0IGVkaXRDZWxsY2xhc3NlcyA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbENsYXNzZXM7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihwcm9wcy5jb2x1bW4uZWRpdENlbGxTdHlsZSkpIHtcbiAgICAgIGVkaXRDZWxsc3R5bGUgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxTdHlsZShcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgcHJvcHMucm93LFxuICAgICAgICBwcm9wcy5yb3dJbmRleCxcbiAgICAgICAgcHJvcHMuY29sdW1uSW5kZXhcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfLmlzRnVuY3Rpb24ocHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3NlcykpIHtcbiAgICAgIGVkaXRDZWxsY2xhc3NlcyA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbENsYXNzZXMoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHByb3BzLnJvdyxcbiAgICAgICAgcHJvcHMucm93SW5kZXgsXG4gICAgICAgIHByb3BzLmNvbHVtbkluZGV4XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8RWRpdGluZ0NlbGxcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICBjbGFzc05hbWU9e2VkaXRDZWxsY2xhc3Nlc31cbiAgICAgICAgc3R5bGU9e2VkaXRDZWxsc3R5bGV9XG4gICAgICAgIHsuLi5jZWxsRWRpdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gKHByb3BzOiBhbnkpID0+IChcbiAgICA8Q29uc3VtZXI+eyhjZWxsRWRpdCkgPT4gcmVuZGVyV2l0aEVkaXRpbmdDZWxsKHByb3BzLCBjZWxsRWRpdCl9PC9Db25zdW1lcj5cbiAgKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fOyIsIi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFRleHRFZGl0b3JQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICBhdXRvU2VsZWN0VGV4dD86IGJvb2xlYW47XG4gIGRpZE1vdW50PzogKCkgPT4gdm9pZDtcbiAgb25LZXlEb3duOiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbn1cblxuY2xhc3MgVGV4dEFyZWFFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQ8VGV4dEVkaXRvclByb3BzPiB7XG4gIHRleHQ6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IFRleHRFZGl0b3JQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUtleURvd24gPSB0aGlzLmhhbmRsZUtleURvd24uYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IG51bGwsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGF1dG9TZWxlY3RUZXh0ID0gZmFsc2UsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy50ZXh0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMudGV4dC5mb2N1cygpO1xuICAgIGlmIChhdXRvU2VsZWN0VGV4dCkgdGhpcy50ZXh0LnNlbGVjdCgpO1xuICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQudmFsdWU7XG4gIH1cblxuICBoYW5kbGVLZXlEb3duKGU6IGFueSkge1xuICAgIGlmIChlLmtleUNvZGUgPT09IDEzICYmICFlLnNoaWZ0S2V5KSByZXR1cm47XG4gICAgaWYgKHRoaXMucHJvcHMub25LZXlEb3duKSB7XG4gICAgICB0aGlzLnByb3BzLm9uS2V5RG93bihlKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gXCJcIixcbiAgICAgIGRpZE1vdW50LFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIGF1dG9TZWxlY3RUZXh0ID0gZmFsc2UsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjcyhjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHRhcmVhXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgcmVmPXsobm9kZSkgPT4gKHRoaXMudGV4dCA9IG5vZGUpfVxuICAgICAgICAvLyB0eXBlPVwidGV4dGFyZWFcIlxuICAgICAgICBjbGFzc05hbWU9e2VkaXRvckNsYXNzfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleURvd259XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuLy8gVGV4dEFyZWFFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4vLyAgIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcblxuLy8gVGV4dEFyZWFFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIGRlZmF1bHRWYWx1ZTogXCJcIixcbi8vICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuLy8gICBvbktleURvd246IHVuZGVmaW5lZCxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZCxcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRBcmVhRWRpdG9yO1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbi8qIGVzbGludCByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICBDZWxsRWRpdFByb3ZpZGVyUHJvcHMsXG4gIENlbGxFZGl0UHJvdmlkZXJTdGF0ZSxcbiAgREJDTElDS19UT19DRUxMX0VESVQsXG59IGZyb20gXCIuLlwiO1xuXG5jb25zdCBDZWxsRWRpdENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4obnVsbCk7XG5cbmV4cG9ydCBkZWZhdWx0IChcbiAgXzogYW55LFxuICBkYXRhT3BlcmF0b3I/OiBhbnksXG4gIGlzUmVtb3RlQ2VsbEVkaXQ/OiBhbnksXG4gIGhhbmRsZUNlbGxDaGFuZ2U/OiBhbnlcbikgPT4ge1xuICBjbGFzcyBDZWxsRWRpdFByb3ZpZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICAgIENlbGxFZGl0UHJvdmlkZXJQcm9wcyxcbiAgICBDZWxsRWRpdFByb3ZpZGVyU3RhdGVcbiAgPiB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgICAgc2VsZWN0Um93OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFtDTElDS19UT19DRUxMX0VESVQsIERCQ0xJQ0tfVE9fQ0VMTF9FRElUXSlcbiAgICAgICAgICAuaXNSZXF1aXJlZCxcbiAgICAgICAgb25FcnJvck1lc3NhZ2VEaXNhcHBlYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBibHVyVG9TYXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgYmVmb3JlU2F2ZUNlbGw6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBhZnRlclNhdmVDZWxsOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgb25TdGFydEVkaXQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBub25FZGl0YWJsZVJvd3M6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIGVycm9yTWVzc2FnZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmRvVXBkYXRlID0gdGhpcy5kb1VwZGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGFydEVkaXRpbmcgPSB0aGlzLnN0YXJ0RWRpdGluZy5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5lc2NhcGVFZGl0aW5nID0gdGhpcy5lc2NhcGVFZGl0aW5nLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmNvbXBsZXRlRWRpdGluZyA9IHRoaXMuY29tcGxldGVFZGl0aW5nLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUNlbGxVcGRhdGUgPSB0aGlzLmhhbmRsZUNlbGxVcGRhdGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgIGNpZHg6IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgICBpZiAoXG4gICAgICAgIG5leHRQcm9wcy5jZWxsRWRpdCAmJlxuICAgICAgICBfLmlzRnVuY3Rpb24oaXNSZW1vdGVDZWxsRWRpdCkgJiZcbiAgICAgICAgaXNSZW1vdGVDZWxsRWRpdCgpXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5leHRQcm9wcy5jZWxsRWRpdC5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBuZXh0UHJvcHMuY2VsbEVkaXQub3B0aW9ucy5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmlkeDogcHJldlN0YXRlLnJpZHgsXG4gICAgICAgICAgICBjaWR4OiBwcmV2U3RhdGUuY2lkeCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2VsbFVwZGF0ZShyb3c6IGFueSwgY29sdW1uOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlV2l0aFR5cGUgPSBkYXRhT3BlcmF0b3IudHlwZUNvbnZlcnQoY29sdW1uLnR5cGUsIG5ld1ZhbHVlKTtcbiAgICAgIGNvbnN0IHsgY2VsbEVkaXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGJlZm9yZVNhdmVDZWxsIH0gPSBjZWxsRWRpdC5vcHRpb25zO1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgY29uc3QgYmVmb3JlU2F2ZUNlbGxEb25lID0gKHJlc3VsdCA9IHRydWUpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHRoaXMuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXNjYXBlRWRpdGluZygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihiZWZvcmVTYXZlQ2VsbCkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYmVmb3JlU2F2ZUNlbGwoXG4gICAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgICAgbmV3VmFsdWVXaXRoVHlwZSxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIGJlZm9yZVNhdmVDZWxsRG9uZVxuICAgICAgICApO1xuICAgICAgICBpZiAoXy5pc09iamVjdChyZXN1bHQpICYmIHJlc3VsdC5hc3luYykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5kb1VwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWVXaXRoVHlwZSk7XG4gICAgfVxuXG4gICAgZG9VcGRhdGUocm93OiBhbnksIGNvbHVtbjogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgICBjb25zdCB7IGtleUZpZWxkLCBjZWxsRWRpdCwgZGF0YSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgYWZ0ZXJTYXZlQ2VsbCB9ID0gY2VsbEVkaXQub3B0aW9ucztcbiAgICAgIGNvbnN0IHJvd0lkID0gXy5nZXQocm93LCBrZXlGaWVsZCk7XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICBpZiAoaXNSZW1vdGVDZWxsRWRpdCgpKSB7XG4gICAgICAgIGhhbmRsZUNlbGxDaGFuZ2Uocm93SWQsIGNvbHVtbi5kYXRhRmllbGQsIG5ld1ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGFPcGVyYXRvci5lZGl0Q2VsbChcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgIHJvd0lkLFxuICAgICAgICAgIGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgICAgbmV3VmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihhZnRlclNhdmVDZWxsKSkge1xuICAgICAgICAgIGFmdGVyU2F2ZUNlbGwob2xkVmFsdWUsIG5ld1ZhbHVlLCByb3csIGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wbGV0ZUVkaXRpbmcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wbGV0ZUVkaXRpbmcoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgIGNpZHg6IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgc3RhcnRFZGl0aW5nKHJpZHg6IGFueSwgY2lkeDogYW55KSB7XG4gICAgICBjb25zdCBlZGl0aW5nID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgICAgcmlkeCxcbiAgICAgICAgICBjaWR4LFxuICAgICAgICB9KSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7IHNlbGVjdFJvdyB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICghc2VsZWN0Um93IHx8IHNlbGVjdFJvdy5jbGlja1RvRWRpdCB8fCAhc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QpIHtcbiAgICAgICAgZWRpdGluZygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVzY2FwZUVkaXRpbmcoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgIGNpZHg6IG51bGwsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjZWxsRWRpdDoge1xuICAgICAgICAgIG9wdGlvbnM6IHsgbm9uRWRpdGFibGVSb3dzLCBlcnJvck1lc3NhZ2UsIC4uLm9wdGlvbnNSZXN0IH0sXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHJpZHg6IHByb3BSaWR4LFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBjaWR4OiBwcm9wQ2lkeCxcbiAgICAgICAgICAuLi5jZWxsRWRpdFJlc3RcbiAgICAgICAgfSxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBuZXdDZWxsRWRpdCA9IHtcbiAgICAgICAgLi4ub3B0aW9uc1Jlc3QsXG4gICAgICAgIC4uLmNlbGxFZGl0UmVzdCxcbiAgICAgICAgcmlkeDogdGhpcy5zdGF0ZS5yaWR4ICE9PSBudWxsID8gdGhpcy5zdGF0ZS5yaWR4IDogKHByb3BSaWR4ID8/IG51bGwpLFxuICAgICAgICBjaWR4OiB0aGlzLnN0YXRlLmNpZHggIT09IG51bGwgPyB0aGlzLnN0YXRlLmNpZHggOiAocHJvcENpZHggPz8gbnVsbCksXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RhdGUubWVzc2FnZSxcbiAgICAgICAgbm9uRWRpdGFibGVSb3dzOiBfLmlzRGVmaW5lZChub25FZGl0YWJsZVJvd3MpID8gbm9uRWRpdGFibGVSb3dzKCkgOiBbXSxcbiAgICAgICAgYXRzdGFydDogdGhpcy5zdGFydEVkaXRpbmcsXG4gICAgICAgIG9uRXNjYXBlOiB0aGlzLmVzY2FwZUVkaXRpbmcsXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLmhhbmRsZUNlbGxVcGRhdGUsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q2VsbEVkaXRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IC4uLm5ld0NlbGxFZGl0IH19PlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8L0NlbGxFZGl0Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgUHJvdmlkZXI6IENlbGxFZGl0UHJvdmlkZXIsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgQ29uc3VtZXIgPSBDZWxsRWRpdENvbnRleHQuQ29uc3VtZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRWYWx1ZVwiLCBcImRpZE1vdW50XCIsIFwiY2xhc3NOYW1lXCIsIFwib25VcGRhdGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIENoZWNrQm94RWRpdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gQ2hlY2tCb3hFZGl0b3IocHJvcHMpIHtcbiAgICB2YXIgX3Byb3BzJGRlZmF1bHRWYWx1ZSwgX3Byb3BzJHZhbHVlO1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2hlY2tCb3hFZGl0b3IpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBDaGVja0JveEVkaXRvciwgW3Byb3BzXSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjaGVja2VkOiAoKF9wcm9wcyRkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF9wcm9wcyRkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IF9wcm9wcyRkZWZhdWx0VmFsdWUgOiBmYWxzZSkudG9TdHJpbmcoKSA9PT0gKChfcHJvcHMkdmFsdWUgPSBwcm9wcy52YWx1ZSkgIT09IG51bGwgJiYgX3Byb3BzJHZhbHVlICE9PSB2b2lkIDAgPyBfcHJvcHMkdmFsdWUgOiBcIm9uOm9mZlwiKS5zcGxpdChcIjpcIilbMF1cbiAgICB9O1xuICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IF90aGlzLmhhbmRsZUNoYW5nZS5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKENoZWNrQm94RWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKENoZWNrQm94RWRpdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBkaWRNb3VudCA9IHRoaXMucHJvcHMuZGlkTW91bnQ7XG4gICAgICB0aGlzLmNoZWNrYm94LmZvY3VzKCk7XG4gICAgICBpZiAoZGlkTW91bnQpIGRpZE1vdW50KCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJHZhbHVlO1xuICAgICAgdmFyIF9zcGxpdCA9ICgoX3RoaXMkcHJvcHMkdmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlKSAhPT0gbnVsbCAmJiBfdGhpcyRwcm9wcyR2YWx1ZSAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkdmFsdWUgOiBcIm9uOm9mZlwiKS5zcGxpdChcIjpcIiksXG4gICAgICAgIF9zcGxpdDIgPSBfc2xpY2VkVG9BcnJheShfc3BsaXQsIDIpLFxuICAgICAgICBwb3NpdGl2ZSA9IF9zcGxpdDJbMF0sXG4gICAgICAgIG5lZ2F0aXZlID0gX3NwbGl0MlsxXTtcbiAgICAgIHJldHVybiB0aGlzLmNoZWNrYm94LmNoZWNrZWQgPyBwb3NpdGl2ZSA6IG5lZ2F0aXZlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVDaGFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGUpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKGUpO1xuICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hlY2tlZDogdGFyZ2V0LmNoZWNrZWRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzJGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMkY2xhc3NOYW1lID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMkY2xhc3NOYW1lLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzLm9uVXBkYXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIGVkaXRvckNsYXNzID0gKDAsIGNsYXNzbmFtZXNfMVtcImRlZmF1bHRcIl0pKFwiZWRpdG9yIGVkaXQtY2hzZWNrYm94IGNoZWNrYm94XCIsIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmNoZWNrYm94ID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzXG4gICAgICB9LCByZXN0KSwge30sIHtcbiAgICAgICAgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2VcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBDaGVja0JveEVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLFxuLy8gICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuLy8gICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG4vLyBDaGVja0JveEVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgdmFsdWU6IFwib246b2ZmXCIsXG4vLyAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4vLyAgIG9uQ2hhbmdlOiB1bmRlZmluZWQsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDaGVja0JveEVkaXRvcjsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5UeXBlID0gZXhwb3J0cy5FRElUVFlQRSA9IGV4cG9ydHMuREJDTElDS19UT19DRUxMX0VESVQgPSBleHBvcnRzLkNMSUNLX1RPX0NFTExfRURJVCA9IGV4cG9ydHMuREVMQVlfRk9SX0RCQ0xJQ0sgPSBleHBvcnRzLlRJTUVfVE9fQ0xPU0VfTUVTU0FHRSA9IHZvaWQgMDtcbnZhciBjb250ZXh0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL2NvbnRleHRcIikpO1xudmFyIGVkaXRpbmdfY2VsbF9jb25zdW1lcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9lZGl0aW5nLWNlbGwtY29uc3VtZXJcIikpO1xudmFyIHJvd19jb25zdW1lcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9yb3ctY29uc3VtZXJcIikpO1xuZXhwb3J0cy5USU1FX1RPX0NMT1NFX01FU1NBR0UgPSAzMDAwO1xuZXhwb3J0cy5ERUxBWV9GT1JfREJDTElDSyA9IDIwMDtcbmV4cG9ydHMuQ0xJQ0tfVE9fQ0VMTF9FRElUID0gXCJjbGlja1wiO1xuZXhwb3J0cy5EQkNMSUNLX1RPX0NFTExfRURJVCA9IFwiZGJjbGlja1wiO1xuZXhwb3J0cy5FRElUVFlQRSA9IHtcbiAgVEVYVDogXCJ0ZXh0XCIsXG4gIFNFTEVDVDogXCJzZWxlY3RcIixcbiAgVEVYVEFSRUE6IFwidGV4dGFyZWFcIixcbiAgQ0hFQ0tCT1g6IFwiY2hlY2tib3hcIixcbiAgREFURTogXCJkYXRlXCJcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZUNvbnRleHQ6IGNvbnRleHRfMVtcImRlZmF1bHRcIl0sXG4gICAgY3JlYXRlRWRpdGluZ0NlbGw6IGVkaXRpbmdfY2VsbF9jb25zdW1lcl8xW1wiZGVmYXVsdFwiXSxcbiAgICB3aXRoUm93TGV2ZWxDZWxsRWRpdDogcm93X2NvbnN1bWVyXzFbXCJkZWZhdWx0XCJdLFxuICAgIERCQ0xJQ0tfVE9fQ0VMTF9FRElUOiBleHBvcnRzLkRCQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICAgIERFTEFZX0ZPUl9EQkNMSUNLOiBleHBvcnRzLkRFTEFZX0ZPUl9EQkNMSUNLLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfTtcbn07XG5leHBvcnRzLlR5cGUgPSBleHBvcnRzLkVESVRUWVBFOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLlwiKTtcbnZhciBjb250ZXh0XzEgPSByZXF1aXJlKFwiLi9jb250ZXh0XCIpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoQ29tcG9uZW50LCBzZWxlY3RSb3dFbmFibGVkKSB7XG4gIHZhciByZW5kZXJXaXRoQ2VsbEVkaXQgPSBmdW5jdGlvbiByZW5kZXJXaXRoQ2VsbEVkaXQocHJvcHMsIGNlbGxFZGl0KSB7XG4gICAgdmFyIGtleSA9IHByb3BzLnZhbHVlO1xuICAgIHZhciBlZGl0YWJsZVJvdyA9ICEoY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmxlbmd0aCA+IDAgJiYgY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmluZGV4T2Yoa2V5KSA+IC0xKTtcbiAgICB2YXIgYXR0cnMgPSB7fTtcbiAgICBpZiAoc2VsZWN0Um93RW5hYmxlZCAmJiBjZWxsRWRpdC5tb2RlID09PSBfXzEuREJDTElDS19UT19DRUxMX0VESVQpIHtcbiAgICAgIGF0dHJzLkRFTEFZX0ZPUl9EQkNMSUNLID0gX18xLkRFTEFZX0ZPUl9EQkNMSUNLO1xuICAgIH1cbiAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIGF0dHJzKSwge30sIHtcbiAgICAgIGVkaXRpbmdSb3dJZHg6IGNlbGxFZGl0LnJpZHgsXG4gICAgICBlZGl0aW5nQ29sSWR4OiBjZWxsRWRpdC5jaWR4LFxuICAgICAgaXNFZGl0YWJsZTogZWRpdGFibGVSb3csXG4gICAgICBhdHN0YXJ0OiBjZWxsRWRpdC5hdHN0YXJ0LFxuICAgICAgY2xpY2tUb0VkaXQ6IGNlbGxFZGl0Lm1vZGUgPT09IF9fMS5DTElDS19UT19DRUxMX0VESVQsXG4gICAgICBkYmNsaWNrVG9FZGl0OiBjZWxsRWRpdC5tb2RlID09PSBfXzEuREJDTElDS19UT19DRUxMX0VESVRcbiAgICB9KSk7XG4gIH07XG4gIGZ1bmN0aW9uIHdpdGhDb25zdW1lcihwcm9wcykge1xuICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGNvbnRleHRfMS5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGNlbGxFZGl0KSB7XG4gICAgICByZXR1cm4gcmVuZGVyV2l0aENlbGxFZGl0KHByb3BzLCBjZWxsRWRpdCk7XG4gICAgfSk7XG4gIH1cbiAgd2l0aENvbnN1bWVyLmRpc3BsYXlOYW1lID0gXCJXaXRoQ2VsbEVkaXRpbmdSb3dDb25zdW1lclwiO1xuICByZXR1cm4gd2l0aENvbnN1bWVyO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRWYWx1ZVwiLCBcImRpZE1vdW50XCIsIFwiY2xhc3NOYW1lXCIsIFwib25VcGRhdGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIERhdGVFZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBEYXRlRWRpdG9yKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEYXRlRWRpdG9yKTtcbiAgICByZXR1cm4gX2NhbGxTdXBlcih0aGlzLCBEYXRlRWRpdG9yLCBhcmd1bWVudHMpO1xuICB9XG4gIF9pbmhlcml0cyhEYXRlRWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKERhdGVFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQ7XG4gICAgICB0aGlzLmRhdGUudmFsdWVBc0RhdGUgPSBuZXcgRGF0ZShkZWZhdWx0VmFsdWUpO1xuICAgICAgdGhpcy5kYXRlLmZvY3VzKCk7XG4gICAgICBpZiAoZGlkTW91bnQpIHtcbiAgICAgICAgZGlkTW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMyLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkY2xhc3NOYW0sXG4gICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LWRhdGVcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmRhdGUgPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSwgcmVzdCkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7IC8vIERhdGVFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm9iamVjdFxuLy8gICBdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmNcbi8vIH07XG4vLyBEYXRlRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgZGVmYXVsdFZhbHVlOiAnJyxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRGF0ZUVkaXRvcjsiLG51bGwsIi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIERhdGVFZGl0b3JQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uVXBkYXRlPzogYW55O1xufVxuXG5jbGFzcyBEYXRlRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PERhdGVFZGl0b3JQcm9wcz4ge1xuICBkYXRlOiBhbnk7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlID0gXCJcIiwgZGlkTW91bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5kYXRlLnZhbHVlQXNEYXRlID0gbmV3IERhdGUoZGVmYXVsdFZhbHVlKTtcbiAgICB0aGlzLmRhdGUuZm9jdXMoKTtcbiAgICBpZiAoZGlkTW91bnQpIHtcbiAgICAgIGRpZE1vdW50KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZS52YWx1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBcIlwiLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgb25VcGRhdGUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjcyhjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LWRhdGVcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICByZWY9eyhub2RlKSA9PiAodGhpcy5kYXRlID0gbm9kZSl9XG4gICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuLy8gRGF0ZUVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMub2JqZWN0XG4vLyAgIF0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIERhdGVFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlRWRpdG9yO1xuIiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgVGV4dEVkaXRvclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGF1dG9TZWxlY3RUZXh0PzogYm9vbGVhbjtcbiAgZGlkTW91bnQ/OiAoKSA9PiB2b2lkO1xuICBvblVwZGF0ZTogKHJvdzogb2JqZWN0LCBjb2x1bW46IG9iamVjdCwgdmFsdWU6IGFueSkgPT4gdm9pZDtcbn1cblxuY2xhc3MgVGV4dEVkaXRvciBleHRlbmRzIENvbXBvbmVudDxUZXh0RWRpdG9yUHJvcHM+IHtcbiAgdGV4dDogYW55O1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGRlZmF1bHRWYWx1ZSA9IFwiXCIsIGRpZE1vdW50LCBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMudGV4dC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICBpZiAoYXV0b1NlbGVjdFRleHQpIHRoaXMudGV4dC5zZWxlY3QoKTtcbiAgICBpZiAoZGlkTW91bnQpIGRpZE1vdW50KCk7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0LnZhbHVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFwiXCIsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlLFxuICAgICAgb25VcGRhdGUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjcyhjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHRcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICByZWY9eyhub2RlKSA9PiAodGhpcy50ZXh0ID0gbm9kZSl9XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuLy8gVGV4dEVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMub2JqZWN0XG4vLyAgIF0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm51bWJlclxuLy8gICBdKSxcbi8vICAgYXV0b1NlbGVjdFRleHQ6IFByb3BUeXBlcy5ib29sLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmNcbi8vIH07XG5cbi8vIFRleHRFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6IG51bGwsXG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVkaXRvcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wibm9uRWRpdGFibGVSb3dzXCIsIFwiZXJyb3JNZXNzYWdlXCJdLFxuICBfZXhjbHVkZWQyID0gW1wib3B0aW9uc1wiLCBcInJpZHhcIiwgXCJjaWR4XCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29uc3VtZXIgPSB2b2lkIDA7XG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuLyogZXNsaW50IHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzOiAwICovXG52YXIgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIENlbGxFZGl0Q29udGV4dCA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUNvbnRleHQobnVsbCk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChfLCBkYXRhT3BlcmF0b3IsIGlzUmVtb3RlQ2VsbEVkaXQsIGhhbmRsZUNlbGxDaGFuZ2UpIHtcbiAgdmFyIENlbGxFZGl0UHJvdmlkZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJGRlZmF1bHQkQ29tcCkge1xuICAgIGZ1bmN0aW9uIENlbGxFZGl0UHJvdmlkZXIocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDZWxsRWRpdFByb3ZpZGVyKTtcbiAgICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBDZWxsRWRpdFByb3ZpZGVyLCBbcHJvcHNdKTtcbiAgICAgIF90aGlzLmRvVXBkYXRlID0gX3RoaXMuZG9VcGRhdGUuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5zdGFydEVkaXRpbmcgPSBfdGhpcy5zdGFydEVkaXRpbmcuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5lc2NhcGVFZGl0aW5nID0gX3RoaXMuZXNjYXBlRWRpdGluZy5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmNvbXBsZXRlRWRpdGluZyA9IF90aGlzLmNvbXBsZXRlRWRpdGluZy5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUNlbGxVcGRhdGUgPSBfdGhpcy5oYW5kbGVDZWxsVXBkYXRlLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgIGNpZHg6IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9pbmhlcml0cyhDZWxsRWRpdFByb3ZpZGVyLCBfcmVhY3RfMSRkZWZhdWx0JENvbXApO1xuICAgIHJldHVybiBfY3JlYXRlQ2xhc3MoQ2VsbEVkaXRQcm92aWRlciwgW3tcbiAgICAgIGtleTogXCJoYW5kbGVDZWxsVXBkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2VsbFVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgIHZhciBuZXdWYWx1ZVdpdGhUeXBlID0gZGF0YU9wZXJhdG9yLnR5cGVDb252ZXJ0KGNvbHVtbi50eXBlLCBuZXdWYWx1ZSk7XG4gICAgICAgIHZhciBjZWxsRWRpdCA9IHRoaXMucHJvcHMuY2VsbEVkaXQ7XG4gICAgICAgIHZhciBiZWZvcmVTYXZlQ2VsbCA9IGNlbGxFZGl0Lm9wdGlvbnMuYmVmb3JlU2F2ZUNlbGw7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICAgIHZhciBiZWZvcmVTYXZlQ2VsbERvbmUgPSBmdW5jdGlvbiBiZWZvcmVTYXZlQ2VsbERvbmUoKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBfdGhpczIuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczIuZXNjYXBlRWRpdGluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihiZWZvcmVTYXZlQ2VsbCkpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gYmVmb3JlU2F2ZUNlbGwob2xkVmFsdWUsIG5ld1ZhbHVlV2l0aFR5cGUsIHJvdywgY29sdW1uLCBiZWZvcmVTYXZlQ2VsbERvbmUpO1xuICAgICAgICAgIGlmIChfLmlzT2JqZWN0KHJlc3VsdCkgJiYgcmVzdWx0LmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkb1VwZGF0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRvVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGtleUZpZWxkID0gX3RoaXMkcHJvcHMua2V5RmllbGQsXG4gICAgICAgICAgY2VsbEVkaXQgPSBfdGhpcyRwcm9wcy5jZWxsRWRpdCxcbiAgICAgICAgICBkYXRhID0gX3RoaXMkcHJvcHMuZGF0YTtcbiAgICAgICAgdmFyIGFmdGVyU2F2ZUNlbGwgPSBjZWxsRWRpdC5vcHRpb25zLmFmdGVyU2F2ZUNlbGw7XG4gICAgICAgIHZhciByb3dJZCA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgICBpZiAoaXNSZW1vdGVDZWxsRWRpdCgpKSB7XG4gICAgICAgICAgaGFuZGxlQ2VsbENoYW5nZShyb3dJZCwgY29sdW1uLmRhdGFGaWVsZCwgbmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGFPcGVyYXRvci5lZGl0Q2VsbChkYXRhLCBrZXlGaWVsZCwgcm93SWQsIGNvbHVtbi5kYXRhRmllbGQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGFmdGVyU2F2ZUNlbGwpKSB7XG4gICAgICAgICAgICBhZnRlclNhdmVDZWxsKG9sZFZhbHVlLCBuZXdWYWx1ZSwgcm93LCBjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNvbXBsZXRlRWRpdGluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNvbXBsZXRlRWRpdGluZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBsZXRlRWRpdGluZygpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzdGFydEVkaXRpbmdcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydEVkaXRpbmcocmlkeCwgY2lkeCkge1xuICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgICAgdmFyIGVkaXRpbmcgPSBmdW5jdGlvbiBlZGl0aW5nKCkge1xuICAgICAgICAgIF90aGlzMy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByaWR4OiByaWR4LFxuICAgICAgICAgICAgICBjaWR4OiBjaWR4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc2VsZWN0Um93ID0gdGhpcy5wcm9wcy5zZWxlY3RSb3c7XG4gICAgICAgIGlmICghc2VsZWN0Um93IHx8IHNlbGVjdFJvdy5jbGlja1RvRWRpdCB8fCAhc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QpIHtcbiAgICAgICAgICBlZGl0aW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZXNjYXBlRWRpdGluZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVzY2FwZUVkaXRpbmcoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICAgICAgY2lkeDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRjZWxsRWRpdCA9IHRoaXMucHJvcHMuY2VsbEVkaXQsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkY2VsbEVkaXQkID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQub3B0aW9ucyxcbiAgICAgICAgICBub25FZGl0YWJsZVJvd3MgPSBfdGhpcyRwcm9wcyRjZWxsRWRpdCQubm9uRWRpdGFibGVSb3dzLFxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IF90aGlzJHByb3BzJGNlbGxFZGl0JC5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgb3B0aW9uc1Jlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMkY2VsbEVkaXQkLCBfZXhjbHVkZWQpLFxuICAgICAgICAgIHByb3BSaWR4ID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQucmlkeCxcbiAgICAgICAgICBwcm9wQ2lkeCA9IF90aGlzJHByb3BzJGNlbGxFZGl0LmNpZHgsXG4gICAgICAgICAgY2VsbEVkaXRSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzJGNlbGxFZGl0LCBfZXhjbHVkZWQyKTtcbiAgICAgICAgdmFyIG5ld0NlbGxFZGl0ID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnNSZXN0KSwgY2VsbEVkaXRSZXN0KSwge30sIHtcbiAgICAgICAgICByaWR4OiB0aGlzLnN0YXRlLnJpZHggIT09IG51bGwgPyB0aGlzLnN0YXRlLnJpZHggOiBwcm9wUmlkeCAhPT0gbnVsbCAmJiBwcm9wUmlkeCAhPT0gdm9pZCAwID8gcHJvcFJpZHggOiBudWxsLFxuICAgICAgICAgIGNpZHg6IHRoaXMuc3RhdGUuY2lkeCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUuY2lkeCA6IHByb3BDaWR4ICE9PSBudWxsICYmIHByb3BDaWR4ICE9PSB2b2lkIDAgPyBwcm9wQ2lkeCA6IG51bGwsXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5zdGF0ZS5tZXNzYWdlLFxuICAgICAgICAgIG5vbkVkaXRhYmxlUm93czogXy5pc0RlZmluZWQobm9uRWRpdGFibGVSb3dzKSA/IG5vbkVkaXRhYmxlUm93cygpIDogW10sXG4gICAgICAgICAgYXRzdGFydDogdGhpcy5zdGFydEVkaXRpbmcsXG4gICAgICAgICAgb25Fc2NhcGU6IHRoaXMuZXNjYXBlRWRpdGluZyxcbiAgICAgICAgICBvblVwZGF0ZTogdGhpcy5oYW5kbGVDZWxsVXBkYXRlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChDZWxsRWRpdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogX29iamVjdFNwcmVhZCh7fSwgbmV3Q2VsbEVkaXQpXG4gICAgICAgIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1dLCBbe1xuICAgICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0ICYmIF8uaXNGdW5jdGlvbihpc1JlbW90ZUNlbGxFZGl0KSAmJiBpc1JlbW90ZUNlbGxFZGl0KCkpIHtcbiAgICAgICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0Lm9wdGlvbnMuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBtZXNzYWdlOiBuZXh0UHJvcHMuY2VsbEVkaXQub3B0aW9ucy5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJpZHg6IHByZXZTdGF0ZS5yaWR4LFxuICAgICAgICAgICAgICBjaWR4OiBwcmV2U3RhdGUuY2lkeCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe30sIHByZXZTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XSk7XG4gIH0ocmVhY3RfMVtcImRlZmF1bHRcIl0uQ29tcG9uZW50KTtcbiAgQ2VsbEVkaXRQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gICAgZGF0YTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHNlbGVjdFJvdzogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5vYmplY3QsXG4gICAgb3B0aW9uczogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5zaGFwZSh7XG4gICAgICBtb2RlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm9uZU9mKFtfXzEuQ0xJQ0tfVE9fQ0VMTF9FRElULCBfXzEuREJDTElDS19UT19DRUxMX0VESVRdKS5pc1JlcXVpcmVkLFxuICAgICAgb25FcnJvck1lc3NhZ2VEaXNhcHBlYXI6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYyxcbiAgICAgIGJsdXJUb1NhdmU6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICAgIGJlZm9yZVNhdmVDZWxsOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gICAgICBhZnRlclNhdmVDZWxsOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gICAgICBvblN0YXJ0RWRpdDogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLFxuICAgICAgbm9uRWRpdGFibGVSb3dzOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gICAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ubnVtYmVyLFxuICAgICAgZXJyb3JNZXNzYWdlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmFueVxuICAgIH0pXG4gIH07XG4gIHJldHVybiB7XG4gICAgUHJvdmlkZXI6IENlbGxFZGl0UHJvdmlkZXJcbiAgfTtcbn07XG5leHBvcnRzLkNvbnN1bWVyID0gQ2VsbEVkaXRDb250ZXh0LkNvbnN1bWVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiZGVmYXVsdFZhbHVlXCIsIFwiZGlkTW91bnRcIiwgXCJnZXRPcHRpb25zXCIsIFwiY2xhc3NOYW1lXCIsIFwib25VcGRhdGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIERyb3BEb3duRWRpdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRHJvcERvd25FZGl0b3IocHJvcHMpIHtcbiAgICB2YXIgX3Byb3BzJG9wdGlvbnM7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEcm9wRG93bkVkaXRvcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIERyb3BEb3duRWRpdG9yLCBbcHJvcHNdKTtcbiAgICB2YXIgb3B0aW9ucyA9IChfcHJvcHMkb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMpICE9PSBudWxsICYmIF9wcm9wcyRvcHRpb25zICE9PSB2b2lkIDAgPyBfcHJvcHMkb3B0aW9ucyA6IFtdO1xuICAgIGlmIChwcm9wcy5nZXRPcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gcHJvcHMuZ2V0T3B0aW9ucyhfdGhpcy5zZXRPcHRpb25zLmJpbmQoX3RoaXMpLCB7XG4gICAgICAgIHJvdzogcHJvcHMucm93LFxuICAgICAgICBjb2x1bW46IHByb3BzLmNvbHVtblxuICAgICAgfSkgfHwgW107XG4gICAgfVxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhEcm9wRG93bkVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhEcm9wRG93bkVkaXRvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzJGRlZmF1bHRWYSxcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wcy5kaWRNb3VudDtcbiAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgdGhpcy5zZWxlY3QuZm9jdXMoKTtcbiAgICAgIGlmIChkaWRNb3VudCkge1xuICAgICAgICBkaWRNb3VudCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdC52YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRkZWZhdWx0ViA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMiRkZWZhdWx0ViA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRkZWZhdWx0VixcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wczIuZGlkTW91bnQsXG4gICAgICAgIGdldE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuZ2V0T3B0aW9ucyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGNsYXNzTmFtLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1zZWxlY3RcIik7XG4gICAgICB2YXIgYXR0ciA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3NcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhdHRyKSwge30sIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuc2VsZWN0ID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWVcbiAgICAgIH0pLCB0aGlzLnN0YXRlLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlO1xuICAgICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiB2YWx1ZSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSwgbGFiZWwpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7IC8vIERyb3BEb3duRWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgcm93OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm51bWJlclxuLy8gICBdKSxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgb3B0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbi8vICAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbi8vICAgICB9KSlcbi8vICAgXSksXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbi8vICAgZ2V0T3B0aW9uczogUHJvcFR5cGVzLmZ1bmNcbi8vIH07XG4vLyBEcm9wRG93bkVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogJycsXG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIHN0eWxlOiB7fSxcbi8vICAgb3B0aW9uczogW10sXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyAgIGdldE9wdGlvbnM6IHVuZGVmaW5lZFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRHJvcERvd25FZGl0b3I7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQsIENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgQ2hlY2tCb3hFZGl0b3JQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgb25DaGFuZ2U/OiAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIGRpZE1vdW50PzogKCkgPT4gdm9pZDtcbiAgb25VcGRhdGU/OiBhbnk7XG59XG5cbmludGVyZmFjZSBDaGVja0JveEVkaXRvclN0YXRlIHtcbiAgY2hlY2tlZDogYm9vbGVhbjtcbn1cblxuY2xhc3MgQ2hlY2tCb3hFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQ8XG4gIENoZWNrQm94RWRpdG9yUHJvcHMsXG4gIENoZWNrQm94RWRpdG9yU3RhdGVcbj4ge1xuICBjaGVja2JveDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDaGVja0JveEVkaXRvclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjaGVja2VkOlxuICAgICAgICAocHJvcHMuZGVmYXVsdFZhbHVlID8/IGZhbHNlKS50b1N0cmluZygpID09PVxuICAgICAgICAocHJvcHMudmFsdWUgPz8gXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpWzBdLFxuICAgIH07XG4gICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBkaWRNb3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLmNoZWNrYm94LmZvY3VzKCk7XG4gICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICB9XG5cbiAgZ2V0VmFsdWUoKSB7XG4gICAgY29uc3QgW3Bvc2l0aXZlLCBuZWdhdGl2ZV0gPSAodGhpcy5wcm9wcy52YWx1ZSA/PyBcIm9uOm9mZlwiKS5zcGxpdChcIjpcIik7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tib3guY2hlY2tlZCA/IHBvc2l0aXZlIDogbmVnYXRpdmU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UoZTogYW55KSB7XG4gICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHRoaXMucHJvcHMub25DaGFuZ2UoZSk7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGU7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBjaGVja2VkOiB0YXJnZXQuY2hlY2tlZCB9KSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gZmFsc2UsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKFwiZWRpdG9yIGVkaXQtY2hzZWNrYm94IGNoZWNrYm94XCIsIGNsYXNzTmFtZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICByZWY9eyhub2RlKSA9PiAodGhpcy5jaGVja2JveCA9IG5vZGUpfVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzc05hbWU9e2VkaXRvckNsYXNzfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgY2hlY2tlZD17dGhpcy5zdGF0ZS5jaGVja2VkfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuLy8gQ2hlY2tCb3hFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbi8vICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbi8vICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmMsXG4vLyB9O1xuXG4vLyBDaGVja0JveEVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgdmFsdWU6IFwib246b2ZmXCIsXG4vLyAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4vLyAgIG9uQ2hhbmdlOiB1bmRlZmluZWQsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBDaGVja0JveEVkaXRvcjtcbiIsIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODU2KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiQ29tcG9uZW50Iiwic2VsZWN0Um93RW5hYmxlZCIsIndpdGhDb25zdW1lciIsInByb3BzIiwiQ29uc3VtZXIiLCJjZWxsRWRpdCIsImtleSIsInZhbHVlIiwiZWRpdGFibGVSb3ciLCJub25FZGl0YWJsZVJvd3MiLCJsZW5ndGgiLCJpbmRleE9mIiwiYXR0cnMiLCJtb2RlIiwiREJDTElDS19UT19DRUxMX0VESVQiLCJERUxBWV9GT1JfREJDTElDSyIsImVkaXRpbmdSb3dJZHgiLCJyaWR4IiwiZWRpdGluZ0NvbElkeCIsImNpZHgiLCJpc0VkaXRhYmxlIiwiYXRzdGFydCIsImNsaWNrVG9FZGl0IiwiQ0xJQ0tfVE9fQ0VMTF9FRElUIiwiZGJjbGlja1RvRWRpdCIsInJlbmRlcldpdGhDZWxsRWRpdCIsImRpc3BsYXlOYW1lIiwiX19pbXBvcnREZWZhdWx0IiwibW9kIiwiX19lc01vZHVsZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwicHJvcF90eXBlc18xIiwicmVhY3RfMSIsIkVkaXRvckluZGljYXRvciIsIl9yZWYiLCJpbnZhbGlkTWVzc2FnZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJyb2xlIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX2V4Y2x1ZGVkIiwib3duS2V5cyIsImUiLCJyIiwidCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX2RlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiaSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl90b1ByaW1pdGl2ZSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiQm9vbGVhbiIsInZhbHVlT2YiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiYmluZCIsIl9fcHJvdG9fXyIsIl9zZXRQcm90b3R5cGVPZiIsIl9vd25LZXlzIiwiX19jcmVhdGVCaW5kaW5nIiwiY3JlYXRlIiwibSIsImsiLCJrMiIsInVuZGVmaW5lZCIsImRlc2MiLCJnZXQiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJ2IiwiX19pbXBvcnRTdGFyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImFyIiwiaGFzT3duUHJvcGVydHkiLCJyZXN1bHQiLCJjbGFzc25hbWVzXzEiLCJUZXh0RWRpdG9yIiwiX3JlYWN0XzEkQ29tcG9uZW50IiwiYSIsIm4iLCJfY2xhc3NDYWxsQ2hlY2siLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2luaGVyaXRzIiwiX3RoaXMkcHJvcHMiLCJfdGhpcyRwcm9wcyRkZWZhdWx0VmEiLCJkZWZhdWx0VmFsdWUiLCJkaWRNb3VudCIsIl90aGlzJHByb3BzJGF1dG9TZWxlYyIsImF1dG9TZWxlY3RUZXh0IiwidGV4dCIsImZvY3VzIiwic2VsZWN0IiwiX3RoaXMiLCJfdGhpcyRwcm9wczIiLCJfdGhpcyRwcm9wczIkY2xhc3NOYW0iLCJyZXN0Iiwib25VcGRhdGUiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiZWRpdG9yQ2xhc3MiLCJmb3JFYWNoIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfb2JqZWN0U3ByZWFkIiwicmVmIiwibm9kZSIsInR5cGUiLCJEcm9wRG93bkVkaXRvciIsInN1cGVyIiwib3B0aW9ucyIsImdldE9wdGlvbnMiLCJzZXRPcHRpb25zIiwicm93IiwiY29sdW1uIiwic3RhdGUiLCJjb21wb25lbnREaWRNb3VudCIsInNldFN0YXRlIiwiZ2V0VmFsdWUiLCJyZW5kZXIiLCJhdHRyIiwibWFwIiwibGFiZWwiLCJUZXh0QXJlYUVkaXRvciIsImhhbmRsZUtleURvd24iLCJrZXlDb2RlIiwic2hpZnRLZXkiLCJvbktleURvd24iLCJfdGhpczIiLCJfIiwib25TdGFydEVkaXQiLCJpbmRpY2F0b3JUaW1lciIsImNsZWFyVGltZXIiLCJoYW5kbGVCbHVyIiwiaGFuZGxlQ2xpY2siLCJiZWZvcmVDb21wbGV0ZSIsImFzeW5jYmVmb3JlQ29tcGV0ZSIsImRpc3BsYXlFcnJvck1lc3NhZ2UiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm1lc3NhZ2UiLCJpc0RlZmluZWQiLCJjcmVhdGVUaW1lciIsImNsZWFyVGltZW91dCIsInRpbWVUb0Nsb3NlTWVzc2FnZSIsIm9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyIiwic2xlZXAiLCJpc0Z1bmN0aW9uIiwibmV3VmFsdWUiLCJ2YWxpZCIsInZhbGlkYXRvciIsInZhbGlkYXRlRm9ybSIsImlzT2JqZWN0IiwiYXN5bmMiLCJvbkVzY2FwZSIsImJsdXJUb1NhdmUiLCJlZGl0b3IiLCJ0YXJnZXQiLCJ0YWdOYW1lIiwic3RvcFByb3BhZ2F0aW9uIiwic3R5bGUiLCJyb3dJbmRleCIsImNvbHVtbkluZGV4IiwiZGF0YUZpZWxkIiwiaGFzRXJyb3IiLCJjdXN0b21FZGl0b3JDbGFzcyIsImVkaXRvckNsYXNzZXMiLCJlZGl0b3JTdHlsZSIsImVkaXRvclByb3BzIiwiYW5pbWF0ZWQiLCJzaGFrZSIsIm9uQmx1ciIsImlzRGVmYXVsdEVkaXRvckRlZmluZWQiLCJlZGl0b3JSZW5kZXJlciIsIkVESVRUWVBFIiwiU0VMRUNUIiwiVEVYVEFSRUEiLCJDSEVDS0JPWCIsIkRBVEUiLCJvbkNsaWNrIiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsIm51bWJlciIsImZ1bmMiLCJib29sIiwiZGVmYXVsdFByb3BzIiwiVElNRV9UT19DTE9TRV9NRVNTQUdFIiwiX18xIiwiY2hlY2tib3hfZWRpdG9yXzEiLCJkYXRlX2VkaXRvcl8xIiwiZHJvcGRvd25fZWRpdG9yXzEiLCJlZGl0b3JfaW5kaWNhdG9yXzEiLCJ0ZXh0X2VkaXRvcl8xIiwidGV4dGFyZWFfZWRpdG9yXzEiLCJfYSIsIkVkaXRpbmdDZWxsIiwiX3RoaXMzIiwiX3RoaXMzJHByb3BzIiwiX3RoaXMkcHJvcHMzIiwiX2NvbHVtbiRlZGl0b3IiLCJfY29sdW1uJGVkaXRvcjIiLCJfY29sdW1uJGVkaXRvcjMiLCJfY29sdW1uJGVkaXRvcjQiLCJfdGhpczQiLCJfdGhpcyRwcm9wczQiLCJjb250ZXh0XzEiLCJlZGl0aW5nX2NlbGxfMSIsImNvbnRlbnQiLCJlZGl0Q2VsbHN0eWxlIiwiZWRpdENlbGxTdHlsZSIsImVkaXRDZWxsY2xhc3NlcyIsImVkaXRDZWxsQ2xhc3NlcyIsInJlbmRlcldpdGhFZGl0aW5nQ2VsbCIsIkNlbGxFZGl0Q29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJkYXRhT3BlcmF0b3IiLCJpc1JlbW90ZUNlbGxFZGl0IiwiaGFuZGxlQ2VsbENoYW5nZSIsIkNlbGxFZGl0UHJvdmlkZXIiLCJkb1VwZGF0ZSIsInN0YXJ0RWRpdGluZyIsImVzY2FwZUVkaXRpbmciLCJjb21wbGV0ZUVkaXRpbmciLCJoYW5kbGVDZWxsVXBkYXRlIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwicHJldlN0YXRlIiwiZXJyb3JNZXNzYWdlIiwibmV3VmFsdWVXaXRoVHlwZSIsInR5cGVDb252ZXJ0IiwiYmVmb3JlU2F2ZUNlbGwiLCJvbGRWYWx1ZSIsImJlZm9yZVNhdmVDZWxsRG9uZSIsImtleUZpZWxkIiwiZGF0YSIsImFmdGVyU2F2ZUNlbGwiLCJyb3dJZCIsImVkaXRDZWxsIiwiZWRpdGluZyIsInNlbGVjdFJvdyIsImNsaWNrVG9TZWxlY3QiLCJvcHRpb25zUmVzdCIsInByb3BSaWR4IiwicHJvcENpZHgiLCJjZWxsRWRpdFJlc3QiLCJuZXdDZWxsRWRpdCIsIlByb3ZpZGVyIiwiY2hpbGRyZW4iLCJhcnJheSIsInNoYXBlIiwib25lT2YiLCJhbnkiLCJfc2xpY2VkVG9BcnJheSIsIkFycmF5IiwiaXNBcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsImwiLCJ1IiwiZiIsIm5leHQiLCJkb25lIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIkNoZWNrQm94RWRpdG9yIiwiX3Byb3BzJGRlZmF1bHRWYWx1ZSIsIl9wcm9wcyR2YWx1ZSIsImNoZWNrZWQiLCJzcGxpdCIsImhhbmRsZUNoYW5nZSIsImNoZWNrYm94IiwiX3RoaXMkcHJvcHMkdmFsdWUiLCJfc3BsaXQyIiwicG9zaXRpdmUiLCJuZWdhdGl2ZSIsIm9uQ2hhbmdlIiwiX3RoaXMkcHJvcHMkY2xhc3NOYW1lIiwiVHlwZSIsImVkaXRpbmdfY2VsbF9jb25zdW1lcl8xIiwicm93X2NvbnN1bWVyXzEiLCJURVhUIiwiY3JlYXRlRWRpdGluZ0NlbGwiLCJ3aXRoUm93TGV2ZWxDZWxsRWRpdCIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwiZW1wdHlGdW5jdGlvbiIsImVtcHR5RnVuY3Rpb25XaXRoUmVzZXQiLCJyZXNldFdhcm5pbmdDYWNoZSIsInNoaW0iLCJwcm9wTmFtZSIsImNvbXBvbmVudE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImVyciIsIkVycm9yIiwiZ2V0U2hpbSIsIlJlYWN0UHJvcFR5cGVzIiwiYmlnaW50Iiwic3ltYm9sIiwiYXJyYXlPZiIsImVsZW1lbnQiLCJlbGVtZW50VHlwZSIsImluc3RhbmNlT2YiLCJvYmplY3RPZiIsIm9uZU9mVHlwZSIsImV4YWN0IiwiY2hlY2tQcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJEYXRlRWRpdG9yIiwiZGF0ZSIsInZhbHVlQXNEYXRlIiwiRGF0ZSIsIl9leGNsdWRlZDIiLCJfcmVhY3RfMSRkZWZhdWx0JENvbXAiLCJfdGhpcyRwcm9wcyRjZWxsRWRpdCIsIl90aGlzJHByb3BzJGNlbGxFZGl0JCIsIl9wcm9wcyRvcHRpb25zIiwiX3RoaXMkcHJvcHMyJGRlZmF1bHRWIiwiaGFzT3duIiwiY2xhc3NOYW1lcyIsImNsYXNzZXMiLCJhcmciLCJhcHBlbmRDbGFzcyIsInBhcnNlVmFsdWUiLCJpbmNsdWRlcyIsIm5ld0NsYXNzIiwiZGVmYXVsdCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgEditor=t(require("react")):e.ReactBootstrapTableNgEditor=t(e.React)}(self,e=>{return t={33(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(564),u=r(511);t.default=(e,t)=>{function r(r){return o.default.createElement(u.Consumer,null,n=>((r,n)=>{const u=r.value,a=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(u)>-1),l={};return t&&n.mode===i.DBCLICK_TO_CELL_EDIT&&(l.DELAY_FOR_DBCLICK=i.DELAY_FOR_DBCLICK),o.default.createElement(e,{...r,...l,editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:a,atstart:n.atstart,clickToEdit:n.mode===i.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===i.DBCLICK_TO_CELL_EDIT})})(r,n))}return r.displayName="WithCellEditingRowConsumer",r}},88(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(556)),i=n(r(442)),u=function(e){var t=e.invalidMessage;return i.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},i.default.createElement("strong",null,t))};u.propTypes={invalidMessage:o.default.string},t.default=u},98(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","autoSelectText","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=h(r(442)),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,a=(t.autoSelectText,t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),l=(0,m.default)(n,"form-control editor edit-text");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){e.text=t},type:"text",className:l},a))}}],n&&a(r.prototype,n),l&&a(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,l}(O.Component);t.default=g},121(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e);let t=e.options??[];e.getOptions&&(t=e.getOptions(this.setOptions.bind(this),{row:e.row,column:e.column})||[]),this.state={options:t}}componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.select.value=e,this.select.focus(),t&&t()}setOptions(e){this.setState({options:e})}getValue(){return this.select.value}render(){const{defaultValue:e="",didMount:t,getOptions:r,className:n="",onUpdate:o,...i}=this.props,u={...i,className:(0,l.default)(n,"form-control editor edit-select")};return c.default.createElement("select",{...u,ref:e=>{this.select=e},defaultValue:e},this.state.options.map(({label:e,value:t})=>c.default.createElement("option",{key:t,value:t},e)))}}t.default=s},137(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","autoSelectText"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=c(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},h=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return h(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=v(r(442)),_=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=s(this,t,[e])).handleKeyDown=r.handleKeyDown.bind(r),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?null:t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"handleKeyDown",value:function(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,i=(t.autoSelectText,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),a=(0,O.default)(n,"form-control editor edit-textarea");return g.default.createElement("textarea",u(u({ref:function(t){e.text=t},className:a},i),{},{onKeyDown:this.handleKeyDown}))}}],n&&l(r.prototype,n),i&&l(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(g.Component);t.default=_},167(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(556)),i=n(r(442)),u=({invalidMessage:e})=>i.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},i.default.createElement("strong",null,e));u.propTypes={invalidMessage:o.default.string},t.default=u},205(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=a(r(556)),s=u(r(442)),f=r(564),d=a(r(937)),p=a(r(868)),b=a(r(121)),y=a(r(167)),h=a(r(871)),v=a(r(462));t.default=(e,t)=>{var r;return(r=class extends s.Component{constructor(e){super(e),this.indicatorTimer=null,this.clearTimer=this.clearTimer.bind(this),this.handleBlur=this.handleBlur.bind(this),this.handleClick=this.handleClick.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.beforeComplete=this.beforeComplete.bind(this),this.asyncbeforeCompete=this.asyncbeforeCompete.bind(this),this.displayErrorMessage=this.displayErrorMessage.bind(this),this.state={invalidMessage:null}}componentWillUnmount(){this.clearTimer()}componentDidUpdate({message:t}){e.isDefined(t)&&(this.createTimer(),this.setState(()=>({invalidMessage:t})))}clearTimer(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}createTimer(){this.clearTimer();const{timeToCloseMessage:t,onErrorMessageDisappear:r}=this.props;this.indicatorTimer=e.sleep(()=>{this.setState(()=>({invalidMessage:null})),e.isFunction(r)&&r()},t)}displayErrorMessage(e){this.setState(()=>({invalidMessage:e})),this.createTimer()}asyncbeforeCompete(e){return(t={valid:!0})=>{const{valid:r,message:n}=t,{onUpdate:o,row:i,column:u}=this.props;r?o(i,u,e):this.displayErrorMessage(n)}}beforeComplete(t){const{onUpdate:r,row:n,column:o}=this.props;if(e.isFunction(o.validator)){const r=o.validator(t,n,o,this.asyncbeforeCompete(t));if(e.isObject(r)){if(r.async)return;if(!r.valid)return void this.displayErrorMessage(r.message)}}r(n,o,t)}handleBlur(){const{onEscape:e,blurToSave:t}=this.props;t?this.beforeComplete(this.editor.getValue()):e()}handleKeyDown(e){const{onEscape:t}=this.props;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}handleClick(e){"TD"!==e.target.tagName&&e.stopPropagation()}render(){let r;const{row:n,column:o,className:i,style:u,rowIndex:a,columnIndex:c,autoSelectText:m}=this.props,{dataField:O}=o,g=e.get(n,O),_=e.isDefined(this.state.invalidMessage);let j=o.editorClasses||"";e.isFunction(o.editorClasses)&&(j=o.editorClasses(g,n,a,c));let E=o.editorStyle||{};e.isFunction(o.editorStyle)&&(E=o.editorStyle(g,n,a,c));let w={ref:e=>this.editor=e,defaultValue:g,style:E,className:(0,l.default)({animated:_,shake:_},j),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:()=>{},onUpdate:e=>{}};t&&(w.didMount=()=>t(n,o,a,c));const P=e.isObject(o.editor);return P?w={...w,...o.editor}:e.isFunction(o.editorRenderer)&&(w={...w,onUpdate:this.beforeComplete}),r=e.isFunction(o.editorRenderer)?o.editorRenderer(w,g,n,o,a,c):P&&o.editor?.type===f.EDITTYPE.SELECT?s.default.createElement(b.default,{...w,row:n,column:o}):P&&o.editor?.type===f.EDITTYPE.TEXTAREA?s.default.createElement(v.default,{...w,autoSelectText:m}):P&&o.editor?.type===f.EDITTYPE.CHECKBOX?s.default.createElement(d.default,{...w}):P&&o.editor?.type===f.EDITTYPE.DATE?s.default.createElement(p.default,{...w}):s.default.createElement(h.default,{...w,autoSelectText:m}),s.default.createElement("td",{className:(0,l.default)("react-bootstrap-table-editing-cell",i),style:u,onClick:this.handleClick},r,_?s.default.createElement(y.default,{invalidMessage:this.state.invalidMessage}):null)}}).propTypes={row:c.default.object.isRequired,rowIndex:c.default.number.isRequired,column:c.default.object.isRequired,columnIndex:c.default.number.isRequired,onUpdate:c.default.func.isRequired,onEscape:c.default.func.isRequired,timeToCloseMessage:c.default.number,autoSelectText:c.default.bool,className:c.default.string,style:c.default.object},r.defaultProps={timeToCloseMessage:f.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}},r}},282(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=v(r(556)),g=h(r(442)),_=r(564),j=v(r(512)),E=v(r(855)),w=v(r(900)),P=v(r(88)),C=v(r(98)),T=v(r(137));t.default=function(e,t){var r;return r=function(r){function n(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(t=c(this,n,[e])).indicatorTimer=null,t.clearTimer=t.clearTimer.bind(t),t.handleBlur=t.handleBlur.bind(t),t.handleClick=t.handleClick.bind(t),t.handleKeyDown=t.handleKeyDown.bind(t),t.beforeComplete=t.beforeComplete.bind(t),t.asyncbeforeCompete=t.asyncbeforeCompete.bind(t),t.displayErrorMessage=t.displayErrorMessage.bind(t),t.state={invalidMessage:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(n,r),o=n,u=[{key:"componentWillUnmount",value:function(){this.clearTimer()}},{key:"componentDidUpdate",value:function(t){var r=t.message;e.isDefined(r)&&(this.createTimer(),this.setState(function(){return{invalidMessage:r}}))}},{key:"clearTimer",value:function(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}},{key:"createTimer",value:function(){var t=this;this.clearTimer();var r=this.props,n=r.timeToCloseMessage,o=r.onErrorMessageDisappear;this.indicatorTimer=e.sleep(function(){t.setState(function(){return{invalidMessage:null}}),e.isFunction(o)&&o()},n)}},{key:"displayErrorMessage",value:function(e){this.setState(function(){return{invalidMessage:e}}),this.createTimer()}},{key:"asyncbeforeCompete",value:function(e){var t=this;return function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{valid:!0},n=r.valid,o=r.message,i=t.props,u=i.onUpdate,a=i.row,l=i.column;n?u(a,l,e):t.displayErrorMessage(o)}}},{key:"beforeComplete",value:function(t){var r=this.props,n=r.onUpdate,o=r.row,i=r.column;if(e.isFunction(i.validator)){var u=i.validator(t,o,i,this.asyncbeforeCompete(t));if(e.isObject(u)){if(u.async)return;if(!u.valid)return void this.displayErrorMessage(u.message)}}n(o,i,t)}},{key:"handleBlur",value:function(){var e=this.props,t=e.onEscape;e.blurToSave?this.beforeComplete(this.editor.getValue()):t()}},{key:"handleKeyDown",value:function(e){var t=this.props.onEscape;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}},{key:"handleClick",value:function(e){"TD"!==e.target.tagName&&e.stopPropagation()}},{key:"render",value:function(){var r,n,o,u,a,l=this,c=this.props,s=c.row,f=c.column,d=c.className,p=c.style,b=c.rowIndex,y=c.columnIndex,h=c.autoSelectText,v=f.dataField,O=e.get(s,v),S=e.isDefined(this.state.invalidMessage),D=f.editorClasses||"";e.isFunction(f.editorClasses)&&(D=f.editorClasses(O,s,b,y));var x=f.editorStyle||{};e.isFunction(f.editorStyle)&&(x=f.editorStyle(O,s,b,y));var M={ref:function(e){return l.editor=e},defaultValue:O,style:x,className:(0,m.default)({animated:S,shake:S},D),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:function(){},onUpdate:function(e){}};t&&(M.didMount=function(){return t(s,f,b,y)});var k=e.isObject(f.editor);return k?M=i(i({},M),f.editor):e.isFunction(f.editorRenderer)&&(M=i(i({},M),{},{onUpdate:this.beforeComplete})),a=e.isFunction(f.editorRenderer)?f.editorRenderer(M,O,s,f,b,y):k&&(null===(r=f.editor)||void 0===r?void 0:r.type)===_.EDITTYPE.SELECT?g.default.createElement(w.default,i(i({},M),{},{row:s,column:f})):k&&(null===(n=f.editor)||void 0===n?void 0:n.type)===_.EDITTYPE.TEXTAREA?g.default.createElement(T.default,i(i({},M),{},{autoSelectText:h})):k&&(null===(o=f.editor)||void 0===o?void 0:o.type)===_.EDITTYPE.CHECKBOX?g.default.createElement(j.default,i({},M)):k&&(null===(u=f.editor)||void 0===u?void 0:u.type)===_.EDITTYPE.DATE?g.default.createElement(E.default,i({},M)):g.default.createElement(C.default,i(i({},M),{},{autoSelectText:h})),g.default.createElement("td",{className:(0,m.default)("react-bootstrap-table-editing-cell",d),style:p,onClick:this.handleClick},a,S?g.default.createElement(P.default,{invalidMessage:this.state.invalidMessage}):null)}}],u&&a(o.prototype,u),l&&a(o,l),Object.defineProperty(o,"prototype",{writable:!1}),o;var o,u,l}(g.Component),r.propTypes={row:O.default.object.isRequired,rowIndex:O.default.number.isRequired,column:O.default.object.isRequired,columnIndex:O.default.number.isRequired,onUpdate:O.default.func.isRequired,onEscape:O.default.func.isRequired,timeToCloseMessage:O.default.number,autoSelectText:O.default.bool,className:O.default.string,style:O.default.object},r.defaultProps={timeToCloseMessage:_.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}},r}},351(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(898),s=a(r(282));t.default=function(e,t){var r=(0,s.default)(e,t);return function(t){return l.default.createElement(c.Consumer,null,function(n){return function(t,n){var o=e.get(t.row,t.column.dataField),u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(o,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(o,t.row,t.rowIndex,t.columnIndex)),l.default.createElement(r,i(i({},t),{},{className:a,style:u},n))}(t,n)})}}},404(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(511),u=n(r(205));t.default=(e,t)=>{const r=(0,u.default)(e,t);return t=>o.default.createElement(i.Consumer,null,n=>((t,n)=>{const i=e.get(t.row,t.column.dataField);let u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(i,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(i,t.row,t.rowIndex,t.columnIndex)),o.default.createElement(r,{...t,className:a,style:u,...n})})(t,n))}},442(t){"use strict";t.exports=e},462(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){const{defaultValue:e=null,didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}handleKeyDown(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-textarea");return c.default.createElement("textarea",{ref:e=>{this.text=e},className:i,...o,onKeyDown:this.handleKeyDown})}}t.default=s},511(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;const o=n(r(556)),i=n(r(442)),u=r(564),a=i.default.createContext(null);t.default=(e,t,r,n)=>{class l extends i.default.Component{constructor(e){super(e),this.doUpdate=this.doUpdate.bind(this),this.startEditing=this.startEditing.bind(this),this.escapeEditing=this.escapeEditing.bind(this),this.completeEditing=this.completeEditing.bind(this),this.handleCellUpdate=this.handleCellUpdate.bind(this),this.state={ridx:null,cidx:null,message:null}}static getDerivedStateFromProps(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:{...n}}handleCellUpdate(r,n,o){const i=t.typeConvert(n.type,o),{cellEdit:u}=this.props,{beforeSaveCell:a}=u.options,l=e.get(r,n.dataField),c=(e=!0)=>{e?this.doUpdate(r,n,i):this.escapeEditing()};if(e.isFunction(a)){const t=a(l,i,r,n,c);if(e.isObject(t)&&t.async)return}this.doUpdate(r,n,i)}doUpdate(o,i,u){const{keyField:a,cellEdit:l,data:c}=this.props,{afterSaveCell:s}=l.options,f=e.get(o,a),d=e.get(o,i.dataField);r()?n(f,i.dataField,u):(t.editCell(c,a,f,i.dataField,u),e.isFunction(s)&&s(d,u,o,i),this.completeEditing())}completeEditing(){this.setState(()=>({ridx:null,cidx:null,message:null}))}startEditing(e,t){const r=()=>{this.setState(()=>({ridx:e,cidx:t}))},{selectRow:n}=this.props;n&&!n.clickToEdit&&n.clickToSelect||r()}escapeEditing(){this.setState(()=>({ridx:null,cidx:null}))}render(){const{cellEdit:{options:{nonEditableRows:t,errorMessage:r,...n},ridx:o,cidx:u,...l}}=this.props,c={...n,...l,ridx:null!==this.state.ridx?this.state.ridx:o??null,cidx:null!==this.state.cidx?this.state.cidx:u??null,message:this.state.message,nonEditableRows:e.isDefined(t)?t():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate};return i.default.createElement(a.Provider,{value:{...c}},this.props.children)}}return l.propTypes={data:o.default.array.isRequired,selectRow:o.default.object,options:o.default.shape({mode:o.default.oneOf([u.CLICK_TO_CELL_EDIT,u.DBCLICK_TO_CELL_EDIT]).isRequired,onErrorMessageDisappear:o.default.func,blurToSave:o.default.bool,beforeSaveCell:o.default.func,afterSaveCell:o.default.func,onStartEdit:o.default.func,nonEditableRows:o.default.func,timeToCloseMessage:o.default.number,errorMessage:o.default.any})},{Provider:l}},t.Consumer=a.Consumer},512(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,u,a=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(a.push(n.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(u=r.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e,t)||function(){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 c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var h,v=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},m=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},O=(h=function(e){return h=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},h(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=h(e),n=0;n<r.length;n++)"default"!==r[n]&&v(t,e,r[n]);return m(t,e),t}),g=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var _=g(r(942)),j=O(r(442)),E=function(e){function t(e){var r,n,o;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(o=d(this,t,[e])).state={checked:(null!==(r=e.defaultValue)&&void 0!==r&&r).toString()===(null!==(n=e.value)&&void 0!==n?n:"on:off").split(":")[0]},o.handleChange=o.handleChange.bind(o),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props.didMount;this.checkbox.focus(),e&&e()}},{key:"getValue",value:function(){var e,t=l((null!==(e=this.props.value)&&void 0!==e?e:"on:off").split(":"),2),r=t[0],n=t[1];return this.checkbox.checked?r:n}},{key:"handleChange",value:function(e){this.props.onChange&&this.props.onChange(e);var t=e.target;this.setState(function(){return{checked:t.checked}})}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,i=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),a=(0,_.default)("editor edit-chseckbox checkbox",n);return j.default.createElement("input",u(u({ref:function(t){e.checkbox=t},type:"checkbox",className:a},i),{},{checked:this.state.checked,onChange:this.handleChange}))}}],n&&s(r.prototype,n),i&&s(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(j.Component);t.default=E},556(e,t,r){e.exports=r(694)()},564(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(898)),i=n(r(351)),u=n(r(810));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},694(e,t,r){"use strict";var n=r(925);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,i,u){if(u!==n){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return r.PropTypes=r,r}},810(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(564),s=r(898);t.default=function(e,t){function r(r){return l.default.createElement(s.Consumer,null,function(n){return function(r,n){var o=r.value,u=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(o)>-1),a={};return t&&n.mode===c.DBCLICK_TO_CELL_EDIT&&(a.DELAY_FOR_DBCLICK=c.DELAY_FOR_DBCLICK),l.default.createElement(e,i(i(i({},r),a),{},{editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:u,atstart:n.atstart,clickToEdit:n.mode===c.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===c.DBCLICK_TO_CELL_EDIT}))}(r,n)})}return r.displayName="WithCellEditingRowConsumer",r}},855(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=h(r(442)),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.date.valueAsDate=new Date(r),this.date.focus(),n&&n()}},{key:"getValue",value:function(){return this.date.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,a=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),l=(0,m.default)(n,"form-control editor edit-date");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){e.date=t},type:"date",className:l},a))}}],n&&a(r.prototype,n),l&&a(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,l}(O.Component);t.default=g},856(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(511)),i=n(r(404)),u=n(r(33));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},868(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.date.valueAsDate=new Date(e),this.date.focus(),t&&t()}getValue(){return this.date.value}render(){const{defaultValue:e="",didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-date");return c.default.createElement("input",{ref:e=>{this.date=e},type:"date",className:i,...o})}}t.default=s},871(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{componentDidMount(){const{defaultValue:e="",didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,onUpdate:o,...i}=this.props,u=(0,l.default)(r,"form-control editor edit-text");return c.default.createElement("input",{ref:e=>{this.text=e},type:"text",className:u,...i})}}t.default=s},898(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["nonEditableRows","errorMessage"],i=["options","ridx","cidx"];function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?u(Object(r),!0).forEach(function(t){l(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function l(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var h=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;var v=h(r(556)),m=h(r(442)),O=r(564),g=m.default.createContext(null);t.default=function(e,t,r,n){var u=function(u){function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),(t=d(this,l,[e])).doUpdate=t.doUpdate.bind(t),t.startEditing=t.startEditing.bind(t),t.escapeEditing=t.escapeEditing.bind(t),t.completeEditing=t.completeEditing.bind(t),t.handleCellUpdate=t.handleCellUpdate.bind(t),t.state={ridx:null,cidx:null,message:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(l,u),f=l,p=[{key:"handleCellUpdate",value:function(r,n,o){var i=this,u=t.typeConvert(n.type,o),a=this.props.cellEdit.options.beforeSaveCell,l=e.get(r,n.dataField);if(e.isFunction(a)){var c=a(l,u,r,n,function(){arguments.length>0&&void 0!==arguments[0]&&!arguments[0]?i.escapeEditing():i.doUpdate(r,n,u)});if(e.isObject(c)&&c.async)return}this.doUpdate(r,n,u)}},{key:"doUpdate",value:function(o,i,u){var a=this.props,l=a.keyField,c=a.cellEdit,s=a.data,f=c.options.afterSaveCell,d=e.get(o,l),p=e.get(o,i.dataField);r()?n(d,i.dataField,u):(t.editCell(s,l,d,i.dataField,u),e.isFunction(f)&&f(p,u,o,i),this.completeEditing())}},{key:"completeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null,message:null}})}},{key:"startEditing",value:function(e,t){var r=this,n=this.props.selectRow;n&&!n.clickToEdit&&n.clickToSelect||r.setState(function(){return{ridx:e,cidx:t}})}},{key:"escapeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null}})}},{key:"render",value:function(){var t=this.props.cellEdit,r=t.options,n=r.nonEditableRows,u=(r.errorMessage,c(r,o)),l=t.ridx,s=t.cidx,f=c(t,i),d=a(a(a({},u),f),{},{ridx:null!==this.state.ridx?this.state.ridx:null!=l?l:null,cidx:null!==this.state.cidx?this.state.cidx:null!=s?s:null,message:this.state.message,nonEditableRows:e.isDefined(n)?n():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate});return m.default.createElement(g.Provider,{value:a({},d)},this.props.children)}}],b=[{key:"getDerivedStateFromProps",value:function(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:a({},n)}}],p&&s(f.prototype,p),b&&s(f,b),Object.defineProperty(f,"prototype",{writable:!1}),f;var f,p,b}(m.default.Component);return u.propTypes={data:v.default.array.isRequired,selectRow:v.default.object,options:v.default.shape({mode:v.default.oneOf([O.CLICK_TO_CELL_EDIT,O.DBCLICK_TO_CELL_EDIT]).isRequired,onErrorMessageDisappear:v.default.func,blurToSave:v.default.bool,beforeSaveCell:v.default.func,afterSaveCell:v.default.func,onStartEdit:v.default.func,nonEditableRows:v.default.func,timeToCloseMessage:v.default.number,errorMessage:v.default.any})},{Provider:u}},t.Consumer=g.Consumer},900(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","getOptions","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=c(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},h=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return h(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=v(r(442)),_=function(e){function t(e){var r,n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),n=s(this,t,[e]);var o=null!==(r=e.options)&&void 0!==r?r:[];return e.getOptions&&(o=e.getOptions(n.setOptions.bind(n),{row:e.row,column:e.column})||[]),n.state={options:o},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.select.value=r,this.select.focus(),n&&n()}},{key:"setOptions",value:function(e){this.setState({options:e})}},{key:"getValue",value:function(){return this.select.value}},{key:"render",value:function(){var e=this,t=this.props,r=t.defaultValue,n=void 0===r?"":r,i=(t.didMount,t.getOptions,t.className),a=void 0===i?"":i,l=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),c=(0,O.default)(a,"form-control editor edit-select"),s=u(u({},l),{},{className:c});return g.default.createElement("select",u(u({},s),{},{ref:function(t){e.select=t},defaultValue:n}),this.state.options.map(function(e){var t=e.label,r=e.value;return g.default.createElement("option",{key:r,value:r},t)}))}}],n&&l(r.prototype,n),i&&l(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(g.Component);t.default=_},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},937(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e),this.state={checked:(e.defaultValue??!1).toString()===(e.value??"on:off").split(":")[0]},this.handleChange=this.handleChange.bind(this)}componentDidMount(){const{didMount:e}=this.props;this.checkbox.focus(),e&&e()}getValue(){const[e,t]=(this.props.value??"on:off").split(":");return this.checkbox.checked?e:t}handleChange(e){this.props.onChange&&this.props.onChange(e);const{target:t}=e;this.setState(()=>({checked:t.checked}))}render(){const{defaultValue:e=!1,didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)("editor edit-chseckbox checkbox",r);return c.default.createElement("input",{ref:e=>{this.checkbox=e},type:"checkbox",className:i,...o,checked:this.state.checked,onChange:this.handleChange})}}t.default=s},942(e,t){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var r=arguments[t];r&&(e=u(e,i(r)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var r in e)n.call(e,r)&&e[r]&&(t=u(t,r));return t}function u(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()}},r={},function e(n){var o=r[n];if(void 0!==o)return o.exports;var i=r[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(856);var t,r});
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IuanMiLCJtYXBwaW5ncyI6IjtDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxFQUFRRyxRQUFRLFVBQ1IsbUJBQVhDLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxDQUFDLFNBQVVKLEdBQ1EsaUJBQVpDLFFBQ2RBLFFBQXFDLDRCQUFJRCxFQUFRRyxRQUFRLFVBRXpESixFQUFrQyw0QkFBSUMsRUFBUUQsRUFBWSxNQUMzRCxDQVRELENBU0dPLEtBQU9DLElBQ1YsTywrSkNUQSxrQkFDQSxTQUtBLFNBRUEsVUFBZSxDQUFDQyxFQUFnQkMsS0EyQjlCLFNBQVNDLEVBQWFDLEdBQ3BCLE9BQ0Usd0JBQUMsRUFBQUMsU0FBUSxLQUFHQyxHQTVCVyxFQUFDRixFQUFZRSxLQUN0QyxNQUFNQyxFQUFNSCxFQUFNSSxNQUNaQyxJQUNKSCxFQUFTSSxnQkFBZ0JDLE9BQVMsR0FDbENMLEVBQVNJLGdCQUFnQkUsUUFBUUwsSUFBUSxHQUdyQ00sRUFBaUQsQ0FBQyxFQU14RCxPQUpJWCxHQUFvQkksRUFBU1EsT0FBUyxFQUFBQyx1QkFDeENGLEVBQU1HLGtCQUFvQixFQUFBQSxtQkFJMUIsd0JBQUNmLEVBQVMsSUFDSkcsS0FDQVMsRUFDSkksY0FBZVgsRUFBU1ksS0FDeEJDLGNBQWViLEVBQVNjLEtBQ3hCQyxXQUFZWixFQUNaYSxRQUFTaEIsRUFBU2dCLFFBQ2xCQyxZQUFhakIsRUFBU1EsT0FBUyxFQUFBVSxtQkFDL0JDLGNBQWVuQixFQUFTUSxPQUFTLEVBQUFDLHdCQU1WVyxDQUFtQnRCLEVBQU9FLEdBRXZELENBR0EsT0FEQUgsRUFBYXdCLFlBQWMsNkJBQ3BCeEIsRSx5QkN6Q1QsSUFBSXlCLEVBQXdELFNBQVVDLEdBQ3BFLE9BQU9BLEdBQU9BLEVBQUlDLFdBQWFELEVBQU0sQ0FD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azovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL3Jvdy1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2VkaXRvci1pbmRpY2F0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL3RleHQtZWRpdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2Ryb3Bkb3duLWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL3RleHRhcmVhLWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9lZGl0b3ItaW5kaWNhdG9yLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9lZGl0aW5nLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9lZGl0aW5nLWNlbGwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2VkaXRpbmctY2VsbC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9lZGl0aW5nLWNlbGwtY29uc3VtZXIudHN4Iiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy90ZXh0YXJlYS1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9jaGVja2JveC1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9yb3ctY29uc3VtZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2RhdGUtZWRpdG9yLmpzIiwid2VicGFjazovLy9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9kYXRlLWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvdGV4dC1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9jb250ZXh0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9kcm9wZG93bi1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2NoZWNrYm94LWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nRWRpdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ0VkaXRvclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBDTElDS19UT19DRUxMX0VESVQsXG4gIERCQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICBERUxBWV9GT1JfREJDTElDSyxcbn0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBDb25zdW1lciB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgKENvbXBvbmVudDogYW55LCBzZWxlY3RSb3dFbmFibGVkOiBhbnkpID0+IHtcbiAgY29uc3QgcmVuZGVyV2l0aENlbGxFZGl0ID0gKHByb3BzOiBhbnksIGNlbGxFZGl0OiBhbnkpID0+IHtcbiAgICBjb25zdCBrZXkgPSBwcm9wcy52YWx1ZTtcbiAgICBjb25zdCBlZGl0YWJsZVJvdyA9ICEoXG4gICAgICBjZWxsRWRpdC5ub25FZGl0YWJsZVJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmluZGV4T2Yoa2V5KSA+IC0xXG4gICAgKTtcblxuICAgIGNvbnN0IGF0dHJzOiB7IERFTEFZX0ZPUl9EQkNMSUNLPzogbnVtYmVyIHwgc3RyaW5nIH0gPSB7fTtcblxuICAgIGlmIChzZWxlY3RSb3dFbmFibGVkICYmIGNlbGxFZGl0Lm1vZGUgPT09IERCQ0xJQ0tfVE9fQ0VMTF9FRElUKSB7XG4gICAgICBhdHRycy5ERUxBWV9GT1JfREJDTElDSyA9IERFTEFZX0ZPUl9EQkNMSUNLO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgey4uLmF0dHJzfVxuICAgICAgICBlZGl0aW5nUm93SWR4PXtjZWxsRWRpdC5yaWR4fVxuICAgICAgICBlZGl0aW5nQ29sSWR4PXtjZWxsRWRpdC5jaWR4fVxuICAgICAgICBpc0VkaXRhYmxlPXtlZGl0YWJsZVJvd31cbiAgICAgICAgYXRzdGFydD17Y2VsbEVkaXQuYXRzdGFydH1cbiAgICAgICAgY2xpY2tUb0VkaXQ9e2NlbGxFZGl0Lm1vZGUgPT09IENMSUNLX1RPX0NFTExfRURJVH1cbiAgICAgICAgZGJjbGlja1RvRWRpdD17Y2VsbEVkaXQubW9kZSA9PT0gREJDTElDS19UT19DRUxMX0VESVR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG4gIGZ1bmN0aW9uIHdpdGhDb25zdW1lcihwcm9wczogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25zdW1lcj57KGNlbGxFZGl0KSA9PiByZW5kZXJXaXRoQ2VsbEVkaXQocHJvcHMsIGNlbGxFZGl0KX08L0NvbnN1bWVyPlxuICAgICk7XG4gIH1cblxuICB3aXRoQ29uc3VtZXIuZGlzcGxheU5hbWUgPSBcIldpdGhDZWxsRWRpdGluZ1Jvd0NvbnN1bWVyXCI7XG4gIHJldHVybiB3aXRoQ29uc3VtZXI7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgRWRpdG9ySW5kaWNhdG9yID0gZnVuY3Rpb24gRWRpdG9ySW5kaWNhdG9yKF9yZWYpIHtcbiAgdmFyIGludmFsaWRNZXNzYWdlID0gX3JlZi5pbnZhbGlkTWVzc2FnZTtcbiAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJhbGVydCBhbGVydC1kYW5nZXIgaW5cIixcbiAgICByb2xlOiBcImFsZXJ0XCIsXG4gICAgXCJkYXRhLXRlc3RpZFwiOiBcImVkaXRvci1pbmRpY2F0b3JcIlxuICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIG51bGwsIGludmFsaWRNZXNzYWdlKSk7XG59O1xuRWRpdG9ySW5kaWNhdG9yLnByb3BUeXBlcyA9IHtcbiAgaW52YWxpZE1lc3NhZ2U6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uc3RyaW5nXG59O1xuLy8gRWRpdG9ySW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgaW52YWxpZE1lc3NhZ2U6IG51bGwsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBFZGl0b3JJbmRpY2F0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcImF1dG9TZWxlY3RUZXh0XCIsIFwib25VcGRhdGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRleHRFZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBUZXh0RWRpdG9yKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0RWRpdG9yKTtcbiAgICByZXR1cm4gX2NhbGxTdXBlcih0aGlzLCBUZXh0RWRpdG9yLCBhcmd1bWVudHMpO1xuICB9XG4gIF9pbmhlcml0cyhUZXh0RWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRleHRFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzJGF1dG9TZWxlYyA9IF90aGlzJHByb3BzLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzJGF1dG9TZWxlYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyRhdXRvU2VsZWM7XG4gICAgICB0aGlzLnRleHQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICAgIGlmIChhdXRvU2VsZWN0VGV4dCkgdGhpcy50ZXh0LnNlbGVjdCgpO1xuICAgICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRkZWZhdWx0ViA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMiRkZWZhdWx0ViA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRkZWZhdWx0VixcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wczIuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzMiRjbGFzc05hbSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMiRjbGFzc05hbSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRjbGFzc05hbSxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGF1dG9TZWxlID0gX3RoaXMkcHJvcHMyLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzMiRhdXRvU2VsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wczIkYXV0b1NlbGUsXG4gICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHRcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgX3RoaXMudGV4dCA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzXG4gICAgICB9LCByZXN0KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gVGV4dEVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMub2JqZWN0XG4vLyAgIF0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm51bWJlclxuLy8gICBdKSxcbi8vICAgYXV0b1NlbGVjdFRleHQ6IFByb3BUeXBlcy5ib29sLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmNcbi8vIH07XG4vLyBUZXh0RWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBudWxsLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWRcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFRleHRFZGl0b3I7IiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgT3B0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbn1cblxuaW50ZXJmYWNlIERyb3BEb3duRWRpdG9yUHJvcHMge1xuICByb3c6IG9iamVjdDtcbiAgY29sdW1uOiBvYmplY3Q7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IG9iamVjdDtcbiAgb3B0aW9ucz86IE9wdGlvbltdO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIGdldE9wdGlvbnM/OiAoXG4gICAgc2V0T3B0aW9uczogKG9wdGlvbnM6IE9wdGlvbltdKSA9PiB2b2lkLFxuICAgIGNvbnRleHQ6IHsgcm93OiBvYmplY3Q7IGNvbHVtbjogb2JqZWN0IH1cbiAgKSA9PiBPcHRpb25bXSB8IHZvaWQ7XG4gIG9uVXBkYXRlPzogYW55O1xufVxuXG5pbnRlcmZhY2UgRHJvcERvd25FZGl0b3JTdGF0ZSB7XG4gIG9wdGlvbnM6IE9wdGlvbltdO1xufVxuXG5jbGFzcyBEcm9wRG93bkVkaXRvciBleHRlbmRzIENvbXBvbmVudDxcbiAgRHJvcERvd25FZGl0b3JQcm9wcyxcbiAgRHJvcERvd25FZGl0b3JTdGF0ZVxuPiB7XG4gIHNlbGVjdDogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGxldCBvcHRpb25zID0gcHJvcHMub3B0aW9ucyA/PyBbXTtcbiAgICBpZiAocHJvcHMuZ2V0T3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9XG4gICAgICAgIHByb3BzLmdldE9wdGlvbnModGhpcy5zZXRPcHRpb25zLmJpbmQodGhpcyksIHtcbiAgICAgICAgICByb3c6IHByb3BzLnJvdyxcbiAgICAgICAgICBjb2x1bW46IHByb3BzLmNvbHVtbixcbiAgICAgICAgfSkgfHwgW107XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSB7IG9wdGlvbnMgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlID0gXCJcIiwgZGlkTW91bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5zZWxlY3QudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgdGhpcy5zZWxlY3QuZm9jdXMoKTtcbiAgICBpZiAoZGlkTW91bnQpIHtcbiAgICAgIGRpZE1vdW50KCk7XG4gICAgfVxuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgb3B0aW9ucyB9KTtcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdC52YWx1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBcIlwiLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBnZXRPcHRpb25zLFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1zZWxlY3RcIik7XG5cbiAgICBjb25zdCBhdHRyID0ge1xuICAgICAgLi4ucmVzdCxcbiAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3MsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8c2VsZWN0XG4gICAgICAgIHsuLi5hdHRyfVxuICAgICAgICByZWY9eyhub2RlKSA9PiB7IHRoaXMuc2VsZWN0ID0gbm9kZTsgfX1cbiAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnN0YXRlLm9wdGlvbnMubWFwKCh7IGxhYmVsLCB2YWx1ZSB9OiBhbnkpID0+IChcbiAgICAgICAgICA8b3B0aW9uIGtleT17dmFsdWV9IHZhbHVlPXt2YWx1ZX0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICkpfVxuICAgICAgPC9zZWxlY3Q+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBEcm9wRG93bkVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIHJvdzogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5udW1iZXJcbi8vICAgXSksXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG9wdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55XG4vLyAgICAgfSkpXG4vLyAgIF0pLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGdldE9wdGlvbnM6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuXG4vLyBEcm9wRG93bkVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogJycsXG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIHN0eWxlOiB7fSxcbi8vICAgb3B0aW9uczogW10sXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyAgIGdldE9wdGlvbnM6IHVuZGVmaW5lZFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgRHJvcERvd25FZGl0b3I7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRWYWx1ZVwiLCBcImRpZE1vdW50XCIsIFwiY2xhc3NOYW1lXCIsIFwiYXV0b1NlbGVjdFRleHRcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRleHRBcmVhRWRpdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gVGV4dEFyZWFFZGl0b3IocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRleHRBcmVhRWRpdG9yKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgVGV4dEFyZWFFZGl0b3IsIFtwcm9wc10pO1xuICAgIF90aGlzLmhhbmRsZUtleURvd24gPSBfdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoVGV4dEFyZWFFZGl0b3IsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoVGV4dEFyZWFFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzJGF1dG9TZWxlYyA9IF90aGlzJHByb3BzLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzJGF1dG9TZWxlYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyRhdXRvU2VsZWM7XG4gICAgICB0aGlzLnRleHQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICAgIGlmIChhdXRvU2VsZWN0VGV4dCkgdGhpcy50ZXh0LnNlbGVjdCgpO1xuICAgICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUtleURvd25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlS2V5RG93bihlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiAhZS5zaGlmdEtleSkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25LZXlEb3duKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25LZXlEb3duKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyJGRlZmF1bHRWID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzMi5kaWRNb3VudCxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGNsYXNzTmFtLFxuICAgICAgICBfdGhpcyRwcm9wczIkYXV0b1NlbGUgPSBfdGhpcyRwcm9wczIuYXV0b1NlbGVjdFRleHQsXG4gICAgICAgIGF1dG9TZWxlY3RUZXh0ID0gX3RoaXMkcHJvcHMyJGF1dG9TZWxlID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzMiRhdXRvU2VsZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0YXJlYVwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzMi50ZXh0ID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gVGV4dEFyZWFFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4vLyAgIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcbi8vIFRleHRBcmVhRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbi8vICAgb25LZXlEb3duOiB1bmRlZmluZWQsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBUZXh0QXJlYUVkaXRvcjsiLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBFZGl0b3JJbmRpY2F0b3IgPSAoeyBpbnZhbGlkTWVzc2FnZSB9OiBhbnkpID0+IChcbiAgPGRpdiBjbGFzc05hbWU9XCJhbGVydCBhbGVydC1kYW5nZXIgaW5cIiByb2xlPVwiYWxlcnRcIiBkYXRhLXRlc3RpZD1cImVkaXRvci1pbmRpY2F0b3JcIj5cbiAgICA8c3Ryb25nPntpbnZhbGlkTWVzc2FnZX08L3N0cm9uZz5cbiAgPC9kaXY+XG4pO1xuXG5FZGl0b3JJbmRpY2F0b3IucHJvcFR5cGVzID0ge1xuICBpbnZhbGlkTWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbi8vIEVkaXRvckluZGljYXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGludmFsaWRNZXNzYWdlOiBudWxsLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgRWRpdG9ySW5kaWNhdG9yO1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgY2xhc3MtbWV0aG9kcy11c2UtdGhpczogMCAqL1xuLyogZXNsaW50IGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRURJVFRZUEUsIFRJTUVfVE9fQ0xPU0VfTUVTU0FHRSB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IENoZWNrQm94RWRpdG9yIGZyb20gXCIuL2NoZWNrYm94LWVkaXRvclwiO1xuaW1wb3J0IERhdGVFZGl0b3IgZnJvbSBcIi4vZGF0ZS1lZGl0b3JcIjtcbmltcG9ydCBEcm9wZG93bkVkaXRvciBmcm9tIFwiLi9kcm9wZG93bi1lZGl0b3JcIjtcbmltcG9ydCBFZGl0b3JJbmRpY2F0b3IgZnJvbSBcIi4vZWRpdG9yLWluZGljYXRvclwiO1xuaW1wb3J0IFRleHRFZGl0b3IgZnJvbSBcIi4vdGV4dC1lZGl0b3JcIjtcbmltcG9ydCBUZXh0QXJlYUVkaXRvciBmcm9tIFwiLi90ZXh0YXJlYS1lZGl0b3JcIjtcblxuaW50ZXJmYWNlIEVkaXRpbmdDZWxsUHJvcHMge1xuICByb3c6IG9iamVjdDtcbiAgcm93SW5kZXg6IG51bWJlcjtcbiAgY29sdW1uOiB7XG4gICAgZGF0YUZpZWxkOiBhbnk7XG4gICAgdmFsaWRhdG9yPzogYW55O1xuICAgIGVkaXRvckNsYXNzZXM/OiBhbnk7XG4gICAgZWRpdG9yU3R5bGU/OiBhbnk7XG4gICAgZWRpdG9yPzogeyB0eXBlOiBhbnk7IG9wdGlvbnM/OiBhbnkgfTtcbiAgICBlZGl0b3JSZW5kZXJlcj86IEZ1bmN0aW9uO1xuICAgIHRleHQ6IGFueTtcbiAgfTtcbiAgY29sdW1uSW5kZXg6IG51bWJlcjtcbiAgb25VcGRhdGU6IChyb3c6IG9iamVjdCwgY29sdW1uOiBvYmplY3QsIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gIG9uRXNjYXBlOiAoKSA9PiB2b2lkO1xuICB0aW1lVG9DbG9zZU1lc3NhZ2U/OiBudW1iZXI7XG4gIGF1dG9TZWxlY3RUZXh0PzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IG9iamVjdDtcbiAgb25FcnJvck1lc3NhZ2VEaXNhcHBlYXI/OiBhbnk7XG4gIGJsdXJUb1NhdmU/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRWRpdGluZ0NlbGxTdGF0ZSB7XG4gIGludmFsaWRNZXNzYWdlOiBhbnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChfOiBhbnksIG9uU3RhcnRFZGl0PzogYW55KSA9PlxuICBjbGFzcyBFZGl0aW5nQ2VsbCBleHRlbmRzIENvbXBvbmVudDxFZGl0aW5nQ2VsbFByb3BzLCBFZGl0aW5nQ2VsbFN0YXRlPiB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIHJvdzogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgcm93SW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgY29sdW1uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICAgIG9uVXBkYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgb25Fc2NhcGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBhdXRvU2VsZWN0VGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB9O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIHRpbWVUb0Nsb3NlTWVzc2FnZTogVElNRV9UT19DTE9TRV9NRVNTQUdFLFxuICAgICAgY2xhc3NOYW1lOiBudWxsLFxuICAgICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuICAgICAgc3R5bGU6IHt9LFxuICAgIH07XG5cbiAgICBlZGl0b3I6IGFueTtcbiAgICBpbmRpY2F0b3JUaW1lcjogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5pbmRpY2F0b3JUaW1lciA9IG51bGw7XG4gICAgICB0aGlzLmNsZWFyVGltZXIgPSB0aGlzLmNsZWFyVGltZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlQmx1ciA9IHRoaXMuaGFuZGxlQmx1ci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IHRoaXMuaGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5iZWZvcmVDb21wbGV0ZSA9IHRoaXMuYmVmb3JlQ29tcGxldGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuYXN5bmNiZWZvcmVDb21wZXRlID0gdGhpcy5hc3luY2JlZm9yZUNvbXBldGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZSA9IHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHsgbWVzc2FnZSB9OiBhbnkpIHtcbiAgICAgIGlmIChfLmlzRGVmaW5lZChtZXNzYWdlKSkge1xuICAgICAgICB0aGlzLmNyZWF0ZVRpbWVyKCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyVGltZXIoKSB7XG4gICAgICBpZiAodGhpcy5pbmRpY2F0b3JUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5pbmRpY2F0b3JUaW1lcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlVGltZXIoKSB7XG4gICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICAgIGNvbnN0IHsgdGltZVRvQ2xvc2VNZXNzYWdlLCBvbkVycm9yTWVzc2FnZURpc2FwcGVhciB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHRoaXMuaW5kaWNhdG9yVGltZXIgPSBfLnNsZWVwKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBudWxsLFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24ob25FcnJvck1lc3NhZ2VEaXNhcHBlYXIpKSBvbkVycm9yTWVzc2FnZURpc2FwcGVhcigpO1xuICAgICAgfSwgdGltZVRvQ2xvc2VNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2U6IGFueSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICBpbnZhbGlkTWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICB9XG5cbiAgICBhc3luY2JlZm9yZUNvbXBldGUobmV3VmFsdWU6IGFueSkge1xuICAgICAgcmV0dXJuIChyZXN1bHQgPSB7IHZhbGlkOiB0cnVlIH0pID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCB7IHZhbGlkLCBtZXNzYWdlIH0gPSByZXN1bHQ7XG4gICAgICAgIGNvbnN0IHsgb25VcGRhdGUsIHJvdywgY29sdW1uIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBvblVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBiZWZvcmVDb21wbGV0ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgICBjb25zdCB7IG9uVXBkYXRlLCByb3csIGNvbHVtbiB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLnZhbGlkYXRvcikpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVGb3JtID0gY29sdW1uLnZhbGlkYXRvcihcbiAgICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHRoaXMuYXN5bmNiZWZvcmVDb21wZXRlKG5ld1ZhbHVlKVxuICAgICAgICApO1xuICAgICAgICBpZiAoXy5pc09iamVjdCh2YWxpZGF0ZUZvcm0pKSB7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlRm9ybS5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlKHZhbGlkYXRlRm9ybS5tZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9uVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1cigpIHtcbiAgICAgIGNvbnN0IHsgb25Fc2NhcGUsIGJsdXJUb1NhdmUgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoYmx1clRvU2F2ZSkge1xuICAgICAgICB0aGlzLmJlZm9yZUNvbXBsZXRlKHRoaXMuZWRpdG9yLmdldFZhbHVlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25Fc2NhcGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVLZXlEb3duKGU6IGFueSkge1xuICAgICAgY29uc3QgeyBvbkVzY2FwZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgIC8vIEVTQ1xuICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgIC8vIEVOVEVSXG4gICAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUodGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2xpY2soZTogYW55KSB7XG4gICAgICBpZiAoZS50YXJnZXQudGFnTmFtZSAhPT0gXCJURFwiKSB7XG4gICAgICAgIC8vIFRvIGF2b2lkIHRoZSByb3cgc2VsZWN0aW9uIGV2ZW50IGJlIHRyaWdnZXJlZCxcbiAgICAgICAgLy8gV2hlbiB1c2VyIGRlZmluZSBzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCBhbmQgc2VsZWN0Um93LmNsaWNrVG9FZGl0XG4gICAgICAgIC8vIFdlIHNob3VsZG4ndCB0cmlnZ2VyIHNlbGVjdGlvbiBldmVudCBldmVuIGlmIHVzZXIgY2xpY2sgb24gdGhlIGNlbGwgZWRpdG9yKGlucHV0KVxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGxldCBlZGl0b3I6IGFueTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93LFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHJvd0luZGV4LFxuICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgZGF0YUZpZWxkIH0gPSBjb2x1bW47XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgY29uc3QgaGFzRXJyb3IgPSBfLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmludmFsaWRNZXNzYWdlKTtcblxuICAgICAgbGV0IGN1c3RvbUVkaXRvckNsYXNzID0gY29sdW1uLmVkaXRvckNsYXNzZXMgfHwgXCJcIjtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvckNsYXNzZXMpKSB7XG4gICAgICAgIGN1c3RvbUVkaXRvckNsYXNzID0gY29sdW1uLmVkaXRvckNsYXNzZXMoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCBlZGl0b3JTdHlsZSA9IGNvbHVtbi5lZGl0b3JTdHlsZSB8fCB7fTtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclN0eWxlKSkge1xuICAgICAgICBlZGl0b3JTdHlsZSA9IGNvbHVtbi5lZGl0b3JTdHlsZSh2YWx1ZSwgcm93LCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKFxuICAgICAgICB7XG4gICAgICAgICAgYW5pbWF0ZWQ6IGhhc0Vycm9yLFxuICAgICAgICAgIHNoYWtlOiBoYXNFcnJvcixcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tRWRpdG9yQ2xhc3NcbiAgICAgICk7XG5cbiAgICAgIGxldCBlZGl0b3JQcm9wcyA9IHtcbiAgICAgICAgcmVmOiAobm9kZTogYW55KSA9PiAodGhpcy5lZGl0b3IgPSBub2RlKSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgc3R5bGU6IGVkaXRvclN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzLFxuICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlS2V5RG93bixcbiAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXG4gICAgICAgIGRpZE1vdW50OiAoKSA9PiB7IH0sXG4gICAgICAgIG9uVXBkYXRlOiAobmV3VmFsdWU6IGFueSkgPT4geyB9LFxuICAgICAgfTtcblxuICAgICAgaWYgKG9uU3RhcnRFZGl0KSB7XG4gICAgICAgIGVkaXRvclByb3BzLmRpZE1vdW50ID0gKCkgPT5cbiAgICAgICAgICBvblN0YXJ0RWRpdChyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCA9IF8uaXNPYmplY3QoY29sdW1uLmVkaXRvcik7XG5cbiAgICAgIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkKSB7XG4gICAgICAgIGVkaXRvclByb3BzID0ge1xuICAgICAgICAgIC4uLmVkaXRvclByb3BzLFxuICAgICAgICAgIC4uLmNvbHVtbi5lZGl0b3IsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yUmVuZGVyZXIpKSB7XG4gICAgICAgIGVkaXRvclByb3BzID0ge1xuICAgICAgICAgIC4uLmVkaXRvclByb3BzLFxuICAgICAgICAgIG9uVXBkYXRlOiB0aGlzLmJlZm9yZUNvbXBsZXRlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JSZW5kZXJlcikpIHtcbiAgICAgICAgZWRpdG9yID0gY29sdW1uLmVkaXRvclJlbmRlcmVyIShcbiAgICAgICAgICBlZGl0b3JQcm9wcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmXG4gICAgICAgIGNvbHVtbi5lZGl0b3I/LnR5cGUgPT09IEVESVRUWVBFLlNFTEVDVFxuICAgICAgKSB7XG4gICAgICAgIGVkaXRvciA9IDxEcm9wZG93bkVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IHJvdz17cm93fSBjb2x1bW49e2NvbHVtbn0gLz47XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmXG4gICAgICAgIGNvbHVtbi5lZGl0b3I/LnR5cGUgPT09IEVESVRUWVBFLlRFWFRBUkVBXG4gICAgICApIHtcbiAgICAgICAgZWRpdG9yID0gKFxuICAgICAgICAgIDxUZXh0QXJlYUVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IGF1dG9TZWxlY3RUZXh0PXthdXRvU2VsZWN0VGV4dH0gLz5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiZcbiAgICAgICAgY29sdW1uLmVkaXRvcj8udHlwZSA9PT0gRURJVFRZUEUuQ0hFQ0tCT1hcbiAgICAgICkge1xuICAgICAgICBlZGl0b3IgPSA8Q2hlY2tCb3hFZGl0b3Igey4uLmVkaXRvclByb3BzfSAvPjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiZcbiAgICAgICAgY29sdW1uLmVkaXRvcj8udHlwZSA9PT0gRURJVFRZUEUuREFURVxuICAgICAgKSB7XG4gICAgICAgIGVkaXRvciA9IDxEYXRlRWRpdG9yIHsuLi5lZGl0b3JQcm9wc30gLz47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IgPSAoXG4gICAgICAgICAgPFRleHRFZGl0b3Igey4uLmVkaXRvclByb3BzfSBhdXRvU2VsZWN0VGV4dD17YXV0b1NlbGVjdFRleHR9IC8+XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDx0ZFxuICAgICAgICAgIGNsYXNzTmFtZT17Y3MoXCJyZWFjdC1ib290c3RyYXAtdGFibGUtZWRpdGluZy1jZWxsXCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICB7ZWRpdG9yfVxuICAgICAgICAgIHtoYXNFcnJvciA/IChcbiAgICAgICAgICAgIDxFZGl0b3JJbmRpY2F0b3IgaW52YWxpZE1lc3NhZ2U9e3RoaXMuc3RhdGUuaW52YWxpZE1lc3NhZ2V9IC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvdGQ+XG4gICAgICApO1xuICAgIH1cbiAgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbi8qIGVzbGludCBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9uczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIGNoZWNrYm94X2VkaXRvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2NoZWNrYm94LWVkaXRvclwiKSk7XG52YXIgZGF0ZV9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9kYXRlLWVkaXRvclwiKSk7XG52YXIgZHJvcGRvd25fZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZHJvcGRvd24tZWRpdG9yXCIpKTtcbnZhciBlZGl0b3JfaW5kaWNhdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZWRpdG9yLWluZGljYXRvclwiKSk7XG52YXIgdGV4dF9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi90ZXh0LWVkaXRvclwiKSk7XG52YXIgdGV4dGFyZWFfZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdGV4dGFyZWEtZWRpdG9yXCIpKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKF8sIG9uU3RhcnRFZGl0KSB7XG4gIHZhciBfYTtcbiAgcmV0dXJuIF9hID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgICBmdW5jdGlvbiBFZGl0aW5nQ2VsbChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEVkaXRpbmdDZWxsKTtcbiAgICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFZGl0aW5nQ2VsbCwgW3Byb3BzXSk7XG4gICAgICBfdGhpcy5pbmRpY2F0b3JUaW1lciA9IG51bGw7XG4gICAgICBfdGhpcy5jbGVhclRpbWVyID0gX3RoaXMuY2xlYXJUaW1lci5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuaGFuZGxlQ2xpY2sgPSBfdGhpcy5oYW5kbGVDbGljay5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUtleURvd24gPSBfdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuYmVmb3JlQ29tcGxldGUgPSBfdGhpcy5iZWZvcmVDb21wbGV0ZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZSA9IF90aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UgPSBfdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGludmFsaWRNZXNzYWdlOiBudWxsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfaW5oZXJpdHMoRWRpdGluZ0NlbGwsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gICAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFZGl0aW5nQ2VsbCwgW3tcbiAgICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKF9yZWYpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBfcmVmLm1lc3NhZ2U7XG4gICAgICAgIGlmIChfLmlzRGVmaW5lZChtZXNzYWdlKSkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBtZXNzYWdlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNsZWFyVGltZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhclRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5pbmRpY2F0b3JUaW1lcikge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluZGljYXRvclRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjcmVhdGVUaW1lclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZVRpbWVyKCkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdGltZVRvQ2xvc2VNZXNzYWdlID0gX3RoaXMkcHJvcHMudGltZVRvQ2xvc2VNZXNzYWdlLFxuICAgICAgICAgIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyID0gX3RoaXMkcHJvcHMub25FcnJvck1lc3NhZ2VEaXNhcHBlYXI7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yVGltZXIgPSBfLnNsZWVwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihvbkVycm9yTWVzc2FnZURpc2FwcGVhcikpIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyKCk7XG4gICAgICAgIH0sIHRpbWVUb0Nsb3NlTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRpc3BsYXlFcnJvck1lc3NhZ2VcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBtZXNzYWdlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiYXN5bmNiZWZvcmVDb21wZXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gYXN5bmNiZWZvcmVDb21wZXRlKG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHtcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgdmFyIHZhbGlkID0gcmVzdWx0LnZhbGlkLFxuICAgICAgICAgICAgbWVzc2FnZSA9IHJlc3VsdC5tZXNzYWdlO1xuICAgICAgICAgIHZhciBfdGhpczMkcHJvcHMgPSBfdGhpczMucHJvcHMsXG4gICAgICAgICAgICBvblVwZGF0ZSA9IF90aGlzMyRwcm9wcy5vblVwZGF0ZSxcbiAgICAgICAgICAgIHJvdyA9IF90aGlzMyRwcm9wcy5yb3csXG4gICAgICAgICAgICBjb2x1bW4gPSBfdGhpczMkcHJvcHMuY29sdW1uO1xuICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIF90aGlzMy5kaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvblVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJiZWZvcmVDb21wbGV0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJlZm9yZUNvbXBsZXRlKG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICAgIHJvdyA9IF90aGlzJHByb3BzMi5yb3csXG4gICAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbjtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4udmFsaWRhdG9yKSkge1xuICAgICAgICAgIHZhciB2YWxpZGF0ZUZvcm0gPSBjb2x1bW4udmFsaWRhdG9yKG5ld1ZhbHVlLCByb3csIGNvbHVtbiwgdGhpcy5hc3luY2JlZm9yZUNvbXBldGUobmV3VmFsdWUpKTtcbiAgICAgICAgICBpZiAoXy5pc09iamVjdCh2YWxpZGF0ZUZvcm0pKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGVGb3JtLmFzeW5jKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UodmFsaWRhdGVGb3JtLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImhhbmRsZUJsdXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVCbHVyKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkVzY2FwZSA9IF90aGlzJHByb3BzMy5vbkVzY2FwZSxcbiAgICAgICAgICBibHVyVG9TYXZlID0gX3RoaXMkcHJvcHMzLmJsdXJUb1NhdmU7XG4gICAgICAgIGlmIChibHVyVG9TYXZlKSB7XG4gICAgICAgICAgdGhpcy5iZWZvcmVDb21wbGV0ZSh0aGlzLmVkaXRvci5nZXRWYWx1ZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImhhbmRsZUtleURvd25cIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGUpIHtcbiAgICAgICAgdmFyIG9uRXNjYXBlID0gdGhpcy5wcm9wcy5vbkVzY2FwZTtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICAvLyBFU0NcbiAgICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAvLyBFTlRFUlxuICAgICAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUodGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiaGFuZGxlQ2xpY2tcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDbGljayhlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldC50YWdOYW1lICE9PSBcIlREXCIpIHtcbiAgICAgICAgICAvLyBUbyBhdm9pZCB0aGUgcm93IHNlbGVjdGlvbiBldmVudCBiZSB0cmlnZ2VyZWQsXG4gICAgICAgICAgLy8gV2hlbiB1c2VyIGRlZmluZSBzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCBhbmQgc2VsZWN0Um93LmNsaWNrVG9FZGl0XG4gICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHRyaWdnZXIgc2VsZWN0aW9uIGV2ZW50IGV2ZW4gaWYgdXNlciBjbGljayBvbiB0aGUgY2VsbCBlZGl0b3IoaW5wdXQpXG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHZhciBfdGhpczQgPSB0aGlzLFxuICAgICAgICAgIF9jb2x1bW4kZWRpdG9yLFxuICAgICAgICAgIF9jb2x1bW4kZWRpdG9yMixcbiAgICAgICAgICBfY29sdW1uJGVkaXRvcjMsXG4gICAgICAgICAgX2NvbHVtbiRlZGl0b3I0O1xuICAgICAgICB2YXIgZWRpdG9yO1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICByb3cgPSBfdGhpcyRwcm9wczQucm93LFxuICAgICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzNC5jb2x1bW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0LmNsYXNzTmFtZSxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNC5zdHlsZSxcbiAgICAgICAgICByb3dJbmRleCA9IF90aGlzJHByb3BzNC5yb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleCA9IF90aGlzJHByb3BzNC5jb2x1bW5JbmRleCxcbiAgICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzNC5hdXRvU2VsZWN0VGV4dDtcbiAgICAgICAgdmFyIGRhdGFGaWVsZCA9IGNvbHVtbi5kYXRhRmllbGQ7XG4gICAgICAgIHZhciB2YWx1ZSA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgICAgdmFyIGhhc0Vycm9yID0gXy5pc0RlZmluZWQodGhpcy5zdGF0ZS5pbnZhbGlkTWVzc2FnZSk7XG4gICAgICAgIHZhciBjdXN0b21FZGl0b3JDbGFzcyA9IGNvbHVtbi5lZGl0b3JDbGFzc2VzIHx8IFwiXCI7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvckNsYXNzZXMpKSB7XG4gICAgICAgICAgY3VzdG9tRWRpdG9yQ2xhc3MgPSBjb2x1bW4uZWRpdG9yQ2xhc3Nlcyh2YWx1ZSwgcm93LCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlZGl0b3JTdHlsZSA9IGNvbHVtbi5lZGl0b3JTdHlsZSB8fCB7fTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yU3R5bGUpKSB7XG4gICAgICAgICAgZWRpdG9yU3R5bGUgPSBjb2x1bW4uZWRpdG9yU3R5bGUodmFsdWUsIHJvdywgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoe1xuICAgICAgICAgIGFuaW1hdGVkOiBoYXNFcnJvcixcbiAgICAgICAgICBzaGFrZTogaGFzRXJyb3JcbiAgICAgICAgfSwgY3VzdG9tRWRpdG9yQ2xhc3MpO1xuICAgICAgICB2YXIgZWRpdG9yUHJvcHMgPSB7XG4gICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5lZGl0b3IgPSBub2RlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBzdHlsZTogZWRpdG9yU3R5bGUsXG4gICAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzcyxcbiAgICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlS2V5RG93bixcbiAgICAgICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlQmx1cixcbiAgICAgICAgICBkaWRNb3VudDogZnVuY3Rpb24gZGlkTW91bnQoKSB7fSxcbiAgICAgICAgICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUobmV3VmFsdWUpIHt9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvblN0YXJ0RWRpdCkge1xuICAgICAgICAgIGVkaXRvclByb3BzLmRpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9uU3RhcnRFZGl0KHJvdywgY29sdW1uLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgPSBfLmlzT2JqZWN0KGNvbHVtbi5lZGl0b3IpO1xuICAgICAgICBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCkge1xuICAgICAgICAgIGVkaXRvclByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcyksIGNvbHVtbi5lZGl0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yUmVuZGVyZXIpKSB7XG4gICAgICAgICAgZWRpdG9yUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwge30sIHtcbiAgICAgICAgICAgIG9uVXBkYXRlOiB0aGlzLmJlZm9yZUNvbXBsZXRlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yUmVuZGVyZXIpKSB7XG4gICAgICAgICAgZWRpdG9yID0gY29sdW1uLmVkaXRvclJlbmRlcmVyKGVkaXRvclByb3BzLCB2YWx1ZSwgcm93LCBjb2x1bW4sIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJiAoKF9jb2x1bW4kZWRpdG9yID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb2x1bW4kZWRpdG9yLnR5cGUpID09PSBfXzEuRURJVFRZUEUuU0VMRUNUKSB7XG4gICAgICAgICAgZWRpdG9yID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChkcm9wZG93bl9lZGl0b3JfMVtcImRlZmF1bHRcIl0sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpLCB7fSwge1xuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmICgoX2NvbHVtbiRlZGl0b3IyID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3IyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJGVkaXRvcjIudHlwZSkgPT09IF9fMS5FRElUVFlQRS5URVhUQVJFQSkge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQodGV4dGFyZWFfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwge30sIHtcbiAgICAgICAgICAgIGF1dG9TZWxlY3RUZXh0OiBhdXRvU2VsZWN0VGV4dFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmICgoX2NvbHVtbiRlZGl0b3IzID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3IzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJGVkaXRvcjMudHlwZSkgPT09IF9fMS5FRElUVFlQRS5DSEVDS0JPWCkge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoY2hlY2tib3hfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcykpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiYgKChfY29sdW1uJGVkaXRvcjQgPSBjb2x1bW4uZWRpdG9yKSA9PT0gbnVsbCB8fCBfY29sdW1uJGVkaXRvcjQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb2x1bW4kZWRpdG9yNC50eXBlKSA9PT0gX18xLkVESVRUWVBFLkRBVEUpIHtcbiAgICAgICAgICBlZGl0b3IgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGRhdGVfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQodGV4dF9lZGl0b3JfMVtcImRlZmF1bHRcIl0sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpLCB7fSwge1xuICAgICAgICAgICAgYXV0b1NlbGVjdFRleHQ6IGF1dG9TZWxlY3RUZXh0XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwidGRcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogKDAsIGNsYXNzbmFtZXNfMVtcImRlZmF1bHRcIl0pKFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLWVkaXRpbmctY2VsbFwiLCBjbGFzc05hbWUpLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUNsaWNrXG4gICAgICAgIH0sIGVkaXRvciwgaGFzRXJyb3IgPyByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGVkaXRvcl9pbmRpY2F0b3JfMVtcImRlZmF1bHRcIl0sIHtcbiAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogdGhpcy5zdGF0ZS5pbnZhbGlkTWVzc2FnZVxuICAgICAgICB9KSA6IG51bGwpO1xuICAgICAgfVxuICAgIH1dKTtcbiAgfShyZWFjdF8xLkNvbXBvbmVudCksIF9hLnByb3BUeXBlcyA9IHtcbiAgICByb3c6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgcm93SW5kZXg6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgY29sdW1uOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGNvbHVtbkluZGV4OiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIG9uVXBkYXRlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkVzY2FwZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm51bWJlcixcbiAgICBhdXRvU2VsZWN0VGV4dDogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5ib29sLFxuICAgIGNsYXNzTmFtZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5zdHJpbmcsXG4gICAgc3R5bGU6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub2JqZWN0XG4gIH0sIF9hLmRlZmF1bHRQcm9wcyA9IHtcbiAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IF9fMS5USU1FX1RPX0NMT1NFX01FU1NBR0UsXG4gICAgY2xhc3NOYW1lOiBudWxsLFxuICAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbiAgICBzdHlsZToge31cbiAgfSwgX2E7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIGNvbnRleHRfMSA9IHJlcXVpcmUoXCIuL2NvbnRleHRcIik7XG52YXIgZWRpdGluZ19jZWxsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZWRpdGluZy1jZWxsXCIpKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKF8sIG9uU3RhcnRFZGl0KSB7XG4gIHZhciBFZGl0aW5nQ2VsbCA9ICgwLCBlZGl0aW5nX2NlbGxfMVtcImRlZmF1bHRcIl0pKF8sIG9uU3RhcnRFZGl0KTtcbiAgdmFyIHJlbmRlcldpdGhFZGl0aW5nQ2VsbCA9IGZ1bmN0aW9uIHJlbmRlcldpdGhFZGl0aW5nQ2VsbChwcm9wcywgY2VsbEVkaXQpIHtcbiAgICB2YXIgY29udGVudCA9IF8uZ2V0KHByb3BzLnJvdywgcHJvcHMuY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgdmFyIGVkaXRDZWxsc3R5bGUgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxTdHlsZSB8fCB7fTtcbiAgICB2YXIgZWRpdENlbGxjbGFzc2VzID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3NlcztcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlKSkge1xuICAgICAgZWRpdENlbGxzdHlsZSA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlKGNvbnRlbnQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgsIHByb3BzLmNvbHVtbkluZGV4KTtcbiAgICB9XG4gICAgaWYgKF8uaXNGdW5jdGlvbihwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzKSkge1xuICAgICAgZWRpdENlbGxjbGFzc2VzID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3Nlcyhjb250ZW50LCBwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4LCBwcm9wcy5jb2x1bW5JbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KEVkaXRpbmdDZWxsLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogZWRpdENlbGxjbGFzc2VzLFxuICAgICAgc3R5bGU6IGVkaXRDZWxsc3R5bGVcbiAgICB9LCBjZWxsRWRpdCkpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoY29udGV4dF8xLkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY2VsbEVkaXQpIHtcbiAgICAgIHJldHVybiByZW5kZXJXaXRoRWRpdGluZ0NlbGwocHJvcHMsIGNlbGxFZGl0KTtcbiAgICB9KTtcbiAgfTtcbn07IiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENvbnN1bWVyIH0gZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IGNyZWF0ZUVkaXRpbmdDZWxsIGZyb20gXCIuL2VkaXRpbmctY2VsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoXzogYW55LCBvblN0YXJ0RWRpdD86IGFueSkgPT4ge1xuICBjb25zdCBFZGl0aW5nQ2VsbCA9IGNyZWF0ZUVkaXRpbmdDZWxsKF8sIG9uU3RhcnRFZGl0KTtcbiAgY29uc3QgcmVuZGVyV2l0aEVkaXRpbmdDZWxsID0gKHByb3BzOiBhbnksIGNlbGxFZGl0OiBhbnkpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocHJvcHMucm93LCBwcm9wcy5jb2x1bW4uZGF0YUZpZWxkKTtcbiAgICBsZXQgZWRpdENlbGxzdHlsZSA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlIHx8IHt9O1xuICAgIGxldCBlZGl0Q2VsbGNsYXNzZXMgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUpKSB7XG4gICAgICBlZGl0Q2VsbHN0eWxlID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHByb3BzLnJvdyxcbiAgICAgICAgcHJvcHMucm93SW5kZXgsXG4gICAgICAgIHByb3BzLmNvbHVtbkluZGV4XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHByb3BzLmNvbHVtbi5lZGl0Q2VsbENsYXNzZXMpKSB7XG4gICAgICBlZGl0Q2VsbGNsYXNzZXMgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBwcm9wcy5yb3csXG4gICAgICAgIHByb3BzLnJvd0luZGV4LFxuICAgICAgICBwcm9wcy5jb2x1bW5JbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEVkaXRpbmdDZWxsXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0Q2VsbGNsYXNzZXN9XG4gICAgICAgIHN0eWxlPXtlZGl0Q2VsbHN0eWxlfVxuICAgICAgICB7Li4uY2VsbEVkaXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChwcm9wczogYW55KSA9PiAoXG4gICAgPENvbnN1bWVyPnsoY2VsbEVkaXQpID0+IHJlbmRlcldpdGhFZGl0aW5nQ2VsbChwcm9wcywgY2VsbEVkaXQpfTwvQ29uc3VtZXI+XG4gICk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBUZXh0RWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbiAgYXV0b1NlbGVjdFRleHQ/OiBib29sZWFuO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uS2V5RG93bjogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFRleHRBcmVhRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PFRleHRFZGl0b3JQcm9wcz4ge1xuICB0ZXh0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUZXh0RWRpdG9yUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVLZXlEb3duID0gdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQodGhpcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBudWxsLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMudGV4dC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICBpZiAoYXV0b1NlbGVjdFRleHQpIHRoaXMudGV4dC5zZWxlY3QoKTtcbiAgICBpZiAoZGlkTW91bnQpIGRpZE1vdW50KCk7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0LnZhbHVlO1xuICB9XG5cbiAgaGFuZGxlS2V5RG93bihlOiBhbnkpIHtcbiAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiAhZS5zaGlmdEtleSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnByb3BzLm9uS2V5RG93bikge1xuICAgICAgdGhpcy5wcm9wcy5vbktleURvd24oZSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFwiXCIsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0YXJlYVwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIHJlZj17KG5vZGUpID0+IHsgdGhpcy50ZXh0ID0gbm9kZTsgfX1cbiAgICAgICAgLy8gdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlEb3dufVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbi8vIFRleHRBcmVhRWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuLy8gICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIFRleHRBcmVhRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbi8vICAgb25LZXlEb3duOiB1bmRlZmluZWQsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0QXJlYUVkaXRvcjtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIENMSUNLX1RPX0NFTExfRURJVCxcbiAgQ2VsbEVkaXRQcm92aWRlclByb3BzLFxuICBDZWxsRWRpdFByb3ZpZGVyU3RhdGUsXG4gIERCQ0xJQ0tfVE9fQ0VMTF9FRElULFxufSBmcm9tIFwiLi5cIjtcblxuY29uc3QgQ2VsbEVkaXRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG5leHBvcnQgZGVmYXVsdCAoXG4gIF86IGFueSxcbiAgZGF0YU9wZXJhdG9yPzogYW55LFxuICBpc1JlbW90ZUNlbGxFZGl0PzogYW55LFxuICBoYW5kbGVDZWxsQ2hhbmdlPzogYW55XG4pID0+IHtcbiAgY2xhc3MgQ2VsbEVkaXRQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgICBDZWxsRWRpdFByb3ZpZGVyUHJvcHMsXG4gICAgQ2VsbEVkaXRQcm92aWRlclN0YXRlXG4gID4ge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICAgIHNlbGVjdFJvdzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbQ0xJQ0tfVE9fQ0VMTF9FRElULCBEQkNMSUNLX1RPX0NFTExfRURJVF0pXG4gICAgICAgICAgLmlzUmVxdWlyZWQsXG4gICAgICAgIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgYmx1clRvU2F2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIGJlZm9yZVNhdmVDZWxsOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgYWZ0ZXJTYXZlQ2VsbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIG9uU3RhcnRFZGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgbm9uRWRpdGFibGVSb3dzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IFByb3BUeXBlcy5hbnksXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5kb1VwZGF0ZSA9IHRoaXMuZG9VcGRhdGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuc3RhcnRFZGl0aW5nID0gdGhpcy5zdGFydEVkaXRpbmcuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZXNjYXBlRWRpdGluZyA9IHRoaXMuZXNjYXBlRWRpdGluZy5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5jb21wbGV0ZUVkaXRpbmcgPSB0aGlzLmNvbXBsZXRlRWRpdGluZy5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVDZWxsVXBkYXRlID0gdGhpcy5oYW5kbGVDZWxsVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgICAgaWYgKFxuICAgICAgICBuZXh0UHJvcHMuY2VsbEVkaXQgJiZcbiAgICAgICAgXy5pc0Z1bmN0aW9uKGlzUmVtb3RlQ2VsbEVkaXQpICYmXG4gICAgICAgIGlzUmVtb3RlQ2VsbEVkaXQoKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcHMuY2VsbEVkaXQub3B0aW9ucy5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogbmV4dFByb3BzLmNlbGxFZGl0Lm9wdGlvbnMuZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJpZHg6IHByZXZTdGF0ZS5yaWR4LFxuICAgICAgICAgICAgY2lkeDogcHJldlN0YXRlLmNpZHgsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNlbGxVcGRhdGUocm93OiBhbnksIGNvbHVtbjogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZVdpdGhUeXBlID0gZGF0YU9wZXJhdG9yLnR5cGVDb252ZXJ0KGNvbHVtbi50eXBlLCBuZXdWYWx1ZSk7XG4gICAgICBjb25zdCB7IGNlbGxFZGl0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBiZWZvcmVTYXZlQ2VsbCB9ID0gY2VsbEVkaXQub3B0aW9ucztcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gXy5nZXQocm93LCBjb2x1bW4uZGF0YUZpZWxkKTtcbiAgICAgIGNvbnN0IGJlZm9yZVNhdmVDZWxsRG9uZSA9IChyZXN1bHQgPSB0cnVlKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLmRvVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZVdpdGhUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVzY2FwZUVkaXRpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oYmVmb3JlU2F2ZUNlbGwpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGJlZm9yZVNhdmVDZWxsKFxuICAgICAgICAgIG9sZFZhbHVlLFxuICAgICAgICAgIG5ld1ZhbHVlV2l0aFR5cGUsXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBiZWZvcmVTYXZlQ2VsbERvbmVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSAmJiByZXN1bHQuYXN5bmMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgIH1cblxuICAgIGRvVXBkYXRlKHJvdzogYW55LCBjb2x1bW46IGFueSwgbmV3VmFsdWU6IGFueSkge1xuICAgICAgY29uc3QgeyBrZXlGaWVsZCwgY2VsbEVkaXQsIGRhdGEgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGFmdGVyU2F2ZUNlbGwgfSA9IGNlbGxFZGl0Lm9wdGlvbnM7XG4gICAgICBjb25zdCByb3dJZCA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgaWYgKGlzUmVtb3RlQ2VsbEVkaXQoKSkge1xuICAgICAgICBoYW5kbGVDZWxsQ2hhbmdlKHJvd0lkLCBjb2x1bW4uZGF0YUZpZWxkLCBuZXdWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhT3BlcmF0b3IuZWRpdENlbGwoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICByb3dJZCxcbiAgICAgICAgICBjb2x1bW4uZGF0YUZpZWxkLFxuICAgICAgICAgIG5ld1ZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oYWZ0ZXJTYXZlQ2VsbCkpIHtcbiAgICAgICAgICBhZnRlclNhdmVDZWxsKG9sZFZhbHVlLCBuZXdWYWx1ZSwgcm93LCBjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcGxldGVFZGl0aW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVFZGl0aW5nKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHN0YXJ0RWRpdGluZyhyaWR4OiBhbnksIGNpZHg6IGFueSkge1xuICAgICAgY29uc3QgZWRpdGluZyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICAgIHJpZHgsXG4gICAgICAgICAgY2lkeCxcbiAgICAgICAgfSkpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgeyBzZWxlY3RSb3cgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIXNlbGVjdFJvdyB8fCBzZWxlY3RSb3cuY2xpY2tUb0VkaXQgfHwgIXNlbGVjdFJvdy5jbGlja1RvU2VsZWN0KSB7XG4gICAgICAgIGVkaXRpbmcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlc2NhcGVFZGl0aW5nKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2VsbEVkaXQ6IHtcbiAgICAgICAgICBvcHRpb25zOiB7IG5vbkVkaXRhYmxlUm93cywgZXJyb3JNZXNzYWdlLCAuLi5vcHRpb25zUmVzdCB9LFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICByaWR4OiBwcm9wUmlkeCxcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgY2lkeDogcHJvcENpZHgsXG4gICAgICAgICAgLi4uY2VsbEVkaXRSZXN0XG4gICAgICAgIH0sXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgbmV3Q2VsbEVkaXQgPSB7XG4gICAgICAgIC4uLm9wdGlvbnNSZXN0LFxuICAgICAgICAuLi5jZWxsRWRpdFJlc3QsXG4gICAgICAgIHJpZHg6IHRoaXMuc3RhdGUucmlkeCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUucmlkeCA6IChwcm9wUmlkeCA/PyBudWxsKSxcbiAgICAgICAgY2lkeDogdGhpcy5zdGF0ZS5jaWR4ICE9PSBudWxsID8gdGhpcy5zdGF0ZS5jaWR4IDogKHByb3BDaWR4ID8/IG51bGwpLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLnN0YXRlLm1lc3NhZ2UsXG4gICAgICAgIG5vbkVkaXRhYmxlUm93czogXy5pc0RlZmluZWQobm9uRWRpdGFibGVSb3dzKSA/IG5vbkVkaXRhYmxlUm93cygpIDogW10sXG4gICAgICAgIGF0c3RhcnQ6IHRoaXMuc3RhcnRFZGl0aW5nLFxuICAgICAgICBvbkVzY2FwZTogdGhpcy5lc2NhcGVFZGl0aW5nLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5oYW5kbGVDZWxsVXBkYXRlLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENlbGxFZGl0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyAuLi5uZXdDZWxsRWRpdCB9fT5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9DZWxsRWRpdENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIFByb3ZpZGVyOiBDZWxsRWRpdFByb3ZpZGVyLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IENvbnN1bWVyID0gQ2VsbEVkaXRDb250ZXh0LkNvbnN1bWVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcIm9uVXBkYXRlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBDaGVja0JveEVkaXRvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIENoZWNrQm94RWRpdG9yKHByb3BzKSB7XG4gICAgdmFyIF9wcm9wcyRkZWZhdWx0VmFsdWUsIF9wcm9wcyR2YWx1ZTtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENoZWNrQm94RWRpdG9yKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgQ2hlY2tCb3hFZGl0b3IsIFtwcm9wc10pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY2hlY2tlZDogKChfcHJvcHMkZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlKSAhPT0gbnVsbCAmJiBfcHJvcHMkZGVmYXVsdFZhbHVlICE9PSB2b2lkIDAgPyBfcHJvcHMkZGVmYXVsdFZhbHVlIDogZmFsc2UpLnRvU3RyaW5nKCkgPT09ICgoX3Byb3BzJHZhbHVlID0gcHJvcHMudmFsdWUpICE9PSBudWxsICYmIF9wcm9wcyR2YWx1ZSAhPT0gdm9pZCAwID8gX3Byb3BzJHZhbHVlIDogXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpWzBdXG4gICAgfTtcbiAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhDaGVja0JveEVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhDaGVja0JveEVkaXRvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgZGlkTW91bnQgPSB0aGlzLnByb3BzLmRpZE1vdW50O1xuICAgICAgdGhpcy5jaGVja2JveC5mb2N1cygpO1xuICAgICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyR2YWx1ZTtcbiAgICAgIHZhciBfc3BsaXQgPSAoKF90aGlzJHByb3BzJHZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZSkgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkdmFsdWUgIT09IHZvaWQgMCA/IF90aGlzJHByb3BzJHZhbHVlIDogXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpLFxuICAgICAgICBfc3BsaXQyID0gX3NsaWNlZFRvQXJyYXkoX3NwbGl0LCAyKSxcbiAgICAgICAgcG9zaXRpdmUgPSBfc3BsaXQyWzBdLFxuICAgICAgICBuZWdhdGl2ZSA9IF9zcGxpdDJbMV07XG4gICAgICByZXR1cm4gdGhpcy5jaGVja2JveC5jaGVja2VkID8gcG9zaXRpdmUgOiBuZWdhdGl2ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShlKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkgdGhpcy5wcm9wcy5vbkNoYW5nZShlKTtcbiAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoZWNrZWQ6IHRhcmdldC5jaGVja2VkXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wcyRjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzJGNsYXNzTmFtZSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzJGNsYXNzTmFtZSxcbiAgICAgICAgb25VcGRhdGUgPSBfdGhpcyRwcm9wcy5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShcImVkaXRvciBlZGl0LWNoc2Vja2JveCBjaGVja2JveFwiLCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgX3RoaXMyLmNoZWNrYm94ID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzXG4gICAgICB9LCByZXN0KSwge30sIHtcbiAgICAgICAgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2VcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBDaGVja0JveEVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLFxuLy8gICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuLy8gICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG4vLyBDaGVja0JveEVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgdmFsdWU6IFwib246b2ZmXCIsXG4vLyAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4vLyAgIG9uQ2hhbmdlOiB1bmRlZmluZWQsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDaGVja0JveEVkaXRvcjsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5UeXBlID0gZXhwb3J0cy5FRElUVFlQRSA9IGV4cG9ydHMuREJDTElDS19UT19DRUxMX0VESVQgPSBleHBvcnRzLkNMSUNLX1RPX0NFTExfRURJVCA9IGV4cG9ydHMuREVMQVlfRk9SX0RCQ0xJQ0sgPSBleHBvcnRzLlRJTUVfVE9fQ0xPU0VfTUVTU0FHRSA9IHZvaWQgMDtcbnZhciBjb250ZXh0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL2NvbnRleHRcIikpO1xudmFyIGVkaXRpbmdfY2VsbF9jb25zdW1lcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9lZGl0aW5nLWNlbGwtY29uc3VtZXJcIikpO1xudmFyIHJvd19jb25zdW1lcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9yb3ctY29uc3VtZXJcIikpO1xuZXhwb3J0cy5USU1FX1RPX0NMT1NFX01FU1NBR0UgPSAzMDAwO1xuZXhwb3J0cy5ERUxBWV9GT1JfREJDTElDSyA9IDIwMDtcbmV4cG9ydHMuQ0xJQ0tfVE9fQ0VMTF9FRElUID0gXCJjbGlja1wiO1xuZXhwb3J0cy5EQkNMSUNLX1RPX0NFTExfRURJVCA9IFwiZGJjbGlja1wiO1xuZXhwb3J0cy5FRElUVFlQRSA9IHtcbiAgVEVYVDogXCJ0ZXh0XCIsXG4gIFNFTEVDVDogXCJzZWxlY3RcIixcbiAgVEVYVEFSRUE6IFwidGV4dGFyZWFcIixcbiAgQ0hFQ0tCT1g6IFwiY2hlY2tib3hcIixcbiAgREFURTogXCJkYXRlXCJcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZUNvbnRleHQ6IGNvbnRleHRfMVtcImRlZmF1bHRcIl0sXG4gICAgY3JlYXRlRWRpdGluZ0NlbGw6IGVkaXRpbmdfY2VsbF9jb25zdW1lcl8xW1wiZGVmYXVsdFwiXSxcbiAgICB3aXRoUm93TGV2ZWxDZWxsRWRpdDogcm93X2NvbnN1bWVyXzFbXCJkZWZhdWx0XCJdLFxuICAgIERCQ0xJQ0tfVE9fQ0VMTF9FRElUOiBleHBvcnRzLkRCQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICAgIERFTEFZX0ZPUl9EQkNMSUNLOiBleHBvcnRzLkRFTEFZX0ZPUl9EQkNMSUNLLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfTtcbn07XG5leHBvcnRzLlR5cGUgPSBleHBvcnRzLkVESVRUWVBFOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLlwiKTtcbnZhciBjb250ZXh0XzEgPSByZXF1aXJlKFwiLi9jb250ZXh0XCIpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoQ29tcG9uZW50LCBzZWxlY3RSb3dFbmFibGVkKSB7XG4gIHZhciByZW5kZXJXaXRoQ2VsbEVkaXQgPSBmdW5jdGlvbiByZW5kZXJXaXRoQ2VsbEVkaXQocHJvcHMsIGNlbGxFZGl0KSB7XG4gICAgdmFyIGtleSA9IHByb3BzLnZhbHVlO1xuICAgIHZhciBlZGl0YWJsZVJvdyA9ICEoY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmxlbmd0aCA+IDAgJiYgY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmluZGV4T2Yoa2V5KSA+IC0xKTtcbiAgICB2YXIgYXR0cnMgPSB7fTtcbiAgICBpZiAoc2VsZWN0Um93RW5hYmxlZCAmJiBjZWxsRWRpdC5tb2RlID09PSBfXzEuREJDTElDS19UT19DRUxMX0VESVQpIHtcbiAgICAgIGF0dHJzLkRFTEFZX0ZPUl9EQkNMSUNLID0gX18xLkRFTEFZX0ZPUl9EQkNMSUNLO1xuICAgIH1cbiAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIGF0dHJzKSwge30sIHtcbiAgICAgIGVkaXRpbmdSb3dJZHg6IGNlbGxFZGl0LnJpZHgsXG4gICAgICBlZGl0aW5nQ29sSWR4OiBjZWxsRWRpdC5jaWR4LFxuICAgICAgaXNFZGl0YWJsZTogZWRpdGFibGVSb3csXG4gICAgICBhdHN0YXJ0OiBjZWxsRWRpdC5hdHN0YXJ0LFxuICAgICAgY2xpY2tUb0VkaXQ6IGNlbGxFZGl0Lm1vZGUgPT09IF9fMS5DTElDS19UT19DRUxMX0VESVQsXG4gICAgICBkYmNsaWNrVG9FZGl0OiBjZWxsRWRpdC5tb2RlID09PSBfXzEuREJDTElDS19UT19DRUxMX0VESVRcbiAgICB9KSk7XG4gIH07XG4gIGZ1bmN0aW9uIHdpdGhDb25zdW1lcihwcm9wcykge1xuICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGNvbnRleHRfMS5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGNlbGxFZGl0KSB7XG4gICAgICByZXR1cm4gcmVuZGVyV2l0aENlbGxFZGl0KHByb3BzLCBjZWxsRWRpdCk7XG4gICAgfSk7XG4gIH1cbiAgd2l0aENvbnN1bWVyLmRpc3BsYXlOYW1lID0gXCJXaXRoQ2VsbEVkaXRpbmdSb3dDb25zdW1lclwiO1xuICByZXR1cm4gd2l0aENvbnN1bWVyO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRWYWx1ZVwiLCBcImRpZE1vdW50XCIsIFwiY2xhc3NOYW1lXCIsIFwib25VcGRhdGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIERhdGVFZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBEYXRlRWRpdG9yKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEYXRlRWRpdG9yKTtcbiAgICByZXR1cm4gX2NhbGxTdXBlcih0aGlzLCBEYXRlRWRpdG9yLCBhcmd1bWVudHMpO1xuICB9XG4gIF9pbmhlcml0cyhEYXRlRWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKERhdGVFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQ7XG4gICAgICB0aGlzLmRhdGUudmFsdWVBc0RhdGUgPSBuZXcgRGF0ZShkZWZhdWx0VmFsdWUpO1xuICAgICAgdGhpcy5kYXRlLmZvY3VzKCk7XG4gICAgICBpZiAoZGlkTW91bnQpIHtcbiAgICAgICAgZGlkTW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMyLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkY2xhc3NOYW0sXG4gICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LWRhdGVcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgX3RoaXMuZGF0ZSA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzXG4gICAgICB9LCByZXN0KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gRGF0ZUVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMub2JqZWN0XG4vLyAgIF0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIERhdGVFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBEYXRlRWRpdG9yOyIsbnVsbCwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgRGF0ZUVkaXRvclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG4gIGRpZE1vdW50PzogKCkgPT4gdm9pZDtcbiAgb25VcGRhdGU/OiBhbnk7XG59XG5cbmNsYXNzIERhdGVFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQ8RGF0ZUVkaXRvclByb3BzPiB7XG4gIGRhdGU6IGFueTtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBkZWZhdWx0VmFsdWUgPSBcIlwiLCBkaWRNb3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLmRhdGUudmFsdWVBc0RhdGUgPSBuZXcgRGF0ZShkZWZhdWx0VmFsdWUpO1xuICAgIHRoaXMuZGF0ZS5mb2N1cygpO1xuICAgIGlmIChkaWRNb3VudCkge1xuICAgICAgZGlkTW91bnQoKTtcbiAgICB9XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlLnZhbHVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFwiXCIsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtZGF0ZVwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIHJlZj17KG5vZGUpID0+IHsgdGhpcy5kYXRlID0gbm9kZTsgfX1cbiAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICBjbGFzc05hbWU9e2VkaXRvckNsYXNzfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBEYXRlRWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5vYmplY3Rcbi8vICAgXSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuLy8gRGF0ZUVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogJycsXG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWRcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVFZGl0b3I7XG4iLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBUZXh0RWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbiAgYXV0b1NlbGVjdFRleHQ/OiBib29sZWFuO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uVXBkYXRlOiAocm93OiBvYmplY3QsIGNvbHVtbjogb2JqZWN0LCB2YWx1ZTogYW55KSA9PiB2b2lkO1xufVxuXG5jbGFzcyBUZXh0RWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PFRleHRFZGl0b3JQcm9wcz4ge1xuICB0ZXh0OiBhbnk7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlID0gXCJcIiwgZGlkTW91bnQsIGF1dG9TZWxlY3RUZXh0ID0gZmFsc2UgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy50ZXh0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMudGV4dC5mb2N1cygpO1xuICAgIGlmIChhdXRvU2VsZWN0VGV4dCkgdGhpcy50ZXh0LnNlbGVjdCgpO1xuICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQudmFsdWU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gXCJcIixcbiAgICAgIGRpZE1vdW50LFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIGF1dG9TZWxlY3RUZXh0ID0gZmFsc2UsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dFwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIHJlZj17KG5vZGUpID0+IHsgdGhpcy50ZXh0ID0gbm9kZTsgfX1cbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzc05hbWU9e2VkaXRvckNsYXNzfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBUZXh0RWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5vYmplY3Rcbi8vICAgXSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMubnVtYmVyXG4vLyAgIF0pLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcblxuLy8gVGV4dEVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogbnVsbCxcbi8vICAgZGVmYXVsdFZhbHVlOiAnJyxcbi8vICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0RWRpdG9yO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJub25FZGl0YWJsZVJvd3NcIiwgXCJlcnJvck1lc3NhZ2VcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJvcHRpb25zXCIsIFwicmlkeFwiLCBcImNpZHhcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Db25zdW1lciA9IHZvaWQgMDtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbnZhciBwcm9wX3R5cGVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfXzEgPSByZXF1aXJlKFwiLi5cIik7XG52YXIgQ2VsbEVkaXRDb250ZXh0ID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlQ29udGV4dChudWxsKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKF8sIGRhdGFPcGVyYXRvciwgaXNSZW1vdGVDZWxsRWRpdCwgaGFuZGxlQ2VsbENoYW5nZSkge1xuICB2YXIgQ2VsbEVkaXRQcm92aWRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkZGVmYXVsdCRDb21wKSB7XG4gICAgZnVuY3Rpb24gQ2VsbEVkaXRQcm92aWRlcihwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENlbGxFZGl0UHJvdmlkZXIpO1xuICAgICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIENlbGxFZGl0UHJvdmlkZXIsIFtwcm9wc10pO1xuICAgICAgX3RoaXMuZG9VcGRhdGUgPSBfdGhpcy5kb1VwZGF0ZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLnN0YXJ0RWRpdGluZyA9IF90aGlzLnN0YXJ0RWRpdGluZy5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmVzY2FwZUVkaXRpbmcgPSBfdGhpcy5lc2NhcGVFZGl0aW5nLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuY29tcGxldGVFZGl0aW5nID0gX3RoaXMuY29tcGxldGVFZGl0aW5nLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuaGFuZGxlQ2VsbFVwZGF0ZSA9IF90aGlzLmhhbmRsZUNlbGxVcGRhdGUuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgcmlkeDogbnVsbCxcbiAgICAgICAgY2lkeDogbnVsbCxcbiAgICAgICAgbWVzc2FnZTogbnVsbFxuICAgICAgfTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2luaGVyaXRzKENlbGxFZGl0UHJvdmlkZXIsIF9yZWFjdF8xJGRlZmF1bHQkQ29tcCk7XG4gICAgcmV0dXJuIF9jcmVhdGVDbGFzcyhDZWxsRWRpdFByb3ZpZGVyLCBbe1xuICAgICAga2V5OiBcImhhbmRsZUNlbGxVcGRhdGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDZWxsVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgdmFyIG5ld1ZhbHVlV2l0aFR5cGUgPSBkYXRhT3BlcmF0b3IudHlwZUNvbnZlcnQoY29sdW1uLnR5cGUsIG5ld1ZhbHVlKTtcbiAgICAgICAgdmFyIGNlbGxFZGl0ID0gdGhpcy5wcm9wcy5jZWxsRWRpdDtcbiAgICAgICAgdmFyIGJlZm9yZVNhdmVDZWxsID0gY2VsbEVkaXQub3B0aW9ucy5iZWZvcmVTYXZlQ2VsbDtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gXy5nZXQocm93LCBjb2x1bW4uZGF0YUZpZWxkKTtcbiAgICAgICAgdmFyIGJlZm9yZVNhdmVDZWxsRG9uZSA9IGZ1bmN0aW9uIGJlZm9yZVNhdmVDZWxsRG9uZSgpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIF90aGlzMi5kb1VwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWVXaXRoVHlwZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzMi5lc2NhcGVFZGl0aW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGJlZm9yZVNhdmVDZWxsKSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBiZWZvcmVTYXZlQ2VsbChvbGRWYWx1ZSwgbmV3VmFsdWVXaXRoVHlwZSwgcm93LCBjb2x1bW4sIGJlZm9yZVNhdmVDZWxsRG9uZSk7XG4gICAgICAgICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSAmJiByZXN1bHQuYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb1VwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWVXaXRoVHlwZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRvVXBkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAga2V5RmllbGQgPSBfdGhpcyRwcm9wcy5rZXlGaWVsZCxcbiAgICAgICAgICBjZWxsRWRpdCA9IF90aGlzJHByb3BzLmNlbGxFZGl0LFxuICAgICAgICAgIGRhdGEgPSBfdGhpcyRwcm9wcy5kYXRhO1xuICAgICAgICB2YXIgYWZ0ZXJTYXZlQ2VsbCA9IGNlbGxFZGl0Lm9wdGlvbnMuYWZ0ZXJTYXZlQ2VsbDtcbiAgICAgICAgdmFyIHJvd0lkID0gXy5nZXQocm93LCBrZXlGaWVsZCk7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICAgIGlmIChpc1JlbW90ZUNlbGxFZGl0KCkpIHtcbiAgICAgICAgICBoYW5kbGVDZWxsQ2hhbmdlKHJvd0lkLCBjb2x1bW4uZGF0YUZpZWxkLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YU9wZXJhdG9yLmVkaXRDZWxsKGRhdGEsIGtleUZpZWxkLCByb3dJZCwgY29sdW1uLmRhdGFGaWVsZCwgbmV3VmFsdWUpO1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24oYWZ0ZXJTYXZlQ2VsbCkpIHtcbiAgICAgICAgICAgIGFmdGVyU2F2ZUNlbGwob2xkVmFsdWUsIG5ld1ZhbHVlLCByb3csIGNvbHVtbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY29tcGxldGVFZGl0aW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY29tcGxldGVFZGl0aW5nXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcGxldGVFZGl0aW5nKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmlkeDogbnVsbCxcbiAgICAgICAgICAgIGNpZHg6IG51bGwsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInN0YXJ0RWRpdGluZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0RWRpdGluZyhyaWR4LCBjaWR4KSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgICB2YXIgZWRpdGluZyA9IGZ1bmN0aW9uIGVkaXRpbmcoKSB7XG4gICAgICAgICAgX3RoaXMzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJpZHg6IHJpZHgsXG4gICAgICAgICAgICAgIGNpZHg6IGNpZHhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzZWxlY3RSb3cgPSB0aGlzLnByb3BzLnNlbGVjdFJvdztcbiAgICAgICAgaWYgKCFzZWxlY3RSb3cgfHwgc2VsZWN0Um93LmNsaWNrVG9FZGl0IHx8ICFzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCkge1xuICAgICAgICAgIGVkaXRpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJlc2NhcGVFZGl0aW5nXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZXNjYXBlRWRpdGluZygpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgICAgICBjaWR4OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJGNlbGxFZGl0ID0gdGhpcy5wcm9wcy5jZWxsRWRpdCxcbiAgICAgICAgICBfdGhpcyRwcm9wcyRjZWxsRWRpdCQgPSBfdGhpcyRwcm9wcyRjZWxsRWRpdC5vcHRpb25zLFxuICAgICAgICAgIG5vbkVkaXRhYmxlUm93cyA9IF90aGlzJHByb3BzJGNlbGxFZGl0JC5ub25FZGl0YWJsZVJvd3MsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQkLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICBvcHRpb25zUmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcyRjZWxsRWRpdCQsIF9leGNsdWRlZCksXG4gICAgICAgICAgcHJvcFJpZHggPSBfdGhpcyRwcm9wcyRjZWxsRWRpdC5yaWR4LFxuICAgICAgICAgIHByb3BDaWR4ID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQuY2lkeCxcbiAgICAgICAgICBjZWxsRWRpdFJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMkY2VsbEVkaXQsIF9leGNsdWRlZDIpO1xuICAgICAgICB2YXIgbmV3Q2VsbEVkaXQgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uc1Jlc3QpLCBjZWxsRWRpdFJlc3QpLCB7fSwge1xuICAgICAgICAgIHJpZHg6IHRoaXMuc3RhdGUucmlkeCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUucmlkeCA6IHByb3BSaWR4ICE9PSBudWxsICYmIHByb3BSaWR4ICE9PSB2b2lkIDAgPyBwcm9wUmlkeCA6IG51bGwsXG4gICAgICAgICAgY2lkeDogdGhpcy5zdGF0ZS5jaWR4ICE9PSBudWxsID8gdGhpcy5zdGF0ZS5jaWR4IDogcHJvcENpZHggIT09IG51bGwgJiYgcHJvcENpZHggIT09IHZvaWQgMCA/IHByb3BDaWR4IDogbnVsbCxcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0YXRlLm1lc3NhZ2UsXG4gICAgICAgICAgbm9uRWRpdGFibGVSb3dzOiBfLmlzRGVmaW5lZChub25FZGl0YWJsZVJvd3MpID8gbm9uRWRpdGFibGVSb3dzKCkgOiBbXSxcbiAgICAgICAgICBhdHN0YXJ0OiB0aGlzLnN0YXJ0RWRpdGluZyxcbiAgICAgICAgICBvbkVzY2FwZTogdGhpcy5lc2NhcGVFZGl0aW5nLFxuICAgICAgICAgIG9uVXBkYXRlOiB0aGlzLmhhbmRsZUNlbGxVcGRhdGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KENlbGxFZGl0Q29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgIHZhbHVlOiBfb2JqZWN0U3ByZWFkKHt9LCBuZXdDZWxsRWRpdClcbiAgICAgICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfV0sIFt7XG4gICAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcHMuY2VsbEVkaXQgJiYgXy5pc0Z1bmN0aW9uKGlzUmVtb3RlQ2VsbEVkaXQpICYmIGlzUmVtb3RlQ2VsbEVkaXQoKSkge1xuICAgICAgICAgIGlmIChuZXh0UHJvcHMuY2VsbEVkaXQub3B0aW9ucy5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG5leHRQcm9wcy5jZWxsRWRpdC5vcHRpb25zLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcmlkeDogcHJldlN0YXRlLnJpZHgsXG4gICAgICAgICAgICAgIGNpZHg6IHByZXZTdGF0ZS5jaWR4LFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7fSwgcHJldlN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1dKTtcbiAgfShyZWFjdF8xW1wiZGVmYXVsdFwiXS5Db21wb25lbnQpO1xuICBDZWxsRWRpdFByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgICBkYXRhOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgc2VsZWN0Um93OiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm9iamVjdCxcbiAgICBvcHRpb25zOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLnNoYXBlKHtcbiAgICAgIG1vZGU6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub25lT2YoW19fMS5DTElDS19UT19DRUxMX0VESVQsIF9fMS5EQkNMSUNLX1RPX0NFTExfRURJVF0pLmlzUmVxdWlyZWQsXG4gICAgICBvbkVycm9yTWVzc2FnZURpc2FwcGVhcjogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLFxuICAgICAgYmx1clRvU2F2ZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5ib29sLFxuICAgICAgYmVmb3JlU2F2ZUNlbGw6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYyxcbiAgICAgIGFmdGVyU2F2ZUNlbGw6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYyxcbiAgICAgIG9uU3RhcnRFZGl0OiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gICAgICBub25FZGl0YWJsZVJvd3M6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYyxcbiAgICAgIHRpbWVUb0Nsb3NlTWVzc2FnZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5udW1iZXIsXG4gICAgICBlcnJvck1lc3NhZ2U6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uYW55XG4gICAgfSlcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogQ2VsbEVkaXRQcm92aWRlclxuICB9O1xufTtcbmV4cG9ydHMuQ29uc3VtZXIgPSBDZWxsRWRpdENvbnRleHQuQ29uc3VtZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImdldE9wdGlvbnNcIiwgXCJjbGFzc05hbWVcIiwgXCJvblVwZGF0ZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgY2xhc3NuYW1lc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgRHJvcERvd25FZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBEcm9wRG93bkVkaXRvcihwcm9wcykge1xuICAgIHZhciBfcHJvcHMkb3B0aW9ucztcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERyb3BEb3duRWRpdG9yKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRHJvcERvd25FZGl0b3IsIFtwcm9wc10pO1xuICAgIHZhciBvcHRpb25zID0gKF9wcm9wcyRvcHRpb25zID0gcHJvcHMub3B0aW9ucykgIT09IG51bGwgJiYgX3Byb3BzJG9wdGlvbnMgIT09IHZvaWQgMCA/IF9wcm9wcyRvcHRpb25zIDogW107XG4gICAgaWYgKHByb3BzLmdldE9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBwcm9wcy5nZXRPcHRpb25zKF90aGlzLnNldE9wdGlvbnMuYmluZChfdGhpcyksIHtcbiAgICAgICAgcm93OiBwcm9wcy5yb3csXG4gICAgICAgIGNvbHVtbjogcHJvcHMuY29sdW1uXG4gICAgICB9KSB8fCBbXTtcbiAgICB9XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKERyb3BEb3duRWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKERyb3BEb3duRWRpdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGRlZmF1bHRWYSA9IF90aGlzJHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMkZGVmYXVsdFZhID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50O1xuICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB0aGlzLnNlbGVjdC5mb2N1cygpO1xuICAgICAgaWYgKGRpZE1vdW50KSB7XG4gICAgICAgIGRpZE1vdW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldE9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyJGRlZmF1bHRWID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzMi5kaWRNb3VudCxcbiAgICAgICAgZ2V0T3B0aW9ucyA9IF90aGlzJHByb3BzMi5nZXRPcHRpb25zLFxuICAgICAgICBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkY2xhc3NOYW0sXG4gICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXNlbGVjdFwiKTtcbiAgICAgIHZhciBhdHRyID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0KSwge30sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGF0dHIpLCB7fSwge1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgX3RoaXMyLnNlbGVjdCA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlXG4gICAgICB9KSwgdGhpcy5zdGF0ZS5vcHRpb25zLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgICAgICAgIHZhbHVlID0gX3JlZi52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogdmFsdWUsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0sIGxhYmVsKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBEcm9wRG93bkVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIHJvdzogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5udW1iZXJcbi8vICAgXSksXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG9wdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55XG4vLyAgICAgfSkpXG4vLyAgIF0pLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGdldE9wdGlvbnM6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuLy8gRHJvcERvd25FZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBzdHlsZToge30sXG4vLyAgIG9wdGlvbnM6IFtdLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gICBnZXRPcHRpb25zOiB1bmRlZmluZWRcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IERyb3BEb3duRWRpdG9yOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50LCBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIENoZWNrQm94RWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBkZWZhdWx0VmFsdWU/OiBhbnk7XG4gIG9uQ2hhbmdlPzogKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uVXBkYXRlPzogYW55O1xufVxuXG5pbnRlcmZhY2UgQ2hlY2tCb3hFZGl0b3JTdGF0ZSB7XG4gIGNoZWNrZWQ6IGJvb2xlYW47XG59XG5cbmNsYXNzIENoZWNrQm94RWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PFxuICBDaGVja0JveEVkaXRvclByb3BzLFxuICBDaGVja0JveEVkaXRvclN0YXRlXG4+IHtcbiAgY2hlY2tib3g6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2hlY2tCb3hFZGl0b3JQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY2hlY2tlZDpcbiAgICAgICAgKHByb3BzLmRlZmF1bHRWYWx1ZSA/PyBmYWxzZSkudG9TdHJpbmcoKSA9PT1cbiAgICAgICAgKHByb3BzLnZhbHVlID8/IFwib246b2ZmXCIpLnNwbGl0KFwiOlwiKVswXSxcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZGlkTW91bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5jaGVja2JveC5mb2N1cygpO1xuICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIGNvbnN0IFtwb3NpdGl2ZSwgbmVnYXRpdmVdID0gKHRoaXMucHJvcHMudmFsdWUgPz8gXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpO1xuICAgIHJldHVybiB0aGlzLmNoZWNrYm94LmNoZWNrZWQgPyBwb3NpdGl2ZSA6IG5lZ2F0aXZlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlKGU6IGFueSkge1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKGUpO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBlO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgY2hlY2tlZDogdGFyZ2V0LmNoZWNrZWQgfSkpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IGZhbHNlLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgb25VcGRhdGUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjcyhcImVkaXRvciBlZGl0LWNoc2Vja2JveCBjaGVja2JveFwiLCBjbGFzc05hbWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgcmVmPXsobm9kZSkgPT4geyB0aGlzLmNoZWNrYm94ID0gbm9kZTsgfX1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGNoZWNrZWQ9e3RoaXMuc3RhdGUuY2hlY2tlZH1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbi8vIENoZWNrQm94RWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4vLyAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4vLyAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcblxuLy8gQ2hlY2tCb3hFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIHZhbHVlOiBcIm9uOm9mZlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuLy8gICBvbkNoYW5nZTogdW5kZWZpbmVkLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tCb3hFZGl0b3I7XG4iLCIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1Nik7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwicmVxdWlyZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXyIsIkNvbXBvbmVudCIsInNlbGVjdFJvd0VuYWJsZWQiLCJ3aXRoQ29uc3VtZXIiLCJwcm9wcyIsIkNvbnN1bWVyIiwiY2VsbEVkaXQiLCJrZXkiLCJ2YWx1ZSIsImVkaXRhYmxlUm93Iiwibm9uRWRpdGFibGVSb3dzIiwibGVuZ3RoIiwiaW5kZXhPZiIsImF0dHJzIiwibW9kZSIsIkRCQ0xJQ0tfVE9fQ0VMTF9FRElUIiwiREVMQVlfRk9SX0RCQ0xJQ0siLCJlZGl0aW5nUm93SWR4IiwicmlkeCIsImVkaXRpbmdDb2xJZHgiLCJjaWR4IiwiaXNFZGl0YWJsZSIsImF0c3RhcnQiLCJjbGlja1RvRWRpdCIsIkNMSUNLX1RPX0NFTExfRURJVCIsImRiY2xpY2tUb0VkaXQiLCJyZW5kZXJXaXRoQ2VsbEVkaXQiLCJkaXNwbGF5TmFtZSIsIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsIl9fZXNNb2R1bGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3BfdHlwZXNfMSIsInJlYWN0XzEiLCJFZGl0b3JJbmRpY2F0b3IiLCJfcmVmIiwiaW52YWxpZE1lc3NhZ2UiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicm9sZSIsInByb3BUeXBlcyIsInN0cmluZyIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9leGNsdWRlZCIsIm93bktleXMiLCJlIiwiciIsInQiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfZGVmaW5lUHJvcGVydGllcyIsImkiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfdG9QcmltaXRpdmUiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiUmVmZXJlbmNlRXJyb3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsImJpbmQiLCJfX3Byb3RvX18iLCJfc2V0UHJvdG90eXBlT2YiLCJfb3duS2V5cyIsIl9fY3JlYXRlQmluZGluZyIsImNyZWF0ZSIsIm0iLCJrIiwiazIiLCJ1bmRlZmluZWQiLCJkZXNjIiwiZ2V0IiwiX19zZXRNb2R1bGVEZWZhdWx0IiwidiIsIl9faW1wb3J0U3RhciIsImdldE93blByb3BlcnR5TmFtZXMiLCJhciIsImhhc093blByb3BlcnR5IiwicmVzdWx0IiwiY2xhc3NuYW1lc18xIiwiVGV4dEVkaXRvciIsIl9yZWFjdF8xJENvbXBvbmVudCIsImEiLCJuIiwiX2NsYXNzQ2FsbENoZWNrIiwidGhpcyIsImFyZ3VtZW50cyIsIl9pbmhlcml0cyIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMkZGVmYXVsdFZhIiwiZGVmYXVsdFZhbHVlIiwiZGlkTW91bnQiLCJfdGhpcyRwcm9wcyRhdXRvU2VsZWMiLCJhdXRvU2VsZWN0VGV4dCIsInRleHQiLCJmb2N1cyIsInNlbGVjdCIsIl90aGlzIiwiX3RoaXMkcHJvcHMyIiwiX3RoaXMkcHJvcHMyJGNsYXNzTmFtIiwicmVzdCIsIm9uVXBkYXRlIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImVkaXRvckNsYXNzIiwiZm9yRWFjaCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX29iamVjdFNwcmVhZCIsInJlZiIsIm5vZGUiLCJ0eXBlIiwiRHJvcERvd25FZGl0b3IiLCJzdXBlciIsIm9wdGlvbnMiLCJnZXRPcHRpb25zIiwic2V0T3B0aW9ucyIsInJvdyIsImNvbHVtbiIsInN0YXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJzZXRTdGF0ZSIsImdldFZhbHVlIiwicmVuZGVyIiwiYXR0ciIsIm1hcCIsImxhYmVsIiwiVGV4dEFyZWFFZGl0b3IiLCJoYW5kbGVLZXlEb3duIiwia2V5Q29kZSIsInNoaWZ0S2V5Iiwib25LZXlEb3duIiwiX3RoaXMyIiwiXyIsIm9uU3RhcnRFZGl0IiwiaW5kaWNhdG9yVGltZXIiLCJjbGVhclRpbWVyIiwiaGFuZGxlQmx1ciIsImhhbmRsZUNsaWNrIiwiYmVmb3JlQ29tcGxldGUiLCJhc3luY2JlZm9yZUNvbXBldGUiLCJkaXNwbGF5RXJyb3JNZXNzYWdlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJtZXNzYWdlIiwiaXNEZWZpbmVkIiwiY3JlYXRlVGltZXIiLCJjbGVhclRpbWVvdXQiLCJ0aW1lVG9DbG9zZU1lc3NhZ2UiLCJvbkVycm9yTWVzc2FnZURpc2FwcGVhciIsInNsZWVwIiwiaXNGdW5jdGlvbiIsIm5ld1ZhbHVlIiwidmFsaWQiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZUZvcm0iLCJpc09iamVjdCIsImFzeW5jIiwib25Fc2NhcGUiLCJibHVyVG9TYXZlIiwiZWRpdG9yIiwidGFyZ2V0IiwidGFnTmFtZSIsInN0b3BQcm9wYWdhdGlvbiIsInN0eWxlIiwicm93SW5kZXgiLCJjb2x1bW5JbmRleCIsImRhdGFGaWVsZCIsImhhc0Vycm9yIiwiY3VzdG9tRWRpdG9yQ2xhc3MiLCJlZGl0b3JDbGFzc2VzIiwiZWRpdG9yU3R5bGUiLCJlZGl0b3JQcm9wcyIsImFuaW1hdGVkIiwic2hha2UiLCJvbkJsdXIiLCJpc0RlZmF1bHRFZGl0b3JEZWZpbmVkIiwiZWRpdG9yUmVuZGVyZXIiLCJFRElUVFlQRSIsIlNFTEVDVCIsIlRFWFRBUkVBIiwiQ0hFQ0tCT1giLCJEQVRFIiwib25DbGljayIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJudW1iZXIiLCJmdW5jIiwiYm9vbCIsImRlZmF1bHRQcm9wcyIsIlRJTUVfVE9fQ0xPU0VfTUVTU0FHRSIsIl9fMSIsImNoZWNrYm94X2VkaXRvcl8xIiwiZGF0ZV9lZGl0b3JfMSIsImRyb3Bkb3duX2VkaXRvcl8xIiwiZWRpdG9yX2luZGljYXRvcl8xIiwidGV4dF9lZGl0b3JfMSIsInRleHRhcmVhX2VkaXRvcl8xIiwiX2EiLCJFZGl0aW5nQ2VsbCIsIl90aGlzMyIsIl90aGlzMyRwcm9wcyIsIl90aGlzJHByb3BzMyIsIl9jb2x1bW4kZWRpdG9yIiwiX2NvbHVtbiRlZGl0b3IyIiwiX2NvbHVtbiRlZGl0b3IzIiwiX2NvbHVtbiRlZGl0b3I0IiwiX3RoaXM0IiwiX3RoaXMkcHJvcHM0IiwiY29udGV4dF8xIiwiZWRpdGluZ19jZWxsXzEiLCJjb250ZW50IiwiZWRpdENlbGxzdHlsZSIsImVkaXRDZWxsU3R5bGUiLCJlZGl0Q2VsbGNsYXNzZXMiLCJlZGl0Q2VsbENsYXNzZXMiLCJyZW5kZXJXaXRoRWRpdGluZ0NlbGwiLCJDZWxsRWRpdENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZGF0YU9wZXJhdG9yIiwiaXNSZW1vdGVDZWxsRWRpdCIsImhhbmRsZUNlbGxDaGFuZ2UiLCJDZWxsRWRpdFByb3ZpZGVyIiwiZG9VcGRhdGUiLCJzdGFydEVkaXRpbmciLCJlc2NhcGVFZGl0aW5nIiwiY29tcGxldGVFZGl0aW5nIiwiaGFuZGxlQ2VsbFVwZGF0ZSIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIm5leHRQcm9wcyIsInByZXZTdGF0ZSIsImVycm9yTWVzc2FnZSIsIm5ld1ZhbHVlV2l0aFR5cGUiLCJ0eXBlQ29udmVydCIsImJlZm9yZVNhdmVDZWxsIiwib2xkVmFsdWUiLCJiZWZvcmVTYXZlQ2VsbERvbmUiLCJrZXlGaWVsZCIsImRhdGEiLCJhZnRlclNhdmVDZWxsIiwicm93SWQiLCJlZGl0Q2VsbCIsImVkaXRpbmciLCJzZWxlY3RSb3ciLCJjbGlja1RvU2VsZWN0Iiwib3B0aW9uc1Jlc3QiLCJwcm9wUmlkeCIsInByb3BDaWR4IiwiY2VsbEVkaXRSZXN0IiwibmV3Q2VsbEVkaXQiLCJQcm92aWRlciIsImNoaWxkcmVuIiwiYXJyYXkiLCJzaGFwZSIsIm9uZU9mIiwiYW55IiwiX3NsaWNlZFRvQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJsIiwidSIsImYiLCJuZXh0IiwiZG9uZSIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJDaGVja0JveEVkaXRvciIsIl9wcm9wcyRkZWZhdWx0VmFsdWUiLCJfcHJvcHMkdmFsdWUiLCJjaGVja2VkIiwic3BsaXQiLCJoYW5kbGVDaGFuZ2UiLCJjaGVja2JveCIsIl90aGlzJHByb3BzJHZhbHVlIiwiX3NwbGl0MiIsInBvc2l0aXZlIiwibmVnYXRpdmUiLCJvbkNoYW5nZSIsIl90aGlzJHByb3BzJGNsYXNzTmFtZSIsIlR5cGUiLCJlZGl0aW5nX2NlbGxfY29uc3VtZXJfMSIsInJvd19jb25zdW1lcl8xIiwiVEVYVCIsImNyZWF0ZUVkaXRpbmdDZWxsIiwid2l0aFJvd0xldmVsQ2VsbEVkaXQiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJlcnIiLCJFcnJvciIsImdldFNoaW0iLCJSZWFjdFByb3BUeXBlcyIsImJpZ2ludCIsInN5bWJvbCIsImFycmF5T2YiLCJlbGVtZW50IiwiZWxlbWVudFR5cGUiLCJpbnN0YW5jZU9mIiwib2JqZWN0T2YiLCJvbmVPZlR5cGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiRGF0ZUVkaXRvciIsImRhdGUiLCJ2YWx1ZUFzRGF0ZSIsIkRhdGUiLCJfZXhjbHVkZWQyIiwiX3JlYWN0XzEkZGVmYXVsdCRDb21wIiwiX3RoaXMkcHJvcHMkY2VsbEVkaXQiLCJfdGhpcyRwcm9wcyRjZWxsRWRpdCQiLCJfcHJvcHMkb3B0aW9ucyIsIl90aGlzJHByb3BzMiRkZWZhdWx0ViIsImhhc093biIsImNsYXNzTmFtZXMiLCJjbGFzc2VzIiwiYXJnIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwiaW5jbHVkZXMiLCJuZXdDbGFzcyIsImRlZmF1bHQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=