Created
June 29, 2018 11:12
-
-
Save kmelve/e9972918c3eb84e5ce566bdb95281bcd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],t):"object"==typeof exports?exports.Dropzone=t(require("react"),require("prop-types")):e.Dropzone=t(e.React,e.PropTypes)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),f=n(1),p=r(f),d=n(2),v=r(d),h=n(3),g=n(5),y=r(g),m=function(e){function t(e,n){a(this,t);var r=c(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return r.renderChildren=function(e,t,n,o){return"function"==typeof e?e(s({},r.state,{isDragActive:t,isDragAccept:n,isDragReject:o})):e},r.composeHandlers=r.composeHandlers.bind(r),r.onClick=r.onClick.bind(r),r.onDocumentDrop=r.onDocumentDrop.bind(r),r.onDragEnter=r.onDragEnter.bind(r),r.onDragLeave=r.onDragLeave.bind(r),r.onDragOver=r.onDragOver.bind(r),r.onDragStart=r.onDragStart.bind(r),r.onDrop=r.onDrop.bind(r),r.onFileDialogCancel=r.onFileDialogCancel.bind(r),r.onInputElementClick=r.onInputElementClick.bind(r),r.setRef=r.setRef.bind(r),r.setRefs=r.setRefs.bind(r),r.isFileDialogActive=!1,r.state={draggedFiles:[],acceptedFiles:[],rejectedFiles:[]},r}return u(t,e),l(t,[{key:"componentDidMount",value:function(){var e=this.props.preventDropOnDocument;this.dragTargets=[],e&&(document.addEventListener("dragover",h.onDocumentDragOver,!1),document.addEventListener("drop",this.onDocumentDrop,!1)),this.fileInputEl.addEventListener("click",this.onInputElementClick,!1),window.addEventListener("focus",this.onFileDialogCancel,!1)}},{key:"componentWillUnmount",value:function(){this.props.preventDropOnDocument&&(document.removeEventListener("dragover",h.onDocumentDragOver),document.removeEventListener("drop",this.onDocumentDrop)),null!=this.fileInputEl&&this.fileInputEl.removeEventListener("click",this.onInputElementClick,!1),window.removeEventListener("focus",this.onFileDialogCancel,!1)}},{key:"composeHandlers",value:function(e){return this.props.disabled?null:e}},{key:"onDocumentDrop",value:function(e){this.node&&this.node.contains(e.target)||(e.preventDefault(),this.dragTargets=[])}},{key:"onDragStart",value:function(e){this.props.onDragStart&&this.props.onDragStart.call(this,e)}},{key:"onDragEnter",value:function(e){e.preventDefault(),-1===this.dragTargets.indexOf(e.target)&&this.dragTargets.push(e.target),this.setState({isDragActive:!0,draggedFiles:(0,h.getDataTransferItems)(e)}),this.props.onDragEnter&&this.props.onDragEnter.call(this,e)}},{key:"onDragOver",value:function(e){e.preventDefault(),e.stopPropagation();try{e.dataTransfer.dropEffect=this.isFileDialogActive?"none":"copy"}catch(e){}return this.props.onDragOver&&this.props.onDragOver.call(this,e),!1}},{key:"onDragLeave",value:function(e){var t=this;e.preventDefault(),this.dragTargets=this.dragTargets.filter(function(n){return n!==e.target&&t.node.contains(n)}),this.dragTargets.length>0||(this.setState({isDragActive:!1,draggedFiles:[]}),this.props.onDragLeave&&this.props.onDragLeave.call(this,e))}},{key:"onDrop",value:function(e){var t=this,n=this.props,r=n.onDrop,o=n.onDropAccepted,a=n.onDropRejected,c=n.multiple,u=n.disablePreview,s=n.accept,l=(0,h.getDataTransferItems)(e),f=[],p=[];e.preventDefault(),this.dragTargets=[],this.isFileDialogActive=!1,l.forEach(function(e){if(!u)try{e.preview=window.URL.createObjectURL(e)}catch(e){}(0,h.fileAccepted)(e,s)&&(0,h.fileMatchSize)(e,t.props.maxSize,t.props.minSize)?f.push(e):p.push(e)}),c||p.push.apply(p,i(f.splice(1))),r&&r.call(this,f,p,e),p.length>0&&a&&a.call(this,p,e),f.length>0&&o&&o.call(this,f,e),this.draggedFiles=null,this.setState({isDragActive:!1,draggedFiles:[],acceptedFiles:f,rejectedFiles:p})}},{key:"onClick",value:function(e){var t=this.props,n=t.onClick;t.disableClick||(e.stopPropagation(),n&&n.call(this,e),(0,h.isIeOrEdge)()?setTimeout(this.open.bind(this),0):this.open())}},{key:"onInputElementClick",value:function(e){e.stopPropagation(),this.props.inputProps&&this.props.inputProps.onClick&&this.props.inputProps.onClick()}},{key:"onFileDialogCancel",value:function(){var e=this,t=this.props.onFileDialogCancel;this.isFileDialogActive&&setTimeout(function(){if(null!=e.fileInputEl){e.fileInputEl.files.length||(e.isFileDialogActive=!1)}"function"==typeof t&&t()},300)}},{key:"setRef",value:function(e){this.node=e}},{key:"setRefs",value:function(e){this.fileInputEl=e}},{key:"open",value:function(){this.isFileDialogActive=!0,this.fileInputEl.value=null,this.fileInputEl.click()}},{key:"render",value:function(){var e=this.props,t=e.accept,n=e.acceptClassName,r=e.activeClassName,i=e.children,a=e.disabled,c=e.disabledClassName,u=e.inputProps,l=e.multiple,f=e.name,d=e.rejectClassName,v=o(e,["accept","acceptClassName","activeClassName","children","disabled","disabledClassName","inputProps","multiple","name","rejectClassName"]),g=v.acceptStyle,m=v.activeStyle,b=v.className,D=void 0===b?"":b,x=v.disabledStyle,O=v.rejectStyle,S=v.style,j=o(v,["acceptStyle","activeStyle","className","disabledStyle","rejectStyle","style"]),C=this.state,E=C.isDragActive,w=C.draggedFiles,_=w.length,k=l||_<=1,P=_>0&&(0,h.allFilesAccepted)(w,this.props.accept),A=_>0&&(!P||!k),F=!(D||S||m||g||O||x);E&&r&&(D+=" "+r),P&&n&&(D+=" "+n),A&&d&&(D+=" "+d),a&&c&&(D+=" "+c),F&&(S=y.default.default,m=y.default.active,g=S.active,O=y.default.rejected,x=y.default.disabled);var T=s({position:"relative"},S);m&&E&&(T=s({},T,m)),g&&P&&(T=s({},T,g)),O&&A&&(T=s({},T,O)),x&&a&&(T=s({},T,x));var M={accept:t,disabled:a,type:"file",style:s({position:"absolute",top:0,right:0,bottom:0,left:0,opacity:1e-5,pointerEvents:"none"},u.style),multiple:h.supportMultiple&&l,ref:this.setRefs,onChange:this.onDrop,autoComplete:"off"};f&&f.length&&(M.name=f);var I=(j.acceptedFiles,j.preventDropOnDocument,j.disablePreview,j.disableClick,j.onDropAccepted,j.onDropRejected,j.onFileDialogCancel,j.maxSize,j.minSize,o(j,["acceptedFiles","preventDropOnDocument","disablePreview","disableClick","onDropAccepted","onDropRejected","onFileDialogCancel","maxSize","minSize"]));return p.default.createElement("div",s({className:D,style:T},I,{onClick:this.composeHandlers(this.onClick),onDragStart:this.composeHandlers(this.onDragStart),onDragEnter:this.composeHandlers(this.onDragEnter),onDragOver:this.composeHandlers(this.onDragOver),onDragLeave:this.composeHandlers(this.onDragLeave),onDrop:this.composeHandlers(this.onDrop),ref:this.setRef,"aria-disabled":a}),this.renderChildren(i,E,P,A),p.default.createElement("input",s({},u,M)))}}]),t}(p.default.Component);t.default=m,m.propTypes={accept:v.default.oneOfType([v.default.string,v.default.arrayOf(v.default.string)]),children:v.default.oneOfType([v.default.node,v.default.func]),disableClick:v.default.bool,disabled:v.default.bool,disablePreview:v.default.bool,preventDropOnDocument:v.default.bool,inputProps:v.default.object,multiple:v.default.bool,name:v.default.string,maxSize:v.default.number,minSize:v.default.number,className:v.default.string,activeClassName:v.default.string,acceptClassName:v.default.string,rejectClassName:v.default.string,disabledClassName:v.default.string,style:v.default.object,activeStyle:v.default.object,acceptStyle:v.default.object,rejectStyle:v.default.object,disabledStyle:v.default.object,onClick:v.default.func,onDrop:v.default.func,onDropAccepted:v.default.func,onDropRejected:v.default.func,onDragStart:v.default.func,onDragEnter:v.default.func,onDragOver:v.default.func,onDragLeave:v.default.func,onFileDialogCancel:v.default.func},m.defaultProps={preventDropOnDocument:!0,disabled:!1,disablePreview:!1,disableClick:!1,inputProps:{},multiple:!0,maxSize:1/0,minSize:0},e.exports=t.default},function(t,n){t.exports=e},function(e,n){e.exports=t},function(e,t,n){"use strict";function r(e){var t=[];if(e.dataTransfer){var n=e.dataTransfer;n.files&&n.files.length?t=n.files:n.items&&n.items.length&&(t=n.items)}else e.target&&e.target.files&&(t=e.target.files);return Array.prototype.slice.call(t)}function o(e,t){return"application/x-moz-file"===e.type||(0,p.default)(e,t)}function i(e,t,n){return e.size<=t&&e.size>=n}function a(e,t){return e.every(function(e){return o(e,t)})}function c(e){e.preventDefault()}function u(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}function s(e){return-1!==e.indexOf("Edge/")}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return u(e)||s(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.supportMultiple=void 0,t.getDataTransferItems=r,t.fileAccepted=o,t.fileMatchSize=i,t.allFilesAccepted=a,t.onDocumentDragOver=c,t.isIeOrEdge=l;var f=n(4),p=function(e){return e&&e.__esModule?e:{default:e}}(f);t.supportMultiple="undefined"==typeof document||!document||!document.createElement||"multiple"in document.createElement("input")},function(e,t){e.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=13)}([function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){var n=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=n)},function(e,t,n){e.exports=!n(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(32)("wks"),o=n(9),i=n(0).Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},function(e,t,n){var r=n(0),o=n(2),i=n(8),a=n(22),c=n(10),u=function(e,t,n){var s,l,f,p,d=e&u.F,v=e&u.G,h=e&u.S,g=e&u.P,y=e&u.B,m=v?r:h?r[t]||(r[t]={}):(r[t]||{}).prototype,b=v?o:o[t]||(o[t]={}),D=b.prototype||(b.prototype={});v&&(n=t);for(s in n)l=!d&&m&&void 0!==m[s],f=(l?m:n)[s],p=y&&l?c(f,r):g&&"function"==typeof f?c(Function.call,f):f,m&&a(m,s,f,e&u.U),b[s]!=f&&i(b,s,p),g&&D[s]!=f&&(D[s]=f)};r.core=o,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},function(e,t,n){var r=n(16),o=n(21);e.exports=n(3)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t,n){var r=n(24);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var r=n(28),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return n.some(function(e){var t=e.trim();return"."===t.charAt(0)?r.toLowerCase().endsWith(t.toLowerCase()):t.endsWith("/*")?i===t.replace(/\/.*$/,""):o===t})}return!0},n(14),n(34)},function(e,t,n){n(15),e.exports=n(2).Array.some},function(e,t,n){"use strict";var r=n(7),o=n(25)(3);r(r.P+r.F*!n(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,t,n){var r=n(17),o=n(18),i=n(20),a=Object.defineProperty;t.f=n(3)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t,n){e.exports=!n(3)&&!n(4)(function(){return 7!=Object.defineProperty(n(19)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var r=n(1),o=n(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t,n){var r=n(1);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(0),o=n(8),i=n(23),a=n(9)("src"),c=Function.toString,u=(""+c).split("toString");n(2).inspectSource=function(e){return c.call(e)},(e.exports=function(e,t,n,c){var s="function"==typeof n;s&&(i(n,"name")||o(n,"name",t)),e[t]!==n&&(s&&(i(n,a)||o(n,a,e[t]?""+e[t]:u.join(String(t)))),e===r?e[t]=n:c?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||c.call(this)})},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var r=n(10),o=n(26),i=n(27),a=n(12),c=n(29);e.exports=function(e,t){var n=1==e,u=2==e,s=3==e,l=4==e,f=6==e,p=5==e||f,d=t||c;return function(t,c,v){for(var h,g,y=i(t),m=o(y),b=r(c,v,3),D=a(m.length),x=0,O=n?d(t,D):u?d(t,0):void 0;D>x;x++)if((p||x in m)&&(h=m[x],g=b(h,x,y),e))if(n)O[x]=g;else if(g)switch(e){case 3:return!0;case 5:return h;case 6:return x;case 2:O.push(h)}else if(l)return!1;return f?-1:s||l?l:O}}},function(e,t,n){var r=n(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){var r=n(11);e.exports=function(e){return Object(r(e))}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(30);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){var r=n(1),o=n(31),i=n(6)("species");e.exports=function(e){var t;return o(e)&&(t=e.constructor,"function"!=typeof t||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},function(e,t,n){var r=n(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,t,n){"use strict";var r=n(4);e.exports=function(e,t){return!!e&&r(function(){t?e.call(null,function(){},1):e.call(null)})}},function(e,t,n){n(35),e.exports=n(2).String.endsWith},function(e,t,n){"use strict";var r=n(7),o=n(12),i=n(36),a="".endsWith;r(r.P+r.F*n(38)("endsWith"),"String",{endsWith:function(e){var t=i(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,r=o(t.length),c=void 0===n?r:Math.min(o(n),r),u=String(e);return a?a.call(t,u,c):t.slice(c-u.length,c)===u}})},function(e,t,n){var r=n(37),o=n(11);e.exports=function(e,t,n){if(r(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(e))}},function(e,t,n){var r=n(1),o=n(5),i=n(6)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==o(e))}},function(e,t,n){var r=n(6)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}}])},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={rejected:{borderStyle:"solid",borderColor:"#c66",backgroundColor:"#eee"},disabled:{opacity:.5},active:{borderStyle:"solid",borderColor:"#6c6",backgroundColor:"#eee"},default:{width:200,height:200,borderWidth:2,borderColor:"#666",borderStyle:"dashed",borderRadius:5}},e.exports=t.default}])}); | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMmM4MGQ3OWI1YmI5YTgxNmExNzQiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJQcm9wVHlwZXNcIixcImNvbW1vbmpzMlwiOlwicHJvcC10eXBlc1wiLFwiY29tbW9uanNcIjpcInByb3AtdHlwZXNcIixcImFtZFwiOlwicHJvcC10eXBlc1wifSIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F0dHItYWNjZXB0L2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL3N0eWxlcy5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsInRoaXMiLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzFfXyIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fIiwibW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImluc3RhbGxlZE1vZHVsZXMiLCJpIiwibCIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIm9iaiIsImRlZmF1bHQiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJrZXlzIiwidGFyZ2V0IiwiaW5kZXhPZiIsIl90b0NvbnN1bWFibGVBcnJheSIsImFyciIsIkFycmF5IiwiaXNBcnJheSIsImFycjIiLCJsZW5ndGgiLCJmcm9tIiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiUmVmZXJlbmNlRXJyb3IiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsInZhbHVlIiwid3JpdGFibGUiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9leHRlbmRzIiwiYXNzaWduIiwiYXJndW1lbnRzIiwic291cmNlIiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsInByb3BzIiwiZGVzY3JpcHRvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9yZWFjdCIsIl9yZWFjdDIiLCJfcHJvcFR5cGVzIiwiX3Byb3BUeXBlczIiLCJfdXRpbHMiLCJfc3R5bGVzIiwiX3N0eWxlczIiLCJEcm9wem9uZSIsIl9SZWFjdCRDb21wb25lbnQiLCJjb250ZXh0IiwiX3RoaXMiLCJnZXRQcm90b3R5cGVPZiIsInJlbmRlckNoaWxkcmVuIiwiY2hpbGRyZW4iLCJpc0RyYWdBY3RpdmUiLCJpc0RyYWdBY2NlcHQiLCJpc0RyYWdSZWplY3QiLCJzdGF0ZSIsImNvbXBvc2VIYW5kbGVycyIsImJpbmQiLCJvbkNsaWNrIiwib25Eb2N1bWVudERyb3AiLCJvbkRyYWdFbnRlciIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsIm9uRHJhZ1N0YXJ0Iiwib25Ecm9wIiwib25GaWxlRGlhbG9nQ2FuY2VsIiwib25JbnB1dEVsZW1lbnRDbGljayIsInNldFJlZiIsInNldFJlZnMiLCJpc0ZpbGVEaWFsb2dBY3RpdmUiLCJkcmFnZ2VkRmlsZXMiLCJhY2NlcHRlZEZpbGVzIiwicmVqZWN0ZWRGaWxlcyIsInByZXZlbnREcm9wT25Eb2N1bWVudCIsImRyYWdUYXJnZXRzIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwib25Eb2N1bWVudERyYWdPdmVyIiwiZmlsZUlucHV0RWwiLCJ3aW5kb3ciLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlciIsImRpc2FibGVkIiwiZXZ0Iiwibm9kZSIsImNvbnRhaW5zIiwicHJldmVudERlZmF1bHQiLCJwdXNoIiwic2V0U3RhdGUiLCJnZXREYXRhVHJhbnNmZXJJdGVtcyIsInN0b3BQcm9wYWdhdGlvbiIsImRhdGFUcmFuc2ZlciIsImRyb3BFZmZlY3QiLCJlcnIiLCJfdGhpczIiLCJmaWx0ZXIiLCJlbCIsIl90aGlzMyIsIl9wcm9wcyIsIm9uRHJvcEFjY2VwdGVkIiwib25Ecm9wUmVqZWN0ZWQiLCJtdWx0aXBsZSIsImRpc2FibGVQcmV2aWV3IiwiYWNjZXB0IiwiZmlsZUxpc3QiLCJmb3JFYWNoIiwiZmlsZSIsInByZXZpZXciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJmaWxlQWNjZXB0ZWQiLCJmaWxlTWF0Y2hTaXplIiwibWF4U2l6ZSIsIm1pblNpemUiLCJhcHBseSIsInNwbGljZSIsIl9wcm9wczIiLCJkaXNhYmxlQ2xpY2siLCJpc0llT3JFZGdlIiwic2V0VGltZW91dCIsIm9wZW4iLCJpbnB1dFByb3BzIiwiX3RoaXM0IiwiZmlsZXMiLCJyZWYiLCJjbGljayIsIl9wcm9wczMiLCJhY2NlcHRDbGFzc05hbWUiLCJhY3RpdmVDbGFzc05hbWUiLCJkaXNhYmxlZENsYXNzTmFtZSIsInJlamVjdENsYXNzTmFtZSIsInJlc3QiLCJhY2NlcHRTdHlsZSIsImFjdGl2ZVN0eWxlIiwiX3Jlc3QkY2xhc3NOYW1lIiwiY2xhc3NOYW1lIiwidW5kZWZpbmVkIiwiZGlzYWJsZWRTdHlsZSIsInJlamVjdFN0eWxlIiwic3R5bGUiLCJfc3RhdGUiLCJmaWxlc0NvdW50IiwiaXNNdWx0aXBsZUFsbG93ZWQiLCJhbGxGaWxlc0FjY2VwdGVkIiwibm9TdHlsZXMiLCJzdHlsZXMiLCJhY3RpdmUiLCJyZWplY3RlZCIsImFwcGxpZWRTdHlsZSIsInBvc2l0aW9uIiwiaW5wdXRBdHRyaWJ1dGVzIiwidHlwZSIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsIm9wYWNpdHkiLCJwb2ludGVyRXZlbnRzIiwic3VwcG9ydE11bHRpcGxlIiwib25DaGFuZ2UiLCJhdXRvQ29tcGxldGUiLCJkaXZQcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJhcmlhLWRpc2FibGVkIiwiUmVhY3QiLCJDb21wb25lbnQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvbmVPZlR5cGUiLCJzdHJpbmciLCJhcnJheU9mIiwiZnVuYyIsImJvb2wiLCJudW1iZXIiLCJkZWZhdWx0UHJvcHMiLCJJbmZpbml0eSIsImV2ZW50IiwiZGF0YVRyYW5zZmVySXRlbXNMaXN0IiwiZHQiLCJpdGVtcyIsInNsaWNlIiwiX2F0dHJBY2NlcHQyIiwic2l6ZSIsImV2ZXJ5IiwiaXNJZSIsInVzZXJBZ2VudCIsImlzRWRnZSIsIm5hdmlnYXRvciIsIl9hdHRyQWNjZXB0IiwidCIsImUiLCJyIiwiTWF0aCIsIkZ1bmN0aW9uIiwiX19nIiwidmVyc2lvbiIsIl9fZSIsImEiLCJ0b1N0cmluZyIsIlN5bWJvbCIsInUiLCJzdG9yZSIsImYiLCJ2IiwiRiIsInkiLCJHIiwiaCIsIlMiLCJQIiwieCIsIkIiLCJnIiwiYiIsIlUiLCJjb3JlIiwiVyIsIlIiLCJyYW5kb20iLCJjb25jYXQiLCJtaW4iLCJzcGxpdCIsInJlcGxhY2UiLCJzb21lIiwidHJpbSIsImNoYXJBdCIsInRvTG93ZXJDYXNlIiwiZW5kc1dpdGgiLCJ2YWx1ZU9mIiwiaW5zcGVjdFNvdXJjZSIsImpvaW4iLCJTdHJpbmciLCJfIiwidyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiY2VpbCIsImZsb29yIiwiaXNOYU4iLCJib3JkZXJTdHlsZSIsImJvcmRlckNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwid2lkdGgiLCJoZWlnaHQiLCJib3JkZXJXaWR0aCIsImJvcmRlclJhZGl1cyJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBQUEsRUFBQUMsR0FDQSxnQkFBQUMsVUFBQSxnQkFBQUMsUUFDQUEsT0FBQUQsUUFBQUQsRUFBQUcsUUFBQSxTQUFBQSxRQUFBLGVBQ0Esa0JBQUFDLGdCQUFBQyxJQUNBRCxRQUFBLHNCQUFBSixHQUNBLGdCQUFBQyxTQUNBQSxRQUFBLFNBQUFELEVBQUFHLFFBQUEsU0FBQUEsUUFBQSxlQUVBSixFQUFBLFNBQUFDLEVBQUFELEVBQUEsTUFBQUEsRUFBQSxZQUNDLG1CQUFBTyxXQUFBQyxLQUFBLFNBQUFDLEVBQUFDLEdBQ0QsTUNBZ0IsVUFBVUMsR0NOMUIsUUFBQUMsR0FBQUMsR0FHQSxHQUFBQyxFQUFBRCxHQUNBLE1BQUFDLEdBQUFELEdBQUFYLE9BR0EsSUFBQUMsR0FBQVcsRUFBQUQsSUFDQUUsRUFBQUYsRUFDQUcsR0FBQSxFQUNBZCxXQVVBLE9BTkFTLEdBQUFFLEdBQUFJLEtBQUFkLEVBQUFELFFBQUFDLElBQUFELFFBQUFVLEdBR0FULEVBQUFhLEdBQUEsRUFHQWIsRUFBQUQsUUF2QkEsR0FBQVksS0E0REEsT0FoQ0FGLEdBQUFNLEVBQUFQLEVBR0FDLEVBQUFPLEVBQUFMLEVBR0FGLEVBQUFRLEVBQUEsU0FBQWxCLEVBQUFtQixFQUFBQyxHQUNBVixFQUFBVyxFQUFBckIsRUFBQW1CLElBQ0FHLE9BQUFDLGVBQUF2QixFQUFBbUIsR0FDQUssY0FBQSxFQUNBQyxZQUFBLEVBQ0FDLElBQUFOLEtBTUFWLEVBQUFpQixFQUFBLFNBQUExQixHQUNBLEdBQUFtQixHQUFBbkIsS0FBQTJCLFdBQ0EsV0FBMkIsTUFBQTNCLEdBQUEsU0FDM0IsV0FBaUMsTUFBQUEsR0FFakMsT0FEQVMsR0FBQVEsRUFBQUUsRUFBQSxJQUFBQSxHQUNBQSxHQUlBVixFQUFBVyxF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TSxNQUFxRCxTQUFBQSxFQUFBdk0sRUFBQXlNLEdBQWlCLEdBQUFELEdBQUFDLEVBQUEsV0FBb0JGLEdBQUFsTyxRQUFBLFNBQUFrTyxHQUFzQixHQUFBdk0sR0FBQSxHQUFVLEtBQUksTUFBQXVNLEdBQUF2TSxHQUFZLE1BQUF5TSxHQUFTLElBQUksTUFBQXpNLEdBQUF3TSxJQUFBLFNBQUFELEdBQUF2TSxHQUE0QixNQUFBdU0sS0FBVyxjTit6QjN4TixTQUFVak8sRUFBUUQsRUFBU1UsR0FFakMsWUFHQVksUUFBT0MsZUFBZXZCLEVBQVMsY0FDN0I0RCxPQUFPLElBRVQ1RCxFQUFRcUMsU090MEJObUosVUFDRTJGLFlBQWEsUUFDYkMsWUFBYSxPQUNiQyxnQkFBaUIsUUFFbkI5SixVQUNFMEUsUUFBUyxJQUVYVixRQUNFNEYsWUFBYSxRQUNiQyxZQUFhLE9BQ2JDLGdCQUFpQixRQUVuQmhQLFNBQ0VpUCxNQUFPLElBQ1BDLE9BQVEsSUFDUkMsWUFBYSxFQUNiSixZQUFhLE9BQ2JELFlBQWEsU0FDYk0sYUFBYyxJUDAwQmxCeFIsRUFBT0QsUUFBVUEsRUFBaUIiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJwcm9wLXR5cGVzXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkRyb3B6b25lXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJEcm9wem9uZVwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUHJvcFR5cGVzXCJdKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzFfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX18pIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCIsIFwicHJvcC10eXBlc1wiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJEcm9wem9uZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiRHJvcHpvbmVcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlByb3BUeXBlc1wiXSk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvcFR5cGVzKTtcblxudmFyIF91dGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbnZhciBfc3R5bGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxudmFyIF9zdHlsZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3R5bGVzKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfSAvKiBlc2xpbnQgcHJlZmVyLXRlbXBsYXRlOiAwICovXG5cbnZhciBEcm9wem9uZSA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhEcm9wem9uZSwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gRHJvcHpvbmUocHJvcHMsIGNvbnRleHQpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRHJvcHpvbmUpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKERyb3B6b25lLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRHJvcHpvbmUpKS5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XG5cbiAgICBfdGhpcy5yZW5kZXJDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgaXNEcmFnQWN0aXZlLCBpc0RyYWdBY2NlcHQsIGlzRHJhZ1JlamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4oX2V4dGVuZHMoe30sIF90aGlzLnN0YXRlLCB7XG4gICAgICAgICAgaXNEcmFnQWN0aXZlOiBpc0RyYWdBY3RpdmUsXG4gICAgICAgICAgaXNEcmFnQWNjZXB0OiBpc0RyYWdBY2NlcHQsXG4gICAgICAgICAgaXNEcmFnUmVqZWN0OiBpc0RyYWdSZWplY3RcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH07XG5cbiAgICBfdGhpcy5jb21wb3NlSGFuZGxlcnMgPSBfdGhpcy5jb21wb3NlSGFuZGxlcnMuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25DbGljayA9IF90aGlzLm9uQ2xpY2suYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25Eb2N1bWVudERyb3AgPSBfdGhpcy5vbkRvY3VtZW50RHJvcC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkRyYWdFbnRlciA9IF90aGlzLm9uRHJhZ0VudGVyLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRHJhZ0xlYXZlID0gX3RoaXMub25EcmFnTGVhdmUuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25EcmFnT3ZlciA9IF90aGlzLm9uRHJhZ092ZXIuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25EcmFnU3RhcnQgPSBfdGhpcy5vbkRyYWdTdGFydC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkRyb3AgPSBfdGhpcy5vbkRyb3AuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25GaWxlRGlhbG9nQ2FuY2VsID0gX3RoaXMub25GaWxlRGlhbG9nQ2FuY2VsLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uSW5wdXRFbGVtZW50Q2xpY2sgPSBfdGhpcy5vbklucHV0RWxlbWVudENsaWNrLmJpbmQoX3RoaXMpO1xuXG4gICAgX3RoaXMuc2V0UmVmID0gX3RoaXMuc2V0UmVmLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLnNldFJlZnMgPSBfdGhpcy5zZXRSZWZzLmJpbmQoX3RoaXMpO1xuXG4gICAgX3RoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2U7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRyYWdnZWRGaWxlczogW10sXG4gICAgICBhY2NlcHRlZEZpbGVzOiBbXSxcbiAgICAgIHJlamVjdGVkRmlsZXM6IFtdXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRHJvcHpvbmUsIFt7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgPSB0aGlzLnByb3BzLnByZXZlbnREcm9wT25Eb2N1bWVudDtcblxuICAgICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdO1xuXG4gICAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgX3V0aWxzLm9uRG9jdW1lbnREcmFnT3ZlciwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5vbkRvY3VtZW50RHJvcCwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5maWxlSW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbnB1dEVsZW1lbnRDbGljaywgZmFsc2UpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwsIGZhbHNlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdmFyIHByZXZlbnREcm9wT25Eb2N1bWVudCA9IHRoaXMucHJvcHMucHJldmVudERyb3BPbkRvY3VtZW50O1xuXG4gICAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgX3V0aWxzLm9uRG9jdW1lbnREcmFnT3Zlcik7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLm9uRG9jdW1lbnREcm9wKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpbGVJbnB1dEVsICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5maWxlSW5wdXRFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbnB1dEVsZW1lbnRDbGljaywgZmFsc2UpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwsIGZhbHNlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb3NlSGFuZGxlcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb3NlSGFuZGxlcnMoaGFuZGxlcikge1xuICAgICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYW5kbGVyO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRG9jdW1lbnREcm9wJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Eb2N1bWVudERyb3AoZXZ0KSB7XG4gICAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5jb250YWlucyhldnQudGFyZ2V0KSkge1xuICAgICAgICAvLyBpZiB3ZSBpbnRlcmNlcHRlZCBhbiBldmVudCBmb3Igb3VyIGluc3RhbmNlLCBsZXQgaXQgcHJvcGFnYXRlIGRvd24gdG8gdGhlIGluc3RhbmNlJ3Mgb25Ecm9wIGhhbmRsZXJcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmRyYWdUYXJnZXRzID0gW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25EcmFnU3RhcnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkRyYWdTdGFydChldnQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ1N0YXJ0KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EcmFnU3RhcnQuY2FsbCh0aGlzLCBldnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRHJhZ0VudGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25EcmFnRW50ZXIoZXZ0KSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgLy8gQ291bnQgdGhlIGRyb3B6b25lIGFuZCBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgZW50ZXJlZC5cbiAgICAgIGlmICh0aGlzLmRyYWdUYXJnZXRzLmluZGV4T2YoZXZ0LnRhcmdldCkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuZHJhZ1RhcmdldHMucHVzaChldnQudGFyZ2V0KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRHJhZ0FjdGl2ZTogdHJ1ZSwgLy8gRG8gbm90IHJlbHkgb24gZmlsZXMgZm9yIHRoZSBkcmFnIHN0YXRlLiBJdCBkb2Vzbid0IHdvcmsgaW4gU2FmYXJpLlxuICAgICAgICBkcmFnZ2VkRmlsZXM6ICgwLCBfdXRpbHMuZ2V0RGF0YVRyYW5zZmVySXRlbXMpKGV2dClcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdFbnRlcikge1xuICAgICAgICB0aGlzLnByb3BzLm9uRHJhZ0VudGVyLmNhbGwodGhpcywgZXZ0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkRyYWdPdmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25EcmFnT3ZlcihldnQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGUgZmlsZSBkaWFsb2cgb24gQ2hyb21lIGFsbG93cyB1c2VycyB0byBkcmFnIGZpbGVzIGZyb20gdGhlIGRpYWxvZyBvbnRvXG4gICAgICAgIC8vIHRoZSBkcm9wem9uZSwgY2F1c2luZyB0aGUgYnJvd3NlciB0aGUgY3Jhc2ggd2hlbiB0aGUgZmlsZSBkaWFsb2cgaXMgY2xvc2VkLlxuICAgICAgICAvLyBBIGRyb3AgZWZmZWN0IG9mICdub25lJyBwcmV2ZW50cyB0aGUgZmlsZSBmcm9tIGJlaW5nIGRyb3BwZWRcbiAgICAgICAgZXZ0LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gdGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUgPyAnbm9uZScgOiAnY29weSc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIG9mIGVycm9yXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ092ZXIpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkRyYWdPdmVyLmNhbGwodGhpcywgZXZ0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkRyYWdMZWF2ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRHJhZ0xlYXZlKGV2dCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAvLyBPbmx5IGRlYWN0aXZhdGUgb25jZSB0aGUgZHJvcHpvbmUgYW5kIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gbGVmdC5cbiAgICAgIHRoaXMuZHJhZ1RhcmdldHMgPSB0aGlzLmRyYWdUYXJnZXRzLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgcmV0dXJuIGVsICE9PSBldnQudGFyZ2V0ICYmIF90aGlzMi5ub2RlLmNvbnRhaW5zKGVsKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZHJhZ1RhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIGRyYWdnaW5nIGZpbGVzIHN0YXRlXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ0xlYXZlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EcmFnTGVhdmUuY2FsbCh0aGlzLCBldnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRHJvcCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRHJvcChldnQpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkRyb3AgPSBfcHJvcHMub25Ecm9wLFxuICAgICAgICAgIG9uRHJvcEFjY2VwdGVkID0gX3Byb3BzLm9uRHJvcEFjY2VwdGVkLFxuICAgICAgICAgIG9uRHJvcFJlamVjdGVkID0gX3Byb3BzLm9uRHJvcFJlamVjdGVkLFxuICAgICAgICAgIG11bHRpcGxlID0gX3Byb3BzLm11bHRpcGxlLFxuICAgICAgICAgIGRpc2FibGVQcmV2aWV3ID0gX3Byb3BzLmRpc2FibGVQcmV2aWV3LFxuICAgICAgICAgIGFjY2VwdCA9IF9wcm9wcy5hY2NlcHQ7XG5cbiAgICAgIHZhciBmaWxlTGlzdCA9ICgwLCBfdXRpbHMuZ2V0RGF0YVRyYW5zZmVySXRlbXMpKGV2dCk7XG4gICAgICB2YXIgYWNjZXB0ZWRGaWxlcyA9IFtdO1xuICAgICAgdmFyIHJlamVjdGVkRmlsZXMgPSBbXTtcblxuICAgICAgLy8gU3RvcCBkZWZhdWx0IGJyb3dzZXIgYmVoYXZpb3JcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAvLyBSZXNldCB0aGUgY291bnRlciBhbG9uZyB3aXRoIHRoZSBkcmFnIG9uIGEgZHJvcC5cbiAgICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXTtcbiAgICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgIGZpbGVMaXN0LmZvckVhY2goZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgaWYgKCFkaXNhYmxlUHJldmlldykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaWxlLnByZXZpZXcgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBwcmV2aWV3IGZvciBmaWxlJywgZmlsZSwgZXJyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCgwLCBfdXRpbHMuZmlsZUFjY2VwdGVkKShmaWxlLCBhY2NlcHQpICYmICgwLCBfdXRpbHMuZmlsZU1hdGNoU2l6ZSkoZmlsZSwgX3RoaXMzLnByb3BzLm1heFNpemUsIF90aGlzMy5wcm9wcy5taW5TaXplKSkge1xuICAgICAgICAgIGFjY2VwdGVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3RlZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgIC8vIGlmIG5vdCBpbiBtdWx0aSBtb2RlIGFkZCBhbnkgZXh0cmEgYWNjZXB0ZWQgZmlsZXMgdG8gcmVqZWN0ZWQuXG4gICAgICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBlbmQgdXNlcnMgdG8gZWFzaWx5IGlnbm9yZSBhIG11bHRpIGZpbGUgZHJvcCBpbiBcInNpbmdsZVwiIG1vZGUuXG4gICAgICAgIHJlamVjdGVkRmlsZXMucHVzaC5hcHBseShyZWplY3RlZEZpbGVzLCBfdG9Db25zdW1hYmxlQXJyYXkoYWNjZXB0ZWRGaWxlcy5zcGxpY2UoMSkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uRHJvcCkge1xuICAgICAgICBvbkRyb3AuY2FsbCh0aGlzLCBhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzLCBldnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVqZWN0ZWRGaWxlcy5sZW5ndGggPiAwICYmIG9uRHJvcFJlamVjdGVkKSB7XG4gICAgICAgIG9uRHJvcFJlamVjdGVkLmNhbGwodGhpcywgcmVqZWN0ZWRGaWxlcywgZXZ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BBY2NlcHRlZCkge1xuICAgICAgICBvbkRyb3BBY2NlcHRlZC5jYWxsKHRoaXMsIGFjY2VwdGVkRmlsZXMsIGV2dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIGZpbGVzIHZhbHVlXG4gICAgICB0aGlzLmRyYWdnZWRGaWxlcyA9IG51bGw7XG5cbiAgICAgIC8vIFJlc2V0IGRyYWcgc3RhdGVcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICBkcmFnZ2VkRmlsZXM6IFtdLFxuICAgICAgICBhY2NlcHRlZEZpbGVzOiBhY2NlcHRlZEZpbGVzLFxuICAgICAgICByZWplY3RlZEZpbGVzOiByZWplY3RlZEZpbGVzXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkNsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DbGljayhldnQpIHtcbiAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNsaWNrID0gX3Byb3BzMi5vbkNsaWNrLFxuICAgICAgICAgIGRpc2FibGVDbGljayA9IF9wcm9wczIuZGlzYWJsZUNsaWNrO1xuXG4gICAgICBpZiAoIWRpc2FibGVDbGljaykge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgICBvbkNsaWNrLmNhbGwodGhpcywgZXZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluIElFMTEvRWRnZSB0aGUgZmlsZS1icm93c2VyIGRpYWxvZyBpcyBibG9ja2luZywgZW5zdXJlIHRoaXMgaXMgYmVoaW5kIHNldFRpbWVvdXRcbiAgICAgICAgLy8gdGhpcyBpcyBzbyByZWFjdCBjYW4gaGFuZGxlIHN0YXRlIGNoYW5nZXMgaW4gdGhlIG9uQ2xpY2sgcHJvcCBhYm92ZSBhYm92ZVxuICAgICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvNDUwXG4gICAgICAgIGlmICgoMCwgX3V0aWxzLmlzSWVPckVkZ2UpKCkpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMub3Blbi5iaW5kKHRoaXMpLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uSW5wdXRFbGVtZW50Q2xpY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbklucHV0RWxlbWVudENsaWNrKGV2dCkge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKHRoaXMucHJvcHMuaW5wdXRQcm9wcyAmJiB0aGlzLnByb3BzLmlucHV0UHJvcHMub25DbGljaykge1xuICAgICAgICB0aGlzLnByb3BzLmlucHV0UHJvcHMub25DbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRmlsZURpYWxvZ0NhbmNlbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRmlsZURpYWxvZ0NhbmNlbCgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAvLyB0aW1lb3V0IHdpbGwgbm90IHJlY29nbml6ZSBjb250ZXh0IG9mIHRoaXMgbWV0aG9kXG4gICAgICB2YXIgb25GaWxlRGlhbG9nQ2FuY2VsID0gdGhpcy5wcm9wcy5vbkZpbGVEaWFsb2dDYW5jZWw7XG4gICAgICAvLyBleGVjdXRlIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIEZpbGVEaWFsb2cgaXMgb3BlbmVkIGluIHRoZSBicm93c2VyXG5cbiAgICAgIGlmICh0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXM0LmZpbGVJbnB1dEVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IGFzIEZpbGVMaXN0XG4gICAgICAgICAgICB2YXIgZmlsZXMgPSBfdGhpczQuZmlsZUlucHV0RWwuZmlsZXM7XG5cblxuICAgICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgX3RoaXM0LmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25GaWxlRGlhbG9nQ2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvbkZpbGVEaWFsb2dDYW5jZWwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2V0UmVmJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0UmVmKHJlZikge1xuICAgICAgdGhpcy5ub2RlID0gcmVmO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldFJlZnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRSZWZzKHJlZikge1xuICAgICAgdGhpcy5maWxlSW5wdXRFbCA9IHJlZjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT3BlbiBzeXN0ZW0gZmlsZSB1cGxvYWQgZGlhbG9nLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdvcGVuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmlsZUlucHV0RWwudmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5maWxlSW5wdXRFbC5jbGljaygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY2NlcHQgPSBfcHJvcHMzLmFjY2VwdCxcbiAgICAgICAgICBhY2NlcHRDbGFzc05hbWUgPSBfcHJvcHMzLmFjY2VwdENsYXNzTmFtZSxcbiAgICAgICAgICBhY3RpdmVDbGFzc05hbWUgPSBfcHJvcHMzLmFjdGl2ZUNsYXNzTmFtZSxcbiAgICAgICAgICBjaGlsZHJlbiA9IF9wcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgZGlzYWJsZWQgPSBfcHJvcHMzLmRpc2FibGVkLFxuICAgICAgICAgIGRpc2FibGVkQ2xhc3NOYW1lID0gX3Byb3BzMy5kaXNhYmxlZENsYXNzTmFtZSxcbiAgICAgICAgICBpbnB1dFByb3BzID0gX3Byb3BzMy5pbnB1dFByb3BzLFxuICAgICAgICAgIG11bHRpcGxlID0gX3Byb3BzMy5tdWx0aXBsZSxcbiAgICAgICAgICBuYW1lID0gX3Byb3BzMy5uYW1lLFxuICAgICAgICAgIHJlamVjdENsYXNzTmFtZSA9IF9wcm9wczMucmVqZWN0Q2xhc3NOYW1lLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzMywgWydhY2NlcHQnLCAnYWNjZXB0Q2xhc3NOYW1lJywgJ2FjdGl2ZUNsYXNzTmFtZScsICdjaGlsZHJlbicsICdkaXNhYmxlZCcsICdkaXNhYmxlZENsYXNzTmFtZScsICdpbnB1dFByb3BzJywgJ211bHRpcGxlJywgJ25hbWUnLCAncmVqZWN0Q2xhc3NOYW1lJ10pO1xuXG4gICAgICB2YXIgYWNjZXB0U3R5bGUgPSByZXN0LmFjY2VwdFN0eWxlLFxuICAgICAgICAgIGFjdGl2ZVN0eWxlID0gcmVzdC5hY3RpdmVTdHlsZSxcbiAgICAgICAgICBfcmVzdCRjbGFzc05hbWUgPSByZXN0LmNsYXNzTmFtZSxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfcmVzdCRjbGFzc05hbWUgPT09IHVuZGVmaW5lZCA/ICcnIDogX3Jlc3QkY2xhc3NOYW1lLFxuICAgICAgICAgIGRpc2FibGVkU3R5bGUgPSByZXN0LmRpc2FibGVkU3R5bGUsXG4gICAgICAgICAgcmVqZWN0U3R5bGUgPSByZXN0LnJlamVjdFN0eWxlLFxuICAgICAgICAgIHN0eWxlID0gcmVzdC5zdHlsZSxcbiAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhyZXN0LCBbJ2FjY2VwdFN0eWxlJywgJ2FjdGl2ZVN0eWxlJywgJ2NsYXNzTmFtZScsICdkaXNhYmxlZFN0eWxlJywgJ3JlamVjdFN0eWxlJywgJ3N0eWxlJ10pO1xuXG4gICAgICB2YXIgX3N0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBpc0RyYWdBY3RpdmUgPSBfc3RhdGUuaXNEcmFnQWN0aXZlLFxuICAgICAgICAgIGRyYWdnZWRGaWxlcyA9IF9zdGF0ZS5kcmFnZ2VkRmlsZXM7XG5cbiAgICAgIHZhciBmaWxlc0NvdW50ID0gZHJhZ2dlZEZpbGVzLmxlbmd0aDtcbiAgICAgIHZhciBpc011bHRpcGxlQWxsb3dlZCA9IG11bHRpcGxlIHx8IGZpbGVzQ291bnQgPD0gMTtcbiAgICAgIHZhciBpc0RyYWdBY2NlcHQgPSBmaWxlc0NvdW50ID4gMCAmJiAoMCwgX3V0aWxzLmFsbEZpbGVzQWNjZXB0ZWQpKGRyYWdnZWRGaWxlcywgdGhpcy5wcm9wcy5hY2NlcHQpO1xuICAgICAgdmFyIGlzRHJhZ1JlamVjdCA9IGZpbGVzQ291bnQgPiAwICYmICghaXNEcmFnQWNjZXB0IHx8ICFpc011bHRpcGxlQWxsb3dlZCk7XG4gICAgICB2YXIgbm9TdHlsZXMgPSAhY2xhc3NOYW1lICYmICFzdHlsZSAmJiAhYWN0aXZlU3R5bGUgJiYgIWFjY2VwdFN0eWxlICYmICFyZWplY3RTdHlsZSAmJiAhZGlzYWJsZWRTdHlsZTtcblxuICAgICAgaWYgKGlzRHJhZ0FjdGl2ZSAmJiBhY3RpdmVDbGFzc05hbWUpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9ICcgJyArIGFjdGl2ZUNsYXNzTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0RyYWdBY2NlcHQgJiYgYWNjZXB0Q2xhc3NOYW1lKSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSAnICcgKyBhY2NlcHRDbGFzc05hbWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNEcmFnUmVqZWN0ICYmIHJlamVjdENsYXNzTmFtZSkge1xuICAgICAgICBjbGFzc05hbWUgKz0gJyAnICsgcmVqZWN0Q2xhc3NOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKGRpc2FibGVkICYmIGRpc2FibGVkQ2xhc3NOYW1lKSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSAnICcgKyBkaXNhYmxlZENsYXNzTmFtZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vU3R5bGVzKSB7XG4gICAgICAgIHN0eWxlID0gX3N0eWxlczIuZGVmYXVsdC5kZWZhdWx0O1xuICAgICAgICBhY3RpdmVTdHlsZSA9IF9zdHlsZXMyLmRlZmF1bHQuYWN0aXZlO1xuICAgICAgICBhY2NlcHRTdHlsZSA9IHN0eWxlLmFjdGl2ZTtcbiAgICAgICAgcmVqZWN0U3R5bGUgPSBfc3R5bGVzMi5kZWZhdWx0LnJlamVjdGVkO1xuICAgICAgICBkaXNhYmxlZFN0eWxlID0gX3N0eWxlczIuZGVmYXVsdC5kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgdmFyIGFwcGxpZWRTdHlsZSA9IF9leHRlbmRzKHsgcG9zaXRpb246ICdyZWxhdGl2ZScgfSwgc3R5bGUpO1xuICAgICAgaWYgKGFjdGl2ZVN0eWxlICYmIGlzRHJhZ0FjdGl2ZSkge1xuICAgICAgICBhcHBsaWVkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgYXBwbGllZFN0eWxlLCBhY3RpdmVTdHlsZSk7XG4gICAgICB9XG4gICAgICBpZiAoYWNjZXB0U3R5bGUgJiYgaXNEcmFnQWNjZXB0KSB7XG4gICAgICAgIGFwcGxpZWRTdHlsZSA9IF9leHRlbmRzKHt9LCBhcHBsaWVkU3R5bGUsIGFjY2VwdFN0eWxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWplY3RTdHlsZSAmJiBpc0RyYWdSZWplY3QpIHtcbiAgICAgICAgYXBwbGllZFN0eWxlID0gX2V4dGVuZHMoe30sIGFwcGxpZWRTdHlsZSwgcmVqZWN0U3R5bGUpO1xuICAgICAgfVxuICAgICAgaWYgKGRpc2FibGVkU3R5bGUgJiYgZGlzYWJsZWQpIHtcbiAgICAgICAgYXBwbGllZFN0eWxlID0gX2V4dGVuZHMoe30sIGFwcGxpZWRTdHlsZSwgZGlzYWJsZWRTdHlsZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnB1dEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGFjY2VwdDogYWNjZXB0LFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgb3BhY2l0eTogMC4wMDAwMSxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbiAgICAgICAgfSwgaW5wdXRQcm9wcy5zdHlsZSksXG4gICAgICAgIG11bHRpcGxlOiBfdXRpbHMuc3VwcG9ydE11bHRpcGxlICYmIG11bHRpcGxlLFxuICAgICAgICByZWY6IHRoaXMuc2V0UmVmcyxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMub25Ecm9wLFxuICAgICAgICBhdXRvQ29tcGxldGU6ICdvZmYnXG4gICAgICB9O1xuXG4gICAgICBpZiAobmFtZSAmJiBuYW1lLmxlbmd0aCkge1xuICAgICAgICBpbnB1dEF0dHJpYnV0ZXMubmFtZSA9IG5hbWU7XG4gICAgICB9XG5cbiAgICAgIC8vIERlc3RydWN0dXJlIGN1c3RvbSBwcm9wcyBhd2F5IGZyb20gcHJvcHMgdXNlZCBmb3IgdGhlIGRpdiBlbGVtZW50XG5cbiAgICAgIHZhciBhY2NlcHRlZEZpbGVzID0gcHJvcHMuYWNjZXB0ZWRGaWxlcyxcbiAgICAgICAgICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgPSBwcm9wcy5wcmV2ZW50RHJvcE9uRG9jdW1lbnQsXG4gICAgICAgICAgZGlzYWJsZVByZXZpZXcgPSBwcm9wcy5kaXNhYmxlUHJldmlldyxcbiAgICAgICAgICBkaXNhYmxlQ2xpY2sgPSBwcm9wcy5kaXNhYmxlQ2xpY2ssXG4gICAgICAgICAgb25Ecm9wQWNjZXB0ZWQgPSBwcm9wcy5vbkRyb3BBY2NlcHRlZCxcbiAgICAgICAgICBvbkRyb3BSZWplY3RlZCA9IHByb3BzLm9uRHJvcFJlamVjdGVkLFxuICAgICAgICAgIG9uRmlsZURpYWxvZ0NhbmNlbCA9IHByb3BzLm9uRmlsZURpYWxvZ0NhbmNlbCxcbiAgICAgICAgICBtYXhTaXplID0gcHJvcHMubWF4U2l6ZSxcbiAgICAgICAgICBtaW5TaXplID0gcHJvcHMubWluU2l6ZSxcbiAgICAgICAgICBkaXZQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgWydhY2NlcHRlZEZpbGVzJywgJ3ByZXZlbnREcm9wT25Eb2N1bWVudCcsICdkaXNhYmxlUHJldmlldycsICdkaXNhYmxlQ2xpY2snLCAnb25Ecm9wQWNjZXB0ZWQnLCAnb25Ecm9wUmVqZWN0ZWQnLCAnb25GaWxlRGlhbG9nQ2FuY2VsJywgJ21heFNpemUnLCAnbWluU2l6ZSddKTtcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICAgIHN0eWxlOiBhcHBsaWVkU3R5bGVcbiAgICAgICAgfSwgZGl2UHJvcHMgLyogZXhwYW5kIHVzZXIgcHJvdmlkZWQgcHJvcHMgZmlyc3Qgc28gZXZlbnQgaGFuZGxlcnMgYXJlIG5ldmVyIG92ZXJyaWRkZW4gKi8sIHtcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uQ2xpY2spLFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0OiB0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJhZ1N0YXJ0KSxcbiAgICAgICAgICBvbkRyYWdFbnRlcjogdGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdFbnRlciksXG4gICAgICAgICAgb25EcmFnT3ZlcjogdGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdPdmVyKSxcbiAgICAgICAgICBvbkRyYWdMZWF2ZTogdGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdMZWF2ZSksXG4gICAgICAgICAgb25Ecm9wOiB0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJvcCksXG4gICAgICAgICAgcmVmOiB0aGlzLnNldFJlZixcbiAgICAgICAgICAnYXJpYS1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLnJlbmRlckNoaWxkcmVuKGNoaWxkcmVuLCBpc0RyYWdBY3RpdmUsIGlzRHJhZ0FjY2VwdCwgaXNEcmFnUmVqZWN0KSxcbiAgICAgICAgX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgX2V4dGVuZHMoe30sIGlucHV0UHJvcHMgLyogZXhwYW5kIHVzZXIgcHJvdmlkZWQgaW5wdXRQcm9wcyBmaXJzdCBzbyBpbnB1dEF0dHJpYnV0ZXMgb3ZlcnJpZGUgdGhlbSAqLywgaW5wdXRBdHRyaWJ1dGVzKSlcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERyb3B6b25lO1xufShfcmVhY3QyLmRlZmF1bHQuQ29tcG9uZW50KTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gRHJvcHpvbmU7XG5cblxuRHJvcHpvbmUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogQWxsb3cgc3BlY2lmaWMgdHlwZXMgb2YgZmlsZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vb2tvbmV0L2F0dHItYWNjZXB0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKiBLZWVwIGluIG1pbmQgdGhhdCBtaW1lIHR5cGUgZGV0ZXJtaW5hdGlvbiBpcyBub3QgcmVsaWFibGUgYWNyb3NzIHBsYXRmb3Jtcy4gQ1NWIGZpbGVzLFxuICAgKiBmb3IgZXhhbXBsZSwgYXJlIHJlcG9ydGVkIGFzIHRleHQvcGxhaW4gdW5kZXIgbWFjT1MgYnV0IGFzIGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCB1bmRlclxuICAgKiBXaW5kb3dzLiBJbiBzb21lIGNhc2VzIHRoZXJlIG1pZ2h0IG5vdCBiZSBhIG1pbWUgdHlwZSBzZXQgYXQgYWxsLlxuICAgKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvMjc2XG4gICAqL1xuICBhY2NlcHQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFtfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlczIuZGVmYXVsdC5hcnJheU9mKF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nKV0pLFxuXG4gIC8qKlxuICAgKiBDb250ZW50cyBvZiB0aGUgZHJvcHpvbmVcbiAgICovXG4gIGNoaWxkcmVuOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5ub2RlLCBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmNdKSxcblxuICAvKipcbiAgICogRGlzYWxsb3cgY2xpY2tpbmcgb24gdGhlIGRyb3B6b25lIGNvbnRhaW5lciB0byBvcGVuIGZpbGUgZGlhbG9nXG4gICAqL1xuICBkaXNhYmxlQ2xpY2s6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlL2Rpc2FibGUgdGhlIGRyb3B6b25lIGVudGlyZWx5XG4gICAqL1xuICBkaXNhYmxlZDogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSBwcmV2aWV3IGdlbmVyYXRpb25cbiAgICovXG4gIGRpc2FibGVQcmV2aWV3OiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGZhbHNlLCBhbGxvdyBkcm9wcGVkIGl0ZW1zIHRvIHRha2Ugb3ZlciB0aGUgY3VycmVudCBicm93c2VyIHdpbmRvd1xuICAgKi9cbiAgcHJldmVudERyb3BPbkRvY3VtZW50OiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG5cbiAgLyoqXG4gICAqIFBhc3MgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHRvIHRoZSBgPGlucHV0IHR5cGU9XCJmaWxlXCIvPmAgdGFnXG4gICAqL1xuICBpbnB1dFByb3BzOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCxcblxuICAvKipcbiAgICogQWxsb3cgZHJvcHBpbmcgbXVsdGlwbGUgZmlsZXNcbiAgICovXG4gIG11bHRpcGxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG5cbiAgLyoqXG4gICAqIGBuYW1lYCBhdHRyaWJ1dGUgZm9yIHRoZSBpbnB1dCB0YWdcbiAgICovXG4gIG5hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtYXhTaXplOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlcixcblxuICAvKipcbiAgICogTWluaW11bSBmaWxlIHNpemUgKGluIGJ5dGVzKVxuICAgKi9cbiAgbWluU2l6ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIHRvIGFwcGx5IHdoZW4gZHJhZyBpcyBhY3RpdmVcbiAgICovXG4gIGFjdGl2ZUNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZSB0byBhcHBseSB3aGVuIGRyb3Agd2lsbCBiZSBhY2NlcHRlZFxuICAgKi9cbiAgYWNjZXB0Q2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIHJlamVjdGVkXG4gICAqL1xuICByZWplY3RDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgdG8gYXBwbHkgd2hlbiBkcm9wem9uZSBpcyBkaXNhYmxlZFxuICAgKi9cbiAgZGlzYWJsZWRDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5XG4gICAqL1xuICBzdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcmFnIGlzIGFjdGl2ZVxuICAgKi9cbiAgYWN0aXZlU3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIGFjY2VwdGVkXG4gICAqL1xuICBhY2NlcHRTdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcm9wIHdpbGwgYmUgcmVqZWN0ZWRcbiAgICovXG4gIHJlamVjdFN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseSB3aGVuIGRyb3B6b25lIGlzIGRpc2FibGVkXG4gICAqL1xuICBkaXNhYmxlZFN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCxcblxuICAvKipcbiAgICogb25DbGljayBjYWxsYmFja1xuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgb25DbGljazogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyb3AgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJvcDogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyb3BBY2NlcHRlZCBjYWxsYmFja1xuICAgKi9cbiAgb25Ecm9wQWNjZXB0ZWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcblxuICAvKipcbiAgICogb25Ecm9wUmVqZWN0ZWQgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJvcFJlamVjdGVkOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ1N0YXJ0IGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdTdGFydDogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdFbnRlciBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnRW50ZXI6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnT3ZlciBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnT3ZlcjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdMZWF2ZSBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnTGVhdmU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcblxuICAvKipcbiAgICogUHJvdmlkZSBhIGNhbGxiYWNrIG9uIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uIG9mIHRoZSBmaWxlIGRpYWxvZ1xuICAgKi9cbiAgb25GaWxlRGlhbG9nQ2FuY2VsOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmNcbn07XG5cbkRyb3B6b25lLmRlZmF1bHRQcm9wcyA9IHtcbiAgcHJldmVudERyb3BPbkRvY3VtZW50OiB0cnVlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRpc2FibGVQcmV2aWV3OiBmYWxzZSxcbiAgZGlzYWJsZUNsaWNrOiBmYWxzZSxcbiAgaW5wdXRQcm9wczoge30sXG4gIG11bHRpcGxlOiB0cnVlLFxuICBtYXhTaXplOiBJbmZpbml0eSxcbiAgbWluU2l6ZTogMFxufTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzFfXztcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX187XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdXBwb3J0TXVsdGlwbGUgPSB1bmRlZmluZWQ7XG5leHBvcnRzLmdldERhdGFUcmFuc2Zlckl0ZW1zID0gZ2V0RGF0YVRyYW5zZmVySXRlbXM7XG5leHBvcnRzLmZpbGVBY2NlcHRlZCA9IGZpbGVBY2NlcHRlZDtcbmV4cG9ydHMuZmlsZU1hdGNoU2l6ZSA9IGZpbGVNYXRjaFNpemU7XG5leHBvcnRzLmFsbEZpbGVzQWNjZXB0ZWQgPSBhbGxGaWxlc0FjY2VwdGVkO1xuZXhwb3J0cy5vbkRvY3VtZW50RHJhZ092ZXIgPSBvbkRvY3VtZW50RHJhZ092ZXI7XG5leHBvcnRzLmlzSWVPckVkZ2UgPSBpc0llT3JFZGdlO1xuXG52YXIgX2F0dHJBY2NlcHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG52YXIgX2F0dHJBY2NlcHQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXR0ckFjY2VwdCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBzdXBwb3J0TXVsdGlwbGUgPSBleHBvcnRzLnN1cHBvcnRNdWx0aXBsZSA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCA/ICdtdWx0aXBsZScgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSA6IHRydWU7XG5cbmZ1bmN0aW9uIGdldERhdGFUcmFuc2Zlckl0ZW1zKGV2ZW50KSB7XG4gIHZhciBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBbXTtcbiAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgIHZhciBkdCA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICBpZiAoZHQuZmlsZXMgJiYgZHQuZmlsZXMubGVuZ3RoKSB7XG4gICAgICBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBkdC5maWxlcztcbiAgICB9IGVsc2UgaWYgKGR0Lml0ZW1zICYmIGR0Lml0ZW1zLmxlbmd0aCkge1xuICAgICAgLy8gRHVyaW5nIHRoZSBkcmFnIGV2ZW4gdGhlIGRhdGFUcmFuc2Zlci5maWxlcyBpcyBudWxsXG4gICAgICAvLyBidXQgQ2hyb21lIGltcGxlbWVudHMgc29tZSBkcmFnIHN0b3JlLCB3aGljaCBpcyBhY2Nlc2libGUgdmlhIGRhdGFUcmFuc2Zlci5pdGVtc1xuICAgICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZHQuaXRlbXM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuZmlsZXMpIHtcbiAgICBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBldmVudC50YXJnZXQuZmlsZXM7XG4gIH1cbiAgLy8gQ29udmVydCBmcm9tIERhdGFUcmFuc2Zlckl0ZW1zTGlzdCB0byB0aGUgbmF0aXZlIEFycmF5XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkYXRhVHJhbnNmZXJJdGVtc0xpc3QpO1xufVxuXG4vLyBGaXJlZm94IHZlcnNpb25zIHByaW9yIHRvIDUzIHJldHVybiBhIGJvZ3VzIE1JTUUgdHlwZSBmb3IgZXZlcnkgZmlsZSBkcmFnLCBzbyBkcmFnb3ZlcnMgd2l0aFxuLy8gdGhhdCBNSU1FIHR5cGUgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWRcbmZ1bmN0aW9uIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpIHtcbiAgcmV0dXJuIGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnIHx8ICgwLCBfYXR0ckFjY2VwdDIuZGVmYXVsdCkoZmlsZSwgYWNjZXB0KTtcbn1cblxuZnVuY3Rpb24gZmlsZU1hdGNoU2l6ZShmaWxlLCBtYXhTaXplLCBtaW5TaXplKSB7XG4gIHJldHVybiBmaWxlLnNpemUgPD0gbWF4U2l6ZSAmJiBmaWxlLnNpemUgPj0gbWluU2l6ZTtcbn1cblxuZnVuY3Rpb24gYWxsRmlsZXNBY2NlcHRlZChmaWxlcywgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlcy5ldmVyeShmdW5jdGlvbiAoZmlsZSkge1xuICAgIHJldHVybiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KTtcbiAgfSk7XG59XG5cbi8vIGFsbG93IHRoZSBlbnRpcmUgZG9jdW1lbnQgdG8gYmUgYSBkcmFnIHRhcmdldFxuZnVuY3Rpb24gb25Eb2N1bWVudERyYWdPdmVyKGV2dCkge1xuICBldnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuZnVuY3Rpb24gaXNJZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgIT09IC0xIHx8IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNFZGdlKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ0VkZ2UvJykgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBpc0llT3JFZGdlKCkge1xuICB2YXIgdXNlckFnZW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICByZXR1cm4gaXNJZSh1c2VyQWdlbnQpIHx8IGlzRWRnZSh1c2VyQWdlbnQpO1xufVxuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXtpZihyW2VdKXJldHVybiByW2VdLmV4cG9ydHM7dmFyIG89cltlXT17aTplLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbZV0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsbiksby5sPSEwLG8uZXhwb3J0c312YXIgcj17fTtyZXR1cm4gbi5tPXQsbi5jPXIsbi5kPWZ1bmN0aW9uKHQscixlKXtuLm8odCxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OmV9KX0sbi5uPWZ1bmN0aW9uKHQpe3ZhciByPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBuLmQocixcImFcIixyKSxyfSxuLm89ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil9LG4ucD1cIlwiLG4obi5zPTEzKX0oW2Z1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LG4pe3ZhciByPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNS4wXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9cil9LGZ1bmN0aW9uKHQsbixyKXt0LmV4cG9ydHM9IXIoNCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LG4pe3ZhciByPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gci5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzIpKFwid2tzXCIpLG89cig5KSxpPXIoMCkuU3ltYm9sLHU9XCJmdW5jdGlvblwiPT10eXBlb2YgaTsodC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfHwoZVt0XT11JiZpW3RdfHwodT9pOm8pKFwiU3ltYm9sLlwiK3QpKX0pLnN0b3JlPWV9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89cigyKSxpPXIoOCksdT1yKDIyKSxjPXIoMTApLGY9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLHMscCxsLHY9dCZmLkYseT10JmYuRyxoPXQmZi5TLGQ9dCZmLlAseD10JmYuQixnPXk/ZTpoP2Vbbl18fChlW25dPXt9KTooZVtuXXx8e30pLnByb3RvdHlwZSxtPXk/bzpvW25dfHwob1tuXT17fSksYj1tLnByb3RvdHlwZXx8KG0ucHJvdG90eXBlPXt9KTt5JiYocj1uKTtmb3IoYSBpbiByKXM9IXYmJmcmJnZvaWQgMCE9PWdbYV0scD0ocz9nOnIpW2FdLGw9eCYmcz9jKHAsZSk6ZCYmXCJmdW5jdGlvblwiPT10eXBlb2YgcD9jKEZ1bmN0aW9uLmNhbGwscCk6cCxnJiZ1KGcsYSxwLHQmZi5VKSxtW2FdIT1wJiZpKG0sYSxsKSxkJiZiW2FdIT1wJiYoYlthXT1wKX07ZS5jb3JlPW8sZi5GPTEsZi5HPTIsZi5TPTQsZi5QPTgsZi5CPTE2LGYuVz0zMixmLlU9NjQsZi5SPTEyOCx0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTYpLG89cigyMSk7dC5leHBvcnRzPXIoMyk/ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmYodCxuLG8oMSxyKSl9OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFtuXT1yLHR9fSxmdW5jdGlvbih0LG4pe3ZhciByPTAsZT1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09dD9cIlwiOnQsXCIpX1wiLCgrK3IrZSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUodCksdm9pZCAwPT09bilyZXR1cm4gdDtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5jYWxsKG4scil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24ocixlKXtyZXR1cm4gdC5jYWxsKG4scixlKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihyLGUsbyl7cmV0dXJuIHQuY2FsbChuLHIsZSxvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyOCksbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9vKGUodCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjtuLl9fZXNNb2R1bGU9ITAsbi5kZWZhdWx0PWZ1bmN0aW9uKHQsbil7aWYodCYmbil7dmFyIHI9QXJyYXkuaXNBcnJheShuKT9uOm4uc3BsaXQoXCIsXCIpLGU9dC5uYW1lfHxcIlwiLG89dC50eXBlfHxcIlwiLGk9by5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpO3JldHVybiByLnNvbWUoZnVuY3Rpb24odCl7dmFyIG49dC50cmltKCk7cmV0dXJuXCIuXCI9PT1uLmNoYXJBdCgwKT9lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgobi50b0xvd2VyQ2FzZSgpKTpuLmVuZHNXaXRoKFwiLypcIik/aT09PW4ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTpvPT09bn0pfXJldHVybiEwfSxyKDE0KSxyKDM0KX0sZnVuY3Rpb24odCxuLHIpe3IoMTUpLHQuZXhwb3J0cz1yKDIpLkFycmF5LnNvbWV9LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDcpLG89cigyNSkoMyk7ZShlLlArZS5GKiFyKDMzKShbXS5zb21lLCEwKSxcIkFycmF5XCIse3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE3KSxvPXIoMTgpLGk9cigyMCksdT1PYmplY3QuZGVmaW5lUHJvcGVydHk7bi5mPXIoMyk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsbixyKXtpZihlKHQpLG49aShuLCEwKSxlKHIpLG8pdHJ5e3JldHVybiB1KHQsbixyKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIHJ8fFwic2V0XCJpbiByKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiByJiYodFtuXT1yLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFlKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz0hcigzKSYmIXIoNCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIoMTkpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLG89cigwKS5kb2N1bWVudCxpPWUobykmJmUoby5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGk/by5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIWUodCkpcmV0dXJuIHQ7dmFyIHIsbztpZihuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnZhbHVlT2YpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87aWYoIW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTpufX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89cig4KSxpPXIoMjMpLHU9cig5KShcInNyY1wiKSxjPUZ1bmN0aW9uLnRvU3RyaW5nLGY9KFwiXCIrYykuc3BsaXQoXCJ0b1N0cmluZ1wiKTtyKDIpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbCh0KX0sKHQuZXhwb3J0cz1mdW5jdGlvbih0LG4scixjKXt2YXIgYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByO2EmJihpKHIsXCJuYW1lXCIpfHxvKHIsXCJuYW1lXCIsbikpLHRbbl0hPT1yJiYoYSYmKGkocix1KXx8byhyLHUsdFtuXT9cIlwiK3Rbbl06Zi5qb2luKFN0cmluZyhuKSkpKSx0PT09ZT90W25dPXI6Yz90W25dP3Rbbl09cjpvKHQsbixyKTooZGVsZXRlIHRbbl0sbyh0LG4scikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzJiZ0aGlzW3VdfHxjLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxuKXt2YXIgcj17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gci5jYWxsKHQsbil9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEwKSxvPXIoMjYpLGk9cigyNyksdT1yKDEyKSxjPXIoMjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciByPTE9PXQsZj0yPT10LGE9Mz09dCxzPTQ9PXQscD02PT10LGw9NT09dHx8cCx2PW58fGM7cmV0dXJuIGZ1bmN0aW9uKG4sYyx5KXtmb3IodmFyIGgsZCx4PWkobiksZz1vKHgpLG09ZShjLHksMyksYj11KGcubGVuZ3RoKSxfPTAsdz1yP3YobixiKTpmP3YobiwwKTp2b2lkIDA7Yj5fO18rKylpZigobHx8XyBpbiBnKSYmKGg9Z1tfXSxkPW0oaCxfLHgpLHQpKWlmKHIpd1tfXT1kO2Vsc2UgaWYoZClzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gaDtjYXNlIDY6cmV0dXJuIF87Y2FzZSAyOncucHVzaChoKX1lbHNlIGlmKHMpcmV0dXJuITE7cmV0dXJuIHA/LTE6YXx8cz9zOnd9fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSk7dC5leHBvcnRzPU9iamVjdChcInpcIikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVyblwiU3RyaW5nXCI9PWUodCk/dC5zcGxpdChcIlwiKTpPYmplY3QodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoZSh0KSl9fSxmdW5jdGlvbih0LG4pe3ZhciByPU1hdGguY2VpbCxlPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/ZTpyKSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3KGUodCkpKG4pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDMxKSxpPXIoNikoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbyh0KSYmKG49dC5jb25zdHJ1Y3RvcixcImZ1bmN0aW9uXCIhPXR5cGVvZiBufHxuIT09QXJyYXkmJiFvKG4ucHJvdG90eXBlKXx8KG49dm9pZCAwKSxlKG4pJiZudWxsPT09KG49bltpXSkmJihuPXZvaWQgMCkpLHZvaWQgMD09PW4/QXJyYXk6bn19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PWUodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPWVbXCJfX2NvcmUtanNfc2hhcmVkX19cIl18fChlW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdPXt9KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG9bdF18fChvW3RdPXt9KX19LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiEhdCYmZShmdW5jdGlvbigpe24/dC5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOnQuY2FsbChudWxsKX0pfX0sZnVuY3Rpb24odCxuLHIpe3IoMzUpLHQuZXhwb3J0cz1yKDIpLlN0cmluZy5lbmRzV2l0aH0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNyksbz1yKDEyKSxpPXIoMzYpLHU9XCJcIi5lbmRzV2l0aDtlKGUuUCtlLkYqcigzOCkoXCJlbmRzV2l0aFwiKSxcIlN0cmluZ1wiLHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgbj1pKHRoaXMsdCxcImVuZHNXaXRoXCIpLHI9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZT1vKG4ubGVuZ3RoKSxjPXZvaWQgMD09PXI/ZTpNYXRoLm1pbihvKHIpLGUpLGY9U3RyaW5nKHQpO3JldHVybiB1P3UuY2FsbChuLGYsYyk6bi5zbGljZShjLWYubGVuZ3RoLGMpPT09Zn19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzcpLG89cigxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKG4pKXRocm93IFR5cGVFcnJvcihcIlN0cmluZyNcIityK1wiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtyZXR1cm4gU3RyaW5nKG8odCkpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDUpLGk9cig2KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gZSh0KSYmKHZvaWQgMCE9PShuPXRbaV0pPyEhbjpcIlJlZ0V4cFwiPT1vKHQpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDYpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPS8uLzt0cnl7XCIvLi9cIlt0XShuKX1jYXRjaChyKXt0cnl7cmV0dXJuIG5bZV09ITEsIVwiLy4vXCJbdF0obil9Y2F0Y2godCl7fX1yZXR1cm4hMH19XSk7XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICByZWplY3RlZDoge1xuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIGJvcmRlckNvbG9yOiAnI2M2NicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZSdcbiAgfSxcbiAgZGlzYWJsZWQ6IHtcbiAgICBvcGFjaXR5OiAwLjVcbiAgfSxcbiAgYWN0aXZlOiB7XG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyQ29sb3I6ICcjNmM2JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZWVlJ1xuICB9LFxuICBkZWZhdWx0OiB7XG4gICAgd2lkdGg6IDIwMCxcbiAgICBoZWlnaHQ6IDIwMCxcbiAgICBib3JkZXJXaWR0aDogMixcbiAgICBib3JkZXJDb2xvcjogJyM2NjYnLFxuICAgIGJvcmRlclN0eWxlOiAnZGFzaGVkJyxcbiAgICBib3JkZXJSYWRpdXM6IDVcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG59KTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gaW5kZXguanMiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCAyYzgwZDc5YjViYjlhODE2YTE3NCIsIi8qIGVzbGludCBwcmVmZXItdGVtcGxhdGU6IDAgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHtcbiAgc3VwcG9ydE11bHRpcGxlLFxuICBmaWxlQWNjZXB0ZWQsXG4gIGFsbEZpbGVzQWNjZXB0ZWQsXG4gIGZpbGVNYXRjaFNpemUsXG4gIG9uRG9jdW1lbnREcmFnT3ZlcixcbiAgZ2V0RGF0YVRyYW5zZmVySXRlbXMsXG4gIGlzSWVPckVkZ2Vcbn0gZnJvbSAnLi91dGlscydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi91dGlscy9zdHlsZXMnXG5cbmNsYXNzIERyb3B6b25lIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMsIGNvbnRleHQpIHtcbiAgICBzdXBlcihwcm9wcywgY29udGV4dClcbiAgICB0aGlzLmNvbXBvc2VIYW5kbGVycyA9IHRoaXMuY29tcG9zZUhhbmRsZXJzLmJpbmQodGhpcylcbiAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKVxuICAgIHRoaXMub25Eb2N1bWVudERyb3AgPSB0aGlzLm9uRG9jdW1lbnREcm9wLmJpbmQodGhpcylcbiAgICB0aGlzLm9uRHJhZ0VudGVyID0gdGhpcy5vbkRyYWdFbnRlci5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRyYWdMZWF2ZSA9IHRoaXMub25EcmFnTGVhdmUuYmluZCh0aGlzKVxuICAgIHRoaXMub25EcmFnT3ZlciA9IHRoaXMub25EcmFnT3Zlci5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRyYWdTdGFydCA9IHRoaXMub25EcmFnU3RhcnQuYmluZCh0aGlzKVxuICAgIHRoaXMub25Ecm9wID0gdGhpcy5vbkRyb3AuYmluZCh0aGlzKVxuICAgIHRoaXMub25GaWxlRGlhbG9nQ2FuY2VsID0gdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwuYmluZCh0aGlzKVxuICAgIHRoaXMub25JbnB1dEVsZW1lbnRDbGljayA9IHRoaXMub25JbnB1dEVsZW1lbnRDbGljay5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLnNldFJlZiA9IHRoaXMuc2V0UmVmLmJpbmQodGhpcylcbiAgICB0aGlzLnNldFJlZnMgPSB0aGlzLnNldFJlZnMuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUgPSBmYWxzZVxuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRyYWdnZWRGaWxlczogW10sXG4gICAgICBhY2NlcHRlZEZpbGVzOiBbXSxcbiAgICAgIHJlamVjdGVkRmlsZXM6IFtdXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgfSA9IHRoaXMucHJvcHNcbiAgICB0aGlzLmRyYWdUYXJnZXRzID0gW11cblxuICAgIGlmIChwcmV2ZW50RHJvcE9uRG9jdW1lbnQpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25Eb2N1bWVudERyYWdPdmVyLCBmYWxzZSlcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLm9uRG9jdW1lbnREcm9wLCBmYWxzZSlcbiAgICB9XG4gICAgdGhpcy5maWxlSW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbnB1dEVsZW1lbnRDbGljaywgZmFsc2UpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwsIGZhbHNlKVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY29uc3QgeyBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgfSA9IHRoaXMucHJvcHNcbiAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRG9jdW1lbnREcmFnT3ZlcilcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLm9uRG9jdW1lbnREcm9wKVxuICAgIH1cbiAgICBpZiAodGhpcy5maWxlSW5wdXRFbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmZpbGVJbnB1dEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbklucHV0RWxlbWVudENsaWNrLCBmYWxzZSlcbiAgICB9XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwsIGZhbHNlKVxuICB9XG5cbiAgY29tcG9zZUhhbmRsZXJzKGhhbmRsZXIpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlclxuICB9XG5cbiAgb25Eb2N1bWVudERyb3AoZXZ0KSB7XG4gICAgaWYgKHRoaXMubm9kZSAmJiB0aGlzLm5vZGUuY29udGFpbnMoZXZ0LnRhcmdldCkpIHtcbiAgICAgIC8vIGlmIHdlIGludGVyY2VwdGVkIGFuIGV2ZW50IGZvciBvdXIgaW5zdGFuY2UsIGxldCBpdCBwcm9wYWdhdGUgZG93biB0byB0aGUgaW5zdGFuY2UncyBvbkRyb3AgaGFuZGxlclxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdXG4gIH1cblxuICBvbkRyYWdTdGFydChldnQpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdTdGFydCkge1xuICAgICAgdGhpcy5wcm9wcy5vbkRyYWdTdGFydC5jYWxsKHRoaXMsIGV2dClcbiAgICB9XG4gIH1cblxuICBvbkRyYWdFbnRlcihldnQpIHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gQ291bnQgdGhlIGRyb3B6b25lIGFuZCBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgZW50ZXJlZC5cbiAgICBpZiAodGhpcy5kcmFnVGFyZ2V0cy5pbmRleE9mKGV2dC50YXJnZXQpID09PSAtMSkge1xuICAgICAgdGhpcy5kcmFnVGFyZ2V0cy5wdXNoKGV2dC50YXJnZXQpXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0RyYWdBY3RpdmU6IHRydWUsIC8vIERvIG5vdCByZWx5IG9uIGZpbGVzIGZvciB0aGUgZHJhZyBzdGF0ZS4gSXQgZG9lc24ndCB3b3JrIGluIFNhZmFyaS5cbiAgICAgIGRyYWdnZWRGaWxlczogZ2V0RGF0YVRyYW5zZmVySXRlbXMoZXZ0KVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdFbnRlcikge1xuICAgICAgdGhpcy5wcm9wcy5vbkRyYWdFbnRlci5jYWxsKHRoaXMsIGV2dClcbiAgICB9XG4gIH1cblxuICBvbkRyYWdPdmVyKGV2dCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoZSBmaWxlIGRpYWxvZyBvbiBDaHJvbWUgYWxsb3dzIHVzZXJzIHRvIGRyYWcgZmlsZXMgZnJvbSB0aGUgZGlhbG9nIG9udG9cbiAgICAgIC8vIHRoZSBkcm9wem9uZSwgY2F1c2luZyB0aGUgYnJvd3NlciB0aGUgY3Jhc2ggd2hlbiB0aGUgZmlsZSBkaWFsb2cgaXMgY2xvc2VkLlxuICAgICAgLy8gQSBkcm9wIGVmZmVjdCBvZiAnbm9uZScgcHJldmVudHMgdGhlIGZpbGUgZnJvbSBiZWluZyBkcm9wcGVkXG4gICAgICBldnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA/ICdub25lJyA6ICdjb3B5JyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIG9mIGVycm9yXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25EcmFnT3Zlcikge1xuICAgICAgdGhpcy5wcm9wcy5vbkRyYWdPdmVyLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIG9uRHJhZ0xlYXZlKGV2dCkge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyBPbmx5IGRlYWN0aXZhdGUgb25jZSB0aGUgZHJvcHpvbmUgYW5kIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gbGVmdC5cbiAgICB0aGlzLmRyYWdUYXJnZXRzID0gdGhpcy5kcmFnVGFyZ2V0cy5maWx0ZXIoZWwgPT4gZWwgIT09IGV2dC50YXJnZXQgJiYgdGhpcy5ub2RlLmNvbnRhaW5zKGVsKSlcbiAgICBpZiAodGhpcy5kcmFnVGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDbGVhciBkcmFnZ2luZyBmaWxlcyBzdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgICAgIGRyYWdnZWRGaWxlczogW11cbiAgICB9KVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25EcmFnTGVhdmUpIHtcbiAgICAgIHRoaXMucHJvcHMub25EcmFnTGVhdmUuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuICB9XG5cbiAgb25Ecm9wKGV2dCkge1xuICAgIGNvbnN0IHsgb25Ecm9wLCBvbkRyb3BBY2NlcHRlZCwgb25Ecm9wUmVqZWN0ZWQsIG11bHRpcGxlLCBkaXNhYmxlUHJldmlldywgYWNjZXB0IH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgZmlsZUxpc3QgPSBnZXREYXRhVHJhbnNmZXJJdGVtcyhldnQpXG4gICAgY29uc3QgYWNjZXB0ZWRGaWxlcyA9IFtdXG4gICAgY29uc3QgcmVqZWN0ZWRGaWxlcyA9IFtdXG5cbiAgICAvLyBTdG9wIGRlZmF1bHQgYnJvd3NlciBiZWhhdmlvclxuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyBSZXNldCB0aGUgY291bnRlciBhbG9uZyB3aXRoIHRoZSBkcmFnIG9uIGEgZHJvcC5cbiAgICB0aGlzLmRyYWdUYXJnZXRzID0gW11cbiAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlXG5cbiAgICBmaWxlTGlzdC5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgaWYgKCFkaXNhYmxlUHJldmlldykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZpbGUucHJldmlldyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBwcmV2aWV3IGZvciBmaWxlJywgZmlsZSwgZXJyKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSAmJlxuICAgICAgICBmaWxlTWF0Y2hTaXplKGZpbGUsIHRoaXMucHJvcHMubWF4U2l6ZSwgdGhpcy5wcm9wcy5taW5TaXplKVxuICAgICAgKSB7XG4gICAgICAgIGFjY2VwdGVkRmlsZXMucHVzaChmaWxlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0ZWRGaWxlcy5wdXNoKGZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmICghbXVsdGlwbGUpIHtcbiAgICAgIC8vIGlmIG5vdCBpbiBtdWx0aSBtb2RlIGFkZCBhbnkgZXh0cmEgYWNjZXB0ZWQgZmlsZXMgdG8gcmVqZWN0ZWQuXG4gICAgICAvLyBUaGlzIHdpbGwgYWxsb3cgZW5kIHVzZXJzIHRvIGVhc2lseSBpZ25vcmUgYSBtdWx0aSBmaWxlIGRyb3AgaW4gXCJzaW5nbGVcIiBtb2RlLlxuICAgICAgcmVqZWN0ZWRGaWxlcy5wdXNoKC4uLmFjY2VwdGVkRmlsZXMuc3BsaWNlKDEpKVxuICAgIH1cblxuICAgIGlmIChvbkRyb3ApIHtcbiAgICAgIG9uRHJvcC5jYWxsKHRoaXMsIGFjY2VwdGVkRmlsZXMsIHJlamVjdGVkRmlsZXMsIGV2dClcbiAgICB9XG5cbiAgICBpZiAocmVqZWN0ZWRGaWxlcy5sZW5ndGggPiAwICYmIG9uRHJvcFJlamVjdGVkKSB7XG4gICAgICBvbkRyb3BSZWplY3RlZC5jYWxsKHRoaXMsIHJlamVjdGVkRmlsZXMsIGV2dClcbiAgICB9XG5cbiAgICBpZiAoYWNjZXB0ZWRGaWxlcy5sZW5ndGggPiAwICYmIG9uRHJvcEFjY2VwdGVkKSB7XG4gICAgICBvbkRyb3BBY2NlcHRlZC5jYWxsKHRoaXMsIGFjY2VwdGVkRmlsZXMsIGV2dClcbiAgICB9XG5cbiAgICAvLyBDbGVhciBmaWxlcyB2YWx1ZVxuICAgIHRoaXMuZHJhZ2dlZEZpbGVzID0gbnVsbFxuXG4gICAgLy8gUmVzZXQgZHJhZyBzdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgICAgIGRyYWdnZWRGaWxlczogW10sXG4gICAgICBhY2NlcHRlZEZpbGVzLFxuICAgICAgcmVqZWN0ZWRGaWxlc1xuICAgIH0pXG4gIH1cblxuICBvbkNsaWNrKGV2dCkge1xuICAgIGNvbnN0IHsgb25DbGljaywgZGlzYWJsZUNsaWNrIH0gPSB0aGlzLnByb3BzXG4gICAgaWYgKCFkaXNhYmxlQ2xpY2spIHtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgICBpZiAob25DbGljaykge1xuICAgICAgICBvbkNsaWNrLmNhbGwodGhpcywgZXZ0KVxuICAgICAgfVxuXG4gICAgICAvLyBpbiBJRTExL0VkZ2UgdGhlIGZpbGUtYnJvd3NlciBkaWFsb2cgaXMgYmxvY2tpbmcsIGVuc3VyZSB0aGlzIGlzIGJlaGluZCBzZXRUaW1lb3V0XG4gICAgICAvLyB0aGlzIGlzIHNvIHJlYWN0IGNhbiBoYW5kbGUgc3RhdGUgY2hhbmdlcyBpbiB0aGUgb25DbGljayBwcm9wIGFib3ZlIGFib3ZlXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvNDUwXG4gICAgICBpZiAoaXNJZU9yRWRnZSgpKSB7XG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5vcGVuLmJpbmQodGhpcyksIDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wZW4oKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRFbGVtZW50Q2xpY2soZXZ0KSB7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHRoaXMucHJvcHMuaW5wdXRQcm9wcyAmJiB0aGlzLnByb3BzLmlucHV0UHJvcHMub25DbGljaykge1xuICAgICAgdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIG9uRmlsZURpYWxvZ0NhbmNlbCgpIHtcbiAgICAvLyB0aW1lb3V0IHdpbGwgbm90IHJlY29nbml6ZSBjb250ZXh0IG9mIHRoaXMgbWV0aG9kXG4gICAgY29uc3QgeyBvbkZpbGVEaWFsb2dDYW5jZWwgfSA9IHRoaXMucHJvcHNcbiAgICAvLyBleGVjdXRlIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIEZpbGVEaWFsb2cgaXMgb3BlbmVkIGluIHRoZSBicm93c2VyXG4gICAgaWYgKHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlucHV0RWwgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IGFzIEZpbGVMaXN0XG4gICAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gdGhpcy5maWxlSW5wdXRFbFxuXG4gICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9uRmlsZURpYWxvZ0NhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uRmlsZURpYWxvZ0NhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH0sIDMwMClcbiAgICB9XG4gIH1cblxuICBzZXRSZWYocmVmKSB7XG4gICAgdGhpcy5ub2RlID0gcmVmXG4gIH1cblxuICBzZXRSZWZzKHJlZikge1xuICAgIHRoaXMuZmlsZUlucHV0RWwgPSByZWZcbiAgfVxuICAvKipcbiAgICogT3BlbiBzeXN0ZW0gZmlsZSB1cGxvYWQgZGlhbG9nLlxuICAgKlxuICAgKiBAcHVibGljXG4gICAqL1xuICBvcGVuKCkge1xuICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gdHJ1ZVxuICAgIHRoaXMuZmlsZUlucHV0RWwudmFsdWUgPSBudWxsXG4gICAgdGhpcy5maWxlSW5wdXRFbC5jbGljaygpXG4gIH1cblxuICByZW5kZXJDaGlsZHJlbiA9IChjaGlsZHJlbiwgaXNEcmFnQWN0aXZlLCBpc0RyYWdBY2NlcHQsIGlzRHJhZ1JlamVjdCkgPT4ge1xuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbih7XG4gICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgIGlzRHJhZ0FjdGl2ZSxcbiAgICAgICAgaXNEcmFnQWNjZXB0LFxuICAgICAgICBpc0RyYWdSZWplY3RcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlblxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjY2VwdCxcbiAgICAgIGFjY2VwdENsYXNzTmFtZSxcbiAgICAgIGFjdGl2ZUNsYXNzTmFtZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlZENsYXNzTmFtZSxcbiAgICAgIGlucHV0UHJvcHMsXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIG5hbWUsXG4gICAgICByZWplY3RDbGFzc05hbWUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIGxldCB7XG4gICAgICBhY2NlcHRTdHlsZSxcbiAgICAgIGFjdGl2ZVN0eWxlLFxuICAgICAgY2xhc3NOYW1lID0gJycsXG4gICAgICBkaXNhYmxlZFN0eWxlLFxuICAgICAgcmVqZWN0U3R5bGUsXG4gICAgICBzdHlsZSxcbiAgICAgIC4uLnByb3BzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgfSA9IHJlc3RcblxuICAgIGNvbnN0IHsgaXNEcmFnQWN0aXZlLCBkcmFnZ2VkRmlsZXMgfSA9IHRoaXMuc3RhdGVcbiAgICBjb25zdCBmaWxlc0NvdW50ID0gZHJhZ2dlZEZpbGVzLmxlbmd0aFxuICAgIGNvbnN0IGlzTXVsdGlwbGVBbGxvd2VkID0gbXVsdGlwbGUgfHwgZmlsZXNDb3VudCA8PSAxXG4gICAgY29uc3QgaXNEcmFnQWNjZXB0ID0gZmlsZXNDb3VudCA+IDAgJiYgYWxsRmlsZXNBY2NlcHRlZChkcmFnZ2VkRmlsZXMsIHRoaXMucHJvcHMuYWNjZXB0KVxuICAgIGNvbnN0IGlzRHJhZ1JlamVjdCA9IGZpbGVzQ291bnQgPiAwICYmICghaXNEcmFnQWNjZXB0IHx8ICFpc011bHRpcGxlQWxsb3dlZClcbiAgICBjb25zdCBub1N0eWxlcyA9XG4gICAgICAhY2xhc3NOYW1lICYmICFzdHlsZSAmJiAhYWN0aXZlU3R5bGUgJiYgIWFjY2VwdFN0eWxlICYmICFyZWplY3RTdHlsZSAmJiAhZGlzYWJsZWRTdHlsZVxuXG4gICAgaWYgKGlzRHJhZ0FjdGl2ZSAmJiBhY3RpdmVDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnICcgKyBhY3RpdmVDbGFzc05hbWVcbiAgICB9XG4gICAgaWYgKGlzRHJhZ0FjY2VwdCAmJiBhY2NlcHRDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnICcgKyBhY2NlcHRDbGFzc05hbWVcbiAgICB9XG4gICAgaWYgKGlzRHJhZ1JlamVjdCAmJiByZWplY3RDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnICcgKyByZWplY3RDbGFzc05hbWVcbiAgICB9XG4gICAgaWYgKGRpc2FibGVkICYmIGRpc2FibGVkQ2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gJyAnICsgZGlzYWJsZWRDbGFzc05hbWVcbiAgICB9XG5cbiAgICBpZiAobm9TdHlsZXMpIHtcbiAgICAgIHN0eWxlID0gc3R5bGVzLmRlZmF1bHRcbiAgICAgIGFjdGl2ZVN0eWxlID0gc3R5bGVzLmFjdGl2ZVxuICAgICAgYWNjZXB0U3R5bGUgPSBzdHlsZS5hY3RpdmVcbiAgICAgIHJlamVjdFN0eWxlID0gc3R5bGVzLnJlamVjdGVkXG4gICAgICBkaXNhYmxlZFN0eWxlID0gc3R5bGVzLmRpc2FibGVkXG4gICAgfVxuXG4gICAgbGV0IGFwcGxpZWRTdHlsZSA9IHsgcG9zaXRpb246ICdyZWxhdGl2ZScsIC4uLnN0eWxlIH1cbiAgICBpZiAoYWN0aXZlU3R5bGUgJiYgaXNEcmFnQWN0aXZlKSB7XG4gICAgICBhcHBsaWVkU3R5bGUgPSB7XG4gICAgICAgIC4uLmFwcGxpZWRTdHlsZSxcbiAgICAgICAgLi4uYWN0aXZlU3R5bGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjY2VwdFN0eWxlICYmIGlzRHJhZ0FjY2VwdCkge1xuICAgICAgYXBwbGllZFN0eWxlID0ge1xuICAgICAgICAuLi5hcHBsaWVkU3R5bGUsXG4gICAgICAgIC4uLmFjY2VwdFN0eWxlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZWplY3RTdHlsZSAmJiBpc0RyYWdSZWplY3QpIHtcbiAgICAgIGFwcGxpZWRTdHlsZSA9IHtcbiAgICAgICAgLi4uYXBwbGllZFN0eWxlLFxuICAgICAgICAuLi5yZWplY3RTdHlsZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGlzYWJsZWRTdHlsZSAmJiBkaXNhYmxlZCkge1xuICAgICAgYXBwbGllZFN0eWxlID0ge1xuICAgICAgICAuLi5hcHBsaWVkU3R5bGUsXG4gICAgICAgIC4uLmRpc2FibGVkU3R5bGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dEF0dHJpYnV0ZXMgPSB7XG4gICAgICBhY2NlcHQsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICBib3R0b206IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIG9wYWNpdHk6IDAuMDAwMDEsXG4gICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgLi4uaW5wdXRQcm9wcy5zdHlsZVxuICAgICAgfSxcbiAgICAgIG11bHRpcGxlOiBzdXBwb3J0TXVsdGlwbGUgJiYgbXVsdGlwbGUsXG4gICAgICByZWY6IHRoaXMuc2V0UmVmcyxcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uRHJvcCxcbiAgICAgIGF1dG9Db21wbGV0ZTogJ29mZidcbiAgICB9XG5cbiAgICBpZiAobmFtZSAmJiBuYW1lLmxlbmd0aCkge1xuICAgICAgaW5wdXRBdHRyaWJ1dGVzLm5hbWUgPSBuYW1lXG4gICAgfVxuXG4gICAgLy8gRGVzdHJ1Y3R1cmUgY3VzdG9tIHByb3BzIGF3YXkgZnJvbSBwcm9wcyB1c2VkIGZvciB0aGUgZGl2IGVsZW1lbnRcbiAgICBjb25zdCB7XG4gICAgICBhY2NlcHRlZEZpbGVzLFxuICAgICAgcHJldmVudERyb3BPbkRvY3VtZW50LFxuICAgICAgZGlzYWJsZVByZXZpZXcsXG4gICAgICBkaXNhYmxlQ2xpY2ssXG4gICAgICBvbkRyb3BBY2NlcHRlZCxcbiAgICAgIG9uRHJvcFJlamVjdGVkLFxuICAgICAgb25GaWxlRGlhbG9nQ2FuY2VsLFxuICAgICAgbWF4U2l6ZSxcbiAgICAgIG1pblNpemUsXG4gICAgICAuLi5kaXZQcm9wc1xuICAgIH0gPSBwcm9wc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXthcHBsaWVkU3R5bGV9XG4gICAgICAgIHsuLi5kaXZQcm9wcyAvKiBleHBhbmQgdXNlciBwcm92aWRlZCBwcm9wcyBmaXJzdCBzbyBldmVudCBoYW5kbGVycyBhcmUgbmV2ZXIgb3ZlcnJpZGRlbiAqL31cbiAgICAgICAgb25DbGljaz17dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkNsaWNrKX1cbiAgICAgICAgb25EcmFnU3RhcnQ9e3RoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnU3RhcnQpfVxuICAgICAgICBvbkRyYWdFbnRlcj17dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdFbnRlcil9XG4gICAgICAgIG9uRHJhZ092ZXI9e3RoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnT3Zlcil9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXt0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJhZ0xlYXZlKX1cbiAgICAgICAgb25Ecm9wPXt0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJvcCl9XG4gICAgICAgIHJlZj17dGhpcy5zZXRSZWZ9XG4gICAgICAgIGFyaWEtZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJDaGlsZHJlbihjaGlsZHJlbiwgaXNEcmFnQWN0aXZlLCBpc0RyYWdBY2NlcHQsIGlzRHJhZ1JlamVjdCl9XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHsuLi5pbnB1dFByb3BzIC8qIGV4cGFuZCB1c2VyIHByb3ZpZGVkIGlucHV0UHJvcHMgZmlyc3Qgc28gaW5wdXRBdHRyaWJ1dGVzIG92ZXJyaWRlIHRoZW0gKi99XG4gICAgICAgICAgey4uLmlucHV0QXR0cmlidXRlc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZVxuXG5Ecm9wem9uZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBBbGxvdyBzcGVjaWZpYyB0eXBlcyBvZiBmaWxlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9va29uZXQvYXR0ci1hY2NlcHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqIEtlZXAgaW4gbWluZCB0aGF0IG1pbWUgdHlwZSBkZXRlcm1pbmF0aW9uIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgcGxhdGZvcm1zLiBDU1YgZmlsZXMsXG4gICAqIGZvciBleGFtcGxlLCBhcmUgcmVwb3J0ZWQgYXMgdGV4dC9wbGFpbiB1bmRlciBtYWNPUyBidXQgYXMgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIHVuZGVyXG4gICAqIFdpbmRvd3MuIEluIHNvbWUgY2FzZXMgdGhlcmUgbWlnaHQgbm90IGJlIGEgbWltZSB0eXBlIHNldCBhdCBhbGwuXG4gICAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy8yNzZcbiAgICovXG4gIGFjY2VwdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyldKSxcblxuICAvKipcbiAgICogQ29udGVudHMgb2YgdGhlIGRyb3B6b25lXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5mdW5jXSksXG5cbiAgLyoqXG4gICAqIERpc2FsbG93IGNsaWNraW5nIG9uIHRoZSBkcm9wem9uZSBjb250YWluZXIgdG8gb3BlbiBmaWxlIGRpYWxvZ1xuICAgKi9cbiAgZGlzYWJsZUNsaWNrOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlL2Rpc2FibGUgdGhlIGRyb3B6b25lIGVudGlyZWx5XG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIHByZXZpZXcgZ2VuZXJhdGlvblxuICAgKi9cbiAgZGlzYWJsZVByZXZpZXc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBmYWxzZSwgYWxsb3cgZHJvcHBlZCBpdGVtcyB0byB0YWtlIG92ZXIgdGhlIGN1cnJlbnQgYnJvd3NlciB3aW5kb3dcbiAgICovXG4gIHByZXZlbnREcm9wT25Eb2N1bWVudDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFBhc3MgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHRvIHRoZSBgPGlucHV0IHR5cGU9XCJmaWxlXCIvPmAgdGFnXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBBbGxvdyBkcm9wcGluZyBtdWx0aXBsZSBmaWxlc1xuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBgbmFtZWAgYXR0cmlidXRlIGZvciB0aGUgaW5wdXQgdGFnXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtYXhTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtaW5TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIHRvIGFwcGx5IHdoZW4gZHJhZyBpcyBhY3RpdmVcbiAgICovXG4gIGFjdGl2ZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIGFjY2VwdGVkXG4gICAqL1xuICBhY2NlcHRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZSB0byBhcHBseSB3aGVuIGRyb3Agd2lsbCBiZSByZWplY3RlZFxuICAgKi9cbiAgcmVqZWN0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgdG8gYXBwbHkgd2hlbiBkcm9wem9uZSBpcyBkaXNhYmxlZFxuICAgKi9cbiAgZGlzYWJsZWRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHlcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJhZyBpcyBhY3RpdmVcbiAgICovXG4gIGFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIGFjY2VwdGVkXG4gICAqL1xuICBhY2NlcHRTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseSB3aGVuIGRyb3Agd2lsbCBiZSByZWplY3RlZFxuICAgKi9cbiAgcmVqZWN0U3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcm9wem9uZSBpcyBkaXNhYmxlZFxuICAgKi9cbiAgZGlzYWJsZWRTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogb25DbGljayBjYWxsYmFja1xuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcCBjYWxsYmFja1xuICAgKi9cbiAgb25Ecm9wOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25Ecm9wQWNjZXB0ZWQgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJvcEFjY2VwdGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25Ecm9wUmVqZWN0ZWQgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJvcFJlamVjdGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnU3RhcnQgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ1N0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnRW50ZXIgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ0VudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnT3ZlciBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnT3ZlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ0xlYXZlIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYSBjYWxsYmFjayBvbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvbiBvZiB0aGUgZmlsZSBkaWFsb2dcbiAgICovXG4gIG9uRmlsZURpYWxvZ0NhbmNlbDogUHJvcFR5cGVzLmZ1bmNcbn1cblxuRHJvcHpvbmUuZGVmYXVsdFByb3BzID0ge1xuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6IHRydWUsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgZGlzYWJsZVByZXZpZXc6IGZhbHNlLFxuICBkaXNhYmxlQ2xpY2s6IGZhbHNlLFxuICBpbnB1dFByb3BzOiB7fSxcbiAgbXVsdGlwbGU6IHRydWUsXG4gIG1heFNpemU6IEluZmluaXR5LFxuICBtaW5TaXplOiAwXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvaW5kZXguanMiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMV9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn1cbi8vIG1vZHVsZSBpZCA9IDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJyb290XCI6XCJQcm9wVHlwZXNcIixcImNvbW1vbmpzMlwiOlwicHJvcC10eXBlc1wiLFwiY29tbW9uanNcIjpcInByb3AtdHlwZXNcIixcImFtZFwiOlwicHJvcC10eXBlc1wifVxuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgYWNjZXB0cyBmcm9tICdhdHRyLWFjY2VwdCdcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRNdWx0aXBsZSA9XG4gIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgID8gJ211bHRpcGxlJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAgOiB0cnVlXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhVHJhbnNmZXJJdGVtcyhldmVudCkge1xuICBsZXQgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gW11cbiAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgIGNvbnN0IGR0ID0gZXZlbnQuZGF0YVRyYW5zZmVyXG4gICAgaWYgKGR0LmZpbGVzICYmIGR0LmZpbGVzLmxlbmd0aCkge1xuICAgICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZHQuZmlsZXNcbiAgICB9IGVsc2UgaWYgKGR0Lml0ZW1zICYmIGR0Lml0ZW1zLmxlbmd0aCkge1xuICAgICAgLy8gRHVyaW5nIHRoZSBkcmFnIGV2ZW4gdGhlIGRhdGFUcmFuc2Zlci5maWxlcyBpcyBudWxsXG4gICAgICAvLyBidXQgQ2hyb21lIGltcGxlbWVudHMgc29tZSBkcmFnIHN0b3JlLCB3aGljaCBpcyBhY2Nlc2libGUgdmlhIGRhdGFUcmFuc2Zlci5pdGVtc1xuICAgICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZHQuaXRlbXNcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5maWxlcykge1xuICAgIGRhdGFUcmFuc2Zlckl0ZW1zTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlc1xuICB9XG4gIC8vIENvbnZlcnQgZnJvbSBEYXRhVHJhbnNmZXJJdGVtc0xpc3QgdG8gdGhlIG5hdGl2ZSBBcnJheVxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZGF0YVRyYW5zZmVySXRlbXNMaXN0KVxufVxuXG4vLyBGaXJlZm94IHZlcnNpb25zIHByaW9yIHRvIDUzIHJldHVybiBhIGJvZ3VzIE1JTUUgdHlwZSBmb3IgZXZlcnkgZmlsZSBkcmFnLCBzbyBkcmFnb3ZlcnMgd2l0aFxuLy8gdGhhdCBNSU1FIHR5cGUgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWRcbmV4cG9ydCBmdW5jdGlvbiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlLnR5cGUgPT09ICdhcHBsaWNhdGlvbi94LW1vei1maWxlJyB8fCBhY2NlcHRzKGZpbGUsIGFjY2VwdClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVNYXRjaFNpemUoZmlsZSwgbWF4U2l6ZSwgbWluU2l6ZSkge1xuICByZXR1cm4gZmlsZS5zaXplIDw9IG1heFNpemUgJiYgZmlsZS5zaXplID49IG1pblNpemVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEZpbGVzQWNjZXB0ZWQoZmlsZXMsIGFjY2VwdCkge1xuICByZXR1cm4gZmlsZXMuZXZlcnkoZmlsZSA9PiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSlcbn1cblxuLy8gYWxsb3cgdGhlIGVudGlyZSBkb2N1bWVudCB0byBiZSBhIGRyYWcgdGFyZ2V0XG5leHBvcnQgZnVuY3Rpb24gb25Eb2N1bWVudERyYWdPdmVyKGV2dCkge1xuICBldnQucHJldmVudERlZmF1bHQoKVxufVxuXG5mdW5jdGlvbiBpc0llKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSAhPT0gLTEgfHwgdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJykgIT09IC0xXG59XG5cbmZ1bmN0aW9uIGlzRWRnZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdFZGdlLycpICE9PSAtMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJZU9yRWRnZSh1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICByZXR1cm4gaXNJZSh1c2VyQWdlbnQpIHx8IGlzRWRnZSh1c2VyQWdlbnQpXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdXRpbHMvaW5kZXguanMiLCJtb2R1bGUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUpe2lmKHJbZV0pcmV0dXJuIHJbZV0uZXhwb3J0czt2YXIgbz1yW2VdPXtpOmUsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxuKSxvLmw9ITAsby5leHBvcnRzfXZhciByPXt9O3JldHVybiBuLm09dCxuLmM9cixuLmQ9ZnVuY3Rpb24odCxyLGUpe24ubyh0LHIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6ZX0pfSxuLm49ZnVuY3Rpb24odCl7dmFyIHI9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChyLFwiYVwiLHIpLHJ9LG4ubz1mdW5jdGlvbih0LG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKX0sbi5wPVwiXCIsbihuLnM9MTMpfShbZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi41LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz0hcig0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzMikoXCJ3a3NcIiksbz1yKDkpLGk9cigwKS5TeW1ib2wsdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF18fChlW3RdPXUmJmlbdF18fCh1P2k6bykoXCJTeW1ib2wuXCIrdCkpfSkuc3RvcmU9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDIpLGk9cig4KSx1PXIoMjIpLGM9cigxMCksZj1mdW5jdGlvbih0LG4scil7dmFyIGEscyxwLGwsdj10JmYuRix5PXQmZi5HLGg9dCZmLlMsZD10JmYuUCx4PXQmZi5CLGc9eT9lOmg/ZVtuXXx8KGVbbl09e30pOihlW25dfHx7fSkucHJvdG90eXBlLG09eT9vOm9bbl18fChvW25dPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO3kmJihyPW4pO2ZvcihhIGluIHIpcz0hdiYmZyYmdm9pZCAwIT09Z1thXSxwPShzP2c6cilbYV0sbD14JiZzP2MocCxlKTpkJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwP2MoRnVuY3Rpb24uY2FsbCxwKTpwLGcmJnUoZyxhLHAsdCZmLlUpLG1bYV0hPXAmJmkobSxhLGwpLGQmJmJbYV0hPXAmJihiW2FdPXApfTtlLmNvcmU9byxmLkY9MSxmLkc9MixmLlM9NCxmLlA9OCxmLkI9MTYsZi5XPTMyLGYuVT02NCxmLlI9MTI4LHQuZXhwb3J0cz1mfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNiksbz1yKDIxKTt0LmV4cG9ydHM9cigzKT9mdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZih0LG4sbygxLHIpKX06ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0W25dPXIsdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9MCxlPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrcitlKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7aWYoZSh0KSx2b2lkIDA9PT1uKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwobixyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLGUpe3JldHVybiB0LmNhbGwobixyLGUpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsZSxvKXtyZXR1cm4gdC5jYWxsKG4scixlLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT10KXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIit0KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI4KSxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP28oZSh0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO24uX19lc01vZHVsZT0hMCxuLmRlZmF1bHQ9ZnVuY3Rpb24odCxuKXtpZih0JiZuKXt2YXIgcj1BcnJheS5pc0FycmF5KG4pP246bi5zcGxpdChcIixcIiksZT10Lm5hbWV8fFwiXCIsbz10LnR5cGV8fFwiXCIsaT1vLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik7cmV0dXJuIHIuc29tZShmdW5jdGlvbih0KXt2YXIgbj10LnRyaW0oKTtyZXR1cm5cIi5cIj09PW4uY2hhckF0KDApP2UudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChuLnRvTG93ZXJDYXNlKCkpOm4uZW5kc1dpdGgoXCIvKlwiKT9pPT09bi5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpOm89PT1ufSl9cmV0dXJuITB9LHIoMTQpLHIoMzQpfSxmdW5jdGlvbih0LG4scil7cigxNSksdC5leHBvcnRzPXIoMikuQXJyYXkuc29tZX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNyksbz1yKDI1KSgzKTtlKGUuUCtlLkYqIXIoMzMpKFtdLnNvbWUsITApLFwiQXJyYXlcIix7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTcpLG89cigxOCksaT1yKDIwKSx1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuLmY9cigzKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxuLHIpe2lmKGUodCksbj1pKG4sITApLGUociksbyl0cnl7cmV0dXJuIHUodCxuLHIpfWNhdGNoKHQpe31pZihcImdldFwiaW4gcnx8XCJzZXRcImluIHIpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIHImJih0W25dPXIudmFsdWUpLHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWUodCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDMpJiYhcig0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigxOSkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDApLmRvY3VtZW50LGk9ZShvKSYmZShvLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighZSh0KSlyZXR1cm4gdDt2YXIgcixvO2lmKG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudmFsdWVPZikmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbztpZighbiYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOm59fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDgpLGk9cigyMyksdT1yKDkpKFwic3JjXCIpLGM9RnVuY3Rpb24udG9TdHJpbmcsZj0oXCJcIitjKS5zcGxpdChcInRvU3RyaW5nXCIpO3IoMikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYy5jYWxsKHQpfSwodC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGMpe3ZhciBhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI7YSYmKGkocixcIm5hbWVcIil8fG8ocixcIm5hbWVcIixuKSksdFtuXSE9PXImJihhJiYoaShyLHUpfHxvKHIsdSx0W25dP1wiXCIrdFtuXTpmLmpvaW4oU3RyaW5nKG4pKSkpLHQ9PT1lP3Rbbl09cjpjP3Rbbl0/dFtuXT1yOm8odCxuLHIpOihkZWxldGUgdFtuXSxvKHQsbixyKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbdV18fGMuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LG4pe3ZhciByPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiByLmNhbGwodCxuKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTApLG89cigyNiksaT1yKDI3KSx1PXIoMTIpLGM9cigyOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIHI9MT09dCxmPTI9PXQsYT0zPT10LHM9ND09dCxwPTY9PXQsbD01PT10fHxwLHY9bnx8YztyZXR1cm4gZnVuY3Rpb24obixjLHkpe2Zvcih2YXIgaCxkLHg9aShuKSxnPW8oeCksbT1lKGMseSwzKSxiPXUoZy5sZW5ndGgpLF89MCx3PXI/dihuLGIpOmY/dihuLDApOnZvaWQgMDtiPl87XysrKWlmKChsfHxfIGluIGcpJiYoaD1nW19dLGQ9bShoLF8seCksdCkpaWYocil3W19dPWQ7ZWxzZSBpZihkKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBoO2Nhc2UgNjpyZXR1cm4gXztjYXNlIDI6dy5wdXNoKGgpfWVsc2UgaWYocylyZXR1cm4hMTtyZXR1cm4gcD8tMTphfHxzP3M6d319fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09ZSh0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChlKHQpKX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5jZWlsLGU9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9lOnIpKHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcoZSh0KSkobil9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoMzEpLGk9cig2KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBvKHQpJiYobj10LmNvbnN0cnVjdG9yLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG58fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpfHwobj12b2lkIDApLGUobikmJm51bGw9PT0obj1uW2ldKSYmKG49dm9pZCAwKSksdm9pZCAwPT09bj9BcnJheTpufX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiQXJyYXlcIj09ZSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89ZVtcIl9fY29yZS1qc19zaGFyZWRfX1wiXXx8KGVbXCJfX2NvcmUtanNfc2hhcmVkX19cIl09e30pO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gb1t0XXx8KG9bdF09e30pfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuISF0JiZlKGZ1bmN0aW9uKCl7bj90LmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6dC5jYWxsKG51bGwpfSl9fSxmdW5jdGlvbih0LG4scil7cigzNSksdC5leHBvcnRzPXIoMikuU3RyaW5nLmVuZHNXaXRofSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig3KSxvPXIoMTIpLGk9cigzNiksdT1cIlwiLmVuZHNXaXRoO2UoZS5QK2UuRipyKDM4KShcImVuZHNXaXRoXCIpLFwiU3RyaW5nXCIse2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBuPWkodGhpcyx0LFwiZW5kc1dpdGhcIikscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlPW8obi5sZW5ndGgpLGM9dm9pZCAwPT09cj9lOk1hdGgubWluKG8ociksZSksZj1TdHJpbmcodCk7cmV0dXJuIHU/dS5jYWxsKG4sZixjKTpuLnNsaWNlKGMtZi5sZW5ndGgsYyk9PT1mfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzNyksbz1yKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUobikpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5nI1wiK3IrXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO3JldHVybiBTdHJpbmcobyh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoNSksaT1yKDYpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBlKHQpJiYodm9pZCAwIT09KG49dFtpXSk/ISFuOlwiUmVnRXhwXCI9PW8odCkpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNikoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49Ly4vO3RyeXtcIi8uL1wiW3RdKG4pfWNhdGNoKHIpe3RyeXtyZXR1cm4gbltlXT0hMSwhXCIvLi9cIlt0XShuKX1jYXRjaCh0KXt9fXJldHVybiEwfX1dKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydCBkZWZhdWx0IHtcbiAgcmVqZWN0ZWQ6IHtcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJDb2xvcjogJyNjNjYnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWUnXG4gIH0sXG4gIGRpc2FibGVkOiB7XG4gICAgb3BhY2l0eTogMC41XG4gIH0sXG4gIGFjdGl2ZToge1xuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIGJvcmRlckNvbG9yOiAnIzZjNicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZSdcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHdpZHRoOiAyMDAsXG4gICAgaGVpZ2h0OiAyMDAsXG4gICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgYm9yZGVyQ29sb3I6ICcjNjY2JyxcbiAgICBib3JkZXJTdHlsZTogJ2Rhc2hlZCcsXG4gICAgYm9yZGVyUmFkaXVzOiA1XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy9zdHlsZXMuanMiXSwic291cmNlUm9vdCI6IiJ9 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment