From fc0d1b0cfeda9156ea91bd47b38b58c6089fddf6 Mon Sep 17 00:00:00 2001 From: Olzie-12 Date: Tue, 13 Feb 2024 05:33:39 +0000 Subject: [PATCH] f --- dist/index.js | 63 ++++++++++++++++++++++++++++------------------- package-lock.json | 62 +++++++++++++++++++++++----------------------- package.json | 2 +- tsconfig.json | 2 +- 4 files changed, 70 insertions(+), 59 deletions(-) diff --git a/dist/index.js b/dist/index.js index 5e6e517..1865a4d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3854,7 +3854,7 @@ var ErrorCode; ErrorCode[ErrorCode["CannotConnectRefusedByServer"] = 10061] = "CannotConnectRefusedByServer"; ErrorCode[ErrorCode["DirectoryNotEmpty"] = 10066] = "DirectoryNotEmpty"; ErrorCode[ErrorCode["TooManyUsers"] = 10068] = "TooManyUsers"; -})(ErrorCode = exports.ErrorCode || (exports.ErrorCode = {})); +})(ErrorCode || (exports.ErrorCode = ErrorCode = {})); ; @@ -4052,8 +4052,8 @@ exports.applyExcludeFilter = applyExcludeFilter; /***/ 7951: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -!function(e,t){ true?module.exports=t():0}(global,(function(){return function(e){var t={};function r(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(i,n,function(t){return e[t]}.bind(null,n));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=34)}([function(e,t){e.exports=__nccwpck_require__(3837)},function(e,t){e.exports=__nccwpck_require__(2361)},function(e,t){e.exports=__nccwpck_require__(2781)},function(e,t,r){var i=r(15).Ber,n=r(4).readUInt32BE,s=r(4).writeUInt32BE;function o(e,t,r,i,s,o){r&&!Buffer.isBuffer(r)&&"string"!=typeof r&&("number"==typeof s&&(o=s),s=i,i=r,r=void 0),t||(t=0);var a,c,h=e.length,f=h-t;return t<0||t>=h||f<4||(a=n(e,t))>(o||1/0)||f<4+a?(i&&i._cleanup(s),!1):(c=(t+=4)+a,e._pos=c,r?Buffer.isBuffer(r)?(e.copy(r,0,t,c),r):e.toString(r,t,c):e.slice(t,c))}e.exports={iv_inc:function(e){var t=12,r=0;do{if(--t,255!==(r=e[t]))return void(e[t]=++r);e[t]=0}while(t>4)},readInt:function(e,t,r,i){var s=e.length;if(t<0||t>=s||s-t<4)return r&&r._cleanup(i),!1;return n(e,t)},readString:o,parseKey:r(32).parseKey,sigSSHToASN1:function(e,t,r,n){var s;switch(t){case"ssh-dss":if(e.length>40)return e;(s=new i.Writer).startSequence();var a=e.slice(0,20),c=e.slice(20);if(128&a[0]){var h=Buffer.allocUnsafe(21);h[0]=0,a.copy(h,1),a=h}else 0!==a[0]||128&a[1]||(a=a.slice(1));if(128&c[0]){var f=Buffer.allocUnsafe(21);f[0]=0,c.copy(f,1),c=f}else 0!==c[0]||128&c[1]||(c=c.slice(1));return s.writeBuffer(a,i.Integer),s.writeBuffer(c,i.Integer),s.endSequence(),s.buffer;case"ecdsa-sha2-nistp256":case"ecdsa-sha2-nistp384":case"ecdsa-sha2-nistp521":return!1!==(a=o(e,0,r,n))&&(!1!==(c=o(e,e._pos,r,n))&&((s=new i.Writer).startSequence(),s.writeBuffer(a,i.Integer),s.writeBuffer(c,i.Integer),s.endSequence(),s.buffer));default:return e}},DSASigBERToBare:function(e){if(e.length<=40)return e;var t=new i.Reader(e);t.readSequence();var r=t.readString(i.Integer,!0),n=t.readString(i.Integer,!0),s=0,o=0;if(r.length<20){var a=Buffer.allocUnsafe(20);r.copy(a,1),(r=a)[0]=0}if(n.length<20){var c=Buffer.allocUnsafe(20);n.copy(c,1),(n=c)[0]=0}r.length>20&&0===r[0]&&(s=1);n.length>20&&0===n[0]&&(o=1);var h=Buffer.allocUnsafe(r.length-s+(n.length-o));return r.copy(h,0,s),n.copy(h,r.length-s,o),h},ECDSASigASN1ToSSH:function(e){if(0===e[0])return e;var t=new i.Reader(e);t.readSequence();var r=t.readString(i.Integer,!0),n=t.readString(i.Integer,!0);if(null===r||null===n)return!1;var o=Buffer.allocUnsafe(4+r.length+4+n.length);return s(o,r.length,0),r.copy(o,4),s(o,n.length,4+r.length),n.copy(o,8+r.length),o}}},function(e,t){e.exports={readUInt32BE:function(e,t){return 16777216*e[t++]+65536*e[t++]+256*e[t++]+e[t]},writeUInt32BE:function(e,t,r){return e[r++]=t>>>24,e[r++]=t>>>16,e[r++]=t>>>8,e[r++]=t,r},writeUInt32LE:function(e,t,r){return e[r++]=t,e[r++]=t>>>8,e[r++]=t>>>16,e[r++]=t>>>24,r}}},function(e,t){e.exports=__nccwpck_require__(7147)},function(e,t){e.exports=__nccwpck_require__(6113)},function(e,t){e.exports={readUInt32BE:function(e,t){return 16777216*e[t++]+65536*e[t++]+256*e[t++]+e[t]},writeUInt32BE:function(e,t,r){return e[r++]=t>>>24,e[r++]=t>>>16,e[r++]=t>>>8,e[r++]=t,r},writeUInt32LE:function(e,t,r){return e[r++]=t,e[r++]=t>>>8,e[r++]=t>>>16,e[r++]=t>>>24,r}}},function(e,t){e.exports=__nccwpck_require__(1808)},function(e,t,r){"use strict";var i;Object.defineProperty(t,"__esModule",{value:!0}),t.FileInfo=t.FileType=void 0,function(e){e[e.Unknown=0]="Unknown",e[e.File=1]="File",e[e.Directory=2]="Directory",e[e.SymbolicLink=3]="SymbolicLink"}(i=t.FileType||(t.FileType={}));class n{constructor(e){this.name=e,this.type=i.Unknown,this.size=0,this.rawModifiedAt="",this.modifiedAt=void 0,this.permissions=void 0,this.hardLinkCount=void 0,this.link=void 0,this.group=void 0,this.user=void 0,this.uniqueID=void 0,this.name=e}get isDirectory(){return this.type===i.Directory}get isSymbolicLink(){return this.type===i.SymbolicLink}get isFile(){return this.type===i.File}get date(){return this.rawModifiedAt}set date(e){this.rawModifiedAt=e}}t.FileInfo=n,n.UnixPermission={Read:4,Write:2,Execute:1}},function(e,t,r){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||t.hasOwnProperty(r)||i(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),n(r(37),t),n(r(22),t),n(r(9),t),n(r(23),t),n(r(42),t);var s=r(26);Object.defineProperty(t,"enterPassiveModeIPv4",{enumerable:!0,get:function(){return s.enterPassiveModeIPv4}}),Object.defineProperty(t,"enterPassiveModeIPv6",{enumerable:!0,get:function(){return s.enterPassiveModeIPv6}})},function(e,t){e.exports=__nccwpck_require__(4404)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.positiveIntermediate=t.positiveCompletion=t.isMultiline=t.isSingleLine=t.parseControlResponse=void 0;function i(e){return/^\d\d\d(?:$| )/.test(e)}function n(e){return/^\d\d\d-/.test(e)}t.parseControlResponse=function(e){const t=e.split(/\r?\n/),r=[];let s,o=0;for(let e=0;e=200&&e<300},t.positiveIntermediate=function(e){return e>=300&&e<400}},function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.Strategy=void 0;const n=r(1),s=r(43);class o extends n.EventEmitter{constructor(e,t){super(),this.config=e,this.options=t}abort(){return i(this,void 0,void 0,(function*(){yield this.disconnect(),yield this.connect()}))}prepareTransfer(e,t){return this.transfer=new s.Transfer(e,t,(e,t)=>{this.emit("progress",e,t)}),this.transfer.handleProgress}finishTransfer(){this.transfer=null}handleNetwork(e,t){return new Promise((r,i)=>{const n=()=>{this.removeListener("disconnect",s),t&&t(o,a)},s=()=>o(null),o=e=>{n(),r(e)},a=e=>{n(),i(e)};this.once("disconnect",s),e(o,a)})}}t.Strategy=o},function(e,t,r){e.exports={SFTPStream:r(47),SSH2Stream:r(56),utils:r(3),constants:r(18)}},function(e,t,r){var i=r(48);e.exports={Ber:i,BerReader:i.Reader,BerWriter:i.Writer}},function(e,t){e.exports={newInvalidAsn1Error:function(e){var t=new Error;return t.name="InvalidAsn1Error",t.message=e||"",t}}},function(e,t){e.exports={EOC:0,Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,ObjectDescriptor:7,External:8,Real:9,Enumeration:10,PDV:11,Utf8String:12,RelativeOID:13,Sequence:16,Set:17,NumericString:18,PrintableString:19,T61String:20,VideotexString:21,IA5String:22,UTCTime:23,GeneralizedTime:24,GraphicString:25,VisibleString:26,GeneralString:28,UniversalString:29,CharacterString:30,BMPString:31,Constructor:32,Context:128}},function(e,t,r){var i,n,s,o=r(6),a=function(){if("function"==typeof o.sign&&"function"==typeof o.verify){var e,t,r="-----BEGIN PRIVATE KEY-----\r\nMC4CAQAwBQYDK2VwBCIEIHKj+sVa9WcD/q2DJUJaf43Kptc8xYuUQA4bOFj9vC8T\r\n-----END PRIVATE KEY-----",i=Buffer.from("a");try{e=o.sign(null,i,r),t=o.verify(null,i,r,e)}catch(e){}return Buffer.isBuffer(e)&&64===e.length&&!0===t}return!1}(),c="function"==typeof o.diffieHellman&&"function"==typeof o.generateKeyPairSync&&"function"==typeof o.createPublicKey,h=t.MESSAGE={DISCONNECT:1,IGNORE:2,UNIMPLEMENTED:3,DEBUG:4,SERVICE_REQUEST:5,SERVICE_ACCEPT:6,KEXINIT:20,NEWKEYS:21,USERAUTH_REQUEST:50,USERAUTH_FAILURE:51,USERAUTH_SUCCESS:52,USERAUTH_BANNER:53,GLOBAL_REQUEST:80,REQUEST_SUCCESS:81,REQUEST_FAILURE:82,CHANNEL_OPEN:90,CHANNEL_OPEN_CONFIRMATION:91,CHANNEL_OPEN_FAILURE:92,CHANNEL_WINDOW_ADJUST:93,CHANNEL_DATA:94,CHANNEL_EXTENDED_DATA:95,CHANNEL_EOF:96,CHANNEL_CLOSE:97,CHANNEL_REQUEST:98,CHANNEL_SUCCESS:99,CHANNEL_FAILURE:100};for(i=0,s=(n=Object.keys(h)).length;ii(void 0,void 0,void 0,(function*(){let r,i;try{r=yield e(...t)}catch(e){i=e}return{data:r,error:i}}))},function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.FtpStrategy=void 0;const n=r(10),s=r(2),o=r(13),a=r(27);class c extends o.Strategy{constructor(){super(...arguments),this.connect=()=>i(this,void 0,void 0,(function*(){var e;this.connected||(this.client||(this.client=new n.Client),yield this.client.access(Object.assign({secure:this.isFTPS,secureOptions:null===(e=this.options)||void 0===e?void 0:e.secureOptions},this.config)),this.emit("connect"))})),this.disconnect=()=>i(this,void 0,void 0,(function*(){return this.connected?(this.emit("disconnect"),new Promise(e=>{this.client.close(),this.client.ftp.socket.once("close",()=>{this.client=null,e()})})):null})),this.download=(e,t,r)=>i(this,void 0,void 0,(function*(){return this.handleTransfer(()=>this.client.downloadTo(e,t.remotePath,t.startAt),t,r)})),this.upload=(e,t,r)=>i(this,void 0,void 0,(function*(){return this.handleTransfer(()=>this.client.uploadFrom(e,t.remotePath),t,r)})),this.list=e=>this.handle(()=>this.client.list(e).then(e=>e.map(this.formatFile))),this.size=e=>this.handle(()=>this.client.size(e)),this.exists=e=>i(this,void 0,void 0,(function*(){try{yield this.client.rename(e,e)}catch(e){return!1}return!0})),this.move=(e,t)=>this.handle(()=>this.client.rename(e,t)),this.removeFile=e=>this.handle(()=>this.client.remove(e)),this.removeEmptyFolder=e=>this.handle(()=>this.client.removeEmptyDir(e)),this.removeFolder=e=>this.handle(()=>this.client.removeDir(e)),this.createFolder=e=>i(this,void 0,void 0,(function*(){yield this.send("MKD "+e)})),this.createEmptyFile=e=>i(this,void 0,void 0,(function*(){const t=s.Readable.from("\n");yield this.upload(t,{remotePath:e},{quiet:!0})})),this.pwd=()=>this.handle(()=>this.client.pwd()),this.send=e=>this.handle(()=>this.client.send(e).then(e=>e.message)),this.formatFile=e=>Object.assign(Object.assign({},a.FtpUtils.formatFile(e)),{lastModified:a.FtpUtils.getValidDate(e.date)}),this.handle=e=>i(this,void 0,void 0,(function*(){try{return yield e()}catch(e){const t=e.message;if("Client is closed"!==t&&!t.startsWith("User closed client during task"))throw e}return null})),this.handleTransfer=(e,t,r)=>i(this,void 0,void 0,(function*(){var i;const n=this.prepareTransfer(t,r);this.client.trackProgress(e=>n(e.bytes)),yield this.handle(e),null===(i=this.client)||void 0===i||i.trackProgress(void 0),this.finishTransfer()}))}get connected(){var e;return!1===(null===(e=this.client)||void 0===e?void 0:e.closed)}get isFTPS(){return"ftps"===this.config.protocol}get socket(){var e,t;return null===(t=null===(e=this.client)||void 0===e?void 0:e.ftp)||void 0===t?void 0:t.socket}}t.FtpStrategy=c},function(e,t){e.exports=__nccwpck_require__(1017)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FTPContext=t.FTPError=void 0;const i=r(8),n=r(12);class s extends Error{constructor(e){super(e.message),this.name=this.constructor.name,this.code=e.code}}t.FTPError=s;t.FTPContext=class{constructor(e=0,t="utf8"){this.timeout=e,this.verbose=!1,this.ipFamily=void 0,this.tlsOptions={},this._partialResponse="",this._encoding=t,this._socket=this.socket=this._newSocket(),this._dataSocket=void 0}close(){const e=this._task?"User closed client during task":"User closed client",t=new Error(e);this.closeWithError(t)}closeWithError(e){this._closingError||(this._closingError=e,this._closeSocket(this._socket),this._closeSocket(this._dataSocket),this._passToHandler(e),this._stopTrackingTask())}get closed(){return void 0===this.socket.remoteAddress||void 0!==this._closingError}reset(){this.socket=this._newSocket()}get socket(){return this._socket}set socket(e){if(this.dataSocket=void 0,this.tlsOptions={},this._partialResponse="",this._socket){e.localPort===this._socket.localPort||this._socket.destroy(),this._removeSocketListeners(this._socket)}e&&(this._closingError=void 0,e.setTimeout(0),e.setEncoding(this._encoding),e.setKeepAlive(!0),e.on("data",e=>this._onControlSocketData(e)),e.on("end",()=>this.closeWithError(new Error("Server sent FIN packet unexpectedly, closing connection."))),e.on("close",e=>{e||this.closeWithError(new Error("Server closed connection unexpectedly."))}),this._setupDefaultErrorHandlers(e,"control socket")),this._socket=e}get dataSocket(){return this._dataSocket}set dataSocket(e){this._closeSocket(this._dataSocket),e&&(e.setTimeout(0),this._setupDefaultErrorHandlers(e,"data socket")),this._dataSocket=e}get encoding(){return this._encoding}set encoding(e){this._encoding=e,this.socket&&this.socket.setEncoding(e)}send(e){const t=e.startsWith("PASS")?"> PASS ###":"> "+e;this.log(t),this._socket.write(e+"\r\n",this.encoding)}request(e){return this.handle(e,(e,t)=>{e instanceof Error?t.reject(e):t.resolve(e)})}handle(e,t){if(this._task){const e=new Error("User launched a task while another one is still running. Forgot to use 'await' or '.then()'?");e.stack+="\nRunning task launched at: "+this._task.stack,this.closeWithError(e)}return new Promise((r,i)=>{const n=(new Error).stack||"Unknown call stack",s={resolve:(...e)=>{this._stopTrackingTask(),r(...e)},reject:e=>{this._stopTrackingTask(),i(e)}};if(this._task={stack:n,resolver:s,responseHandler:t},this._closingError){const e=new Error("Client is closed");return e.stack+="\nClosing reason: "+this._closingError.stack,e.code=void 0!==this._closingError.code?this._closingError.code:"0",void this._passToHandler(e)}this.socket.setTimeout(this.timeout),e&&this.send(e)})}log(e){this.verbose&&console.log(e)}get hasTLS(){return"encrypted"in this._socket}_stopTrackingTask(){this.socket.setTimeout(0),this._task=void 0}_onControlSocketData(e){const t=e.trim();this.log("< "+t);const r=this._partialResponse+t,i=n.parseControlResponse(r);this._partialResponse=i.rest;for(const e of i.messages){const t=parseInt(e.substr(0,3),10),r={code:t,message:e},i=t>=400?new s(r):void 0;this._passToHandler(i||r)}}_passToHandler(e){this._task&&this._task.responseHandler(e,this._task.resolver)}_setupDefaultErrorHandlers(e,t){e.once("error",e=>{e.message+=` (${t})`,this.closeWithError(e)}),e.once("close",e=>{e&&this.closeWithError(new Error(`Socket closed due to transmission error (${t})`))}),e.once("timeout",()=>this.closeWithError(new Error(`Timeout (${t})`)))}_closeSocket(e){e&&(e.destroy(),this._removeSocketListeners(e))}_removeSocketListeners(e){e.removeAllListeners(),e.removeAllListeners("timeout"),e.removeAllListeners("data"),e.removeAllListeners("end"),e.removeAllListeners("error"),e.removeAllListeners("close"),e.removeAllListeners("connect")}_newSocket(){return new i.Socket}}},function(e,t,r){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.hasOwnProperty.call(e,r)&&i(t,e,r);return n(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.parseList=void 0;const o=[s(r(38)),s(r(39)),s(r(24))];function a(e){return""!==e.trim()}const c=/\r?\n/;t.parseList=function(e){const t=e.split(c).filter(a);if(0===t.length)return[];const r=t[t.length-1],i=(n=r,o.find(e=>!0===e.testLine(n)));var n;if(!i)throw new Error("This library only supports MLSD, Unix- or DOS-style directory listing. Your FTP server seems to be using another format. You can see the transmitted listing when setting `client.ftp.verbose = true`. You can then provide a custom parser to `client.parseList`, see the documentation for details.");const s=t.map(i.parseLine).filter(e=>void 0!==e);return i.transformList(s)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseMLSxDate=t.transformList=t.parseLine=t.testLine=void 0;const i=r(9);function n(e,t){t.size=parseInt(e,10)}const s={size:n,sizd:n,unique:(e,t)=>{t.uniqueID=e},modify:(e,t)=>{t.modifiedAt=a(e),t.rawModifiedAt=t.modifiedAt.toISOString()},type:(e,t)=>{if(e.startsWith("OS.unix=slink"))return t.type=i.FileType.SymbolicLink,t.link=e.substr(e.indexOf(":")+1),1;switch(e){case"file":t.type=i.FileType.File;break;case"dir":t.type=i.FileType.Directory;break;case"OS.unix=symlink":t.type=i.FileType.SymbolicLink;break;case"cdir":case"pdir":return 2;default:t.type=i.FileType.Unknown}return 1},"unix.mode":(e,t)=>{const r=e.substr(-3);t.permissions={user:parseInt(r[0],10),group:parseInt(r[1],10),world:parseInt(r[2],10)}},"unix.ownername":(e,t)=>{t.user=e},"unix.owner":(e,t)=>{void 0===t.user&&(t.user=e)},get"unix.uid"(){return this["unix.owner"]},"unix.groupname":(e,t)=>{t.group=e},"unix.group":(e,t)=>{void 0===t.group&&(t.group=e)},get"unix.gid"(){return this["unix.group"]}};function o(e,t){const r=e.indexOf(t);return[e.substr(0,r),e.substr(r+t.length)]}function a(e){return new Date(Date.UTC(+e.slice(0,4),+e.slice(4,6)-1,+e.slice(6,8),+e.slice(8,10),+e.slice(10,12),+e.slice(12,14),+e.slice(15,18)))}t.testLine=function(e){return/^\S+=\S+;/.test(e)||e.startsWith(" ")},t.parseLine=function(e){const[t,r]=o(e," ");if(""===r||"."===r||".."===r)return;const n=new i.FileInfo(r),a=t.split(";");for(const e of a){const[t,r]=o(e,"=");if(!r)continue;const i=s[t.toLowerCase()];if(!i)continue;if(2===i(r,n))return}return n},t.transformList=function(e){const t=new Map;for(const r of e)r.isSymbolicLink||void 0===r.uniqueID||t.set(r.uniqueID,r);const r=[];for(const i of e){if(i.isSymbolicLink&&void 0!==i.uniqueID&&void 0===i.link){const e=t.get(i.uniqueID);void 0!==e&&(i.link=e.name)}!i.name.includes("/")&&r.push(i)}return r},t.parseMLSxDate=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ipIsPrivateV4Address=t.upgradeSocket=t.describeAddress=t.describeTLS=void 0;const i=r(11);t.describeTLS=function(e){if(e instanceof i.TLSSocket){const t=e.getProtocol();return t||"Server socket or disconnected client socket"}return"No encryption"},t.describeAddress=function(e){return"IPv6"===e.remoteFamily?`[${e.remoteAddress}]:${e.remotePort}`:`${e.remoteAddress}:${e.remotePort}`},t.upgradeSocket=function(e,t){return new Promise((r,n)=>{const s=Object.assign({},t,{socket:e}),o=i.connect(s,()=>{!1!==s.rejectUnauthorized&&!o.authorized?n(o.authorizationError):(o.removeAllListeners("error"),r(o))}).once("error",e=>{n(e)})})},t.ipIsPrivateV4Address=function(e=""){e.startsWith("::ffff:")&&(e=e.substr(7));const t=e.split(".").map(e=>parseInt(e,10));return 10===t[0]||172===t[0]&&t[1]>=16&&t[1]<=31||192===t[0]&&168===t[1]}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.downloadTo=t.uploadFrom=t.connectForPassiveTransfer=t.parsePasvResponse=t.enterPassiveModeIPv4=t.parseEpsvResponse=t.enterPassiveModeIPv6=void 0;const i=r(25),n=r(11),s=r(12);function o(e){const t=e.match(/[|!]{3}(.+)[|!]/);if(null===t||void 0===t[1])throw new Error("Can't parse response to 'EPSV': "+e);const r=parseInt(t[1],10);if(Number.isNaN(r))throw new Error("Can't parse response to 'EPSV', port is not a number: "+e);return r}function a(e){const t=e.match(/([-\d]+,[-\d]+,[-\d]+,[-\d]+),([-\d]+),([-\d]+)/);if(null===t||4!==t.length)throw new Error("Can't parse response to 'PASV': "+e);return{host:t[1].replace(/,/g,"."),port:256*(255&parseInt(t[2],10))+(255&parseInt(t[3],10))}}function c(e,t,r){return new Promise((i,s)=>{const o=function(e){e.message="Can't open data connection in passive mode: "+e.message,s(e)};let a=r._newSocket();a.on("error",o),a.connect({port:t,host:e,family:r.ipFamily},()=>{r.socket instanceof n.TLSSocket&&(a=n.connect(Object.assign({},r.tlsOptions,{socket:a,session:r.socket.getSession()}))),a.removeListener("error",o),r.dataSocket=a,i()})})}t.enterPassiveModeIPv6=async function(e){const t=await e.request("EPSV"),r=o(t.message);if(!r)throw new Error("Can't parse EPSV response: "+t.message);const i=e.socket.remoteAddress;if(void 0===i)throw new Error("Control socket is disconnected, can't get remote address.");return await c(i,r,e),t},t.parseEpsvResponse=o,t.enterPassiveModeIPv4=async function(e){const t=await e.request("PASV"),r=a(t.message);if(!r)throw new Error("Can't parse PASV response: "+t.message);const n=e.socket.remoteAddress;return i.ipIsPrivateV4Address(r.host)&&n&&!i.ipIsPrivateV4Address(n)&&(r.host=n),await c(r.host,r.port,e),t},t.parsePasvResponse=a,t.connectForPassiveTransfer=c;class h{constructor(e,t){this.ftp=e,this.progress=t,this.response=void 0,this.dataTransferDone=!1}onDataStart(e,t){if(void 0===this.ftp.dataSocket)throw new Error("Data transfer should start but there is no data connection.");this.ftp.socket.setTimeout(0),this.ftp.dataSocket.setTimeout(this.ftp.timeout),this.progress.start(this.ftp.dataSocket,e,t)}onDataDone(e){this.progress.updateAndStop(),this.ftp.socket.setTimeout(this.ftp.timeout),this.ftp.dataSocket&&this.ftp.dataSocket.setTimeout(0),this.dataTransferDone=!0,this.tryResolve(e)}onControlDone(e,t){this.response=t,this.tryResolve(e)}onError(e,t){this.progress.updateAndStop(),this.ftp.socket.setTimeout(this.ftp.timeout),this.ftp.dataSocket=void 0,e.reject(t)}onUnexpectedRequest(e){const t=new Error("Unexpected FTP response is requesting an answer: "+e.message);this.ftp.closeWithError(t)}tryResolve(e){this.dataTransferDone&&void 0!==this.response&&(this.ftp.dataSocket=void 0,e.resolve(this.response))}}function f(e,t,r,i){!0===e?i():t.once(r,()=>i())}t.uploadFrom=function(e,t){const r=new h(t.ftp,t.tracker),n=`${t.command} ${t.remotePath}`;return t.ftp.handle(n,(n,o)=>{if(n instanceof Error)r.onError(o,n);else if(150===n.code||125===n.code){const n=t.ftp.dataSocket;if(!n)return void r.onError(o,new Error("Upload should begin but no data connection is available."));f(!("getCipher"in n)||void 0!==n.getCipher(),n,"secureConnect",()=>{t.ftp.log(`Uploading to ${i.describeAddress(n)} (${i.describeTLS(n)})`),r.onDataStart(t.remotePath,t.type),e.pipe(n).once("finish",()=>{n.destroy(),r.onDataDone(o)})})}else s.positiveCompletion(n.code)?r.onControlDone(o,n):s.positiveIntermediate(n.code)&&r.onUnexpectedRequest(n)})},t.downloadTo=function(e,t){if(!t.ftp.dataSocket)throw new Error("Download will be initiated but no data connection is available.");t.ftp.dataSocket.pipe(e);const r=new h(t.ftp,t.tracker);return t.ftp.handle(t.command,(n,o)=>{if(n instanceof Error)r.onError(o,n);else if(150===n.code||125===n.code){const n=t.ftp.dataSocket;if(!n)return void r.onError(o,new Error("Download should begin but no data connection is available."));t.ftp.log(`Downloading from ${i.describeAddress(n)} (${i.describeTLS(n)})`),r.onDataStart(t.remotePath,t.type),f(function(e){if(e.writableFinished)return!0;const t=e._writableState;return!(!t||t.errored)&&(t.finished||t.ended&&0===t.length)}(e),e,"finish",()=>r.onDataDone(o))}else 350===n.code?t.ftp.send("RETR "+t.remotePath):s.positiveCompletion(n.code)?r.onControlDone(o,n):s.positiveIntermediate(n.code)&&r.onUnexpectedRequest(n)})}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FtpUtils=void 0;const i=r(10),n=/[0-9][0-9]-[0-9][0-9]-[0-9][0-9]\s[0-9][0-9]\:[0-9][0-9][PA]M/gi;t.FtpUtils=class{static formatFile(e){const{permissions:t,name:r,size:i,user:n,group:s,type:o}=e;return{name:r,type:this.getFileType(o),size:i,owner:n,group:s,permissions:{owner:null==t?void 0:t.user,group:null==t?void 0:t.group}}}static getFileType(e){switch(e){case i.FileType.Directory:return"folder";case i.FileType.File:return"file";case i.FileType.SymbolicLink:return"symbolic-link"}return"unknown"}static getValidDate(e){const t=e.trim();if(!t.match(n))return new Date(t);const[r,i,s,o,a]=t.match(/[0-9][0-9]/g);let c=parseInt(o);return"P"===t[t.length-2]&&(c+=12),new Date(parseInt("20"+s),parseInt(r)-1,parseInt(i),c,parseInt(a))}static getDateFromUnixTime(e){return new Date(1e3*e)}}},function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.SftpStrategy=void 0;const n=r(0),s=r(29),o=r(10),a=r(13),c=r(27);class h extends a.Strategy{constructor(){super(...arguments),this.connected=!1,this.connect=()=>new Promise((e,t)=>{var r,n;if(this.connected)return e();this.client=new s.Client;const o=()=>{this.client.removeListener("error",a),this.client.removeListener("ready",c),this.client.removeListener("keyboard-interactive",this.onKeyboardInteractive)},a=e=>{o(),t(e)},c=()=>i(this,void 0,void 0,(function*(){o();try{this.wrapper=yield this.getWrapper(),this.connected=!0,this.emit("connect"),e()}catch(e){t(e)}finally{o()}}));this.client.once("error",a),this.client.once("ready",c),this.client.once("end",this.onDisconnect),(null===(r=this.options)||void 0===r?void 0:r.tryKeyboard)&&this.client.once("keyboard-interactive",this.onKeyboardInteractive),this.client.connect(Object.assign(Object.assign({},this.config),{username:this.config.user,readyTimeout:null===(n=this.options)||void 0===n?void 0:n.timeout}))}),this.onKeyboardInteractive=(e,t,r,i,n)=>{n([this.config.password])},this.onDisconnect=()=>{this.connected=!1,this.client=null,this.wrapper=null,this.emit("disconnect")},this.disconnect=()=>this.connected?new Promise(e=>{this.socket.once("close",()=>{e()}),this.client.end()}):null,this.download=(e,t,r)=>i(this,void 0,void 0,(function*(){var i;const n=null===(i=this.wrapper)||void 0===i?void 0:i.createReadStream(t.remotePath,{start:t.startAt,autoClose:!0});return this.handleTransfer(n,e,t,r)})),this.upload=(e,t,r)=>i(this,void 0,void 0,(function*(){var i;const n=null===(i=this.wrapper)||void 0===i?void 0:i.createWriteStream(t.remotePath);return this.handleTransfer(e,n,t,r)})),this.list=(e="./")=>this._list(e).then(e=>null==e?void 0:e.map(e=>this.formatFile(o.parseList(e.longname)[0],e))),this.formatFile=(e,t)=>Object.assign(Object.assign({},c.FtpUtils.formatFile(e)),{lastModified:c.FtpUtils.getDateFromUnixTime(t.attrs.mtime)}),this.size=e=>this._stat(e).then(e=>null==e?void 0:e.size),this.exists=e=>i(this,void 0,void 0,(function*(){try{yield this._stat(e)}catch(e){return!1}return!0})),this.move=(e,t)=>{var r;return this.handle(null===(r=this.wrapper)||void 0===r?void 0:r.rename,e,t)},this.removeFile=e=>{var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.unlink,e)},this.removeEmptyFolder=e=>{var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.rmdir,e)},this.removeFolder=e=>i(this,void 0,void 0,(function*(){const t=yield this._list(e);if(t.length)for(const r of t){const t=e+"/"+r.filename;r.attrs.isDirectory()?yield this.removeFolder(t):yield this.removeFile(t)}yield this.removeEmptyFolder(e)})),this.createFolder=e=>{var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.mkdir,e)},this.createEmptyFile=e=>i(this,void 0,void 0,(function*(){const t=yield this._open(e,"w");t&&(yield this._close(t))})),this.pwd=()=>{var e;return this.handle(null===(e=this.wrapper)||void 0===e?void 0:e.realpath,"./")},this.send=e=>i(this,void 0,void 0,(function*(){let t="";return yield this.handleNetwork((r,i)=>{this.client.exec(e,(e,n)=>{if(e)return i(e);n.on("data",e=>{t+=e}),n.once("error",i),n.once("close",r)})},()=>{void 0}),t})),this.handle=(e,...t)=>this.handleNetwork((r,i)=>{if(!e)return r(null);e.bind(this.wrapper)(...t,(e,...t)=>{if(e)return i(e);r(...t)})}),this.handleTransfer=(e,t,r,i)=>{if(!e||!t)return null;const n=this.prepareTransfer(r,i);return this.handleNetwork((r,i)=>{let s=0;e.on("data",e=>{s+=e.byteLength,n(s)}),e.once("error",i),e.once("close",r),e.pipe(t)},()=>{e.unpipe(t),e.removeAllListeners(),this.finishTransfer()})}}get socket(){return this.client._sock}getWrapper(){return n.promisify(this.client.sftp).bind(this.client)()}_list(e){var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.readdir,e)}_stat(e){var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.stat,e)}_open(e,t){var r;return this.handle(null===(r=this.wrapper)||void 0===r?void 0:r.open,e,t)}_close(e){var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.close,e)}}t.SftpStrategy=h},function(e,t,r){var i=r(6),n=r(8).Socket,s=r(46).lookup,o=r(1).EventEmitter,a=r(0).inherits,c=i.getHashes(),h=r(14),f=h.SSH2Stream,u=h.SFTPStream,l=h.constants,p=l.BUGS,d=l.ALGORITHMS,g=l.EDDSA_SUPPORTED,m=h.utils.parseKey,E=r(60),v=r(33),y=r(63),_=r(65),w=r(7).readUInt32BE,b=Math.pow(2,32)-1,S=/^OpenSSH_(?:(?![0-4])\d)|(?:\d{2,})/,k=function(e){};function T(){if(!(this instanceof T))return new T;o.call(this),this.config={host:void 0,port:void 0,localAddress:void 0,localPort:void 0,forceIPv4:void 0,forceIPv6:void 0,keepaliveCountMax:void 0,keepaliveInterval:void 0,readyTimeout:void 0,username:void 0,password:void 0,privateKey:void 0,tryKeyboard:void 0,agent:void 0,allowAgentFwd:void 0,authHandler:void 0,hostHashAlgo:void 0,hostHashCb:void 0,strictVendor:void 0,debug:void 0},this._readyTimeout=void 0,this._channels=void 0,this._callbacks=void 0,this._forwarding=void 0,this._forwardingUnix=void 0,this._acceptX11=void 0,this._agentFwdEnabled=void 0,this._curChan=void 0,this._remoteVer=void 0,this._sshstream=void 0,this._sock=void 0,this._resetKA=void 0}function A(e,t,r,i){var n=U(e),s=v.MAX_WINDOW,o=v.PACKET_SIZE,a=!0;if(!1===n)return i(new Error("No free channels available"));"function"==typeof r&&(i=r,r={}),e._channels[n]=i;var c=e._sshstream;return c.once("CHANNEL_OPEN_CONFIRMATION:"+n,h).once("CHANNEL_OPEN_FAILURE:"+n,f).once("CHANNEL_CLOSE:"+n,f),"session"===t?a=c.session(n,s,o):"direct-tcpip"===t?a=c.directTcpip(n,s,o,r):"direct-streamlocal@openssh.com"===t&&(a=c.openssh_directStreamLocal(n,s,o,r)),a;function h(r){c.removeListener("CHANNEL_OPEN_FAILURE:"+n,f),c.removeListener("CHANNEL_CLOSE:"+n,f);var a={type:t,incoming:{id:n,window:s,packetSize:o,state:"open"},outgoing:{id:r.sender,window:r.window,packetSize:r.packetSize,state:"open"}};i(void 0,new v(a,e))}function f(t){var r;c.removeListener("CHANNEL_OPEN_CONFIRMATION:"+n,h),c.removeListener("CHANNEL_OPEN_FAILURE:"+n,f),c.removeListener("CHANNEL_CLOSE:"+n,f),delete e._channels[n],t instanceof Error?r=t:"object"==typeof t&&null!==t?((r=new Error("(SSH) Channel open failure: "+t.description)).reason=t.reason,r.lang=t.lang):(r=new Error("(SSH) Channel open failure: server closed channel unexpectedly")).reason=r.lang="",i(r)}}function U(e){if(e._curChan=0?e.keepaliveCountMax:3,this.config.keepaliveInterval="number"==typeof e.keepaliveInterval&&e.keepaliveInterval>0?e.keepaliveInterval:0,this.config.readyTimeout="number"==typeof e.readyTimeout&&e.readyTimeout>=0?e.readyTimeout:2e4;var r,o={kex:void 0,kexBuf:void 0,cipher:void 0,cipherBuf:void 0,serverHostKey:void 0,serverHostKeyBuf:void 0,hmac:void 0,hmacBuf:void 0,compress:void 0,compressBuf:void 0};if("object"==typeof e.algorithms&&null!==e.algorithms){var a,h;if(h=e.algorithms.kex,Array.isArray(h)&&h.length>0){for(a=d.SUPPORTED_KEX,r=0;r0){for(a=d.SUPPORTED_CIPHER,r=0;r0){for(a=d.SUPPORTED_SERVER_HOST_KEY,r=0;r0){for(a=d.SUPPORTED_HMAC,r=0;r0){for(a=d.SUPPORTED_COMPRESS,r=0;rN){if(clearInterval(T),S.readable){var e=new Error("Keepalive timeout");e.level="client-timeout",t.emit("error",e),S.destroy()}}else S.writable?(_.push(D),b.ping()):clearInterval(T)}function D(){B>0&&(R=0,clearInterval(T),S.writable&&(T=setInterval(P,B)))}if(this._resetKA=D,b.on("USERAUTH_BANNER",(function(e){t.emit("banner",e)})),S.on("connect",(function(){p("DEBUG: Client: Connected"),t.emit("connect"),e.sock||b.pipe(S).pipe(b)})).on("timeout",(function(){t.emit("timeout")})).on("error",(function(e){clearTimeout(t._readyTimeout),e.level="client-socket",t.emit("error",e)})).on("end",(function(){b.unpipe(S),clearTimeout(t._readyTimeout),clearInterval(T),t.emit("end")})).on("close",(function(){b.unpipe(S),clearTimeout(t._readyTimeout),clearInterval(T),t.emit("close");var e=_,i=new Error("No response from server");for(_=t._callbacks=[],r=0;r=C.length)return;++x>=C.length?(p("DEBUG: Agent: No more keys left to try"),p("DEBUG: Client: agent auth failed"),C=void 0,W()):(p("DEBUG: Agent: Trying key #"+(x+1)),b.authPK(t.config.username,C[x]),b.once("USERAUTH_PK_OK",j))}}function X(e,r,i,n){if(0===(Array.isArray(n)?n.length:0))return p("DEBUG: Client: Sending automatic USERAUTH_INFO_RESPONSE"),b.authInfoRes();t.emit("keyboard-interactive",e,r,i,n,(function(e){b.authInfoRes(e)}))}function j(){if("agent"===A){var e=C[x],r=w(e,0),i=e.toString("ascii",4,4+r),n=i.slice(4);switch(i){case"ssh-rsa":case"ssh-dss":case"ecdsa-sha2-nistp256":case"ecdsa-sha2-nistp384":case"ecdsa-sha2-nistp521":break;default:if(g&&"ssh-ed25519"===i)break;return p("DEBUG: Agent: Skipping unsupported key type: "+i),q()}b.authPK(t.config.username,e,(function(r,s){y(t.config.agent,e,n,r,(function(e,r){if(e)e.level="agent",t.emit("error",e);else{var n=w(r,0);if(4+n+40&&(t._readyTimeout=setTimeout((function(){var e=new Error("Timed out while waiting for handshake");e.level="client-timeout",t.emit("error",e),S.destroy()}),t.config.readyTimeout))}},T.prototype.end=function(){return!!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable)&&this._sshstream.disconnect()},T.prototype.destroy=function(){this._sock&&this._sock.destroy()},T.prototype.exec=function(e,t,r){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");"function"==typeof t&&(r=t,t={});var i=this;return A(this,"session",{allowHalfOpen:!1!==t.allowHalfOpen},(function(n,s){if(n)return r(n);var o=[];function a(e){if(e)return s.close(),r(e);o.length&&o.shift()()}(!0===i.config.allowAgentFwd||t&&!0===t.agentForward&&void 0!==i.config.agent)&&o.push((function(){R(s,a)})),"object"==typeof t&&null!==t&&("object"==typeof t.env&&null!==t.env&&P(s,t.env),("object"==typeof t.pty&&null!==t.pty||!0===t.pty)&&o.push((function(){N(s,t.pty,a)})),("object"==typeof t.x11&&null!==t.x11||"number"===t.x11||!0===t.x11)&&o.push((function(){B(s,t.x11,a)}))),o.push((function(){!function(e,t,r,i){if("open"!==e.outgoing.state)return i(new Error("Channel is not open")),!0;e._callbacks.push((function(t){if(t)return i(!0!==t?t:new Error("Unable to exec"));e.subtype="exec",e.allowHalfOpen=!1!==r.allowHalfOpen,i(void 0,e)})),e._client._sshstream.exec(e.outgoing.id,t,!0)}(s,e,t,r)})),o.shift()()}))},T.prototype.shell=function(e,t,r){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var i=this;return"function"==typeof e?(r=e,e=t=void 0):"function"==typeof t&&(r=t,t=void 0),!e||void 0===e.x11&&void 0===e.env||(t=e,e=void 0),A(this,"session",(function(n,s){if(n)return r(n);var o=[];function a(e){if(e)return s.close(),r(e);o.length&&o.shift()()}(!0===i.config.allowAgentFwd||t&&!0===t.agentForward&&void 0!==i.config.agent)&&o.push((function(){R(s,a)})),!1!==e&&o.push((function(){N(s,e,a)})),"object"==typeof t&&null!==t&&("object"==typeof t.env&&null!==t.env&&P(s,t.env),("object"==typeof t.x11&&null!==t.x11||"number"===t.x11||!0===t.x11)&&o.push((function(){B(s,t.x11,a)}))),o.push((function(){!function(e,t){if("open"!==e.outgoing.state)return t(new Error("Channel is not open")),!0;e._callbacks.push((function(r){if(r)return t(!0!==r?r:new Error("Unable to open shell"));e.subtype="shell",t(void 0,e)})),e._client._sshstream.shell(e.outgoing.id,!0)}(s,r)})),o.shift()()}))},T.prototype.subsys=function(e,t){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");return A(this,"session",(function(r,i){if(r)return t(r);D(i,e,(function(e,r){if(e)return t(e);t(void 0,r)}))}))},T.prototype.sftp=function(e){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var t=this;return A(this,"session",(function(r,i){if(r)return e(r);D(i,"sftp",(function(r,i){if(r)return e(r);var n=t._sshstream._state.incoming.identRaw,s={debug:t.config.debug},o=new u(s,n);function a(t){o.removeListener("ready",c),i.removeListener("exit",h),e(t)}function c(){o.removeListener("error",a),i.removeListener("exit",h),e(void 0,new _(o))}function h(t,r){var i;o.removeListener("ready",c),o.removeListener("error",a),i="number"==typeof t?"Received exit code "+t+" while establishing SFTP session":"Received signal "+r+" while establishing SFTP session";var n=new Error(i);n.code=t,n.signal=r,e(n)}o.once("error",a).once("ready",c).once("close",(function(){i.end()})),i.once("exit",h),o.pipe(i).pipe(o)}))}))},T.prototype.forwardIn=function(e,t,r){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var i=this,n="function"==typeof r;return n&&this._callbacks.push((function(n,s){if(n)return r(!0!==n?n:new Error("Unable to bind to "+e+":"+t));var o=t;0===t&&s&&s.length>=4&&(o=w(s,0),i._sshstream.remoteBugs&p.DYN_RPORT_BUG||(t=o)),i._forwarding[e+":"+t]=o,r(void 0,o)})),this._sshstream.tcpipForward(e,t,n)},T.prototype.unforwardIn=function(e,t,r){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var i=this,n="function"==typeof r;return n&&this._callbacks.push((function(n){if(n)return r(!0!==n?n:new Error("Unable to unbind from "+e+":"+t));delete i._forwarding[e+":"+t],r()})),this._sshstream.cancelTcpipForward(e,t,n)},T.prototype.forwardOut=function(e,t,r,i,n){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");return A(this,"direct-tcpip",{srcIP:e,srcPort:t,dstIP:r,dstPort:i},n)},T.prototype.openssh_noMoreSessions=function(e){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var t="function"==typeof e;return!this.config.strictVendor||this.config.strictVendor&&S.test(this._remoteVer)?(t&&this._callbacks.push((function(t){if(t)return e(!0!==t?t:new Error("Unable to disable future sessions"));e()})),this._sshstream.openssh_noMoreSessions(t)):(t&&process.nextTick((function(){e(new Error("strictVendor enabled and server is not OpenSSH or compatible version"))})),!0)},T.prototype.openssh_forwardInStreamLocal=function(e,t){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var r="function"==typeof t,i=this;return!this.config.strictVendor||this.config.strictVendor&&S.test(this._remoteVer)?(r&&this._callbacks.push((function(r){if(r)return t(!0!==r?r:new Error("Unable to bind to "+e));i._forwardingUnix[e]=!0,t()})),this._sshstream.openssh_streamLocalForward(e,r)):(r&&process.nextTick((function(){t(new Error("strictVendor enabled and server is not OpenSSH or compatible version"))})),!0)},T.prototype.openssh_unforwardInStreamLocal=function(e,t){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var r="function"==typeof t,i=this;return!this.config.strictVendor||this.config.strictVendor&&S.test(this._remoteVer)?(r&&this._callbacks.push((function(r){if(r)return t(!0!==r?r:new Error("Unable to unbind on "+e));delete i._forwardingUnix[e],t()})),this._sshstream.openssh_cancelStreamLocalForward(e,r)):(r&&process.nextTick((function(){t(new Error("strictVendor enabled and server is not OpenSSH or compatible version"))})),!0)},T.prototype.openssh_forwardOutStreamLocal=function(e,t){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");return!this.config.strictVendor||this.config.strictVendor&&S.test(this._remoteVer)?A(this,"direct-streamlocal@openssh.com",{socketPath:e},t):(process.nextTick((function(){t(new Error("strictVendor enabled and server is not OpenSSH or compatible version"))})),!0)};var O=function(){if("function"==typeof i.randomFillSync){var e=Buffer.alloc(16);return function(){return i.randomFillSync(e,0,16),e.toString("hex")}}return function(){return i.randomBytes(16).toString("hex")}}();T.Client=T,T.Server=r(66),T.utils=h.utils,T.SFTP_STATUS_CODE=u.STATUS_CODE,T.SFTP_OPEN_MODE=u.OPEN_MODE,T.HTTPAgent=E.SSHTTPAgent,T.HTTPSAgent=E.SSHTTPSAgent,e.exports=T},function(e,t){e.exports=__nccwpck_require__(9491)},function(e,t,r){"use strict";var i,n=r(50),s=n.Buffer,o={};for(i in n)n.hasOwnProperty(i)&&"SlowBuffer"!==i&&"Buffer"!==i&&(o[i]=n[i]);var a=o.Buffer={};for(i in s)s.hasOwnProperty(i)&&"allocUnsafe"!==i&&"allocUnsafeSlow"!==i&&(a[i]=s[i]);if(o.Buffer.prototype=s.prototype,a.from&&a.from!==Uint8Array.from||(a.from=function(e,t,r){if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type '+typeof e);if(e&&void 0===e.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);return s(e,t,r)}),a.alloc||(a.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError('The "size" argument must be of type number. Received type '+typeof e);if(e<0||e>=2*(1<<30))throw new RangeError('The value "'+e+'" is invalid for option "size"');var i=s(e);return t&&0!==t.length?"string"==typeof r?i.fill(t,r):i.fill(t):i.fill(0),i}),!o.kStringMaxLength)try{o.kStringMaxLength=process.binding("buffer").kStringMaxLength}catch(e){}o.constants||(o.constants={MAX_LENGTH:o.kMaxLength},o.kStringMaxLength&&(o.constants.MAX_STRING_LENGTH=o.kStringMaxLength)),e.exports=o},function(e,t,r){var i,n=r(6),s=n.sign,o=n.verify,a=n.createSign,c=n.createVerify,h=n.createDecipheriv,f=n.createHash,u=n.createHmac,l=n.getCiphers(),p=r(15).Ber,d=r(52).pbkdf,g=r(4),m=g.readUInt32BE,E=g.writeUInt32BE,v=r(18),y=v.ALGORITHMS.SUPPORTED_CIPHER,_=v.CIPHER_INFO,w=v.SSH_TO_OPENSSL,b=v.EDDSA_SUPPORTED,S=Symbol("Hash Algorithm"),k=Symbol("Private key PEM"),T=Symbol("Public key PEM"),A=Symbol("Public key SSH"),U=Symbol("Decrypted Key"),B=Object.create(null);!function(){for(var e=Object.keys(_),t=0;t=r||s<4)return!1;var o=m(e,i);if(s<4+o)return!1;i+=4+o}return e._pos=i,!0}function O(e,t){var r=new p.Writer;return r.startSequence(),r.startSequence(),r.writeOID("1.2.840.113549.1.1.1"),r.writeNull(),r.endSequence(),r.startSequence(p.BitString),r.writeByte(0),r.startSequence(),r.writeBuffer(e,p.Integer),r.writeBuffer(t,p.Integer),r.endSequence(),r.endSequence(),r.endSequence(),R("PUBLIC",r.buffer)}function I(e,t){var r=Buffer.allocUnsafe(15+e.length+4+t.length);E(r,7,0),r.write("ssh-rsa",4,7,"ascii");var i=11;return E(r,t.length,i),t.copy(r,i+=4),E(r,e.length,i+=t.length),e.copy(r,i+4),r}var C=function(){function e(e,t,r,i,n,s,o,a){var c=new p.Writer;return c.startSequence(),c.writeInt(0,p.Integer),c.writeBuffer(e,p.Integer),c.writeBuffer(t,p.Integer),c.writeBuffer(r,p.Integer),c.writeBuffer(i,p.Integer),c.writeBuffer(n,p.Integer),c.writeBuffer(s,p.Integer),c.writeBuffer(o,p.Integer),c.writeBuffer(a,p.Integer),c.endSequence(),c.buffer}try{var t=["return function genOpenSSLRSAPriv(n, e, d, iqmp, p, q) {"," var bn_d = bigIntFromBuffer(d);"," var dmp1 = bigIntToBuffer(bn_d % (bigIntFromBuffer(p) - 1n));"," var dmq1 = bigIntToBuffer(bn_d % (bigIntFromBuffer(q) - 1n));"," return makePEM('RSA PRIVATE', genRSAASN1Buf(n, e, d, p, q, dmp1, dmq1, iqmp));","};"].join("\n");return new Function("bigIntFromBuffer, bigIntToBuffer, makePEM, genRSAASN1Buf",t)((function(e){return BigInt("0x"+e.toString("hex"))}),(function(e){var t=e.toString(16);if(0!=(1&t.length))t="0"+t;else{var r=t.charCodeAt(0);(56===r||r>=97&&r<=102)&&(t="00"+t)}return Buffer.from(t,"hex")}),R,e)}catch(t){return i=r(54),function(t,r,n,s,o,a){var c=new i(o,256),h=new i(a,256),f=new i(n,256),u=f.mod(c.subtract(i.ONE)),l=f.mod(h.subtract(i.ONE));return R("RSA PRIVATE",e(t,r,n,o,a,Buffer.from(u.toByteArray()),Buffer.from(l.toByteArray()),s))}}var i}();function L(e,t,r,i){var n=new p.Writer;return n.startSequence(),n.startSequence(),n.writeOID("1.2.840.10040.4.1"),n.startSequence(),n.writeBuffer(e,p.Integer),n.writeBuffer(t,p.Integer),n.writeBuffer(r,p.Integer),n.endSequence(),n.endSequence(),n.startSequence(p.BitString),n.writeByte(0),n.writeBuffer(i,p.Integer),n.endSequence(),n.endSequence(),R("PUBLIC",n.buffer)}function H(e,t,r,i){var n=Buffer.allocUnsafe(15+e.length+4+t.length+4+r.length+4+i.length);E(n,7,0),n.write("ssh-dss",4,7,"ascii");var s=11;return E(n,e.length,s),e.copy(n,s+=4),E(n,t.length,s+=e.length),t.copy(n,s+=4),E(n,r.length,s+=t.length),r.copy(n,s+=4),E(n,i.length,s+=r.length),i.copy(n,s+4),n}function x(e,t,r,i,n){var s=new p.Writer;return s.startSequence(),s.writeInt(0,p.Integer),s.writeBuffer(e,p.Integer),s.writeBuffer(t,p.Integer),s.writeBuffer(r,p.Integer),s.writeBuffer(i,p.Integer),s.writeBuffer(n,p.Integer),s.endSequence(),R("DSA PRIVATE",s.buffer)}function F(e){var t=new p.Writer;return t.startSequence(),t.startSequence(),t.writeOID("1.3.101.112"),t.endSequence(),t.startSequence(p.BitString),t.writeByte(0),t._ensure(e.length),e.copy(t._buf,t._offset,0,e.length),t._offset+=e.length,t.endSequence(),t.endSequence(),R("PUBLIC",t.buffer)}function M(e){var t=Buffer.allocUnsafe(19+e.length);return E(t,11,0),t.write("ssh-ed25519",4,11,"ascii"),E(t,e.length,15),e.copy(t,19),t}function K(e,t){var r=new p.Writer;return r.startSequence(),r.startSequence(),r.writeOID("1.2.840.10045.2.1"),r.writeOID(e),r.endSequence(),r.startSequence(p.BitString),r.writeByte(0),r._ensure(t.length),t.copy(r._buf,r._offset,0,t.length),r._offset+=t.length,r.endSequence(),r.endSequence(),R("PUBLIC",r.buffer)}function G(e,t){var r;switch(e){case"1.2.840.10045.3.1.7":r="nistp256";break;case"1.3.132.0.34":r="nistp384";break;case"1.3.132.0.35":r="nistp521";break;default:return}var i=Buffer.allocUnsafe(39+t.length);return E(i,19,0),i.write("ecdsa-sha2-"+r,4,19,"ascii"),E(i,8,23),i.write(r,27,8,"ascii"),E(i,t.length,35),t.copy(i,39),i}function W(e,t,r){var i=new p.Writer;return i.startSequence(),i.writeInt(1,p.Integer),i.writeBuffer(r,p.OctetString),i.startSequence(160),i.writeOID(e),i.endSequence(),i.startSequence(161),i.startSequence(p.BitString),i.writeByte(0),i._ensure(t.length),t.copy(i._buf,i._offset,0,t.length),i._offset+=t.length,i.endSequence(),i.endSequence(),i.endSequence(),R("EC PRIVATE",i.buffer)}var q,X={sign:function(){if("function"==typeof s)return function(e){var t=this[k];if(null===t)return new Error("No private key available");try{return s(this[S],e,t)}catch(e){return e}};return function(e){var t=this[k];if(null===t)return new Error("No private key available");var r=a(this[S]);return r.update(e),function(e,t){try{return e.sign(t)}catch(e){return e}}(r,t)}}(),verify:function(){if("function"==typeof o)return function(e,t){var r=this[T];if(null===r)return new Error("No public key available");try{return o(this[S],e,r,t)}catch(e){return e}};return function(e,t){var r=this[T];if(null===r)return new Error("No public key available");var i=c(this[S]);return i.update(e),function(e,t,r){try{return e.verify(t,r)}catch(e){return e}}(i,r,t)}}(),getPrivatePEM:function(){return this[k]},getPublicPEM:function(){return this[T]},getPublicSSH:function(){return this[A]}};function j(e,t,r,i,n,s,o){this.type=e,this.comment=t,this[k]=r,this[T]=i,this[A]=n,this[S]=s,this[U]=o}function V(e,t,r,i,n,s,o){this.type=e,this.comment=t,this[k]=r,this[T]=i,this[A]=n,this[S]=s,this[U]=o}function Y(e,t,r,i,n,s,o){this.type=e,this.comment=t,this[k]=r,this[T]=i,this[A]=n,this[S]=s,this[U]=o}function z(e,t,n,s){var o;i||(i=r(3));var a=null,c=null;switch(t){case"ssh-rsa":var h=i.readString(e,e._pos);if(!1===h)return new Error("Malformed OpenSSH public key");var f=i.readString(e,e._pos);if(!1===f)return new Error("Malformed OpenSSH public key");a=O(f,h),c=I(f,h),o="sha1";break;case"ssh-dss":var u=i.readString(e,e._pos);if(!1===u)return new Error("Malformed OpenSSH public key");var l=i.readString(e,e._pos);if(!1===l)return new Error("Malformed OpenSSH public key");var p=i.readString(e,e._pos);if(!1===p)return new Error("Malformed OpenSSH public key");var d=i.readString(e,e._pos);if(!1===d)return new Error("Malformed OpenSSH public key");a=L(u,l,p,d),c=H(u,l,p,d),o="sha1";break;case"ssh-ed25519":var g=i.readString(e,e._pos);if(!1===g||32!==g.length)return new Error("Malformed OpenSSH public key");a=F(g),c=M(g),o=null;break;case"ecdsa-sha2-nistp256":o="sha256",oid="1.2.840.10045.3.1.7";case"ecdsa-sha2-nistp384":void 0===o&&(o="sha384",oid="1.3.132.0.34");case"ecdsa-sha2-nistp521":if(void 0===o&&(o="sha512",oid="1.3.132.0.35"),!D(e,1))return new Error("Malformed OpenSSH public key");var m=i.readString(e,e._pos);if(!1===m)return new Error("Malformed OpenSSH public key");a=K(oid,m),c=G(oid,m);break;default:return new Error("Unsupported OpenSSH public key type: "+t)}return new Q(s,n,a,c,o)}function Q(e,t,r,i,n){this.type=e,this.comment=t,this[k]=null,this[T]=r,this[A]=i,this[S]=n,this[U]=!1}function $(e,t,r,i,n){this.type=e,this.comment=t,this[k]=null,this[T]=r,this[A]=i,this[S]=n,this[U]=!1}j.prototype=X,q=/^-----BEGIN OPENSSH PRIVATE KEY-----(?:\r\n|\n)([\s\S]+)(?:\r\n|\n)-----END OPENSSH PRIVATE KEY-----$/,j.parse=function(e,t){var n,s=q.exec(e);if(null===s)return null;var o=Buffer.from(s[1],"base64");if(o.length<31)return new Error("Malformed OpenSSH private key");var a=o.toString("ascii",0,15);if("openssh-key-v1\0"!==a)return new Error("Unsupported OpenSSH key magic: "+a);i||(i=r(3));var c=i.readString(o,15,"ascii");if(!1===c)return new Error("Malformed OpenSSH private key");if("none"!==c&&-1===y.indexOf(c))return new Error("Unsupported cipher for OpenSSH key: "+c);var f,u,l,g=i.readString(o,o._pos,"ascii");if(!1===g)return new Error("Malformed OpenSSH private key");if("none"!==g){if("none"===c)return new Error("Malformed OpenSSH private key");if("bcrypt"!==g)return new Error("Unsupported kdf name for OpenSSH key: "+g);if(!t)return new Error("Encrypted private OpenSSH key detected, but no passphrase given")}else if("none"!==c)return new Error("Malformed OpenSSH private key");"none"!==c&&(f=_[c]);var E=i.readString(o,o._pos);if(!1===E)return new Error("Malformed OpenSSH private key");if(E.length)switch(g){case"none":return new Error("Malformed OpenSSH private key");case"bcrypt":var v=i.readString(E,0);if(!1===v||E._pos+4>E.length)return new Error("Malformed OpenSSH private key");var S=m(E,E._pos),k=Buffer.allocUnsafe(f.keyLen+f.ivLen);if(0!==d(t,t.length,v,v.length,k,k.length,S))return new Error("Failed to generate information to decrypt key");u=k.slice(0,f.keyLen),l=k.slice(f.keyLen)}else if("none"!==g)return new Error("Malformed OpenSSH private key");var T=i.readInt(o,o._pos);if(!1===T)return new Error("Malformed OpenSSH private key");if(o._pos+=4,T>0){for(var A=0;A0){if(o.length-o._posS.keyLen&&(A=A.slice(0,S.keyLen));try{var U=h(b,A,k);U.setAutoPadding(!1),g=P(U.update(g),U.final()),E=!0}catch(e){return e}}}}var N,D,C,x="Malformed OpenSSH private key";switch(E&&(x+=". Bad passphrase?"),i[1]){case"RSA":s="ssh-rsa",o=R("RSA PRIVATE",g);try{(d=new p.Reader(g)).readSequence(),d.readInt();var F=d.readString(p.Integer,!0);if(null===F)return new Error(x);var M=d.readString(p.Integer,!0);if(null===M)return new Error(x);a=O(F,M),c=I(F,M)}catch(e){return new Error(x)}u="sha1";break;case"DSA":s="ssh-dss",o=R("DSA PRIVATE",g);try{(d=new p.Reader(g)).readSequence(),d.readInt();var W=d.readString(p.Integer,!0);if(null===W)return new Error(x);var q=d.readString(p.Integer,!0);if(null===q)return new Error(x);var X=d.readString(p.Integer,!0);if(null===X)return new Error(x);var j=d.readString(p.Integer,!0);if(null===j)return new Error(x);a=L(W,q,X,j),c=H(W,q,X,j)}catch(e){return new Error(x)}u="sha1";break;case"EC":var Y,z;try{(d=new p.Reader(g)).readSequence(),d.readInt(),z=d.readString(p.OctetString,!0),d.readByte();var Q=d.readLength();if(null===Q)return new Error(x);d._offset=Q;var $=d.readOID();if(null===$)return new Error(x);switch($){case"1.2.840.10045.3.1.7":Y="prime256v1",s="ecdsa-sha2-nistp256",u="sha256";break;case"1.3.132.0.34":Y="secp384r1",s="ecdsa-sha2-nistp384",u="sha384";break;case"1.3.132.0.35":Y="secp521r1",s="ecdsa-sha2-nistp521",u="sha512";break;default:return new Error("Unsupported private key EC OID: "+$)}}catch(e){return new Error(x)}o=R("EC PRIVATE",g);var Z=(N=Y,D=z,(C=n.createECDH(N)).setPrivateKey(D),C.getPublicKey());a=K($,Z),c=G($,Z)}return new V(s,"",o,a,c,u,E)}}(),Y.prototype=X,function(){var e=Buffer.alloc(0),t=Buffer.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),n=Buffer.from([0,0,0,0]),s=Buffer.from([0,0,0,1]),o=/^PuTTY-User-Key-File-2: (ssh-(?:rsa|dss))\r?\nEncryption: (aes256-cbc|none)\r?\nComment: ([^\r\n]*)\r?\nPublic-Lines: \d+\r?\n([\s\S]+?)\r?\nPrivate-Lines: \d+\r?\n([\s\S]+?)\r?\nPrivate-MAC: ([^\r\n]+)/;Y.parse=function(a,c){var l=o.exec(a);if(null===l)return null;var p=l[2],d="none"!==p;if(d&&!c)return new Error("Encrypted PPK private key detected, but no passphrase given");var g=Buffer.from(l[5],"base64");if(d){var m=_[p],v=P(f("sha1").update(n).update(c).digest(),f("sha1").update(s).update(c).digest());v.length>m.keyLen&&(v=v.slice(0,m.keyLen));try{var y=h(w[p],v,t);y.setAutoPadding(!1),g=P(y.update(g),y.final()),decrypted=!0}catch(e){return e}}var b,S,k,T=l[1],A=l[3],U=Buffer.from(l[4],"base64"),B=l[6],N=T.length,R=p.length,F=Buffer.byteLength(A),M=U.length,K=g.length,G=Buffer.allocUnsafe(4+N+4+R+4+F+4+M+4+K);if(E(G,N,V=0),G.write(T,V+=4,N,"ascii"),E(G,R,V+=N),G.write(p,V+=4,R,"ascii"),E(G,F,V+=R),G.write(A,V+=4,F,"utf8"),E(G,M,V+=F),U.copy(G,V+=4),E(G,K,V+=M),g.copy(G,V+4),c||(c=e),u("sha1",f("sha1").update("putty-private-key-file-mac-key").update(c).digest()).update(G).digest("hex")!==B)return d?new Error("PPK private key integrity check failed -- bad passphrase?"):new Error("PPK private key integrity check failed");switch(i||(i=r(3)),U._pos=0,D(U,1),T){case"ssh-rsa":var W=i.readString(U,U._pos);if(!1===W)return new Error("Malformed PPK public key");var q=i.readString(U,U._pos);if(!1===q)return new Error("Malformed PPK public key");var X=i.readString(g,0);if(!1===X)return new Error("Malformed PPK private key");if(!1===(V=i.readString(g,g._pos)))return new Error("Malformed PPK private key");if(!1===(z=i.readString(g,g._pos)))return new Error("Malformed PPK private key");var j=i.readString(g,g._pos);if(!1===j)return new Error("Malformed PPK private key");b=O(q,W),S=I(q,W),k=C(q,W,X,j,V,z);break;case"ssh-dss":var V,z;if(!1===(V=i.readString(U,U._pos)))return new Error("Malformed PPK public key");if(!1===(z=i.readString(U,U._pos)))return new Error("Malformed PPK public key");var Q=i.readString(U,U._pos);if(!1===Q)return new Error("Malformed PPK public key");var $=i.readString(U,U._pos);if(!1===$)return new Error("Malformed PPK public key");var Z=i.readString(g,0);if(!1===Z)return new Error("Malformed PPK private key");b=L(V,z,Q,$),S=H(V,z,Q,$),k=x(V,z,Q,$,Z)}return new Y(T,A,k,b,S,"sha1",d)}}(),Q.prototype=X,function(){var e;e=b?/^(((?:ssh-(?:rsa|dss|ed25519))|ecdsa-sha2-nistp(?:256|384|521))(?:-cert-v0[01]@openssh.com)?) ([A-Z0-9a-z\/+=]+)(?:$|\s+([\S].*)?)$/:/^(((?:ssh-(?:rsa|dss))|ecdsa-sha2-nistp(?:256|384|521))(?:-cert-v0[01]@openssh.com)?) ([A-Z0-9a-z\/+=]+)(?:$|\s+([\S].*)?)$/,Q.parse=function(t){var n=e.exec(t);if(null===n)return null;i||(i=r(3));var s=n[1],o=n[2],a=Buffer.from(n[3],"base64"),c=n[4]||"",h=i.readString(a,a._pos,"ascii");return!1===h||0!==h.indexOf(o)?new Error("Malformed OpenSSH public key"):z(a,o,c,s)}}(),$.prototype=X,function(){var e=/^---- BEGIN SSH2 PUBLIC KEY ----(?:\r\n|\n)((?:(?:[\x21-\x7E]+?):(?:(?:.*?\\\r?\n)*.*)(?:\r\n|\n))*)((?:[A-Z0-9a-z\/+=]+(?:\r\n|\n))+)---- END SSH2 PUBLIC KEY ----$/,t=/^([\x21-\x7E]+?):((?:.*?\\\r?\n)*.*)$/gm,n=/\\\r?\n/g;$.parse=function(s){var o=e.exec(s);if(null===o)return null;var a=o[1],c=Buffer.from(o[2],"base64"),h="";if(void 0!==a)for(;o=t.exec(a);)"comment"===o[1].toLowerCase()&&(h=N(o[2].replace(n,""))).length>1&&34===h.charCodeAt(0)&&34===h.charCodeAt(h.length-1)&&(h=h.slice(1,-1));i||(i=r(3));var f=i.readString(c,0,"ascii");if(!1===f)return new Error("Malformed RFC4716 public key");var u=null,l=null;switch(f){case"ssh-rsa":var p=i.readString(c,c._pos);if(!1===p)return new Error("Malformed RFC4716 public key");var d=i.readString(c,c._pos);if(!1===d)return new Error("Malformed RFC4716 public key");u=O(d,p),l=I(d,p);break;case"ssh-dss":var g=i.readString(c,c._pos);if(!1===g)return new Error("Malformed RFC4716 public key");var m=i.readString(c,c._pos);if(!1===m)return new Error("Malformed RFC4716 public key");var E=i.readString(c,c._pos);if(!1===E)return new Error("Malformed RFC4716 public key");var v=i.readString(c,c._pos);if(!1===v)return new Error("Malformed RFC4716 public key");u=L(g,m,E,v),l=H(g,m,E,v);break;default:return new Error("Malformed RFC4716 public key")}return new $(f,h,u,l,"sha1")}}(),e.exports={parseDERKey:function(e,t){return z(e,t,"",t)},parseKey:function(e,t){if(Buffer.isBuffer(e))e=e.toString("utf8").trim();else{if("string"!=typeof e)return new Error("Key data must be a Buffer or string");e=e.trim()}if(null!=t)if("string"==typeof t)t=Buffer.from(t);else if(!Buffer.isBuffer(t))return new Error("Passphrase must be a string or Buffer when supplied");var r;return null!==(r=j.parse(e,t))||null!==(r=V.parse(e,t))||null!==(r=Y.parse(e,t))||null!==(r=Q.parse(e))||null!==(r=$.parse(e))?r:new Error("Unsupported key format")}}},function(e,t,r){var i=r(0).inherits,n=r(2).Duplex,s=r(2).Readable,o=r(2).Writable,a=r(14).constants.CHANNEL_EXTENDED_DATATYPE.STDERR,c=["CHANNEL_EOF","CHANNEL_CLOSE","CHANNEL_DATA","CHANNEL_EXTENDED_DATA","CHANNEL_WINDOW_ADJUST","CHANNEL_SUCCESS","CHANNEL_FAILURE","CHANNEL_REQUEST"],h=c.length;function f(e,t,r){var i={highWaterMark:2097152,allowHalfOpen:!r||r&&!1!==r.allowHalfOpen};this.allowHalfOpen=i.allowHalfOpen,n.call(this,i);var o=this,a=r&&r.server;this.server=a,this.type=e.type,this.subtype=void 0;var f,p,d,g,m,E=this.incoming=e.incoming,v=E.id,y=this.outgoing=e.outgoing,_=this._callbacks=[];this._client=t,this._hasX11=!1;var w=t._channels,b=t._sshstream;function S(){o._waitClientDrain&&(o._waitClientDrain=!1,o._waitWindow||(o._chunk?o._write(o._chunk,null,o._chunkcb):o._chunkcb?o._chunkcb():o._chunkErr?o.stderr._write(o._chunkErr,null,o._chunkcbErr):o._chunkcbErr&&o._chunkcbErr()))}function k(){o.eof(),(a||!a&&!o.allowHalfOpen)&&o.close(),o.writable=!1}function T(){o.readable=!1}t._sock.on("drain",S),b.once("CHANNEL_EOF:"+v,(function(){"open"===E.state&&(E.state="eof",o.readable&&o.push(null),!a&&o.stderr.readable&&o.stderr.push(null))})).once("CHANNEL_CLOSE:"+v,(function(){if("closed"!==E.state){E.state="closed",o.readable&&o.push(null),a&&o.stderr.writable?o.stderr.end():!a&&o.stderr.readable&&o.stderr.push(null),"open"!==y.state&&"eof"!==y.state||o.close(),"closing"===y.state&&(y.state="closed"),delete w[v];var e=o._writableState;t._sock.removeListener("drain",S),e.ending||e.finished||o.end(),o._callbacks=[];for(var r=0;r<_.length;++r)_[r](!0);_=o._callbacks,a?o.readable?o.once("end",(function(){o.emit("close")})):o.emit("close"):(o.readable?o.once("end",(function(){null===f?o.emit("close",f,p,d,g,m):o.emit("close",f)})):null===f?o.emit("close",f,p,d,g,m):o.emit("close",f),o.stderr.readable?o.stderr.once("end",(function(){o.stderr.emit("close")})):o.stderr.emit("close"));for(r=0;r0&&f>0;)if((s=u-l)>f&&(s=f),s>c&&(s=c),i=o.channelData(h,e.slice(l,l+s)),l+=s,f-=s,!i){this._waitClientDrain=!0,this._chunk=void 0,this._chunkcb=r;break}if(a.window=f,u-l>0)return 0===f&&(this._waitWindow=!0),l>0?(n=Buffer.allocUnsafe(u-l),e.copy(n,0,l),this._chunk=n):this._chunk=e,void(this._chunkcb=r);this._waitClientDrain||r()}},f.prototype.destroy=function(){this.end()},f.prototype.setWindow=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");return"session"!==this.type||"shell"!==this.subtype&&"exec"!==this.subtype||!this.writable||"open"!==this.outgoing.state||this._client._sshstream.windowChange(this.outgoing.id,e,t,r,i)},f.prototype.signal=function(e){if(this.server)throw new Error("Client-only method called in server mode");return"session"!==this.type||!this.writable||"open"!==this.outgoing.state||this._client._sshstream.signal(this.outgoing.id,e)},f.prototype.exit=function(e,t,r){if(!this.server)throw new Error("Server-only method called in client mode");return"session"!==this.type||!this.writable||"open"!==this.outgoing.state||("number"==typeof e?this._client._sshstream.exitStatus(this.outgoing.id,e):this._client._sshstream.exitSignal(this.outgoing.id,e,t,r))},f.MAX_WINDOW=2097152,f.PACKET_SIZE=32768,i(l,o),l.prototype._write=function(e,t,r){var i,n,s,o=this._channel,c=o._client._sshstream,h=o.outgoing,f=h.packetSize,u=h.id,l=h.window,p=e.length,d=0;if("open"===o.outgoing.state){for(;p-d>0&&l>0;)if((s=p-d)>l&&(s=l),s>f&&(s=f),i=c.channelExtData(u,e.slice(d,d+s),a),d+=s,l-=s,!i){o._waitClientDrain=!0,o._chunkErr=void 0,o._chunkcbErr=r;break}if(h.window=l,p-d>0)return 0===l&&(o._waitWindow=!0),d>0?(n=Buffer.allocUnsafe(p-d),e.copy(n,0,d),o._chunkErr=n):o._chunkErr=e,void(o._chunkcbErr=r);o._waitClientDrain||r()}},e.exports=f},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(35);Object.defineProperty(t,"Client",{enumerable:!0,get:function(){return i.Client}});var n=r(13);Object.defineProperty(t,"Strategy",{enumerable:!0,get:function(){return n.Strategy}});var s=r(20);Object.defineProperty(t,"FtpStrategy",{enumerable:!0,get:function(){return s.FtpStrategy}});var o=r(28);Object.defineProperty(t,"SftpStrategy",{enumerable:!0,get:function(){return o.SftpStrategy}});var a=r(19);Object.defineProperty(t,"execFunction",{enumerable:!0,get:function(){return a.execFunction}})},function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.Client=void 0;const n=r(1),s=r(5),o=r(36),a=r(20),c=r(44),h=r(45),f=r(28);class u extends n.EventEmitter{constructor(e){super(),this.workers=[],this.tasks=new o.TasksManager,this.transfers=new Map,this.strategies={ftp:a.FtpStrategy,ftps:a.FtpStrategy,sftp:f.SftpStrategy},this.handleWorkerEvents=e=>{e.on("connect",this.onConnect),e.on("disconnect",this.onDisconnect),e.on("progress",this.onProgress)},this.clearWorkerEvents=e=>{e.removeListener("connect",this.onConnect),e.removeListener("disconnect",this.onDisconnect),e.removeListener("progress",this.onProgress)},this.getWorkerInstance=e=>this.workers[e],this.workerFilter=(e,t)=>"all"===e.group||!t&&"misc"===e.group||e.group===t,this.onConnect=()=>{this.emit("connect")},this.onDisconnect=()=>{this.emit("disconnect")},this.onProgress=(e,t)=>{this.emit("transfer-progress",e,t)},this.options=Object.assign({pool:1},e),this.tasks.getWorkerInstance=this.getWorkerInstance,this.tasks.workerFilter=this.workerFilter}get config(){return this._config}registerProtocol(e,t){this.strategies[e]=t}unregisterProtocol(e){delete this.strategies[e]}createWorker(){const{protocol:e}=this.config,t=this.strategies[e];if(!t)throw new Error(`Strategy for protocol ${e} not found.`);return new t(this.config,this._connectionOptions)}setWorkers(){this.workers.forEach(this.clearWorkerEvents),this.workers=[];const{pool:e}=this.options;for(let t=0;te.connect()))}))}disconnect(){return i(this,void 0,void 0,(function*(){yield Promise.all(this.workers.map(e=>e.disconnect()))}))}abort(){return i(this,void 0,void 0,(function*(){this.emit("transfer-abort",...this.transfers.keys()),this.tasks.deleteAllTasks(),yield Promise.all(this.workers.map(e=>e.abort()))}))}abortTransfer(...e){return i(this,void 0,void 0,(function*(){const t=[],r=[];e.forEach(e=>{const i=this.transfers.get(e);null!=i&&r.push(this.workers[i]),t.push(i),this.emit("transfer-abort",e)}),this.tasks.deleteTasks(...e),this.tasks.pauseWorkers(...t),yield Promise.all(r.map(e=>e.abort())),this.tasks.resumeWorkers(...t)}))}download(e,t,r){let n,o;return"string"==typeof e?(n=s.createWriteStream(e,{flags:r?"a":"w",start:r}),o=e):(n=e,o=h.getPathFromStream(e)),this.handleTransfer(({instance:e,taskId:s})=>i(this,void 0,void 0,(function*(){const i=yield e.size(t);yield e.download(n,{id:s,startAt:r,localPath:o,remotePath:t,totalBytes:i})})),{remotePath:t,localPath:o})}upload(e,t){let r,n;return"string"==typeof e?(r=s.createReadStream(e),n=e):(r=e,n=h.getPathFromStream(e)),this.handleTransfer(({instance:e,taskId:s})=>i(this,void 0,void 0,(function*(){const i=yield h.getFileSize(n);yield e.upload(r,{id:s,localPath:n,remotePath:t,totalBytes:i})})),{remotePath:t,localPath:n})}list(e){return this.tasks.handle(({instance:t})=>t.list(e))}size(e){return this.tasks.handle(({instance:t})=>t.size(e))}exists(e){return this.tasks.handle(({instance:t})=>t.exists(e))}move(e,t){return this.tasks.handle(({instance:r})=>r.move(e,t))}removeFile(e){return this.tasks.handle(({instance:t})=>t.removeFile(e))}removeEmptyFolder(e){return this.tasks.handle(({instance:t})=>t.removeEmptyFolder(e))}removeFolder(e){return this.tasks.handle(({instance:t})=>t.removeFolder(e))}createFolder(e){return this.tasks.handle(({instance:t})=>t.createFolder(e))}createEmptyFile(e){return this.tasks.handle(({instance:t})=>t.createEmptyFile(e))}pwd(){return this.tasks.handle(({instance:e})=>e.pwd())}send(e){return this.tasks.handle(({instance:t})=>t.send(e))}handleTransfer(e,t){return i(this,void 0,void 0,(function*(){const r=this.tasks.createTaskId(),n=Object.assign({id:r},t);this.transfers.set(r,null),this.emit("transfer-new",n);try{yield this.tasks.handle(t=>i(this,void 0,void 0,(function*(){this.transfers.set(r,t.workerIndex),yield e(t)})),"transfer-transfer",r)}catch(e){throw e}finally{this.transfers.delete(r),this.emit("transfer-finish",n)}}))}}t.Client=u},function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.TasksManager=void 0;const n=r(1),s=r(19),o=(e,t)=>e.group===t;class a extends n.EventEmitter{constructor(){super(...arguments),this.workers=[],this.queue=[],this.taskCounter=-1,this.unavailableWorkers=0,this.process=(e,t)=>i(this,void 0,void 0,(function*(){if(t=t||this.getWorker(e.group)){t.busy=!0,this.unavailableWorkers++;const r=this.getWorkerInstance?this.getWorkerInstance(t.index,e.group):t.index,{data:i,error:n}=yield s.execFunction(e.fn,{instance:r,taskId:e.id,workerIndex:t.index});t.busy=!1,this.unavailableWorkers--,this.finishTask(e.id,i,n),this.processNext()}else this.queue.push(e)}))}getWorker(e){if(this.unavailableWorkers===this.workers.length)return null;const t=this.workerFilter||o;return this.workers.find(r=>!r.busy&&!r.paused&&t(r,e))}getWorkers(e){return(null==e?void 0:e.length)?e.map(e=>this.workers[e]):this.workers}setWorkers(...e){this.workers=e.map((e,t)=>({busy:!1,group:e,index:t}))}handle(e,t,r){return i(this,void 0,void 0,(function*(){return this.workersCheck(),new Promise((i,n)=>{const s={id:null!=r?r:this.createTaskId(),fn:e,group:t},o=e=>{if(e.taskId===s.id){if(this.removeListener("change",o),e.error)return n(e.error);i(e.data)}};this.on("change",o),this.process(s)})}))}processNext(){return i(this,void 0,void 0,(function*(){if(this.queue.length){const e=[];for(const t of this.queue){const r=this.getWorker(t.group);r?this.process(t,r):e.push(t)}this.queue=e}}))}workersCheck(){if(!this.workers.length)throw new Error("No workers set")}pauseWorkers(...e){this.unavailableWorkers+=e.length,this.getWorkers(e).forEach(e=>e.paused=!0)}resumeWorkers(...e){this.unavailableWorkers-=e.length,this.getWorkers(e).forEach(e=>e.paused=!1),this.processNext()}deleteTasks(...e){const t=[];this.queue.forEach(r=>{e.includes(r.id)?this.finishTask(r.id):t.push(r)}),this.queue=t}deleteAllTasks(){this.queue.forEach(e=>this.finishTask(e.id)),this.queue=[]}createTaskId(){return++this.taskCounter}finishTask(e,t,r){this.emit("change",{taskId:e,data:t,error:r,type:"finished"})}}t.TasksManager=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Client=void 0;const i=r(5),n=r(21),s=r(11),o=r(0),a=r(22),c=r(23),h=r(40),f=r(41),u=r(24),l=r(25),p=r(26),d=r(12),g=o.promisify(i.readdir),m=o.promisify(i.mkdir),E=o.promisify(i.stat),v=o.promisify(i.open),y=o.promisify(i.close),_=o.promisify(i.unlink);async function w(e){try{return await e()}catch(e){return}}t.Client=class{constructor(e=3e4){this.availableListCommands=["MLSD","LIST -a","LIST"],this.ftp=new a.FTPContext(e),this.prepareTransfer=this._enterFirstCompatibleMode([p.enterPassiveModeIPv6,p.enterPassiveModeIPv4]),this.parseList=c.parseList,this._progressTracker=new h.ProgressTracker}close(){this.ftp.close(),this._progressTracker.stop()}get closed(){return this.ftp.closed}connect(e="localhost",t=21){return this.ftp.reset(),this.ftp.socket.connect({host:e,port:t,family:this.ftp.ipFamily},()=>this.ftp.log(`Connected to ${l.describeAddress(this.ftp.socket)} (${l.describeTLS(this.ftp.socket)})`)),this._handleConnectResponse()}connectImplicitTLS(e="localhost",t=21,r={}){return this.ftp.reset(),this.ftp.socket=s.connect(t,e,r,()=>this.ftp.log(`Connected to ${l.describeAddress(this.ftp.socket)} (${l.describeTLS(this.ftp.socket)})`)),this.ftp.tlsOptions=r,this._handleConnectResponse()}_handleConnectResponse(){return this.ftp.handle(void 0,(e,t)=>{e instanceof Error?t.reject(e):d.positiveCompletion(e.code)?t.resolve(e):(this.ftp.socket.destroy(),t.reject(new a.FTPError(e)))})}send(e,t=!1){return t?(this.ftp.log("Deprecated call using send(command, flag) with boolean flag to ignore errors. Use sendIgnoringError(command)."),this.sendIgnoringError(e)):this.ftp.request(e)}sendIgnoringError(e){return this.ftp.handle(e,(e,t)=>{e instanceof a.FTPError?t.resolve({code:e.code,message:e.message}):e instanceof Error?t.reject(e):t.resolve(e)})}async useTLS(e={},t="AUTH TLS"){const r=await this.send(t);return this.ftp.socket=await l.upgradeSocket(this.ftp.socket,e),this.ftp.tlsOptions=e,this.ftp.log("Control socket is using: "+l.describeTLS(this.ftp.socket)),r}login(e="anonymous",t="guest"){return this.ftp.log("Login security: "+l.describeTLS(this.ftp.socket)),this.ftp.handle("USER "+e,(e,r)=>{e instanceof Error?r.reject(e):d.positiveCompletion(e.code)?r.resolve(e):331===e.code?this.ftp.send("PASS "+t):r.reject(new a.FTPError(e))})}async useDefaultSettings(){await this.send("TYPE I"),await this.sendIgnoringError("STRU F"),await this.sendIgnoringError("OPTS UTF8 ON"),await this.sendIgnoringError("OPTS MLST type;size;modify;unique;unix.mode;unix.owner;unix.group;unix.ownername;unix.groupname;"),this.ftp.hasTLS&&(await this.sendIgnoringError("PBSZ 0"),await this.sendIgnoringError("PROT P"))}async access(e={}){const t=!0===e.secure;let r;return r="implicit"===e.secure?await this.connectImplicitTLS(e.host,e.port,e.secureOptions):await this.connect(e.host,e.port),t&&await this.useTLS(e.secureOptions),await this.login(e.user,e.password),await this.useDefaultSettings(),r}async pwd(){const e=await this.send("PWD"),t=e.message.match(/"(.+)"/);if(null===t||void 0===t[1])throw new Error("Can't parse response to command 'PWD': "+e.message);return t[1]}async features(){const e=await this.sendIgnoringError("FEAT"),t=new Map;return e.code<400&&d.isMultiline(e.message)&&e.message.split("\n").slice(1,-1).forEach(e=>{const r=e.trim().split(" ");t.set(r[0],r[1]||"")}),t}async cd(e){const t=await this.protectWhitespace(e);return this.send("CWD "+t)}async cdup(){return this.send("CDUP")}async lastMod(e){const t=await this.protectWhitespace(e),r=(await this.send("MDTM "+t)).message.slice(4);return u.parseMLSxDate(r)}async size(e){const t="SIZE "+await this.protectWhitespace(e),r=await this.send(t),i=parseInt(r.message.slice(4),10);if(Number.isNaN(i))throw new Error(`Can't parse response to command '${t}' as a numerical value: ${r.message}`);return i}async rename(e,t){const r=await this.protectWhitespace(e),i=await this.protectWhitespace(t);return await this.send("RNFR "+r),this.send("RNTO "+i)}async remove(e,t=!1){const r=await this.protectWhitespace(e);return this.send("DELE "+r,t)}trackProgress(e){this._progressTracker.bytesOverall=0,this._progressTracker.reportTo(e)}async uploadFrom(e,t,r={}){return this._uploadWithCommand(e,t,"STOR",r)}async appendFrom(e,t,r={}){return this._uploadWithCommand(e,t,"APPE",r)}async _uploadWithCommand(e,t,r,i){return"string"==typeof e?this._uploadLocalFile(e,t,r,i):this._uploadFromStream(e,t,r)}async _uploadLocalFile(e,t,r,n){const s=await v(e,"r"),o=i.createReadStream("",{fd:s,start:n.localStart,end:n.localEndInclusive,autoClose:!1});try{return await this._uploadFromStream(o,t,r)}finally{await w(()=>y(s))}}async _uploadFromStream(e,t,r){const i=e=>this.ftp.closeWithError(e);e.once("error",i);try{const n=await this.protectWhitespace(t);return await this.prepareTransfer(this.ftp),await p.uploadFrom(e,{ftp:this.ftp,tracker:this._progressTracker,command:r,remotePath:n,type:"upload"})}finally{e.removeListener("error",i)}}async downloadTo(e,t,r=0){return"string"==typeof e?this._downloadToFile(e,t,r):this._downloadToStream(e,t,r)}async _downloadToFile(e,t,r){const n=r>0,s=n?"r+":"w",o=await v(e,s),a=i.createWriteStream("",{fd:o,start:r,autoClose:!1});try{return await this._downloadToStream(a,t,r)}catch(t){const r=await w(()=>E(e)),i=r&&r.size>0;throw!n&&!i&&await w(()=>_(e)),t}finally{await w(()=>y(o))}}async _downloadToStream(e,t,r){const i=e=>this.ftp.closeWithError(e);e.once("error",i);try{const n=await this.protectWhitespace(t);return await this.prepareTransfer(this.ftp),await p.downloadTo(e,{ftp:this.ftp,tracker:this._progressTracker,command:r>0?"REST "+r:"RETR "+n,remotePath:n,type:"download"})}finally{e.removeListener("error",i),e.end()}}async list(e=""){const t=await this.protectWhitespace(e);let r;for(const e of this.availableListCommands){const i=`${e} ${t}`.trim();await this.prepareTransfer(this.ftp);try{const t=await this._requestListWithCommand(i);return this.availableListCommands=[e],t}catch(e){if(!(e instanceof a.FTPError))throw e;r=e}}throw r}async _requestListWithCommand(e){const t=new f.StringWriter;await p.downloadTo(t,{ftp:this.ftp,tracker:this._progressTracker,command:e,remotePath:"",type:"list"});const r=t.getText(this.ftp.encoding);return this.ftp.log(r),this.parseList(r)}async removeDir(e){return this._exitAtCurrentDirectory(async()=>{await this.cd(e),await this.clearWorkingDir(),"/"!==e&&(await this.cdup(),await this.removeEmptyDir(e))})}async clearWorkingDir(){for(const e of await this.list())e.isDirectory?(await this.cd(e.name),await this.clearWorkingDir(),await this.cdup(),await this.removeEmptyDir(e.name)):await this.remove(e.name)}async uploadFromDir(e,t){return this._exitAtCurrentDirectory(async()=>(t&&await this.ensureDir(t),await this._uploadToWorkingDir(e)))}async _uploadToWorkingDir(e){const t=await g(e);for(const r of t){const t=n.join(e,r),i=await E(t);i.isFile()?await this.uploadFrom(t,r):i.isDirectory()&&(await this._openDir(r),await this._uploadToWorkingDir(t),await this.cdup())}}async downloadToDir(e,t){return this._exitAtCurrentDirectory(async()=>(t&&await this.cd(t),await this._downloadFromWorkingDir(e)))}async _downloadFromWorkingDir(e){await async function(e){try{await E(e)}catch(t){await m(e,{recursive:!0})}}(e);for(const t of await this.list()){const r=n.join(e,t.name);t.isDirectory?(await this.cd(t.name),await this._downloadFromWorkingDir(r),await this.cdup()):t.isFile&&await this.downloadTo(r,t.name)}}async ensureDir(e){e.startsWith("/")&&await this.cd("/");const t=e.split("/").filter(e=>""!==e);for(const e of t)await this._openDir(e)}async _openDir(e){await this.sendIgnoringError("MKD "+e),await this.cd(e)}async removeEmptyDir(e){const t=await this.protectWhitespace(e);return this.send("RMD "+t)}async protectWhitespace(e){if(!e.startsWith(" "))return e;const t=await this.pwd();return(t.endsWith("/")?t:t+"/")+e}async _exitAtCurrentDirectory(e){const t=await this.pwd();try{return await e()}finally{this.closed||await w(()=>this.cd(t))}}_enterFirstCompatibleMode(e){return async t=>{t.log("Trying to find optimal transfer strategy...");for(const r of e)try{const e=await r(t);return t.log("Optimal transfer strategy found."),this.prepareTransfer=r,e}catch(e){if(!(e instanceof a.FTPError))throw e}throw new Error("None of the available transfer strategies work.")}}async upload(e,t,r={}){return this.ftp.log("Warning: upload() has been deprecated, use uploadFrom()."),this.uploadFrom(e,t,r)}async append(e,t,r={}){return this.ftp.log("Warning: append() has been deprecated, use appendFrom()."),this.appendFrom(e,t,r)}async download(e,t,r=0){return this.ftp.log("Warning: download() has been deprecated, use downloadTo()."),this.downloadTo(e,t,r)}async uploadDir(e,t){return this.ftp.log("Warning: uploadDir() has been deprecated, use uploadFromDir()."),this.uploadFromDir(e,t)}async downloadDir(e){return this.ftp.log("Warning: downloadDir() has been deprecated, use downloadToDir()."),this.downloadToDir(e)}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.transformList=t.parseLine=t.testLine=void 0;const i=r(9),n=new RegExp("(\\S+)\\s+(\\S+)\\s+(?:()|([0-9]+))\\s+(\\S.*)");t.testLine=function(e){return/^\d{2}/.test(e)&&n.test(e)},t.parseLine=function(e){const t=e.match(n);if(null===t)return;const r=t[5];if("."===r||".."===r)return;const s=new i.FileInfo(r);return""===t[3]?(s.type=i.FileType.Directory,s.size=0):(s.type=i.FileType.File,s.size=parseInt(t[4],10)),s.rawModifiedAt=t[1]+" "+t[2],s},t.transformList=function(e){return e}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.transformList=t.parseLine=t.testLine=void 0;const i=r(9),n=new RegExp("([bcdelfmpSs-])(((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-])))\\+?\\s*(\\d+)\\s+(?:(\\S+(?:\\s\\S+)*?)\\s+)?(?:(\\S+(?:\\s\\S+)*)\\s+)?(\\d+(?:,\\s*\\d+)?)\\s+((?:\\d+[-/]\\d+[-/]\\d+)|(?:\\S{3}\\s+\\d{1,2})|(?:\\d{1,2}\\s+\\S{3})|(?:\\d{1,2}月\\s+\\d{1,2}日))\\s+((?:\\d+(?::\\d+)?)|(?:\\d{4}年))\\s(.*)");function s(e,t,r){let n=0;"-"!==e&&(n+=i.FileInfo.UnixPermission.Read),"-"!==t&&(n+=i.FileInfo.UnixPermission.Write);const s=r.charAt(0);return"-"!==s&&s.toUpperCase()!==s&&(n+=i.FileInfo.UnixPermission.Execute),n}t.testLine=function(e){return n.test(e)},t.parseLine=function(e){const t=e.match(n);if(null===t)return;const r=t[21];if("."===r||".."===r)return;const o=new i.FileInfo(r);switch(o.size=parseInt(t[18],10),o.user=t[16],o.group=t[17],o.hardLinkCount=parseInt(t[15],10),o.rawModifiedAt=t[19]+" "+t[20],o.permissions={user:s(t[4],t[5],t[6]),group:s(t[8],t[9],t[10]),world:s(t[12],t[13],t[14])},t[1].charAt(0)){case"d":o.type=i.FileType.Directory;break;case"e":case"l":o.type=i.FileType.SymbolicLink;break;case"b":case"c":o.type=i.FileType.File;break;case"f":case"-":o.type=i.FileType.File;break;default:o.type=i.FileType.Unknown}if(o.isSymbolicLink){const e=r.indexOf(" -> ");-1!==e&&(o.name=r.substring(0,e),o.link=r.substring(e+4))}return o},t.transformList=function(e){return e}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ProgressTracker=void 0;function i(){}t.ProgressTracker=class{constructor(){this.bytesOverall=0,this.intervalMs=500,this.onStop=i,this.onHandle=i}reportTo(e=i){this.onHandle=e}start(e,t,r){let n=0;this.onStop=function(e,t){const r=setInterval(t,e);return t(),e=>{clearInterval(r),e&&t();t=i}}(this.intervalMs,()=>{const i=e.bytesRead+e.bytesWritten;this.bytesOverall+=i-n,n=i,this.onHandle({name:t,type:r,bytes:i,bytesOverall:this.bytesOverall})})}stop(){this.onStop(!1)}updateAndStop(){this.onStop(!0)}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StringWriter=void 0;const i=r(2);class n extends i.Writable{constructor(){super(...arguments),this.buf=Buffer.alloc(0)}_write(e,t,r){e instanceof Buffer?(this.buf=Buffer.concat([this.buf,e]),r(null)):r(new Error("StringWriter expects chunks of type 'Buffer'."))}getText(e){return this.buf.toString(e)}}t.StringWriter=n},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Transfer=void 0;t.Transfer=class{constructor(e,t,r){var i;this.info=e,this.options=t,this.onProgress=r,this.handleProgress=e=>{var t;this.bytes=e;const{id:r,localPath:i,remotePath:n,totalBytes:s}=this.info;(null===(t=this.options)||void 0===t?void 0:t.quiet)||this.onProgress({id:r,localPath:i,remotePath:n},{bytes:e,totalBytes:s,speed:this.speed,eta:this.eta,percent:this.percent})},this.startTime=Date.now(),this.bytes=null!==(i=null==e?void 0:e.startAt)&&void 0!==i?i:0}get elapsed(){return(Date.now()-this.startTime)/1e3}get speed(){const e=this.elapsed;return 0===e?0:Math.round(this.bytes/e)}get eta(){if(0===this.speed)return null;const e=this.info.totalBytes/this.speed;return Math.round(e-this.elapsed)}get percent(){return Math.round(this.bytes/this.info.totalBytes*100)}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.repeat=void 0,t.repeat=(e,t)=>Array(t).fill(e)},function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.getFileSize=t.getPathFromStream=void 0;const n=r(5);t.getPathFromStream=e=>e.path,t.getFileSize=e=>i(void 0,void 0,void 0,(function*(){if(!e)return-1;const{size:t}=yield n.promises.stat(e);return t}))},function(e,t){e.exports=__nccwpck_require__(9523)},function(e,t,r){var i=r(2).Transform,n=r(2).Readable,s=r(2).Writable,o=r(5).constants||process.binding("constants"),a=r(0),c=a.inherits,h=a.isDate,f=r(1).EventEmitter.listenerCount,u=r(5),l=r(3).readString,p=r(3).readInt,d=r(4).readUInt32BE,g=r(4).writeUInt32BE,m=1,E=2,v=4,y=8,_=2147483648,w={OK:0,EOF:1,NO_SUCH_FILE:2,PERMISSION_DENIED:3,FAILURE:4,BAD_MESSAGE:5,NO_CONNECTION:6,CONNECTION_LOST:7,OP_UNSUPPORTED:8};Object.keys(w).forEach((function(e){w[w[e]]=e}));var b={0:"No error",1:"End of file",2:"No such file or directory",3:"Permission denied",4:"Failure",5:"Bad message",6:"No connection",7:"Connection lost",8:"Operation unsupported"};P.STATUS_CODE=w;var S={INIT:1,OPEN:3,CLOSE:4,READ:5,WRITE:6,LSTAT:7,FSTAT:8,SETSTAT:9,FSETSTAT:10,OPENDIR:11,READDIR:12,REMOVE:13,MKDIR:14,RMDIR:15,REALPATH:16,STAT:17,RENAME:18,READLINK:19,SYMLINK:20,EXTENDED:200};Object.keys(S).forEach((function(e){S[S[e]]=e}));var k={VERSION:2,STATUS:101,HANDLE:102,DATA:103,NAME:104,ATTRS:105,EXTENDED:201};Object.keys(k).forEach((function(e){k[k[e]]=e}));var T={READ:1,WRITE:2,APPEND:4,CREAT:8,TRUNC:16,EXCL:32};P.OPEN_MODE=T;var A=Math.pow(2,32)-1,U=Buffer.from([0,0,0,5,S.INIT,0,0,0,3]),B=Buffer.from([0,0,0,5,k.VERSION,0,0,0,3]),N=/^SSH-2.0-(?:OpenSSH|dropbear)/;function R(e){}function P(e,t){"string"!=typeof e||t||(t=e,e=void 0),"object"==typeof e&&e||(e={}),i.call(this,{highWaterMark:"number"==typeof e.highWaterMark?e.highWaterMark:32768}),this.debug="function"==typeof e.debug?e.debug:R,this.server=!!e.server,this._isOpenSSH=t&&N.test(t),this._needContinue=!1,this._state={status:"packet_header",writeReqid:-1,pktLeft:void 0,pktHdrBuf:Buffer.allocUnsafe(9),pktBuf:void 0,pktType:void 0,version:void 0,extensions:{},maxDataLen:this._isOpenSSH?260096:32768,requests:{}};var r=this;function n(){r.writable=!1,r._cleanup(!1)}this.on("end",(function(){r.readable=!1})).on("finish",n).on("prefinish",n),this.server||this.push(U)}function D(e,t,r,i,n,s){var o,a,c,h,f=64,l=32768;"function"==typeof n?s=n:"object"==typeof n&&null!==n&&("number"==typeof n.concurrency&&n.concurrency>0&&!isNaN(n.concurrency)&&(f=n.concurrency),"number"==typeof n.chunkSize&&n.chunkSize>0&&!isNaN(n.chunkSize)&&(l=n.chunkSize),"number"==typeof n.fileSize&&n.fileSize>0&&!isNaN(n.fileSize)&&(c=n.fileSize),"function"==typeof n.step&&(o=n.step),"string"!=typeof n.mode&&"number"!=typeof n.mode||(a=x(n.mode)));var p,d,g,m=0,E=0,v=!1,y=l*f;function _(r){if(!v){v=!0;var i,n=0;p||d?(i=function(){0==--n&&s(r)},p&&(e===u||e.writable)&&++n,d&&(t===u||t.writable)&&++n,p&&(e===u||e.writable)&&e.close(p,i),d&&(t===u||t.writable)&&t.close(d,i)):s(r)}}e.open(r,"r",(function(n,v){if(n)return _(n);function w(n,c){if(n)return e!==u?void e.stat(r,(function(e,t){if(e)return _(n);w(null,t)})):_(n);h=c.size,t.open(i,"w",(function(r,n){if(r)return _(r);if(d=n,h<=0)return _();for(;y>h;){if(1===f){y=h;break}y-=l,--f}if((g=function(e){try{return Buffer.allocUnsafe(e)}catch(e){return e}}(y))instanceof Error)return _(g);function c(r,i,n,a,c,f){if(r)return _(r);function v(r){if(r)return _(r);if(E+=i,o&&o(E,i,h),i=h)){var n=m+l>h?h-m:l;w(c,m,n),m+=n}}else t.close(d,(function(t){if(d=void 0,t)return _(t);e.close(p,(function(e){if(p=void 0,e)return _(e);s()}))}))}c=c||0,e===u?t.writeData(d,g,c,i,a,v):t.write(d,g,c,i,a,v)}function v(e,t,r){return function(i,n,s){c(i,n,0,t,e,r)}}function w(t,r,i){e===u?e.read(p,g,t,i,r,v(t,r,i)):e.readData(p,g,t,i,r,v(t,r,i))}function b(){for(var e=0,t=0;mh?h-m:l;w(t,m,r),t+=r,m+=r,++e}}void 0!==a?t.fchmod(d,a,(function e(r){r?t.chmod(i,a,(function(t){e()})):b()})):b()}))}p=v,void 0===c?e.fstat(p,w):w(null,{size:c})}))}function O(e,t,r,i,n,s,o){var a="function"==typeof o?o:void 0;e.writeData(t,r,i,n,s,(function(o,c){if(o)return e.close(t,(function(){a&&a(o)}));c===n?e.close(t,a):O(e,t,r,i+=c,n-=c,s+=c,a)}))}function I(e,t,r,i){var n=d(e,t),s=new G;if(t+=4,n&m){var o=C(e,t,r,i);if(!1===o)return!1;s.size=o,t+=8}if(n&E){var a,c;if(!1===(a=p(e,t,this,i)))return!1;if(s.uid=a,!1===(c=p(e,t+=4,this,i)))return!1;s.gid=c,t+=4}if(n&v){var h=p(e,t,this,i);if(!1===h)return!1;s.mode=h,s.permissions=h,t+=4}if(n&y){var f,u;if(!1===(f=p(e,t,this,i)))return!1;if(s.atime=f,!1===(u=p(e,t+=4,this,i)))return!1;s.mtime=u,t+=4}if(n&_){var l=p(e,t,this,i);if(!1===l)return!1;t+=4;for(var g,w=0;w=0;--n)s[n]=255&o,o/=256;i.push(s)}if("number"==typeof e.uid&&"number"==typeof e.gid&&(t|=E,r+=8,i.push([e.uid>>24&255,e.uid>>16&255,e.uid>>8&255,255&e.uid]),i.push([e.gid>>24&255,e.gid>>16&255,e.gid>>8&255,255&e.gid])),"number"==typeof e.permissions||"string"==typeof e.permissions||"number"==typeof e.mode||"string"==typeof e.mode){var a=x(e.mode||e.permissions);t|=v,r+=4,i.push([a>>24&255,a>>16&255,a>>8&255,255&a])}if(("number"==typeof e.atime||h(e.atime))&&("number"==typeof e.mtime||h(e.mtime))){var c=H(e.atime),f=H(e.mtime);t|=y,r+=8,i.push([c>>24&255,c>>16&255,c>>8&255,255&c]),i.push([f>>24&255,f>>16&255,f>>8&255,255&f])}return{flags:t,nbytes:r,bytes:i}}function H(e){if("number"==typeof e&&!isNaN(e))return e;if(h(e))return parseInt(e.getTime()/1e3,10);throw new Error("Cannot parse time: "+e)}function x(e){if("number"==typeof e&&!isNaN(e))return e;if("string"==typeof e)return x(parseInt(e,8));throw new Error("Cannot parse mode: "+e)}c(P,i),P.prototype.__read=i.prototype._read,P.prototype._read=function(e){return this._needContinue&&(this._needContinue=!1,this.emit("continue")),this.__read(e)},P.prototype.__push=i.prototype.push,P.prototype.push=function(e,t){if(!this.readable)return!1;null===e&&(this.readable=!1);var r=this.__push(e,t);return this._needContinue=!1===r,r},P.prototype._cleanup=function(e){var t=this._state;t.pktBuf=void 0;var r=t.requests,i=Object.keys(r),n=i.length;if(n){if(this.readable)for(var s,o=new Error("SFTP session ended early"),a=0;a34e3)return _("DEBUG[SFTP]: Parser: "+(V="Packet length ("+m+") exceeds max length (34000)")),this._cleanup(!1),r(new Error(V));h===S.EXTENDED?c="bad_pkt":void 0===S[h]&&(_("DEBUG[SFTP]: Parser: Unsupported packet type: "+h),c="discard")}}else{if(void 0===E&&h!==k.VERSION)return _("DEBUG[SFTP]: Parser: Unexpected packet before version"),this._cleanup(!1),r(new Error("Unexpected packet before version"));void 0!==E&&h===k.VERSION?(_("DEBUG[SFTP]: Parser: Unexpected duplicate version"),c="bad_pkt"):void 0===k[h]&&(c="discard")}"bad_pkt"===c?(g(v,m+1,0),v[4]=h,m=4,u=v):(u=Buffer.allocUnsafe(m),c="payload")}else m=5,u=v;else if("payload"===c){if(h===k.VERSION||h===S.INIT){if(!1===(E=o.version=p(i,0,this,r)))return;if(E<3)return this._cleanup(!1),r(new Error("Incompatible SFTP version: "+E));a&&this.push(B);var U,N,R=i.length;for(i._pos=4;i._pos=12){if(!1===(V=l(i,8,"utf8",this,r)))return;if(i._pos+4$&&g(i,$,4),!1===(L=l(i,4,q.buffer,this,r)))return;X(void 0,L,Q)}else{if(!1===(L=l(i,4,this,r)))return;X(void 0,L)}else if(h===k.NAME){var Z=p(i,4,this,r);if(!1===Z)return;var J,ee=[];i._pos=8;for(var te=0;te=T)break}o.status=c,o.pktType=h,o.pktBuf=u,o.pktLeft=m,o.version=E,r()},P.prototype.createReadStream=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");return new Z(this,e,t)},P.prototype.createWriteStream=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");return new ee(this,e,t)},P.prototype.open=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");var n=this._state;"function"==typeof r&&(i=r,r=void 0);var s="number"==typeof t?t:K(t);if(null===s)throw new Error("Unknown flags string: "+t);var o=0,a=0;"string"!=typeof r&&"number"!=typeof r||(r={mode:r}),"object"==typeof r&&null!==r&&(o=(r=L(r)).flags,a=r.nbytes,r=r.bytes);var c=Buffer.byteLength(e),h=9,f=Buffer.allocUnsafe(13+c+4+4+a);g(f,f.length-4,0),f[4]=S.OPEN;var u=n.writeReqid=(n.writeReqid+1)%A;if(g(f,u,5),g(f,c,h),f.write(e,h+=4,c,"utf8"),g(f,s,h+=c),g(f,o,h+=4),r&&o){h+=4;for(var l=0,p=r.length;l=t.length)throw new Error("offset is out of bounds");if(r+i>t.length)throw new Error("length extends beyond buffer");if(null===n)throw new Error("null position currently unsupported");var o=this._state,a=e.length,c=9,h=n,f=Buffer.allocUnsafe(13+a+8+4);g(f,f.length-4,0),f[4]=S.READ;var u=o.writeReqid=(o.writeReqid+1)%A;g(f,u,5),g(f,a,c),e.copy(f,c+=4),c+=a;for(var l=7;l>=0;--l)f[c+l]=255&h,h/=256;return g(f,i,c+=8),o.requests[u]={cb:function(e,t,r){if(e){if(s._wantEOFError||e.code!==w.EOF)return s(e)}else if(r>i)return s(new Error("Received more data than requested"));s(void 0,r||0,t,n)},buffer:t.slice(r,r+i)},this.debug("DEBUG[SFTP]: Outgoing: Writing READ"),this.push(f)},P.prototype.writeData=function(e,t,r,i,n,s){if(this.server)throw new Error("Client-only method called in server mode");if(!Buffer.isBuffer(e))throw new Error("handle is not a Buffer");if(!Buffer.isBuffer(t))throw new Error("buffer is not a Buffer");if(r>t.length)throw new Error("offset is out of bounds");if(r+i>t.length)throw new Error("length extends beyond buffer");if(null===n)throw new Error("null position currently unsupported");var o=this,a=this._state;if(i){var c=i>a.maxDataLen?i-a.maxDataLen:0,h=n;c&&(i=a.maxDataLen);var f=e.length,u=9,l=Buffer.allocUnsafe(13+f+8+4+i);g(l,l.length-4,0),l[4]=S.WRITE;var p=a.writeReqid=(a.writeReqid+1)%A;g(l,p,5),g(l,f,u),e.copy(l,u+=4),u+=f;for(var d=7;d>=0;--d)l[u+d]=255&n,n/=256;return g(l,i,u+=8),t.copy(l,u+=4,r,r+i),a.requests[p]={cb:function(n){n?s&&s(n):c?o.writeData(e,t,r+i,c,h+i,s):s&&s(void 0,r+i)}},this.debug("DEBUG[SFTP]: Outgoing: Writing WRITE"),this.push(l)}s&&process.nextTick((function(){s(void 0,0)}))},P.prototype.fastGet=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");D(this,u,e,t,r,i)},P.prototype.fastPut=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");D(u,this,e,t,r,i)},P.prototype.readFile=function(e,t,r){if(this.server)throw new Error("Client-only method called in server mode");var i;"function"==typeof r?i=r:"function"==typeof t&&(i=t,t=void 0);var n=this;if("string"==typeof t)t={encoding:t,flag:"r"};else if(t){if("object"!=typeof t)throw new TypeError("Bad arguments")}else t={encoding:null,flag:"r"};var s,o,a,c=t.encoding;if(c&&!Buffer.isEncoding(c))throw new Error("Unknown encoding: "+c);var h,f=0,u=0,l=t.flag||"r";function p(){0===s?(o=Buffer.allocUnsafe(8192),n.readData(h,o,0,8192,u,d)):n.readData(h,o,f,s-f,u,d)}function d(e,t){var r;if(e){if(!(r=e.code===w.EOF))return n.close(h,(function(){return i&&i(e)}))}else r=!1;if(r||0===s&&0===t)return g();u+=t,f+=t,0!==s?f===s?g():p():(a.push(o.slice(0,t)),p())}function g(){n.close(h,(function(e){return 0===s?o=Buffer.concat(a,f):f=0;--i)"."!==t[i].filename&&".."!==t[i].filename||t.splice(i,1);r(void 0,t)}:r},this.debug("DEBUG[SFTP]: Outgoing: Writing READDIR"),this.push(f)},P.prototype.fstat=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");if(!Buffer.isBuffer(e))throw new Error("handle is not a Buffer");var r=this._state,i=e.length,n=9,s=Buffer.allocUnsafe(13+i);g(s,s.length-4,0),s[4]=S.FSTAT;var o=r.writeReqid=(r.writeReqid+1)%A;return g(s,o,5),g(s,i,n),e.copy(s,n+=4),r.requests[o]={cb:t},this.debug("DEBUG[SFTP]: Outgoing: Writing FSTAT"),this.push(s)},P.prototype.stat=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");var r=this._state,i=Buffer.byteLength(e),n=9,s=Buffer.allocUnsafe(13+i);g(s,s.length-4,0),s[4]=S.STAT;var o=r.writeReqid=(r.writeReqid+1)%A;return g(s,o,5),g(s,i,n),s.write(e,n+=4,i,"utf8"),r.requests[o]={cb:t},this.debug("DEBUG[SFTP]: Outgoing: Writing STAT"),this.push(s)},P.prototype.lstat=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");var r=this._state,i=Buffer.byteLength(e),n=9,s=Buffer.allocUnsafe(13+i);g(s,s.length-4,0),s[4]=S.LSTAT;var o=r.writeReqid=(r.writeReqid+1)%A;return g(s,o,5),g(s,i,n),s.write(e,n+=4,i,"utf8"),r.requests[o]={cb:t},this.debug("DEBUG[SFTP]: Outgoing: Writing LSTAT"),this.push(s)},P.prototype.opendir=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");var r=this._state,i=Buffer.byteLength(e),n=9,s=Buffer.allocUnsafe(13+i);g(s,s.length-4,0),s[4]=S.OPENDIR;var o=r.writeReqid=(r.writeReqid+1)%A;return g(s,o,5),g(s,i,n),s.write(e,n+=4,i,"utf8"),r.requests[o]={cb:t},this.debug("DEBUG[SFTP]: Outgoing: Writing OPENDIR"),this.push(s)},P.prototype.setstat=function(e,t,r){if(this.server)throw new Error("Client-only method called in server mode");var i=0,n=0,s=this._state;"object"==typeof t&&null!==t?(i=(t=L(t)).flags,n=t.nbytes,t=t.bytes):"function"==typeof t&&(r=t);var o=Buffer.byteLength(e),a=9,c=Buffer.allocUnsafe(13+o+4+n);g(c,c.length-4,0),c[4]=S.SETSTAT;var h=s.writeReqid=(s.writeReqid+1)%A;if(g(c,h,5),g(c,o,a),c.write(e,a+=4,o,"utf8"),g(c,i,a+=o),i){a+=4;for(var f=0,u=t.length;f256)throw new Error("handle too large (> 256 bytes)");var i=Buffer.allocUnsafe(13+r);return g(i,i.length-4,0),i[4]=k.HANDLE,g(i,e,5),g(i,r,9),r&&t.copy(i,13),this.debug("DEBUG[SFTP]: Outgoing: Writing HANDLE"),this.push(i)},P.prototype.data=function(e,t,r){if(!this.server)throw new Error("Server-only method called in client mode");var i=Buffer.isBuffer(t);if(!i&&"string"!=typeof t)throw new Error("data is not a Buffer or string");i||r||(r="utf8");var n=i?t.length:Buffer.byteLength(t,r),s=Buffer.allocUnsafe(13+n);return g(s,s.length-4,0),s[4]=k.DATA,g(s,e,5),g(s,n,9),n&&(i?t.copy(s,13):s.write(t,13,n,r)),this.debug("DEBUG[SFTP]: Outgoing: Writing DATA"),this.push(s)},P.prototype.name=function(e,t){if(!this.server)throw new Error("Server-only method called in client mode");if(!Array.isArray(t)){if("object"!=typeof t||null===t)throw new Error("names is not an object or array");t=[t]}var r,i,n,s,o,a,c,h,f,u,l,p,d=t.length,m=0,E=[];for(u=0;u= 0 and <= 2 ** 53 - 1",e)}if(e<0)throw new V(t,">= 0 and <= 2 ** 53 - 1",e)}function $(e){return e+7&-8}function Z(e,t,r){if(void 0===r)r={};else if("string"==typeof r)r={encoding:r};else{if(null===r||"object"!=typeof r)throw new TypeError('"options" argument must be a string or an object');r=Object.create(r)}if(void 0===r.highWaterMark&&(r.highWaterMark=65536),r.emitClose=!1,n.call(this,r),this.path=t,this.flags=void 0===r.flags?"r":r.flags,this.mode=void 0===r.mode?438:r.mode,this.start=r.start,this.end=r.end,this.autoClose=void 0===r.autoClose||r.autoClose,this.pos=0,this.bytesRead=0,this.closed=!1,this.handle=void 0===r.handle?null:r.handle,this.sftp=e,this._opening=!1,void 0!==this.start&&(Q(this.start,"start"),this.pos=this.start),void 0===this.end)this.end=1/0;else if(this.end!==1/0&&(Q(this.end,"end"),void 0!==this.start&&this.start>this.end))throw new V("start",`<= "end" (here: ${this.end})`,this.start);this.on("end",(function(){this.autoClose&&this.destroy()})),Buffer.isBuffer(this.handle)||this.open()}function J(e,t,r){if(!e.handle)return i();function i(i){t(i=i||r),e.closed=!0,i||e.emit("close")}e.sftp.close(e.handle,i)}function ee(e,t,r){if(void 0===r)r={};else if("string"==typeof r)r={encoding:r};else{if(null===r||"object"!=typeof r)throw new TypeError('"options" argument must be a string or an object');r=Object.create(r)}r.emitClose=!1,s.call(this,r),this.path=t,this.flags=void 0===r.flags?"w":r.flags,this.mode=void 0===r.mode?438:r.mode,this.start=r.start,this.autoClose=void 0===r.autoClose||r.autoClose,this.pos=0,this.bytesWritten=0,this.closed=!1,this.handle=void 0===r.handle?null:r.handle,this.sftp=e,this._opening=!1,void 0!==this.start&&(Q(this.start,"start"),this.pos=this.start),r.encoding&&this.setDefaultEncoding(r.encoding),this.on("finish",(function(){this._writableState.finalCalled||this.autoClose&&this.destroy()})),Buffer.isBuffer(this.handle)||this.open()}c(Z,n),Z.prototype.open=function(){this._opening||(this._opening=!0,this.sftp.open(this.path,this.flags,this.mode,(e,t)=>{if(this._opening=!1,e)return this.emit("error",e),void(this.autoClose&&this.destroy());this.handle=t,this.emit("open",t),this.emit("ready"),this.read()}))},Z.prototype._read=function(e){if(!Buffer.isBuffer(this.handle))return this.once("open",(function(){this._read(e)}));if(!this.destroyed){var t;(!W||W.length-W.used<128)&&(t=this.readableHighWaterMark||this._readableState.highWaterMark,(W=z.length>0?z.pop():Buffer.allocUnsafe(t)).used=0);var r=W,i=Math.min(W.length-W.used,e),n=W.used;if(void 0!==this.end&&(i=Math.min(this.end-this.pos+1,i)),i<=0)return this.push(null);this.sftp.readData(this.handle,W,W.used,i,this.pos,(e,t)=>{if(e)return this.emit("error",e),void(this.autoClose&&this.destroy());var s=null;if(n+i===r.used&&r===W){var o=r.used+t-i;r.used=$(o)}else{var a=n+i&-8,c=$(n+t);a-c>=128&&z.push(r.slice(c,a))}t>0&&(this.bytesRead+=t,s=r.slice(n,n+t)),this.pos+=t,this.push(s)}),W.used=$(W.used+i)}},"function"!=typeof n.prototype.destroy&&(Z.prototype.destroy=j),Z.prototype._destroy=function(e,t){!this._opening||Buffer.isBuffer(this.handle)?(J(this,t,e),this.handle=null,this._opening=!1):this.once("open",J.bind(null,this,t,e))},Z.prototype.close=function(e){this.destroy(null,e)},Object.defineProperty(Z.prototype,"pending",{get(){return null===this.handle},configurable:!0}),c(ee,s),ee.prototype._final=function(e){this.autoClose&&this.destroy(),e()},ee.prototype.open=function(){this._opening||(this._opening=!0,this.sftp.open(this.path,this.flags,this.mode,(e,t)=>{if(this._opening=!1,e)return this.emit("error",e),void(this.autoClose&&this.destroy());this.handle=t;var r=e=>{if(e)this.sftp.chmod(this.path,this.mode,e=>{r()});else if("a"!==this.flags[0])this.emit("open",t),this.emit("ready");else{var i=(e,r)=>{e?this.sftp.stat(this.path,(t,r)=>{if(t)return this.destroy(),void this.emit("error",e);i(null,r)}):(this.pos=r.size,this.emit("open",t),this.emit("ready"))};this.sftp.fstat(t,i)}};this.sftp.fchmod(t,this.mode,r)}))},ee.prototype._write=function(e,t,r){if(!Buffer.isBuffer(e)){const t=new Y("data","Buffer",e);return this.emit("error",t)}if(!Buffer.isBuffer(this.handle))return this.once("open",(function(){this._write(e,t,r)}));this.sftp.writeData(this.handle,e,0,e.length,this.pos,(e,t)=>{if(e)return this.autoClose&&this.destroy(),r(e);this.bytesWritten+=t,r()}),this.pos+=e.length},ee.prototype._writev=function(e,t){if(!Buffer.isBuffer(this.handle))return this.once("open",(function(){this._writev(e,t)}));for(var r=this.sftp,i=this.handle,n=e.length,s=(e,r)=>{if(e)return this.destroy(),t(e);this.bytesWritten+=r,0==--n&&t()},o=0;o=this._size)return null;var t=255&this._buf[e++];if(null===t)return null;if(128==(128&t)){if(0===(t&=127))throw o("Indefinite length not supported");if(t>4)throw o("encoding too long");if(this._size-ethis._size-i)return null;if(this._offset=i,0===this.length)return t?n.alloc(0):"";var a=this._buf.slice(this._offset,this._offset+this.length);return this._offset+=this.length,t?a:a.toString("utf8")},a.prototype.readOID=function(e){e||(e=s.OID);var t=this.readString(e,!0);if(null===t)return null;for(var r=[],i=0,n=0;n>0),r.join(".")},a.prototype._readTag=function(e){i.ok(void 0!==e);var t=this.peek();if(null===t)return null;if(t!==e)throw o("Expected 0x"+e.toString(16)+": got 0x"+t.toString(16));var r=this.readLength(this._offset+1);if(null===r)return null;if(this.length>4)throw o("Integer too long: "+this.length);if(this.length>this._size-r)return null;this._offset=r;for(var n=this._buf[this._offset],s=0,a=0;a>0},e.exports=a},function(e,t){e.exports=__nccwpck_require__(4300)},function(e,t,r){var i=r(30),n=r(31).Buffer,s=r(17),o=r(16).newInvalidAsn1Error,a={size:1024,growthFactor:8};function c(e){var t,r;t=a,r=e||{},i.ok(t),i.equal(typeof t,"object"),i.ok(r),i.equal(typeof r,"object"),Object.getOwnPropertyNames(t).forEach((function(e){if(!r[e]){var i=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(r,e,i)}})),e=r,this._buf=n.alloc(e.size||1024),this._size=this._buf.length,this._offset=0,this._options=e,this._seq=[]}Object.defineProperty(c.prototype,"buffer",{get:function(){if(this._seq.length)throw o(this._seq.length+" unended sequence(s)");return this._buf.slice(0,this._offset)}}),c.prototype.writeByte=function(e){if("number"!=typeof e)throw new TypeError("argument must be a Number");this._ensure(1),this._buf[this._offset++]=e},c.prototype.writeInt=function(e,t){if("number"!=typeof e)throw new TypeError("argument must be a Number");"number"!=typeof t&&(t=s.Integer);for(var r=4;(0==(4286578688&e)||-8388608==(4286578688&e))&&r>1;)r--,e<<=8;if(r>4)throw o("BER ints cannot be > 0xffffffff");for(this._ensure(2+r),this._buf[this._offset++]=t,this._buf[this._offset++]=r;r-- >0;)this._buf[this._offset++]=(4278190080&e)>>>24,e<<=8},c.prototype.writeNull=function(){this.writeByte(s.Null),this.writeByte(0)},c.prototype.writeEnumeration=function(e,t){if("number"!=typeof e)throw new TypeError("argument must be a Number");return"number"!=typeof t&&(t=s.Enumeration),this.writeInt(e,t)},c.prototype.writeBoolean=function(e,t){if("boolean"!=typeof e)throw new TypeError("argument must be a Boolean");"number"!=typeof t&&(t=s.Boolean),this._ensure(3),this._buf[this._offset++]=t,this._buf[this._offset++]=1,this._buf[this._offset++]=e?255:0},c.prototype.writeString=function(e,t){if("string"!=typeof e)throw new TypeError("argument must be a string (was: "+typeof e+")");"number"!=typeof t&&(t=s.OctetString);var r=n.byteLength(e);this.writeByte(t),this.writeLength(r),r&&(this._ensure(r),this._buf.write(e,this._offset),this._offset+=r)},c.prototype.writeBuffer=function(e,t){if("number"!=typeof t)throw new TypeError("tag must be a number");if(!n.isBuffer(e))throw new TypeError("argument must be a buffer");this.writeByte(t),this.writeLength(e.length),this._ensure(e.length),e.copy(this._buf,this._offset,0,e.length),this._offset+=e.length},c.prototype.writeStringArray=function(e){if(!e instanceof Array)throw new TypeError("argument must be an Array[String]");var t=this;e.forEach((function(e){t.writeString(e)}))},c.prototype.writeOID=function(e,t){if("string"!=typeof e)throw new TypeError("argument must be a string");if("number"!=typeof t&&(t=s.OID),!/^([0-9]+\.){3,}[0-9]+$/.test(e))throw new Error("argument is not a valid OID string");var r=e.split("."),i=[];i.push(40*parseInt(r[0],10)+parseInt(r[1],10)),r.slice(2).forEach((function(e){!function(e,t){t<128?e.push(t):t<16384?(e.push(t>>>7|128),e.push(127&t)):t<2097152?(e.push(t>>>14|128),e.push(255&(t>>>7|128)),e.push(127&t)):t<268435456?(e.push(t>>>21|128),e.push(255&(t>>>14|128)),e.push(255&(t>>>7|128)),e.push(127&t)):(e.push(255&(t>>>28|128)),e.push(255&(t>>>21|128)),e.push(255&(t>>>14|128)),e.push(255&(t>>>7|128)),e.push(127&t))}(i,parseInt(e,10))}));var n=this;this._ensure(2+i.length),this.writeByte(t),this.writeLength(i.length),i.forEach((function(e){n.writeByte(e)}))},c.prototype.writeLength=function(e){if("number"!=typeof e)throw new TypeError("argument must be a Number");if(this._ensure(4),e<=127)this._buf[this._offset++]=e;else if(e<=255)this._buf[this._offset++]=129,this._buf[this._offset++]=e;else if(e<=65535)this._buf[this._offset++]=130,this._buf[this._offset++]=e>>8,this._buf[this._offset++]=e;else{if(!(e<=16777215))throw o("Length too long (> 4 bytes)");this._buf[this._offset++]=131,this._buf[this._offset++]=e>>16,this._buf[this._offset++]=e>>8,this._buf[this._offset++]=e}},c.prototype.startSequence=function(e){"number"!=typeof e&&(e=s.Sequence|s.Constructor),this.writeByte(e),this._seq.push(this._offset),this._ensure(3),this._offset+=3},c.prototype.endSequence=function(){var e=this._seq.pop(),t=e+3,r=this._offset-t;if(r<=127)this._shift(t,r,-2),this._buf[e]=r;else if(r<=255)this._shift(t,r,-1),this._buf[e]=129,this._buf[e+1]=r;else if(r<=65535)this._buf[e]=130,this._buf[e+1]=r>>8,this._buf[e+2]=r;else{if(!(r<=16777215))throw o("Sequence too long");this._shift(t,r,1),this._buf[e]=131,this._buf[e+1]=r>>16,this._buf[e+2]=r>>8,this._buf[e+3]=r}},c.prototype._shift=function(e,t,r){i.ok(void 0!==e),i.ok(void 0!==t),i.ok(r),this._buf.copy(this._buf,e+r,e,e+t),this._offset+=r},c.prototype._ensure=function(e){if(i.ok(e),this._size-this._offset=t&&(n=0),i=i<<8|e[n];return i}s.prototype.encipher=function(e,t){void 0===t&&(t=new Uint8Array(e.buffer),0!==e.byteOffset&&(t=t.subarray(e.byteOffset))),e[0]^=this.P[0];for(var r=1;r<16;r+=2)e[1]^=o(this.S,t,0)^this.P[r],e[0]^=o(this.S,t,4)^this.P[r+1];var i=e[0];e[0]=e[1]^this.P[17],e[1]=i},s.prototype.decipher=function(e){var t=new Uint8Array(e.buffer);0!==e.byteOffset&&(t=t.subarray(e.byteOffset)),e[0]^=this.P[17];for(var r=16;r>0;r-=2)e[1]^=o(this.S,t,0)^this.P[r],e[0]^=o(this.S,t,4)^this.P[r-1];var i=e[0];e[0]=e[1]^this.P[0],e[1]=i},s.prototype.expand0state=function(e,t){var r,i,s=new Uint32Array(2),o=new Uint8Array(s.buffer);for(r=0,n=0;r<18;r++)this.P[r]^=a(e,t);for(n=0,r=0;r<18;r+=2)this.encipher(s,o),this.P[r]=s[0],this.P[r+1]=s[1];for(r=0;r<4;r++)for(i=0;i<256;i+=2)this.encipher(s,o),this.S[r][i]=s[0],this.S[r][i+1]=s[1]},s.prototype.expandstate=function(e,t,r,i){var s,o,c=new Uint32Array(2);for(s=0,n=0;s<18;s++)this.P[s]^=a(r,i);for(s=0,n=0;s<18;s+=2)c[0]^=a(e,t),c[1]^=a(e,t),this.encipher(c),this.P[s]=c[0],this.P[s+1]=c[1];for(s=0;s<4;s++)for(o=0;o<256;o+=2)c[0]^=a(e,t),c[1]^=a(e,t),this.encipher(c),this.S[s][o]=c[0],this.S[s][o+1]=c[1];n=0},s.prototype.enc=function(e,t){for(var r=0;r>>24,r[4*i+2]=o[i]>>>16,r[4*i+1]=o[i]>>>8,r[4*i+0]=o[i]}e.exports={BLOCKS:8,HASHSIZE:32,hash:c,pbkdf:function(e,t,r,n,s,o,a){var h,f,u,l,p,d,g=new Uint8Array(64),m=new Uint8Array(64),E=new Uint8Array(32),v=new Uint8Array(32),y=new Uint8Array(n+4),_=o;if(a<1)return-1;if(0===t||0===n||0===o||o>E.byteLength*E.byteLength||n>1<<20)return-1;for(l=Math.floor((o+E.byteLength-1)/E.byteLength),u=Math.floor((o+l-1)/l),h=0;h0;d++){for(y[n+0]=d>>>24,y[n+1]=d>>>16,y[n+2]=d>>>8,y[n+3]=d,i(m,y,n+4),c(g,m,v),h=E.byteLength;h--;)E[h]=v[h];for(h=1;h=_);h++)s[p]=E[h];o-=h}return 0}}},function(e,t,r){!function(e){"use strict";var t=function(e){var t,r=new Float64Array(16);if(e)for(t=0;t>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r,e[t+4]=i>>24&255,e[t+5]=i>>16&255,e[t+6]=i>>8&255,e[t+7]=255&i}function g(e,t,r,i,n){var s,o=0;for(s=0;s>>8)-1}function m(e,t,r,i){return g(e,t,r,i,16)}function E(e,t,r,i){return g(e,t,r,i,32)}function v(e,t,r,i){!function(e,t,r,i){for(var n,s=255&i[0]|(255&i[1])<<8|(255&i[2])<<16|(255&i[3])<<24,o=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,a=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,c=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,h=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,f=255&i[4]|(255&i[5])<<8|(255&i[6])<<16|(255&i[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,l=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,p=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,d=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,g=255&i[8]|(255&i[9])<<8|(255&i[10])<<16|(255&i[11])<<24,m=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,E=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,v=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,y=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,_=255&i[12]|(255&i[13])<<8|(255&i[14])<<16|(255&i[15])<<24,w=s,b=o,S=a,k=c,T=h,A=f,U=u,B=l,N=p,R=d,P=g,D=m,O=E,I=v,C=y,L=_,H=0;H<20;H+=2)w^=(n=(O^=(n=(N^=(n=(T^=(n=w+O|0)<<7|n>>>25)+w|0)<<9|n>>>23)+T|0)<<13|n>>>19)+N|0)<<18|n>>>14,A^=(n=(b^=(n=(I^=(n=(R^=(n=A+b|0)<<7|n>>>25)+A|0)<<9|n>>>23)+R|0)<<13|n>>>19)+I|0)<<18|n>>>14,P^=(n=(U^=(n=(S^=(n=(C^=(n=P+U|0)<<7|n>>>25)+P|0)<<9|n>>>23)+C|0)<<13|n>>>19)+S|0)<<18|n>>>14,L^=(n=(D^=(n=(B^=(n=(k^=(n=L+D|0)<<7|n>>>25)+L|0)<<9|n>>>23)+k|0)<<13|n>>>19)+B|0)<<18|n>>>14,w^=(n=(k^=(n=(S^=(n=(b^=(n=w+k|0)<<7|n>>>25)+w|0)<<9|n>>>23)+b|0)<<13|n>>>19)+S|0)<<18|n>>>14,A^=(n=(T^=(n=(B^=(n=(U^=(n=A+T|0)<<7|n>>>25)+A|0)<<9|n>>>23)+U|0)<<13|n>>>19)+B|0)<<18|n>>>14,P^=(n=(R^=(n=(N^=(n=(D^=(n=P+R|0)<<7|n>>>25)+P|0)<<9|n>>>23)+D|0)<<13|n>>>19)+N|0)<<18|n>>>14,L^=(n=(C^=(n=(I^=(n=(O^=(n=L+C|0)<<7|n>>>25)+L|0)<<9|n>>>23)+O|0)<<13|n>>>19)+I|0)<<18|n>>>14;w=w+s|0,b=b+o|0,S=S+a|0,k=k+c|0,T=T+h|0,A=A+f|0,U=U+u|0,B=B+l|0,N=N+p|0,R=R+d|0,P=P+g|0,D=D+m|0,O=O+E|0,I=I+v|0,C=C+y|0,L=L+_|0,e[0]=w>>>0&255,e[1]=w>>>8&255,e[2]=w>>>16&255,e[3]=w>>>24&255,e[4]=b>>>0&255,e[5]=b>>>8&255,e[6]=b>>>16&255,e[7]=b>>>24&255,e[8]=S>>>0&255,e[9]=S>>>8&255,e[10]=S>>>16&255,e[11]=S>>>24&255,e[12]=k>>>0&255,e[13]=k>>>8&255,e[14]=k>>>16&255,e[15]=k>>>24&255,e[16]=T>>>0&255,e[17]=T>>>8&255,e[18]=T>>>16&255,e[19]=T>>>24&255,e[20]=A>>>0&255,e[21]=A>>>8&255,e[22]=A>>>16&255,e[23]=A>>>24&255,e[24]=U>>>0&255,e[25]=U>>>8&255,e[26]=U>>>16&255,e[27]=U>>>24&255,e[28]=B>>>0&255,e[29]=B>>>8&255,e[30]=B>>>16&255,e[31]=B>>>24&255,e[32]=N>>>0&255,e[33]=N>>>8&255,e[34]=N>>>16&255,e[35]=N>>>24&255,e[36]=R>>>0&255,e[37]=R>>>8&255,e[38]=R>>>16&255,e[39]=R>>>24&255,e[40]=P>>>0&255,e[41]=P>>>8&255,e[42]=P>>>16&255,e[43]=P>>>24&255,e[44]=D>>>0&255,e[45]=D>>>8&255,e[46]=D>>>16&255,e[47]=D>>>24&255,e[48]=O>>>0&255,e[49]=O>>>8&255,e[50]=O>>>16&255,e[51]=O>>>24&255,e[52]=I>>>0&255,e[53]=I>>>8&255,e[54]=I>>>16&255,e[55]=I>>>24&255,e[56]=C>>>0&255,e[57]=C>>>8&255,e[58]=C>>>16&255,e[59]=C>>>24&255,e[60]=L>>>0&255,e[61]=L>>>8&255,e[62]=L>>>16&255,e[63]=L>>>24&255}(e,t,r,i)}function y(e,t,r,i){!function(e,t,r,i){for(var n,s=255&i[0]|(255&i[1])<<8|(255&i[2])<<16|(255&i[3])<<24,o=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,a=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,c=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,h=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,f=255&i[4]|(255&i[5])<<8|(255&i[6])<<16|(255&i[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,l=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,p=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,d=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,g=255&i[8]|(255&i[9])<<8|(255&i[10])<<16|(255&i[11])<<24,m=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,E=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,v=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,y=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,_=255&i[12]|(255&i[13])<<8|(255&i[14])<<16|(255&i[15])<<24,w=0;w<20;w+=2)s^=(n=(E^=(n=(p^=(n=(h^=(n=s+E|0)<<7|n>>>25)+s|0)<<9|n>>>23)+h|0)<<13|n>>>19)+p|0)<<18|n>>>14,f^=(n=(o^=(n=(v^=(n=(d^=(n=f+o|0)<<7|n>>>25)+f|0)<<9|n>>>23)+d|0)<<13|n>>>19)+v|0)<<18|n>>>14,g^=(n=(u^=(n=(a^=(n=(y^=(n=g+u|0)<<7|n>>>25)+g|0)<<9|n>>>23)+y|0)<<13|n>>>19)+a|0)<<18|n>>>14,_^=(n=(m^=(n=(l^=(n=(c^=(n=_+m|0)<<7|n>>>25)+_|0)<<9|n>>>23)+c|0)<<13|n>>>19)+l|0)<<18|n>>>14,s^=(n=(c^=(n=(a^=(n=(o^=(n=s+c|0)<<7|n>>>25)+s|0)<<9|n>>>23)+o|0)<<13|n>>>19)+a|0)<<18|n>>>14,f^=(n=(h^=(n=(l^=(n=(u^=(n=f+h|0)<<7|n>>>25)+f|0)<<9|n>>>23)+u|0)<<13|n>>>19)+l|0)<<18|n>>>14,g^=(n=(d^=(n=(p^=(n=(m^=(n=g+d|0)<<7|n>>>25)+g|0)<<9|n>>>23)+m|0)<<13|n>>>19)+p|0)<<18|n>>>14,_^=(n=(y^=(n=(v^=(n=(E^=(n=_+y|0)<<7|n>>>25)+_|0)<<9|n>>>23)+E|0)<<13|n>>>19)+v|0)<<18|n>>>14;e[0]=s>>>0&255,e[1]=s>>>8&255,e[2]=s>>>16&255,e[3]=s>>>24&255,e[4]=f>>>0&255,e[5]=f>>>8&255,e[6]=f>>>16&255,e[7]=f>>>24&255,e[8]=g>>>0&255,e[9]=g>>>8&255,e[10]=g>>>16&255,e[11]=g>>>24&255,e[12]=_>>>0&255,e[13]=_>>>8&255,e[14]=_>>>16&255,e[15]=_>>>24&255,e[16]=u>>>0&255,e[17]=u>>>8&255,e[18]=u>>>16&255,e[19]=u>>>24&255,e[20]=l>>>0&255,e[21]=l>>>8&255,e[22]=l>>>16&255,e[23]=l>>>24&255,e[24]=p>>>0&255,e[25]=p>>>8&255,e[26]=p>>>16&255,e[27]=p>>>24&255,e[28]=d>>>0&255,e[29]=d>>>8&255,e[30]=d>>>16&255,e[31]=d>>>24&255}(e,t,r,i)}var _=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function w(e,t,r,i,n,s,o){var a,c,h=new Uint8Array(16),f=new Uint8Array(64);for(c=0;c<16;c++)h[c]=0;for(c=0;c<8;c++)h[c]=s[c];for(;n>=64;){for(v(f,h,o,_),c=0;c<64;c++)e[t+c]=r[i+c]^f[c];for(a=1,c=8;c<16;c++)a=a+(255&h[c])|0,h[c]=255&a,a>>>=8;n-=64,t+=64,i+=64}if(n>0)for(v(f,h,o,_),c=0;c=64;){for(v(c,a,n,_),o=0;o<64;o++)e[t+o]=c[o];for(s=1,o=8;o<16;o++)s=s+(255&a[o])|0,a[o]=255&s,s>>>=8;r-=64,t+=64}if(r>0)for(v(c,a,n,_),o=0;o>>13|r<<3),i=255&e[4]|(255&e[5])<<8,this.r[2]=7939&(r>>>10|i<<6),n=255&e[6]|(255&e[7])<<8,this.r[3]=8191&(i>>>7|n<<9),s=255&e[8]|(255&e[9])<<8,this.r[4]=255&(n>>>4|s<<12),this.r[5]=s>>>1&8190,o=255&e[10]|(255&e[11])<<8,this.r[6]=8191&(s>>>14|o<<2),a=255&e[12]|(255&e[13])<<8,this.r[7]=8065&(o>>>11|a<<5),c=255&e[14]|(255&e[15])<<8,this.r[8]=8191&(a>>>8|c<<8),this.r[9]=c>>>5&127,this.pad[0]=255&e[16]|(255&e[17])<<8,this.pad[1]=255&e[18]|(255&e[19])<<8,this.pad[2]=255&e[20]|(255&e[21])<<8,this.pad[3]=255&e[22]|(255&e[23])<<8,this.pad[4]=255&e[24]|(255&e[25])<<8,this.pad[5]=255&e[26]|(255&e[27])<<8,this.pad[6]=255&e[28]|(255&e[29])<<8,this.pad[7]=255&e[30]|(255&e[31])<<8};function A(e,t,r,i,n,s){var o=new T(s);return o.update(r,i,n),o.finish(e,t),0}function U(e,t,r,i,n,s){var o=new Uint8Array(16);return A(o,0,r,i,n,s),m(e,t,o,0)}function B(e,t,r,i,n){var s;if(r<32)return-1;for(k(e,0,t,0,r,i,n),A(e,16,e,32,r-32,e),s=0;s<16;s++)e[s]=0;return 0}function N(e,t,r,i,n){var s,o=new Uint8Array(32);if(r<32)return-1;if(S(o,0,32,i,n),0!==U(t,16,t,32,r-32,o))return-1;for(k(e,0,t,0,r,i,n),s=0;s<32;s++)e[s]=0;return 0}function R(e,t){var r;for(r=0;r<16;r++)e[r]=0|t[r]}function P(e){var t,r,i=1;for(t=0;t<16;t++)r=e[t]+i+65535,i=Math.floor(r/65536),e[t]=r-65536*i;e[0]+=i-1+37*(i-1)}function D(e,t,r){for(var i,n=~(r-1),s=0;s<16;s++)i=n&(e[s]^t[s]),e[s]^=i,t[s]^=i}function O(e,r){var i,n,s,o=t(),a=t();for(i=0;i<16;i++)a[i]=r[i];for(P(a),P(a),P(a),n=0;n<2;n++){for(o[0]=a[0]-65517,i=1;i<15;i++)o[i]=a[i]-65535-(o[i-1]>>16&1),o[i-1]&=65535;o[15]=a[15]-32767-(o[14]>>16&1),s=o[15]>>16&1,o[14]&=65535,D(a,o,1-s)}for(i=0;i<16;i++)e[2*i]=255&a[i],e[2*i+1]=a[i]>>8}function I(e,t){var r=new Uint8Array(32),i=new Uint8Array(32);return O(r,e),O(i,t),E(r,0,i,0)}function C(e){var t=new Uint8Array(32);return O(t,e),1&t[0]}function L(e,t){var r;for(r=0;r<16;r++)e[r]=t[2*r]+(t[2*r+1]<<8);e[15]&=32767}function H(e,t,r){for(var i=0;i<16;i++)e[i]=t[i]+r[i]}function x(e,t,r){for(var i=0;i<16;i++)e[i]=t[i]-r[i]}function F(e,t,r){var i,n,s=0,o=0,a=0,c=0,h=0,f=0,u=0,l=0,p=0,d=0,g=0,m=0,E=0,v=0,y=0,_=0,w=0,b=0,S=0,k=0,T=0,A=0,U=0,B=0,N=0,R=0,P=0,D=0,O=0,I=0,C=0,L=r[0],H=r[1],x=r[2],F=r[3],M=r[4],K=r[5],G=r[6],W=r[7],q=r[8],X=r[9],j=r[10],V=r[11],Y=r[12],z=r[13],Q=r[14],$=r[15];s+=(i=t[0])*L,o+=i*H,a+=i*x,c+=i*F,h+=i*M,f+=i*K,u+=i*G,l+=i*W,p+=i*q,d+=i*X,g+=i*j,m+=i*V,E+=i*Y,v+=i*z,y+=i*Q,_+=i*$,o+=(i=t[1])*L,a+=i*H,c+=i*x,h+=i*F,f+=i*M,u+=i*K,l+=i*G,p+=i*W,d+=i*q,g+=i*X,m+=i*j,E+=i*V,v+=i*Y,y+=i*z,_+=i*Q,w+=i*$,a+=(i=t[2])*L,c+=i*H,h+=i*x,f+=i*F,u+=i*M,l+=i*K,p+=i*G,d+=i*W,g+=i*q,m+=i*X,E+=i*j,v+=i*V,y+=i*Y,_+=i*z,w+=i*Q,b+=i*$,c+=(i=t[3])*L,h+=i*H,f+=i*x,u+=i*F,l+=i*M,p+=i*K,d+=i*G,g+=i*W,m+=i*q,E+=i*X,v+=i*j,y+=i*V,_+=i*Y,w+=i*z,b+=i*Q,S+=i*$,h+=(i=t[4])*L,f+=i*H,u+=i*x,l+=i*F,p+=i*M,d+=i*K,g+=i*G,m+=i*W,E+=i*q,v+=i*X,y+=i*j,_+=i*V,w+=i*Y,b+=i*z,S+=i*Q,k+=i*$,f+=(i=t[5])*L,u+=i*H,l+=i*x,p+=i*F,d+=i*M,g+=i*K,m+=i*G,E+=i*W,v+=i*q,y+=i*X,_+=i*j,w+=i*V,b+=i*Y,S+=i*z,k+=i*Q,T+=i*$,u+=(i=t[6])*L,l+=i*H,p+=i*x,d+=i*F,g+=i*M,m+=i*K,E+=i*G,v+=i*W,y+=i*q,_+=i*X,w+=i*j,b+=i*V,S+=i*Y,k+=i*z,T+=i*Q,A+=i*$,l+=(i=t[7])*L,p+=i*H,d+=i*x,g+=i*F,m+=i*M,E+=i*K,v+=i*G,y+=i*W,_+=i*q,w+=i*X,b+=i*j,S+=i*V,k+=i*Y,T+=i*z,A+=i*Q,U+=i*$,p+=(i=t[8])*L,d+=i*H,g+=i*x,m+=i*F,E+=i*M,v+=i*K,y+=i*G,_+=i*W,w+=i*q,b+=i*X,S+=i*j,k+=i*V,T+=i*Y,A+=i*z,U+=i*Q,B+=i*$,d+=(i=t[9])*L,g+=i*H,m+=i*x,E+=i*F,v+=i*M,y+=i*K,_+=i*G,w+=i*W,b+=i*q,S+=i*X,k+=i*j,T+=i*V,A+=i*Y,U+=i*z,B+=i*Q,N+=i*$,g+=(i=t[10])*L,m+=i*H,E+=i*x,v+=i*F,y+=i*M,_+=i*K,w+=i*G,b+=i*W,S+=i*q,k+=i*X,T+=i*j,A+=i*V,U+=i*Y,B+=i*z,N+=i*Q,R+=i*$,m+=(i=t[11])*L,E+=i*H,v+=i*x,y+=i*F,_+=i*M,w+=i*K,b+=i*G,S+=i*W,k+=i*q,T+=i*X,A+=i*j,U+=i*V,B+=i*Y,N+=i*z,R+=i*Q,P+=i*$,E+=(i=t[12])*L,v+=i*H,y+=i*x,_+=i*F,w+=i*M,b+=i*K,S+=i*G,k+=i*W,T+=i*q,A+=i*X,U+=i*j,B+=i*V,N+=i*Y,R+=i*z,P+=i*Q,D+=i*$,v+=(i=t[13])*L,y+=i*H,_+=i*x,w+=i*F,b+=i*M,S+=i*K,k+=i*G,T+=i*W,A+=i*q,U+=i*X,B+=i*j,N+=i*V,R+=i*Y,P+=i*z,D+=i*Q,O+=i*$,y+=(i=t[14])*L,_+=i*H,w+=i*x,b+=i*F,S+=i*M,k+=i*K,T+=i*G,A+=i*W,U+=i*q,B+=i*X,N+=i*j,R+=i*V,P+=i*Y,D+=i*z,O+=i*Q,I+=i*$,_+=(i=t[15])*L,o+=38*(b+=i*x),a+=38*(S+=i*F),c+=38*(k+=i*M),h+=38*(T+=i*K),f+=38*(A+=i*G),u+=38*(U+=i*W),l+=38*(B+=i*q),p+=38*(N+=i*X),d+=38*(R+=i*j),g+=38*(P+=i*V),m+=38*(D+=i*Y),E+=38*(O+=i*z),v+=38*(I+=i*Q),y+=38*(C+=i*$),s=(i=(s+=38*(w+=i*H))+(n=1)+65535)-65536*(n=Math.floor(i/65536)),o=(i=o+n+65535)-65536*(n=Math.floor(i/65536)),a=(i=a+n+65535)-65536*(n=Math.floor(i/65536)),c=(i=c+n+65535)-65536*(n=Math.floor(i/65536)),h=(i=h+n+65535)-65536*(n=Math.floor(i/65536)),f=(i=f+n+65535)-65536*(n=Math.floor(i/65536)),u=(i=u+n+65535)-65536*(n=Math.floor(i/65536)),l=(i=l+n+65535)-65536*(n=Math.floor(i/65536)),p=(i=p+n+65535)-65536*(n=Math.floor(i/65536)),d=(i=d+n+65535)-65536*(n=Math.floor(i/65536)),g=(i=g+n+65535)-65536*(n=Math.floor(i/65536)),m=(i=m+n+65535)-65536*(n=Math.floor(i/65536)),E=(i=E+n+65535)-65536*(n=Math.floor(i/65536)),v=(i=v+n+65535)-65536*(n=Math.floor(i/65536)),y=(i=y+n+65535)-65536*(n=Math.floor(i/65536)),_=(i=_+n+65535)-65536*(n=Math.floor(i/65536)),s=(i=(s+=n-1+37*(n-1))+(n=1)+65535)-65536*(n=Math.floor(i/65536)),o=(i=o+n+65535)-65536*(n=Math.floor(i/65536)),a=(i=a+n+65535)-65536*(n=Math.floor(i/65536)),c=(i=c+n+65535)-65536*(n=Math.floor(i/65536)),h=(i=h+n+65535)-65536*(n=Math.floor(i/65536)),f=(i=f+n+65535)-65536*(n=Math.floor(i/65536)),u=(i=u+n+65535)-65536*(n=Math.floor(i/65536)),l=(i=l+n+65535)-65536*(n=Math.floor(i/65536)),p=(i=p+n+65535)-65536*(n=Math.floor(i/65536)),d=(i=d+n+65535)-65536*(n=Math.floor(i/65536)),g=(i=g+n+65535)-65536*(n=Math.floor(i/65536)),m=(i=m+n+65535)-65536*(n=Math.floor(i/65536)),E=(i=E+n+65535)-65536*(n=Math.floor(i/65536)),v=(i=v+n+65535)-65536*(n=Math.floor(i/65536)),y=(i=y+n+65535)-65536*(n=Math.floor(i/65536)),_=(i=_+n+65535)-65536*(n=Math.floor(i/65536)),s+=n-1+37*(n-1),e[0]=s,e[1]=o,e[2]=a,e[3]=c,e[4]=h,e[5]=f,e[6]=u,e[7]=l,e[8]=p,e[9]=d,e[10]=g,e[11]=m,e[12]=E,e[13]=v,e[14]=y,e[15]=_}function M(e,t){F(e,t,t)}function K(e,r){var i,n=t();for(i=0;i<16;i++)n[i]=r[i];for(i=253;i>=0;i--)M(n,n),2!==i&&4!==i&&F(n,n,r);for(i=0;i<16;i++)e[i]=n[i]}function G(e,r,i){var n,s,o=new Uint8Array(32),a=new Float64Array(80),h=t(),f=t(),u=t(),l=t(),p=t(),d=t();for(s=0;s<31;s++)o[s]=r[s];for(o[31]=127&r[31]|64,o[0]&=248,L(a,i),s=0;s<16;s++)f[s]=a[s],l[s]=h[s]=u[s]=0;for(h[0]=l[0]=1,s=254;s>=0;--s)D(h,f,n=o[s>>>3]>>>(7&s)&1),D(u,l,n),H(p,h,u),x(h,h,u),H(u,f,l),x(f,f,l),M(l,p),M(d,h),F(h,u,h),F(u,f,p),H(p,h,u),x(h,h,u),M(f,h),x(u,l,d),F(h,u,c),H(h,h,l),F(u,u,h),F(h,l,d),F(l,f,a),M(f,p),D(h,f,n),D(u,l,n);for(s=0;s<16;s++)a[s+16]=h[s],a[s+32]=u[s],a[s+48]=f[s],a[s+64]=l[s];var g=a.subarray(32),m=a.subarray(16);return K(g,g),F(m,m,g),O(e,m),0}function W(e,t){return G(e,t,s)}function q(e,t){return i(t,32),W(e,t)}function X(e,t,r){var i=new Uint8Array(32);return G(i,r,t),y(e,n,i,_)}T.prototype.blocks=function(e,t,r){for(var i,n,s,o,a,c,h,f,u,l,p,d,g,m,E,v,y,_,w,b=this.fin?0:2048,S=this.h[0],k=this.h[1],T=this.h[2],A=this.h[3],U=this.h[4],B=this.h[5],N=this.h[6],R=this.h[7],P=this.h[8],D=this.h[9],O=this.r[0],I=this.r[1],C=this.r[2],L=this.r[3],H=this.r[4],x=this.r[5],F=this.r[6],M=this.r[7],K=this.r[8],G=this.r[9];r>=16;)l=u=0,l+=(S+=8191&(i=255&e[t+0]|(255&e[t+1])<<8))*O,l+=(k+=8191&(i>>>13|(n=255&e[t+2]|(255&e[t+3])<<8)<<3))*(5*G),l+=(T+=8191&(n>>>10|(s=255&e[t+4]|(255&e[t+5])<<8)<<6))*(5*K),l+=(A+=8191&(s>>>7|(o=255&e[t+6]|(255&e[t+7])<<8)<<9))*(5*M),u=(l+=(U+=8191&(o>>>4|(a=255&e[t+8]|(255&e[t+9])<<8)<<12))*(5*F))>>>13,l&=8191,l+=(B+=a>>>1&8191)*(5*x),l+=(N+=8191&(a>>>14|(c=255&e[t+10]|(255&e[t+11])<<8)<<2))*(5*H),l+=(R+=8191&(c>>>11|(h=255&e[t+12]|(255&e[t+13])<<8)<<5))*(5*L),l+=(P+=8191&(h>>>8|(f=255&e[t+14]|(255&e[t+15])<<8)<<8))*(5*C),p=u+=(l+=(D+=f>>>5|b)*(5*I))>>>13,p+=S*I,p+=k*O,p+=T*(5*G),p+=A*(5*K),u=(p+=U*(5*M))>>>13,p&=8191,p+=B*(5*F),p+=N*(5*x),p+=R*(5*H),p+=P*(5*L),u+=(p+=D*(5*C))>>>13,p&=8191,d=u,d+=S*C,d+=k*I,d+=T*O,d+=A*(5*G),u=(d+=U*(5*K))>>>13,d&=8191,d+=B*(5*M),d+=N*(5*F),d+=R*(5*x),d+=P*(5*H),g=u+=(d+=D*(5*L))>>>13,g+=S*L,g+=k*C,g+=T*I,g+=A*O,u=(g+=U*(5*G))>>>13,g&=8191,g+=B*(5*K),g+=N*(5*M),g+=R*(5*F),g+=P*(5*x),m=u+=(g+=D*(5*H))>>>13,m+=S*H,m+=k*L,m+=T*C,m+=A*I,u=(m+=U*O)>>>13,m&=8191,m+=B*(5*G),m+=N*(5*K),m+=R*(5*M),m+=P*(5*F),E=u+=(m+=D*(5*x))>>>13,E+=S*x,E+=k*H,E+=T*L,E+=A*C,u=(E+=U*I)>>>13,E&=8191,E+=B*O,E+=N*(5*G),E+=R*(5*K),E+=P*(5*M),v=u+=(E+=D*(5*F))>>>13,v+=S*F,v+=k*x,v+=T*H,v+=A*L,u=(v+=U*C)>>>13,v&=8191,v+=B*I,v+=N*O,v+=R*(5*G),v+=P*(5*K),y=u+=(v+=D*(5*M))>>>13,y+=S*M,y+=k*F,y+=T*x,y+=A*H,u=(y+=U*L)>>>13,y&=8191,y+=B*C,y+=N*I,y+=R*O,y+=P*(5*G),_=u+=(y+=D*(5*K))>>>13,_+=S*K,_+=k*M,_+=T*F,_+=A*x,u=(_+=U*H)>>>13,_&=8191,_+=B*L,_+=N*C,_+=R*I,_+=P*O,w=u+=(_+=D*(5*G))>>>13,w+=S*G,w+=k*K,w+=T*M,w+=A*F,u=(w+=U*x)>>>13,w&=8191,w+=B*H,w+=N*L,w+=R*C,w+=P*I,S=l=8191&(u=(u=((u+=(w+=D*O)>>>13)<<2)+u|0)+(l&=8191)|0),k=p+=u>>>=13,T=d&=8191,A=g&=8191,U=m&=8191,B=E&=8191,N=v&=8191,R=y&=8191,P=_&=8191,D=w&=8191,t+=16,r-=16;this.h[0]=S,this.h[1]=k,this.h[2]=T,this.h[3]=A,this.h[4]=U,this.h[5]=B,this.h[6]=N,this.h[7]=R,this.h[8]=P,this.h[9]=D},T.prototype.finish=function(e,t){var r,i,n,s,o=new Uint16Array(10);if(this.leftover){for(s=this.leftover,this.buffer[s++]=1;s<16;s++)this.buffer[s]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(r=this.h[1]>>>13,this.h[1]&=8191,s=2;s<10;s++)this.h[s]+=r,r=this.h[s]>>>13,this.h[s]&=8191;for(this.h[0]+=5*r,r=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=r,r=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=r,o[0]=this.h[0]+5,r=o[0]>>>13,o[0]&=8191,s=1;s<10;s++)o[s]=this.h[s]+r,r=o[s]>>>13,o[s]&=8191;for(o[9]-=8192,i=(1^r)-1,s=0;s<10;s++)o[s]&=i;for(i=~i,s=0;s<10;s++)this.h[s]=this.h[s]&i|o[s];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),n=this.h[0]+this.pad[0],this.h[0]=65535&n,s=1;s<8;s++)n=(this.h[s]+this.pad[s]|0)+(n>>>16)|0,this.h[s]=65535&n;e[t+0]=this.h[0]>>>0&255,e[t+1]=this.h[0]>>>8&255,e[t+2]=this.h[1]>>>0&255,e[t+3]=this.h[1]>>>8&255,e[t+4]=this.h[2]>>>0&255,e[t+5]=this.h[2]>>>8&255,e[t+6]=this.h[3]>>>0&255,e[t+7]=this.h[3]>>>8&255,e[t+8]=this.h[4]>>>0&255,e[t+9]=this.h[4]>>>8&255,e[t+10]=this.h[5]>>>0&255,e[t+11]=this.h[5]>>>8&255,e[t+12]=this.h[6]>>>0&255,e[t+13]=this.h[6]>>>8&255,e[t+14]=this.h[7]>>>0&255,e[t+15]=this.h[7]>>>8&255},T.prototype.update=function(e,t,r){var i,n;if(this.leftover){for((n=16-this.leftover)>r&&(n=r),i=0;i=16&&(n=r-r%16,this.blocks(e,t,n),t+=n,r-=n),r){for(i=0;i=128;){for(b=0;b<16;b++)S=8*b+z,R[b]=r[S+0]<<24|r[S+1]<<16|r[S+2]<<8|r[S+3],P[b]=r[S+4]<<24|r[S+5]<<16|r[S+6]<<8|r[S+7];for(b=0;b<80;b++)if(n=D,s=O,o=I,a=C,c=L,h=H,f=x,F,l=M,p=K,d=G,g=W,m=q,E=X,v=j,V,A=65535&(T=V),U=T>>>16,B=65535&(k=F),N=k>>>16,A+=65535&(T=(q>>>14|L<<18)^(q>>>18|L<<14)^(L>>>9|q<<23)),U+=T>>>16,B+=65535&(k=(L>>>14|q<<18)^(L>>>18|q<<14)^(q>>>9|L<<23)),N+=k>>>16,A+=65535&(T=q&X^~q&j),U+=T>>>16,B+=65535&(k=L&H^~L&x),N+=k>>>16,A+=65535&(T=Y[2*b+1]),U+=T>>>16,B+=65535&(k=Y[2*b]),N+=k>>>16,k=R[b%16],U+=(T=P[b%16])>>>16,B+=65535&k,N+=k>>>16,B+=(U+=(A+=65535&T)>>>16)>>>16,A=65535&(T=w=65535&A|U<<16),U=T>>>16,B=65535&(k=_=65535&B|(N+=B>>>16)<<16),N=k>>>16,A+=65535&(T=(M>>>28|D<<4)^(D>>>2|M<<30)^(D>>>7|M<<25)),U+=T>>>16,B+=65535&(k=(D>>>28|M<<4)^(M>>>2|D<<30)^(M>>>7|D<<25)),N+=k>>>16,U+=(T=M&K^M&G^K&G)>>>16,B+=65535&(k=D&O^D&I^O&I),N+=k>>>16,u=65535&(B+=(U+=(A+=65535&T)>>>16)>>>16)|(N+=B>>>16)<<16,y=65535&A|U<<16,A=65535&(T=g),U=T>>>16,B=65535&(k=a),N=k>>>16,U+=(T=w)>>>16,B+=65535&(k=_),N+=k>>>16,O=n,I=s,C=o,L=a=65535&(B+=(U+=(A+=65535&T)>>>16)>>>16)|(N+=B>>>16)<<16,H=c,x=h,F=f,D=u,K=l,G=p,W=d,q=g=65535&A|U<<16,X=m,j=E,V=v,M=y,b%16==15)for(S=0;S<16;S++)k=R[S],A=65535&(T=P[S]),U=T>>>16,B=65535&k,N=k>>>16,k=R[(S+9)%16],A+=65535&(T=P[(S+9)%16]),U+=T>>>16,B+=65535&k,N+=k>>>16,_=R[(S+1)%16],A+=65535&(T=((w=P[(S+1)%16])>>>1|_<<31)^(w>>>8|_<<24)^(w>>>7|_<<25)),U+=T>>>16,B+=65535&(k=(_>>>1|w<<31)^(_>>>8|w<<24)^_>>>7),N+=k>>>16,_=R[(S+14)%16],U+=(T=((w=P[(S+14)%16])>>>19|_<<13)^(_>>>29|w<<3)^(w>>>6|_<<26))>>>16,B+=65535&(k=(_>>>19|w<<13)^(w>>>29|_<<3)^_>>>6),N+=k>>>16,N+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,R[S]=65535&B|N<<16,P[S]=65535&A|U<<16;A=65535&(T=M),U=T>>>16,B=65535&(k=D),N=k>>>16,k=e[0],U+=(T=t[0])>>>16,B+=65535&k,N+=k>>>16,N+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[0]=D=65535&B|N<<16,t[0]=M=65535&A|U<<16,A=65535&(T=K),U=T>>>16,B=65535&(k=O),N=k>>>16,k=e[1],U+=(T=t[1])>>>16,B+=65535&k,N+=k>>>16,N+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[1]=O=65535&B|N<<16,t[1]=K=65535&A|U<<16,A=65535&(T=G),U=T>>>16,B=65535&(k=I),N=k>>>16,k=e[2],U+=(T=t[2])>>>16,B+=65535&k,N+=k>>>16,N+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[2]=I=65535&B|N<<16,t[2]=G=65535&A|U<<16,A=65535&(T=W),U=T>>>16,B=65535&(k=C),N=k>>>16,k=e[3],U+=(T=t[3])>>>16,B+=65535&k,N+=k>>>16,N+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[3]=C=65535&B|N<<16,t[3]=W=65535&A|U<<16,A=65535&(T=q),U=T>>>16,B=65535&(k=L),N=k>>>16,k=e[4],U+=(T=t[4])>>>16,B+=65535&k,N+=k>>>16,N+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[4]=L=65535&B|N<<16,t[4]=q=65535&A|U<<16,A=65535&(T=X),U=T>>>16,B=65535&(k=H),N=k>>>16,k=e[5],U+=(T=t[5])>>>16,B+=65535&k,N+=k>>>16,N+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[5]=H=65535&B|N<<16,t[5]=X=65535&A|U<<16,A=65535&(T=j),U=T>>>16,B=65535&(k=x),N=k>>>16,k=e[6],U+=(T=t[6])>>>16,B+=65535&k,N+=k>>>16,N+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[6]=x=65535&B|N<<16,t[6]=j=65535&A|U<<16,A=65535&(T=V),U=T>>>16,B=65535&(k=F),N=k>>>16,k=e[7],U+=(T=t[7])>>>16,B+=65535&k,N+=k>>>16,N+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[7]=F=65535&B|N<<16,t[7]=V=65535&A|U<<16,z+=128,i-=128}return i}function Q(e,t,r){var i,n=new Int32Array(8),s=new Int32Array(8),o=new Uint8Array(256),a=r;for(n[0]=1779033703,n[1]=3144134277,n[2]=1013904242,n[3]=2773480762,n[4]=1359893119,n[5]=2600822924,n[6]=528734635,n[7]=1541459225,s[0]=4089235720,s[1]=2227873595,s[2]=4271175723,s[3]=1595750129,s[4]=2917565137,s[5]=725511199,s[6]=4215389547,s[7]=327033209,z(n,s,t,r),r%=128,i=0;i=0;--n)Z(e,t,i=r[n/8|0]>>(7&n)&1),$(t,e),$(e,e),Z(e,t,i)}function te(e,r){var i=[t(),t(),t(),t()];R(i[0],u),R(i[1],l),R(i[2],a),F(i[3],u,l),ee(e,i,r)}function re(e,r,n){var s,o=new Uint8Array(64),a=[t(),t(),t(),t()];for(n||i(r,32),Q(o,r,32),o[0]&=248,o[31]&=127,o[31]|=64,te(a,o),J(e,a),s=0;s<32;s++)r[s+32]=e[s];return 0}var ie=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function ne(e,t){var r,i,n,s;for(i=63;i>=32;--i){for(r=0,n=i-32,s=i-12;n>8,t[n]-=256*r;t[n]+=r,t[i]=0}for(r=0,n=0;n<32;n++)t[n]+=r-(t[31]>>4)*ie[n],r=t[n]>>8,t[n]&=255;for(n=0;n<32;n++)t[n]-=r*ie[n];for(i=0;i<32;i++)t[i+1]+=t[i]>>8,e[i]=255&t[i]}function se(e){var t,r=new Float64Array(64);for(t=0;t<64;t++)r[t]=e[t];for(t=0;t<64;t++)e[t]=0;ne(e,r)}function oe(e,r,i,n){var s,o,a=new Uint8Array(64),c=new Uint8Array(64),h=new Uint8Array(64),f=new Float64Array(64),u=[t(),t(),t(),t()];Q(a,n,32),a[0]&=248,a[31]&=127,a[31]|=64;var l=i+64;for(s=0;s=0;i--)M(n,n),1!==i&&F(n,n,r);for(i=0;i<16;i++)e[i]=n[i]}(i,i),F(i,i,s),F(i,i,c),F(i,i,c),F(e[0],i,c),M(n,e[0]),F(n,n,c),I(n,s)&&F(e[0],e[0],p),M(n,e[0]),F(n,n,c),I(n,s)?-1:(C(e[0])===r[31]>>7&&x(e[0],o,e[0]),F(e[3],e[0],e[1]),0)}function ce(e,r,i,n){var s,o=new Uint8Array(32),a=new Uint8Array(64),c=[t(),t(),t(),t()],h=[t(),t(),t(),t()];if(-1,i<64)return-1;if(ae(h,n))return-1;for(s=0;s=0},e.sign.keyPair=function(){var e=new Uint8Array(32),t=new Uint8Array(64);return re(e,t),{publicKey:e,secretKey:t}},e.sign.keyPair.fromSecretKey=function(e){if(fe(e),64!==e.length)throw new Error("bad secret key size");for(var t=new Uint8Array(32),r=0;r>14;--s>=0;){var c=16383&this[e],h=this[e++]>>14,f=a*c+h*o;n=((c=o*c+((16383&f)<<14)+r[i]+n)>>28)+(f>>14)+a*h,r[i++]=268435455&c}return n},r.prototype.DB=28,r.prototype.DM=268435455,r.prototype.DV=1<<28;r.prototype.FV=Math.pow(2,52),r.prototype.F1=24,r.prototype.F2=4;var n,s,o=new Array;for(n="0".charCodeAt(0),s=0;s<=9;++s)o[n++]=s;for(n="a".charCodeAt(0),s=10;s<36;++s)o[n++]=s;for(n="A".charCodeAt(0),s=10;s<36;++s)o[n++]=s;function a(e){return"0123456789abcdefghijklmnopqrstuvwxyz".charAt(e)}function c(e,t){var r=o[e.charCodeAt(t)];return null==r?-1:r}function h(e){var t=i();return t.fromInt(e),t}function f(e){var t,r=1;return 0!=(t=e>>>16)&&(e=t,r+=16),0!=(t=e>>8)&&(e=t,r+=8),0!=(t=e>>4)&&(e=t,r+=4),0!=(t=e>>2)&&(e=t,r+=2),0!=(t=e>>1)&&(e=t,r+=1),r}function u(e){this.m=e}function l(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,t+=16),0==(255&e)&&(e>>=8,t+=8),0==(15&e)&&(e>>=4,t+=4),0==(3&e)&&(e>>=2,t+=2),0==(1&e)&&++t,t}function v(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function y(){}function _(e){return e}function w(e){this.r2=i(),this.q3=i(),r.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}u.prototype.convert=function(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},u.prototype.revert=function(e){return e},u.prototype.reduce=function(e){e.divRemTo(this.m,null,e)},u.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},u.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},l.prototype.convert=function(e){var t=i();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(r.ZERO)>0&&this.m.subTo(t,t),t},l.prototype.revert=function(e){var t=i();return e.copyTo(t),this.reduce(t),t},l.prototype.reduce=function(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;for(e[r=t+this.m.t]+=this.m.am(0,i,e,t,0,this.m.t);e[r]>=e.DV;)e[r]-=e.DV,e[++r]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},l.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},l.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},r.prototype.copyTo=function(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s},r.prototype.fromInt=function(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0},r.prototype.fromString=function(e,t){var i;if(16==t)i=4;else if(8==t)i=3;else if(256==t)i=8;else if(2==t)i=1;else if(32==t)i=5;else{if(4!=t)return void this.fromRadix(e,t);i=2}this.t=0,this.s=0;for(var n=e.length,s=!1,o=0;--n>=0;){var a=8==i?255&e[n]:c(e,n);a<0?"-"==e.charAt(n)&&(s=!0):(s=!1,0==o?this[this.t++]=a:o+i>this.DB?(this[this.t-1]|=(a&(1<>this.DB-o):this[this.t-1]|=a<=this.DB&&(o-=this.DB))}8==i&&0!=(128&e[0])&&(this.s=-1,o>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==e;)--this.t},r.prototype.dlShiftTo=function(e,t){var r;for(r=this.t-1;r>=0;--r)t[r+e]=this[r];for(r=e-1;r>=0;--r)t[r]=0;t.t=this.t+e,t.s=this.s},r.prototype.drShiftTo=function(e,t){for(var r=e;r=0;--r)t[r+o+1]=this[r]>>n|a,a=(this[r]&s)<=0;--r)t[r]=0;t[o]=a,t.t=this.t+o+1,t.s=this.s,t.clamp()},r.prototype.rShiftTo=function(e,t){t.s=this.s;var r=Math.floor(e/this.DB);if(r>=this.t)t.t=0;else{var i=e%this.DB,n=this.DB-i,s=(1<>i;for(var o=r+1;o>i;i>0&&(t[this.t-r-1]|=(this.s&s)<>=this.DB;if(e.t>=this.DB;i+=this.s}else{for(i+=this.s;r>=this.DB;i-=e.s}t.s=i<0?-1:0,i<-1?t[r++]=this.DV+i:i>0&&(t[r++]=i),t.t=r,t.clamp()},r.prototype.multiplyTo=function(e,t){var i=this.abs(),n=e.abs(),s=i.t;for(t.t=s+n.t;--s>=0;)t[s]=0;for(s=0;s=0;)e[r]=0;for(r=0;r=t.DV&&(e[r+t.t]-=t.DV,e[r+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(r,t[r],e,2*r,0,1)),e.s=0,e.clamp()},r.prototype.divRemTo=function(e,t,n){var s=e.abs();if(!(s.t<=0)){var o=this.abs();if(o.t0?(s.lShiftTo(u,a),o.lShiftTo(u,n)):(s.copyTo(a),o.copyTo(n));var l=a.t,p=a[l-1];if(0!=p){var d=p*(1<1?a[l-2]>>this.F2:0),g=this.FV/d,m=(1<=0&&(n[n.t++]=1,n.subTo(_,n)),r.ONE.dlShiftTo(l,_),_.subTo(a,a);a.t=0;){var w=n[--v]==p?this.DM:Math.floor(n[v]*g+(n[v-1]+E)*m);if((n[v]+=a.am(0,w,n,y,0,l))0&&n.rShiftTo(u,n),c<0&&r.ZERO.subTo(n,n)}}},r.prototype.invDigit=function(){if(this.t<1)return 0;var e=this[0];if(0==(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},r.prototype.isEven=function(){return 0==(this.t>0?1&this[0]:this.s)},r.prototype.exp=function(e,t){if(e>4294967295||e<1)return r.ONE;var n=i(),s=i(),o=t.convert(this),a=f(e)-1;for(o.copyTo(n);--a>=0;)if(t.sqrTo(n,s),(e&1<0)t.mulTo(s,o,n);else{var c=n;n=s,s=c}return t.revert(n)},r.prototype.toString=function(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var r,i=(1<0)for(c>c)>0&&(n=!0,s=a(r));o>=0;)c>(c+=this.DB-t)):(r=this[o]>>(c-=t)&i,c<=0&&(c+=this.DB,--o)),r>0&&(n=!0),n&&(s+=a(r));return n?s:"0"},r.prototype.negate=function(){var e=i();return r.ZERO.subTo(this,e),e},r.prototype.abs=function(){return this.s<0?this.negate():this},r.prototype.compareTo=function(e){var t=this.s-e.s;if(0!=t)return t;var r=this.t;if(0!=(t=r-e.t))return this.s<0?-t:t;for(;--r>=0;)if(0!=(t=this[r]-e[r]))return t;return 0},r.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+f(this[this.t-1]^this.s&this.DM)},r.prototype.mod=function(e){var t=i();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(r.ZERO)>0&&e.subTo(t,t),t},r.prototype.modPowInt=function(e,t){var r;return r=e<256||t.isEven()?new u(t):new l(t),this.exp(e,r)},r.ZERO=h(0),r.ONE=h(1),y.prototype.convert=_,y.prototype.revert=_,y.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r)},y.prototype.sqrTo=function(e,t){e.squareTo(t)},w.prototype.convert=function(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=i();return e.copyTo(t),this.reduce(t),t},w.prototype.revert=function(e){return e},w.prototype.reduce=function(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},w.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},w.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)};var b=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],S=(1<<26)/b[b.length-1];r.prototype.chunkSize=function(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},r.prototype.toRadix=function(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),r=Math.pow(e,t),n=h(r),s=i(),o=i(),a="";for(this.divRemTo(n,s,o);s.signum()>0;)a=(r+o.intValue()).toString(e).substr(1)+a,s.divRemTo(n,s,o);return o.intValue().toString(e)+a},r.prototype.fromRadix=function(e,t){this.fromInt(0),null==t&&(t=10);for(var i=this.chunkSize(t),n=Math.pow(t,i),s=!1,o=0,a=0,h=0;h=i&&(this.dMultiply(n),this.dAddOffset(a,0),o=0,a=0))}o>0&&(this.dMultiply(Math.pow(t,o)),this.dAddOffset(a,0)),s&&r.ZERO.subTo(this,this)},r.prototype.fromNumber=function(e,t,i){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,i),this.testBit(e-1)||this.bitwiseTo(r.ONE.shiftLeft(e-1),d,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(r.ONE.shiftLeft(e-1),this);else{var n=new Array,s=7&e;n.length=1+(e>>3),t.nextBytes(n),s>0?n[0]&=(1<>=this.DB;if(e.t>=this.DB;i+=this.s}else{for(i+=this.s;r>=this.DB;i+=e.s}t.s=i<0?-1:0,i>0?t[r++]=i:i<-1&&(t[r++]=this.DV+i),t.t=r,t.clamp()},r.prototype.dMultiply=function(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},r.prototype.dAddOffset=function(e,t){if(0!=e){for(;this.t<=t;)this[this.t++]=0;for(this[t]+=e;this[t]>=this.DV;)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}},r.prototype.multiplyLowerTo=function(e,t,r){var i,n=Math.min(this.t+e.t,t);for(r.s=0,r.t=n;n>0;)r[--n]=0;for(i=r.t-this.t;n=0;)r[i]=0;for(i=Math.max(t-this.t,0);i0)if(0==t)r=this[0]%e;else for(var i=this.t-1;i>=0;--i)r=(t*r+this[i])%e;return r},r.prototype.millerRabin=function(e){var t=this.subtract(r.ONE),n=t.getLowestSetBit();if(n<=0)return!1;var s=t.shiftRight(n);(e=e+1>>1)>b.length&&(e=b.length);for(var o=i(),a=0;a>24},r.prototype.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16},r.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},r.prototype.toByteArray=function(){var e=this.t,t=new Array;t[0]=this.s;var r,i=this.DB-e*this.DB%8,n=0;if(e-- >0)for(i>i)!=(this.s&this.DM)>>i&&(t[n++]=r|this.s<=0;)i<8?(r=(this[e]&(1<>(i+=this.DB-8)):(r=this[e]>>(i-=8)&255,i<=0&&(i+=this.DB,--e)),0!=(128&r)&&(r|=-256),0==n&&(128&this.s)!=(128&r)&&++n,(n>0||r!=this.s)&&(t[n++]=r);return t},r.prototype.equals=function(e){return 0==this.compareTo(e)},r.prototype.min=function(e){return this.compareTo(e)<0?this:e},r.prototype.max=function(e){return this.compareTo(e)>0?this:e},r.prototype.and=function(e){var t=i();return this.bitwiseTo(e,p,t),t},r.prototype.or=function(e){var t=i();return this.bitwiseTo(e,d,t),t},r.prototype.xor=function(e){var t=i();return this.bitwiseTo(e,g,t),t},r.prototype.andNot=function(e){var t=i();return this.bitwiseTo(e,m,t),t},r.prototype.not=function(){for(var e=i(),t=0;t=this.t?0!=this.s:0!=(this[t]&1<1){var g=i();for(n.sqrTo(a[1],g);c<=d;)a[c]=i(),n.mulTo(g,a[c-2],a[c]),c+=2}var m,E,v=e.t-1,y=!0,_=i();for(s=f(e[v])-1;v>=0;){for(s>=p?m=e[v]>>s-p&d:(m=(e[v]&(1<0&&(m|=e[v-1]>>this.DB+s-p)),c=r;0==(1&m);)m>>=1,--c;if((s-=c)<0&&(s+=this.DB,--v),y)a[m].copyTo(o),y=!1;else{for(;c>1;)n.sqrTo(o,_),n.sqrTo(_,o),c-=2;c>0?n.sqrTo(o,_):(E=o,o=_,_=E),n.mulTo(_,a[m],o)}for(;v>=0&&0==(e[v]&1<=0?(i.subTo(n,i),t&&s.subTo(a,s),o.subTo(c,o)):(n.subTo(i,n),t&&a.subTo(s,a),c.subTo(o,c))}return 0!=n.compareTo(r.ONE)?r.ZERO:c.compareTo(e)>=0?c.subtract(e):c.signum()<0?(c.addTo(e,c),c.signum()<0?c.add(e):c):c},r.prototype.pow=function(e){return this.exp(e,new y)},r.prototype.gcd=function(e){var t=this.s<0?this.negate():this.clone(),r=e.s<0?e.negate():e.clone();if(t.compareTo(r)<0){var i=t;t=r,r=i}var n=t.getLowestSetBit(),s=r.getLowestSetBit();if(s<0)return t;for(n0&&(t.rShiftTo(s,t),r.rShiftTo(s,r));t.signum()>0;)(n=t.getLowestSetBit())>0&&t.rShiftTo(n,t),(n=r.getLowestSetBit())>0&&r.rShiftTo(n,r),t.compareTo(r)>=0?(t.subTo(r,t),t.rShiftTo(1,t)):(r.subTo(t,r),r.rShiftTo(1,r));return s>0&&r.lShiftTo(s,r),r},r.prototype.isProbablePrime=function(e){var t,r=this.abs();if(1==r.t&&r[0]<=b[b.length-1]){for(t=0;t=i+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function o(e,t){if(n("string"==typeof t,"`thing` has to be of type string"),Array.isArray(e)){var r=e.length;return n(r>0,"At least one expected value needs to be specified"),e=e.map(e=>String(e)),r>2?`one of ${t} ${e.slice(0,r-1).join(", ")}, or `+e[r-1]:2===r?`one of ${t} ${e[0]} or ${e[1]}`:`of ${t} ${e[0]}`}return`of ${t} ${String(e)}`}n.fail=function(e){throw new ERR_INTERNAL_ASSERTION(e)},t.ERR_INTERNAL_ASSERTION=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,e);var r="This is caused by either a bug in ssh2-streams or incorrect usage of ssh2-streams internals.\nPlease open an issue with this stack trace at https://github.com/mscdex/ssh2-streams/issues\n";this.message=void 0===t?r:`${t}\n${r}`}};var a=Math.pow(2,32),c=function(){try{return new Function("return 2n ** 32n")()}catch(e){}}();function h(e,t){emitErrorNT(e,t),f(e)}function f(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}t.ERR_OUT_OF_RANGE=class e extends RangeError{constructor(t,r,o,h){super(),Error.captureStackTrace(this,e),n(r,'Missing "range" argument');var f,u=h?t:`The value of "${t}" is out of range.`;Number.isInteger(o)&&Math.abs(o)>a?f=s(String(o)):"bigint"==typeof o?(f=String(o),(o>c||o<-c)&&(f=s(f)),f+="n"):f=i(o),u+=` It must be ${r}. Received ${f}`,this.message=u}},t.ERR_INVALID_ARG_TYPE=class e extends TypeError{constructor(t,r,i){var s,a;if(super(),Error.captureStackTrace(this,e),n("string"==typeof t,"'name' must be a string"),"string"==typeof r&&r.startsWith("not ")?(s="must not be",r=r.replace(/^not /,"")):s="must be",t.endsWith(" argument"))a=`The ${t} ${s} ${o(r,"type")}`;else{var c=t.includes(".")?"property":"argument";a=`The "${t}" ${c} ${s} ${o(r,"type")}`}a+=". Received type "+typeof i,this.message=a}},t.validateNumber=function(e,t){if("number"!=typeof e)throw new ERR_INVALID_ARG_TYPE(t,"number",e)},t.destroyImpl=function(e,t){const r=this._readableState&&this._readableState.destroyed,i=this._writableState&&this._writableState.destroyed;return r||i?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(emitErrorNT,this,e)):process.nextTick(emitErrorNT,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,e=>{!t&&e?this._writableState?this._writableState.errorEmitted?process.nextTick(f,this):(this._writableState.errorEmitted=!0,process.nextTick(h,this,e)):process.nextTick(h,this,e):t?(process.nextTick(f,this),t(e)):process.nextTick(f,this)}),this)}},function(e,t,r){var i=r(6),n=r(57),s=r(2).Transform,o=r(0).inherits,a=r(0).inspect,c=r(58),h=r(15).Ber,f=r(4).readUInt32BE,u=r(4).writeUInt32BE,l=r(18),p=r(3),d=p.iv_inc,g=p.readString,m=p.readInt,E=p.DSASigBERToBare,v=p.ECDSASigASN1ToSSH,y=p.sigSSHToASN1,_=r(32).parseDERKey,w=l.CIPHER_INFO,b=l.HMAC_INFO,S=l.MESSAGE,k=(l.DYNAMIC_KEXDH_MESSAGE,l.KEXDH_MESSAGE,l.ALGORITHMS),T=l.DISCONNECT_REASON,A=l.CHANNEL_OPEN_FAILURE,U=l.SSH_TO_OPENSSL,B=l.TERMINAL_MODE,N=l.SIGNALS,R=(l.EDDSA_SUPPORTED,l.CURVE25519_SUPPORTED),P=l.BUGS,D=l.BUGGY_IMPLS,O=D.length,I=r(59).version,C=0,L=C++,H=C++,x=C++,F=C++,M=C++,K=C++,G=C++,W=C++,q=C++,X=C++,j=C++,V=n.Z_PARTIAL_FLUSH,Y={flush:V},z=/\x00/g,Q=Buffer.from("SSH-"),$=Buffer.allocUnsafe(0),Z=Buffer.allocUnsafe(9),J=Buffer.from([S.GLOBAL_REQUEST,0,0,0,21,107,101,101,112,97,108,105,118,101,64,111,112,101,110,115,115,104,46,99,111,109,1]),ee=Buffer.from([S.NEWKEYS]),te=Buffer.from([S.USERAUTH_SUCCESS]),re=Buffer.from([S.REQUEST_SUCCESS]),ie=Buffer.from([S.REQUEST_FAILURE]),ne=Buffer.from([B.TTY_OP_END]),se=Buffer.from([S.KEXDH_GEX_REQUEST,0,0,4,0,0,0,16,0,0,0,32,0]);function oe(e){}function ae(e){"object"==typeof e&&null!==e||(e={}),s.call(this,{highWaterMark:"number"==typeof e.highWaterMark?e.highWaterMark:32768}),this._needContinue=!1,this.bytesSent=this.bytesReceived=0,this.debug="function"==typeof e.debug?e.debug:oe,this.server=!0===e.server,this.maxPacketSize="number"==typeof e.maxPacketSize?e.maxPacketSize:35e3,this.remoteBugs=0,this.server&&(this.remoteBugs=P.BAD_DHGEX),this.readable=!0;var t=this,r=e.hostKeys;if(this.server&&("object"!=typeof r||null===r))throw new Error("hostKeys must be an object keyed on host key type");if(this.config={hostKeys:r,ident:"SSH-2.0-"+(e.ident||"ssh2js"+I+(this.server?"srv":"")),algorithms:{kex:k.KEX,kexBuf:k.KEX_BUF,serverHostKey:k.SERVER_HOST_KEY,serverHostKeyBuf:k.SERVER_HOST_KEY_BUF,cipher:k.CIPHER,cipherBuf:k.CIPHER_BUF,hmac:k.HMAC,hmacBuf:k.HMAC_BUF,compress:k.COMPRESS,compressBuf:k.COMPRESS_BUF}},this.config.ident.replace(z,""),this.config.ident.length+2>255)throw new Error("ident too long");if("object"==typeof e.algorithms&&null!==e.algorithms){var n=e.algorithms;Array.isArray(n.kex)&&n.kex.length>0&&(this.config.algorithms.kex=n.kex,Buffer.isBuffer(n.kexBuf)||(n.kexBuf=Buffer.from(n.kex.join(","),"ascii")),this.config.algorithms.kexBuf=n.kexBuf),Array.isArray(n.serverHostKey)&&n.serverHostKey.length>0&&(this.config.algorithms.serverHostKey=n.serverHostKey,Buffer.isBuffer(n.serverHostKeyBuf)||(n.serverHostKeyBuf=Buffer.from(n.serverHostKey.join(","),"ascii")),this.config.algorithms.serverHostKeyBuf=n.serverHostKeyBuf),Array.isArray(n.cipher)&&n.cipher.length>0&&(this.config.algorithms.cipher=n.cipher,Buffer.isBuffer(n.cipherBuf)||(n.cipherBuf=Buffer.from(n.cipher.join(","),"ascii")),this.config.algorithms.cipherBuf=n.cipherBuf),Array.isArray(n.hmac)&&n.hmac.length>0&&(this.config.algorithms.hmac=n.hmac,Buffer.isBuffer(n.hmacBuf)||(n.hmacBuf=Buffer.from(n.hmac.join(","),"ascii")),this.config.algorithms.hmacBuf=n.hmacBuf),Array.isArray(n.compress)&&n.compress.length>0&&(this.config.algorithms.compress=n.compress,Buffer.isBuffer(n.compressBuf)||(n.compressBuf=Buffer.from(n.compress.join(","),"ascii")),this.config.algorithms.compressBuf=n.compressBuf)}this.reset(!0),this.on("end",(function(){t.readable=!1,t._state=void 0,t.reset(),t._state.outgoing.bufSeqno=void 0})),this.on("DISCONNECT",(function(e,r,i,n){!function(e,t,r,i,n){if(r!==T.BY_APPLICATION){var s=new Error(i||t);s.code=r,e.emit("error",s)}e.reset()}(t,e,r,i)})),this.on("KEXINIT",(function(e,r){!function(e,t,r){var i=e._state,n=i.outgoing;n.status===X?(e.debug("DEBUG: Received re-key request"),n.status=j,n.kexinit=void 0,me(e,s)):s();function s(){!0===function(e,t,r){var i,n,s,o,a,c=e._state,h=c.incoming,f=c.outgoing,u=e.debug;u("DEBUG: Comparing KEXINITs ...");var l=e.config.algorithms,p=l.kex;if(e.remoteBugs&P.BAD_DHGEX)for(var d=!1,g=p.length-1;g>=0;--g)-1!==p[g].indexOf("group-exchange")&&(d||(p=p.slice(),d=!0),p.splice(g,1));u("DEBUG: (local) KEX algorithms: "+p),u("DEBUG: (remote) KEX algorithms: "+t.algorithms.kex),e.server?(i=p,n=t.algorithms.kex):(i=t.algorithms.kex,n=p);for(a=0,o=n.length;aServer ciphers: "+l.cipher),u("DEBUG: (remote) Client->Server ciphers: "+t.algorithms.cs.encrypt),e.server?(i=l.cipher,n=t.algorithms.cs.encrypt):(i=t.algorithms.cs.encrypt,n=l.cipher);for(a=0,o=n.length;aServer cipher"),(E=new Error("Handshake failed: no matching client->server cipher")).level="handshake",e.emit("error",E),e.disconnect(T.KEY_EXCHANGE_FAILED),!1}s=e.server?h.decrypt.type=n[a]:f.encrypt.type=n[a];u("DEBUG: Client->Server Cipher: "+s),u("DEBUG: (local) Server->Client ciphers: "+l.cipher),u("DEBUG: (remote) Server->Client ciphers: "+t.algorithms.sc.encrypt),e.server?(i=l.cipher,n=t.algorithms.sc.encrypt):(i=t.algorithms.sc.encrypt,n=l.cipher);for(a=0,o=n.length;aClient cipher"),(E=new Error("Handshake failed: no matching server->client cipher")).level="handshake",e.emit("error",E),e.disconnect(T.KEY_EXCHANGE_FAILED),!1}s=e.server?f.encrypt.type=n[a]:h.decrypt.type=n[a];u("DEBUG: Server->Client Cipher: "+s),u("DEBUG: (local) Client->Server HMAC algorithms: "+l.hmac),u("DEBUG: (remote) Client->Server HMAC algorithms: "+t.algorithms.cs.mac),e.server?(i=l.hmac,n=t.algorithms.cs.mac):(i=t.algorithms.cs.mac,n=l.hmac);for(a=0,o=n.length;aServer HMAC algorithm"),(E=new Error("Handshake failed: no matching client->server HMAC")).level="handshake",e.emit("error",E),e.disconnect(T.KEY_EXCHANGE_FAILED),!1}s=e.server?h.hmac.type=n[a]:f.hmac.type=n[a];u("DEBUG: Client->Server HMAC algorithm: "+s),u("DEBUG: (local) Server->Client HMAC algorithms: "+l.hmac),u("DEBUG: (remote) Server->Client HMAC algorithms: "+t.algorithms.sc.mac),e.server?(i=l.hmac,n=t.algorithms.sc.mac):(i=t.algorithms.sc.mac,n=l.hmac);for(a=0,o=n.length;aClient HMAC algorithm"),(E=new Error("Handshake failed: no matching server->client HMAC")).level="handshake",e.emit("error",E),e.disconnect(T.KEY_EXCHANGE_FAILED),!1}s=e.server?f.hmac.type=n[a]:h.hmac.type=n[a];u("DEBUG: Server->Client HMAC algorithm: "+s),u("DEBUG: (local) Client->Server compression algorithms: "+l.compress),u("DEBUG: (remote) Client->Server compression algorithms: "+t.algorithms.cs.compress),e.server?(i=l.compress,n=t.algorithms.cs.compress):(i=t.algorithms.cs.compress,n=l.compress);for(a=0,o=n.length;aServer compression algorithm"),(E=new Error("Handshake failed: no matching client->server compression algorithm")).level="handshake",e.emit("error",E),e.disconnect(T.KEY_EXCHANGE_FAILED),!1}s=e.server?h.decompress.type=n[a]:f.compress.type=n[a];u("DEBUG: Client->Server compression algorithm: "+s),u("DEBUG: (local) Server->Client compression algorithms: "+l.compress),u("DEBUG: (remote) Server->Client compression algorithms: "+t.algorithms.sc.compress),e.server?(i=l.compress,n=t.algorithms.sc.compress):(i=t.algorithms.sc.compress,n=l.compress);for(a=0,o=n.length;aClient compression algorithm"),(E=new Error("Handshake failed: no matching server->client compression algorithm")).level="handshake",e.emit("error",E),e.disconnect(T.KEY_EXCHANGE_FAILED),!1}s=e.server?f.compress.type=n[a]:h.decompress.type=n[a];return u("DEBUG: Server->Client compression algorithm: "+s),c.kex=new Te(m),c.kex.generateKeys(),f.pubkey=c.kex.getPublicKey(),!0}(e,t,r)&&(e.server?i.incoming.expectedPacket=i.kex.pktInit:"groupex"===i.kex.type?function(e){e._state.incoming.expectedPacket="KEXDH_GEX_GROUP",e.debug("DEBUG: Outgoing: Writing KEXDH_GEX_REQUEST"),_e(e,se,void 0,!0)}(e):Ee(e))}}(t,e,r)})),this.on("NEWKEYS",(function(){ce(t)})),this.server?this.on("KEXDH_INIT",(function(e){!function(e,t){!function(e,t){var r=e._state,n=r.outgoing,s=r.incoming,o=e.config.hostKeys[r.hostkeyFormat];Array.isArray(o)&&(o=o[0]);var a=o.getPublicSSH(),c=o.type;t=r.kex.convertPublicKey(t);var h=r.kex.computeSecret(t);if(h instanceof Error)return h.message="Error while computing DH secret ("+r.kex.type+"): "+h.message,h.level="handshake",e.emit("error",h),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;var f,l,p,d,g=i.createHash(r.kex.hash),m=Buffer.byteLength(s.identRaw),E=Buffer.byteLength(e.config.ident),v=s.kexinit.length,y=n.kexinit.length,_=a.length,w=t.length,b=n.pubkey.length,k=h.length,A=m+E+v+y+_+w+b+k+32,U=r.kex.getDHParams();U&&(p=U.prime,d=U.generator,f=p.length,l=d.length,A+=12,A+=8,A+=f,A+=l);var B=0,N=Buffer.allocUnsafe(A);u(N,m,B),B+=4,N.write(s.identRaw,B,"utf8"),u(N,E,B+=m),B+=4,N.write(e.config.ident,B,"utf8"),u(N,v,B+=E),B+=4,s.kexinit.copy(N,B),B+=v,s.kexinit=void 0,u(N,y,B),B+=4,n.kexinit.copy(N,B),B+=y,n.kexinit=void 0,u(N,_,B),B+=4,a.copy(N,B),B+=_,U&&(se.slice(1).copy(N,B),u(N,f,B+=12),B+=4,p.copy(N,B),u(N,l,B+=f),B+=4,d.copy(N,B),B+=l);u(N,w,B),B+=4,t.copy(N,B),u(N,b,B+=w),B+=4,n.pubkey.copy(N,B),u(N,k,B+=b),B+=4,h.copy(N,B),n.exchangeHash=g.update(N).digest(),void 0===n.sessionId&&(n.sessionId=n.exchangeHash);n.kexsecret=h;var R=o.sign(n.exchangeHash);if(R instanceof Error)return R.message="Error while signing data with host key ("+c+"): "+R.message,R.level="handshake",e.emit("error",R),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;if(!1===(R=Se(R,c)))return R.message="Error while converting handshake signature",R.level="handshake",e.emit("error",R),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;var P=4+c.length+4+R.length,D=Buffer.allocUnsafe(5+_+4+b+4+P);D[B=0]=S[r.kex.pktReply],++B,u(D,_,B),B+=4,a.copy(D,B),u(D,b,B+=_),B+=4,n.pubkey.copy(D,B),u(D,P,B+=b),B+=4,u(D,c.length,B),B+=4,D.write(c,B,c.length,"ascii"),B+=c.length,u(D,R.length,B),B+=4,R.copy(D,B),r.incoming.expectedPacket="NEWKEYS",e.debug("DEBUG: Outgoing: Writing "+r.kex.pktReply),_e(e,D,void 0,!0),n.sentNEWKEYS=!0,e.debug("DEBUG: Outgoing: Writing NEWKEYS"),_e(e,ee,void 0,!0)}(e,t)}(t,e)})):this.on("KEXDH_REPLY",(function(e){!function e(t,r,n){var s=t._state,o=s.incoming,a=s.outgoing,c=t.debug;if(void 0===n){o.expectedPacket="NEWKEYS",a.sentNEWKEYS=!1,c("DEBUG: Checking host key format");var h=g(r.hostkey,0,"ascii",t);if(!1===h)return!1;if(r.hostkey_format!==s.hostkeyFormat||r.hostkey_format!==h)return c("DEBUG: Host key format mismatch"),t.disconnect(T.KEY_EXCHANGE_FAILED),t.reset(),(H=new Error("Handshake failed: host key format mismatch")).level="handshake",t.emit("error",H),!1;c("DEBUG: Checking signature format");var f=g(r.sig,0,"ascii",t);if(!1===f)return!1;if(r.sig_format!==f)return c("DEBUG: Signature format mismatch"),t.disconnect(T.KEY_EXCHANGE_FAILED),t.reset(),(H=new Error("Handshake failed: signature format mismatch")).level="handshake",t.emit("error",H),!1}if(a.status===q){if(void 0===n){c("DEBUG: Verifying host fingerprint");var l=!0,p=t.emit("fingerprint",r.hostkey,(function(i){void 0===n&&(n=!!i,l||e(t,r,n))}));if(l=!1,p&&void 0===n)return}if(void 0===n)c("DEBUG: Host accepted by default (no verification)");else{if(!0!==n)return c("DEBUG: Host denied via fingerprint verification"),t.disconnect(T.KEY_EXCHANGE_FAILED),t.reset(),(H=new Error("Handshake failed: host fingerprint verification failed")).level="handshake",t.emit("error",H),!1;c("DEBUG: Host accepted (verified)")}}if(r.pubkey=s.kex.convertPublicKey(r.pubkey),r.secret=s.kex.computeSecret(r.pubkey),r.secret instanceof Error)return r.secret.message="Error while computing DH secret ("+s.kex.type+"): "+r.secret.message,r.secret.level="handshake",t.emit("error",r.secret),t.disconnect(T.KEY_EXCHANGE_FAILED),!1;var d,m,E,v,w=i.createHash(s.kex.hash),b=Buffer.byteLength(t.config.ident),S=Buffer.byteLength(o.identRaw),k=a.kexinit.length,A=o.kexinit.length,U=r.hostkey.length,B=a.pubkey.length,N=r.pubkey.length,R=r.secret.length,P=b+S+k+A+U+B+N+R+32,D=s.kex.getDHParams();D&&(E=D.prime,v=D.generator,d=E.length,m=v.length,P+=12,P+=8,P+=d,P+=m);var O=0,I=Buffer.allocUnsafe(P);u(I,b,O),O+=4,I.write(t.config.ident,O,"utf8"),u(I,S,O+=b),O+=4,I.write(o.identRaw,O,"utf8"),u(I,k,O+=S),O+=4,a.kexinit.copy(I,O),O+=k,a.kexinit=void 0,u(I,A,O),O+=4,o.kexinit.copy(I,O),O+=A,o.kexinit=void 0,u(I,U,O),O+=4,r.hostkey.copy(I,O),O+=U,D&&(se.slice(1).copy(I,O),u(I,d,O+=12),O+=4,E.copy(I,O),u(I,m,O+=d),O+=4,v.copy(I,O),O+=m);u(I,B,O),O+=4,a.pubkey.copy(I,O),u(I,N,O+=B),O+=4,r.pubkey.copy(I,O),u(I,R,O+=N),O+=4,r.secret.copy(I,O),a.exchangeHash=w.update(I).digest();var C=g(r.sig,r.sig._pos,t);if(!1===C||!(C=y(C,r.sig_format,t)))return!1;var L=_(r.hostkey,r.sig_format);if(L instanceof Error)return!1;if(c("DEBUG: Verifying signature"),!0!==L.verify(a.exchangeHash,C)){var H;return c("DEBUG: Signature verification failed"),t.disconnect(T.KEY_EXCHANGE_FAILED),t.reset(),(H=new Error("Handshake failed: signature verification failed")).level="handshake",t.emit("error",H),!1}void 0===a.sessionId&&(a.sessionId=a.exchangeHash);a.kexsecret=r.secret,c("DEBUG: Outgoing: Writing NEWKEYS"),a.status===j?_e(t,ee,void 0,!0):_e(t,ee);a.sentNEWKEYS=!0,void 0!==n&&void 0===o.expectedPacket&&ce(t)}(t,e)})).on("KEXDH_GEX_GROUP",(function(e,r){!function(e,t,r){var i=e._state,n=i.outgoing;i.kex.setDHParams(t,r),i.kex.generateKeys(),n.pubkey=i.kex.getPublicKey(),Ee(e)}(t,e,r)})),this.server&&("string"==typeof e.greeting&&e.greeting.length&&("\r\n"===e.greeting.slice(-2)?this.push(e.greeting):this.push(e.greeting+"\r\n")),"string"==typeof e.banner&&e.banner.length&&("\r\n"===e.banner.slice(-2)?this.banner=e.banner:this.banner=e.banner+"\r\n")),this.debug("DEBUG: Local ident: "+a(this.config.ident)),this.push(this.config.ident+"\r\n"),this._state.incoming.expectedPacket="KEXINIT"}function ce(e){var t=e._state,r=t.outgoing,s=t.incoming;if(s.expectedPacket=void 0,r.sentNEWKEYS){var o,a,c=r.kexsecret.length,h=r.encrypt.info=w[r.encrypt.type],f=0,l=t.kex.hash,p=Buffer.allocUnsafe(4+c);if(t.authsQueue=[],u(p,c,f),f+=4,r.kexsecret.copy(p,f),r.kexsecret=void 0,h.stream)o=$;else{for(o=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"B":"A","ascii").update(r.sessionId).digest();o.lengthh.ivLen&&(o=o.slice(0,h.ivLen))}for(a=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"D":"C","ascii").update(r.sessionId).digest();a.lengthh.keyLen&&(a=a.slice(0,h.keyLen)),h.authLen>0)r.encrypt.iv=o,r.encrypt.key=a,r.encrypt.instance=!0;else{var d=U[r.encrypt.type];r.encrypt.instance=i.createCipheriv(d,a,o),r.encrypt.instance.setAutoPadding(!1)}var g=s.decrypt.info=w[s.decrypt.type];if(g.stream)o=$;else{for(o=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"A":"B","ascii").update(r.sessionId).digest();o.lengthg.ivLen&&(o=o.slice(0,g.ivLen))}for(s.decrypt.buf=Buffer.allocUnsafe(g.blockLen),a=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"C":"D","ascii").update(r.sessionId).digest();a.lengthg.keyLen&&(a=a.slice(0,g.keyLen));var m,E=U[s.decrypt.type];s.decrypt.instance=i.createDecipheriv(E,a,o),s.decrypt.instance.setAutoPadding(!1),s.decrypt.iv=o,s.decrypt.key=a,h.discardLen>0&&(m=Buffer.alloc(h.discardLen),r.encrypt.instance.update(m)),g.discardLen>0&&(m&&m.length===g.discardLen||(m=Buffer.alloc(h.discardLen)),s.decrypt.instance.update(m));var v=r.hmac.info=b[r.hmac.type],y=s.hmac.info=b[s.hmac.type];if(0===h.authLen){for(a=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"F":"E","ascii").update(r.sessionId).digest();a.lengthv.len&&(a=a.slice(0,v.len)),r.hmac.key=a}else r.hmac.key=void 0;if(0===g.authLen){for(a=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"E":"F","ascii").update(r.sessionId).digest();a.lengthy.len&&(a=a.slice(0,y.len)),s.hmac.key=a}else s.hmac.key=void 0;var _=g.authLen||s.hmac.info.actualLen;if(s.hmac.buf&&s.hmac.buf.length===_||(s.hmac.buf=Buffer.allocUnsafe(_)),r.exchangeHash=void 0,"zlib"===r.compress.type?(r.compress.instance=n.createDeflate(Y),r.compress.queue=[]):"none"===r.compress.type&&(r.compress.instance=!1,r.compress.queue=null),"zlib"===s.decompress.type?s.decompress.instance=n.createInflate(Y):"none"===s.decompress.type&&(s.decompress.instance=!1),e.bytesSent=e.bytesReceived=0,r.status===j){r.status=X;var S=r.rekeyQueue,k=S.length,T=0;for(r.rekeyQueue=[];T4294967295&&(b.seqno=0),b.ignoreNext)return e.debug("DEBUG: Parser: Packet ignored"),void(b.ignoreNext=!1);var R=U[0];if(void 0===R)return!1;if(k.status!==X&&he(e,R)!==b.expectedPacket&&R<1&&R>4){e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, expected: "+b.expectedPacket+" but got: "+he(e,R)),e.disconnect(T.PROTOCOL_ERROR);var D=new Error("Received unexpected packet");return D.level="protocol",e.emit("error",D),!1}if(R===S.CHANNEL_DATA){if(!1===(a=m(U,1,e,t)))return!1;if(!1===(c=g(U,5,e,t,32768)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_DATA ("+a+")"),e.emit("CHANNEL_DATA:"+a,c)}else if(R===S.CHANNEL_EXTENDED_DATA){if(!1===(a=m(U,1,e,t)))return!1;var O=m(U,5,e,t);if(!1===O)return!1;if(!1===(c=g(U,9,e,t)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_EXTENDED_DATA ("+a+")"),e.emit("CHANNEL_EXTENDED_DATA:"+a,O,c)}else if(R===S.CHANNEL_WINDOW_ADJUST){if(!1===(a=m(U,1,e,t)))return!1;var I=m(U,5,e,t);if(!1===I)return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_WINDOW_ADJUST ("+a+", "+I+")"),e.emit("CHANNEL_WINDOW_ADJUST:"+a,I)}else if(R===S.CHANNEL_SUCCESS){if(!1===(a=m(U,1,e,t)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_SUCCESS ("+a+")"),e.emit("CHANNEL_SUCCESS:"+a)}else if(R===S.CHANNEL_FAILURE){if(!1===(a=m(U,1,e,t)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_FAILURE ("+a+")"),e.emit("CHANNEL_FAILURE:"+a)}else if(R===S.CHANNEL_EOF){if(!1===(a=m(U,1,e,t)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_EOF ("+a+")"),e.emit("CHANNEL_EOF:"+a)}else if(R===S.CHANNEL_OPEN){var C,L=g(U,1,"ascii",e,t);if(!1===L)return!1;if(!1===(p=m(U,U._pos,e,t)))return!1;if(!1===(d=m(U,U._pos+=4,e,t)))return!1;if(!1===(E=m(U,U._pos+=4,e,t)))return!1;if(e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_OPEN ("+p+", "+L+")"),"forwarded-tcpip"===L||"direct-tcpip"===L){var H=g(U,U._pos+=4,"ascii",e,t);if(!1===H)return!1;var x=m(U,U._pos,e,t);if(!1===x)return!1;if(!1===(h=g(U,U._pos+=4,"ascii",e,t)))return!1;if(!1===(l=m(U,U._pos,e,t)))return!1;C={type:L,sender:p,window:d,packetSize:E,data:{destIP:H,destPort:x,srcIP:h,srcPort:l}}}else if("forwarded-streamlocal@openssh.com"===L||"direct-streamlocal@openssh.com"===L){if(!1===(w=g(U,U._pos+=4,"utf8",e,t)))return!1;C={type:L,sender:p,window:d,packetSize:E,data:{socketPath:w}}}else if("x11"===L){if(!1===(h=g(U,U._pos+=4,"ascii",e,t)))return!1;if(!1===(l=m(U,U._pos,e,t)))return!1;C={type:L,sender:p,window:d,packetSize:E,data:{srcIP:h,srcPort:l}}}else C={type:L,sender:p,window:d,packetSize:E,data:{}};e.emit("CHANNEL_OPEN",C)}else if(R===S.CHANNEL_OPEN_CONFIRMATION){if(!1===(v=m(U,1,e,t)))return!1;if(!1===(p=m(U,5,e,t)))return!1;if(!1===(d=m(U,9,e,t)))return!1;if(!1===(E=m(U,13,e,t)))return!1;o={recipient:v,sender:p,window:d,packetSize:E},U.length>17&&(o.data=U.slice(17)),e.emit("CHANNEL_OPEN_CONFIRMATION:"+o.recipient,o)}else if(R===S.CHANNEL_OPEN_FAILURE){if(!1===(v=m(U,1,e,t)))return!1;var F=m(U,5,e,t);if(!1===F)return!1;if(!1===(_=g(U,9,"utf8",e,t)))return!1;if(!1===(i=g(U,U._pos,"utf8",e,t)))return!1;U._pos=9,o={recipient:v,reasonCode:F,reason:A[F],description:_,lang:i},e.emit("CHANNEL_OPEN_FAILURE:"+o.recipient,o)}else if(R===S.CHANNEL_CLOSE){if(!1===(a=m(U,1,e,t)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_CLOSE ("+a+")"),e.emit("CHANNEL_CLOSE:"+a)}else if(R===S.IGNORE);else if(R===S.DISCONNECT){var M=m(U,1,e,t);if(!1===M)return!1;var K=T[M];if(!1===(_=g(U,5,"utf8",e,t)))return!1;U._pos4+Q.length+4&&Z.toString("ascii",4,4+Q.length)===Q&&(Z=Z.slice(4+Q.length+4)),!1===(Z=y(Z,Q,e,t)))return!1;J=Buffer.allocUnsafe(4+k.sessionId.length+re),u(J,k.sessionId.length,0),k.sessionId.copy(J,4),U.copy(J,4+k.sessionId.length,0,re)}else j="publickey -- check";q={keyAlgo:Q,key:$,signature:Z,blob:J,localHostname:ee,localUsername:te}}else if("keyboard-interactive"===V){var ie=m(U,U._pos,e,t);if(!1===ie)return!1;if(!1===(q=g(U,U._pos+4+ie,"utf8",e,t)))return!1}else"none"!==V&&(q=U.slice(U._pos));void 0===j&&(j=V),e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: USERAUTH_REQUEST ("+j+")"),e._state.authsQueue.push(V),e.emit("USERAUTH_REQUEST",G,W,V,q)}else if(R===S.USERAUTH_SUCCESS)"zlib@openssh.com"===k.compress.type&&(k.compress.instance=n.createDeflate(Y),k.compress.queue=[]),"zlib@openssh.com"===b.decompress.type&&(b.decompress.instance=n.createInflate(Y)),e._state.authsQueue.shift(),e.emit("USERAUTH_SUCCESS");else if(R===S.USERAUTH_FAILURE){var ne=g(U,1,"ascii",e,t);if(!1===ne)return!1;var se=U[U._pos];if(void 0===se)return!1;se=0!==se,ne=ne.split(","),e._state.authsQueue.shift(),e.emit("USERAUTH_FAILURE",ne,se)}else if(R===S.USERAUTH_BANNER){if(!1===(s=g(U,1,"utf8",e,t)))return!1;if(!1===(i=g(U,U._pos,"utf8",e,t)))return!1;e.emit("USERAUTH_BANNER",s,i)}else if(R===S.GLOBAL_REQUEST){var oe=g(U,1,"ascii",e,t);if(!1===oe)return e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: GLOBAL_REQUEST"),!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: GLOBAL_REQUEST ("+oe+")");var ae,ce=U[U._pos++];if(void 0===ce)return!1;if(ce=0!==ce,"tcpip-forward"===oe||"cancel-tcpip-forward"===oe){var fe=g(U,U._pos,"ascii",e,t);if(!1===fe)return!1;var le=m(U,U._pos,e,t);if(!1===le)return!1;ae={bindAddr:fe,bindPort:le}}else if("streamlocal-forward@openssh.com"===oe||"cancel-streamlocal-forward@openssh.com"===oe){if(!1===(w=g(U,U._pos,"utf8",e,t)))return!1;ae={socketPath:w}}else"no-more-sessions@openssh.com"===oe||(ae=U.slice(U._pos));e.emit("GLOBAL_REQUEST",oe,ce,ae)}else if(R===S.REQUEST_SUCCESS)U.length>1?e.emit("REQUEST_SUCCESS",U.slice(1)):e.emit("REQUEST_SUCCESS");else if(R===S.REQUEST_FAILURE)e.emit("REQUEST_FAILURE");else if(R===S.UNIMPLEMENTED);else{if(R===S.KEXINIT)return function(e,t){var r,i=e._state.incoming,n=i.payload,s={algorithms:{kex:void 0,srvHostKey:void 0,cs:{encrypt:void 0,mac:void 0,compress:void 0},sc:{encrypt:void 0,mac:void 0,compress:void 0}},languages:{cs:void 0,sc:void 0}};if(!1===(r=ge(n,17,e,t)))return!1;if(s.algorithms.kex=r,!1===(r=ge(n,n._pos,e,t)))return!1;if(s.algorithms.srvHostKey=r,!1===(r=ge(n,n._pos,e,t)))return!1;if(s.algorithms.cs.encrypt=r,!1===(r=ge(n,n._pos,e,t)))return!1;if(s.algorithms.sc.encrypt=r,!1===(r=ge(n,n._pos,e,t)))return!1;if(s.algorithms.cs.mac=r,!1===(r=ge(n,n._pos,e,t)))return!1;if(s.algorithms.sc.mac=r,!1===(r=ge(n,n._pos,e,t)))return!1;if(s.algorithms.cs.compress=r,!1===(r=ge(n,n._pos,e,t)))return!1;if(s.algorithms.sc.compress=r,!1===(r=ge(n,n._pos,e,t)))return!1;if(s.languages.cs=r,!1===(r=ge(n,n._pos,e,t)))return!1;s.languages.sc=r;var o=n._posn);i+=5)r[B[t]]=f(e,i+1);return r}(_),r={recipient:u,request:l,wantReply:a,term:y,cols:i,rows:n,width:s,height:o,modes:_}}else if("window-change"===l){if(!1===(i=m(h,++h._pos,e,t)))return!1;if(!1===(n=m(h,h._pos+=4,e,t)))return!1;if(!1===(s=m(h,h._pos+=4,e,t)))return!1;if(!1===(o=m(h,h._pos+=4,e,t)))return!1;r={recipient:u,request:l,wantReply:!1,cols:i,rows:n,width:s,height:o}}else if("x11-req"===l){if(void 0===(a=h[h._pos++]))return!1;a=0!==a;var w=h[h._pos++];if(void 0===w)return!1;w=0!==w;var b=g(h,h._pos,"ascii",e,t);if(!1===b)return!1;var S=g(h,h._pos,"binary",e,t);if(!1===S)return!1;var k=m(h,h._pos,e,t);if(!1===k)return!1;r={recipient:u,request:l,wantReply:a,single:w,protocol:b,cookie:S,screen:k}}else if("env"===l){if(void 0===(a=h[h._pos++]))return!1;a=0!==a;var T=g(h,h._pos,"utf8",e,t);if(!1===T)return!1;var A=g(h,h._pos,"utf8",e,t);if(!1===A)return!1;r={recipient:u,request:l,wantReply:a,key:T,val:A}}else if("shell"===l){if(void 0===(a=h[h._pos]))return!1;r={recipient:u,request:l,wantReply:a=0!==a}}else if("exec"===l){if(void 0===(a=h[h._pos++]))return!1;a=0!==a;var U=g(h,h._pos,"utf8",e,t);if(!1===U)return!1;r={recipient:u,request:l,wantReply:a,command:U}}else if("subsystem"===l){if(void 0===(a=h[h._pos++]))return!1;a=0!==a;var N=g(h,h._pos,"utf8",e,t);if(!1===N)return!1;r={recipient:u,request:l,wantReply:a,subsystem:N}}else if("signal"===l){if(!1===(c=g(h,++h._pos,"ascii",e,t)))return!1;r={recipient:u,request:l,wantReply:!1,signal:"SIG"+c}}else if("xon-xoff"===l){var R=h[++h._pos];if(void 0===R)return!1;r={recipient:u,request:l,wantReply:!1,clientControl:R=0!==R}}else if("auth-agent-req@openssh.com"===l){if(void 0===(a=h[h._pos]))return!1;r={recipient:u,request:l,wantReply:a=0!==a}}else{if(void 0===(a=h[h._pos]))return!1;r={recipient:u,request:l,wantReply:a=0!==a}}e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_REQUEST ("+u+", "+l+")"),e.emit("CHANNEL_REQUEST:"+u,r)}(e,t);if(R>=30&&R<=49)return function(e,t,r){var i=e._state,n=i.incoming,s=n.payload;if(i.outgoing.status===X||he(e,t)!==n.expectedPacket){return e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, expected: "+n.expectedPacket+" but got: "+he(e,t)),e.disconnect(T.PROTOCOL_ERROR),(o=new Error("Received unexpected packet")).level="protocol",e.emit("error",o),!1}if("groupex"===i.kex.type){var o;if(e.server)return e.disconnect(T.PROTOCOL_ERROR),(o=new Error("DH group exchange not supported by server")).level="handshake",e.emit("error",o),!1;if(t===S.KEXDH_GEX_GROUP){var a=g(s,1,e,r);if(!1===a)return!1;var c=g(s,s._pos,e,r);if(!1===c)return!1;e.emit("KEXDH_GEX_GROUP",a,c)}else if(t===S.KEXDH_GEX_REPLY)return ue(e,r)}else if(t===S.KEXDH_INIT){var h=g(s,1,e,r);if(!1===h)return!1;e.emit("KEXDH_INIT",h)}else if(t===S.KEXDH_REPLY)return ue(e,r)}(e,R,t);if(R>=60&&R<=70)return function(e,t,r){var i,n,s,o=e._state,a=o.authsQueue[0],c=o.incoming.payload;if("password"===a){if(t===S.USERAUTH_PASSWD_CHANGEREQ){if(!1===(i=g(c,1,"utf8",e,r)))return!1;if(!1===(n=g(c,c._pos,"utf8",e,r)))return!1;e.emit("USERAUTH_PASSWD_CHANGEREQ",i,n)}}else if("keyboard-interactive"===a){if(t===S.USERAUTH_INFO_REQUEST){var h,f,u;if(!1===(h=g(c,1,"utf8",e,r)))return!1;if(!1===(f=g(c,c._pos,"utf8",e,r)))return!1;if(!1===(n=g(c,c._pos,"utf8",e,r)))return!1;if(!1===(u=m(c,c._pos,e,r)))return!1;c._pos+=4;for(var l=[],p=0;p0){var s=r.decrypt,o=s.instance;o.setAuthTag(t);var a=o.update(r.packet);return r.payload=a.slice(1,r.packet.length-a[0]),d(s.iv),s.instance=i.createDecipheriv(U[s.type],s.key,s.iv),s.instance.setAutoPadding(!1),!0}var c=i.createHmac(U[n.type],n.key);u(Z,r.seqno,0),u(Z,r.pktLen,4),Z[8]=r.padLen,c.update(Z),c.update(r.packet);var h=c.digest();return h.length>r.hmac.info.actualLen&&(h=h.slice(0,r.hmac.info.actualLen)),ke(h,t)}function pe(e,t){var r=e._state.incoming.decrypt.instance;return e.debug("DEBUG: Parser: Decrypting"),r.update(t)}function de(e,t,r,i){var n=e._state.incoming.expect;n.amount=r,n.type=t,n.ptr=0,i?n.buf=i:r&&(n.buf=Buffer.allocUnsafe(r))}function ge(e,t,r,i){var n=g(e,t,"ascii",r,i);return!1!==n&&(n.length?n.split(","):[])}function me(e,t){return function(e,t){i.randomBytes(e,(function r(n,s){if(n)return i.randomBytes(e,r);t&&t(s)}))}(16,(function(r){var i=e.config.algorithms,n=i.kexBuf;if(e.remoteBugs&P.BAD_DHGEX){for(var s=!1,o=i.kex,a=o.length-1;a>=0;--a)-1!==o[a].indexOf("group-exchange")&&(s||(o=o.slice(),s=!0),o.splice(a,1));s&&(n=Buffer.from(o.join(",")))}var c=i.serverHostKeyBuf,h=21+n.length+4+c.length+2*(4+i.cipherBuf.length)+2*(4+i.hmacBuf.length)+2*(4+i.compressBuf.length)+8+1+4,f=Buffer.allocUnsafe(h),l=17;f[0]=S.KEXINIT,!1!==r&&r.copy(f,1),u(f,n.length,l),l+=4,n.copy(f,l),l+=n.length,u(f,c.length,l),l+=4,c.copy(f,l),l+=c.length,u(f,i.cipherBuf.length,l),l+=4,i.cipherBuf.copy(f,l),l+=i.cipherBuf.length,u(f,i.cipherBuf.length,l),l+=4,i.cipherBuf.copy(f,l),l+=i.cipherBuf.length,u(f,i.hmacBuf.length,l),l+=4,i.hmacBuf.copy(f,l),l+=i.hmacBuf.length,u(f,i.hmacBuf.length,l),l+=4,i.hmacBuf.copy(f,l),l+=i.hmacBuf.length,u(f,i.compressBuf.length,l),l+=4,i.compressBuf.copy(f,l),l+=i.compressBuf.length,u(f,i.compressBuf.length,l),l+=4,i.compressBuf.copy(f,l),l+=i.compressBuf.length,f.fill(0,f.length-13),e.debug("DEBUG: Outgoing: Writing KEXINIT"),e._state.incoming.expectedPacket="KEXINIT";var p=e._state.outgoing;p.kexinit=f,p.status===X&&(p.status=j),_e(e,f,t,!0)})),!0}function Ee(e){var t=e._state,r=t.outgoing,i=Buffer.allocUnsafe(5+r.pubkey.length);return t.incoming.expectedPacket=t.kex.pktReply,"groupex"===t.kex.type?(i[0]=S.KEXDH_GEX_INIT,e.debug("DEBUG: Outgoing: Writing KEXDH_GEX_INIT")):(i[0]=S.KEXDH_INIT,"group"===t.kex.type?e.debug("DEBUG: Outgoing: Writing KEXDH_INIT"):e.debug("DEBUG: Outgoing: Writing KEXECDH_INIT")),u(i,r.pubkey.length,1),r.pubkey.copy(i,5),_e(e,i,void 0,!0)}function ve(e,t,r){var i=e._state.outgoing.compress.instance;i.write(t),i.flush(V,ye.bind(e,r))}function ye(e){if(!this._readableState.ended&&!this._writableState.ended){we(this,this._state.outgoing.compress.instance.read(),e);var t=this._state.outgoing.compress.queue;t.shift(),t.length>0&&ve(this,t[0][0],t[0][1])}}function _e(e,t,r,i){var n=e._state;if(!n)return!1;var s=n.outgoing;if(s.status===j&&!i)return"function"==typeof r?s.rekeyQueue.push([t,r]):s.rekeyQueue.push(t),!1;if(e._readableState.ended||e._writableState.ended)return!1;if(s.compress.instance){var o=s.compress.queue;return o.push([t,r]),1===o.length&&ve(e,o[0][0],o[0][1]),!0}return we(e,t,r)}function we(e,t,r){var n,s,o,a,c,h=e._state.outgoing,f=h.encrypt,l=h.hmac;if(n=t.length+9,!1!==f.instance)if(f.info.authLen>0){for(var p=1+t.length+4;p%f.info.blockLen!=0;)++p;s=p-1-t.length,n=4+p}else{var g=f.info.blockLen;s=(n+=(g-1)*n%g)-t.length-5}else s=(n+=7*n%8)-t.length-5;o=Buffer.allocUnsafe(n),u(o,n-4,0),o[4]=s,t.copy(o,5),be(o,5+t.length,s),!1!==l.type&&l.key&&(a=i.createHmac(U[l.type],l.key),u(h.bufSeqno,h.seqno,0),a.update(h.bufSeqno),a.update(o),(a=a.digest()).length>l.info.actualLen&&(a=a.slice(0,l.info.actualLen)));var m,E=0;if(!1!==f.instance)if(f.info.authLen>0){var v=i.createCipheriv(U[f.type],f.key,f.iv);v.setAutoPadding(!1);var y=o.slice(0,4);v.setAAD(y),e.push(y),E+=y,m=v.update(o.slice(4)),e.push(m),E+=m.length;var _=v.final();_.length&&(e.push(_),E+=_.length);var w=v.getAuthTag();c=e.push(w),E+=w.length,d(f.iv)}else m=f.instance.update(o),e.push(m),E+=m.length,c=e.push(a),E+=a.length;else c=e.push(o),E=o.length;return e.bytesSent+=E,++h.seqno>4294967295&&(h.seqno=0),r&&r(),c}o(ae,s),ae.prototype.__read=s.prototype._read,ae.prototype._read=function(e){return this._needContinue&&(this._needContinue=!1,this.emit("continue")),this.__read(e)},ae.prototype.__push=s.prototype.push,ae.prototype.push=function(e,t){var r=this.__push(e,t);return this._needContinue=!1===r,r},ae.prototype._cleanup=function(e){this.reset(),this.debug("DEBUG: Parser: Malformed packet"),e&&e(new Error("Malformed packet"))},ae.prototype._transform=function(e,t,r,i){var n,s,o,h,f=!1,u=!1,l=this._state,p=l.incoming,d=l.outgoing,g=p.expect,E=p.decrypt,v=p.decompress,y=e.length,_=0,w=this.debug,b=this,k=0,A=k;for(this.bytesReceived+=y;;){if(void 0!==g.type){if(k>=y)break;if(2===g.type){_=y-k;var U=g.buf.length-g.ptr;U<=_?(e.copy(g.buf,g.ptr,k,k+U),k+=U,s=g.buf,g.buf=void 0,g.ptr=0,g.type=void 0):(e.copy(g.buf,g.ptr,k),g.ptr+=_,k+=_);continue}if(0===g.type){if(k+=p.search.push(e),void 0!==g.type)continue}else if(1===g.type){if(4+ ++g.ptr>255)return this.reset(),w("DEBUG: Parser: Identification string exceeded 255 characters"),r(new Error("Max identification string size exceeded"));if(10!==e[k]){++k===y&&A-1?s.substring(R+1):void 0};if(p.greeting=void 0,"1.99"!==P.versions.protocol&&"2.0"!==P.versions.protocol)return this.reset(),w("DEBUG: Parser: protocol version not supported: "+P.versions.protocol),r(new Error("Protocol version not supported"));if(this.emit("header",P),p.status===L)return;var I=P.identRaw,C=P.versions.software;this.debug("DEBUG: Remote ident: "+a(I));for(var q,Y=0;Y0)||(s=pe(this,s)),n=E.info.blockLen):(u=!1,n=8),!1===(h=m(s,0,this,r)))return;var z,Z=p.hmac.info,J=h+4+(z=Z?Z.actualLen:0),ee=this.maxPacketSize;if(v.instance&&(ee+=5*(this.maxPacketSize/16384+1)+6),h>ee||J<16+z||(h+(u?0:4))%n!=0)return this.disconnect(T.PROTOCOL_ERROR),w("DEBUG: Parser: Bad packet length ("+J+")"),r(new Error("Bad packet length"));p.pktLen=h;var te=p.pktLen+4-n;if(u?(E.instance.setAAD(s.slice(0,4)),w("DEBUG: Parser: pktLen:"+p.pktLen+",remainLen:"+te)):(p.padLen=s[4],w("DEBUG: Parser: pktLen:"+p.pktLen+",padLen:"+p.padLen+",remainLen:"+te)),te>0)p.pktExtra=u?s.slice(4):s.slice(5),de(this,2,te),p.status=K;else{if(!(te<0)){f=!0,p.status=K;continue}p.status=F}}else if(p.status===K){w("DEBUG: Parser: IN_PACKETDATA"),E.instance?(u=E.info.authLen>0,f?f=!1:u||(s=pe(this,s))):(u=!1,f=!1);var re=p.pktLen-p.padLen-1;if(p.pktExtra?(o=Buffer.allocUnsafe(p.pktExtra.length+s.length),p.pktExtra.copy(o),s.copy(o,p.pktExtra.length),p.payload=o.slice(0,re)):(o=u?s.slice(4):s.slice(5),p.payload=s.slice(5,5+re)),void 0!==p.hmac.info){var ie=E.info.authLen||p.hmac.info.actualLen;w("DEBUG: Parser: HMAC size:"+ie),de(this,2,ie,p.hmac.buf),p.status=G,p.packet=o}else p.status=W;p.pktExtra=void 0,o=void 0}else if(p.status===G){if(w("DEBUG: Parser: IN_PACKETDATAVERIFY"),!le(this,s))return this.reset(),w("DEBUG: Parser: IN_PACKETDATAVERIFY (Invalid HMAC)"),r(new Error("Invalid HMAC"));w("DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)"),p.status=W,p.packet=void 0}else if(p.status===W){if(v.instance){if(!i){w("DEBUG: Parser: Decompressing"),v.instance.write(p.payload);var ne=[],se=0;return void v.instance.on("readable",(function(){for(var e;e=this.read();)ne.push(e),se+=e.length})).flush(V,(function(){var i;v.instance.removeAllListeners("readable"),1===ne.length?p.payload=ne[0]:p.payload=Buffer.concat(ne,se),ne=null,i=k===y?$:e.slice(k),b._transform(i,t,r,!0)}))}i=!1}this.emit("packet");var ae=p.payload[0];if(w!==oe){var ce="DEBUG: Parser: IN_PACKETDATAAFTER, packet: ",he=l.authsQueue[0],ue=null;if(d.status!==j||ae<=4||ae>=20&&ae<=49||(ce+="(enqueued) "),ae===S.KEXDH_INIT)switch(l.kex.type){case"group":ue="KEXDH_INIT";break;case"groupex":ue="KEXDH_GEX_REQUEST";break;default:ue="KEXECDH_INIT"}else if(ae===S.KEXDH_REPLY)switch(l.kex.type){case"group":ue="KEXDH_REPLY";break;case"groupex":ue="KEXDH_GEX_GROUP";break;default:ue="KEXECDH_REPLY"}else ae===S.KEXDH_GEX_GROUP?ue="KEXDH_GEX_GROUP":ae===S.KEXDH_GEX_REPLY?ue="KEXDH_GEX_REPLY":60===ae?ue="password"===he?"USERAUTH_PASSWD_CHANGEREQ":"keyboard-interactive"===he?"USERAUTH_INFO_REQUEST":"publickey"===he?"USERAUTH_PK_OK":"UNKNOWN PACKET 60":61===ae&&(ue="keyboard-interactive"===he?"USERAUTH_INFO_RESPONSE":"UNKNOWN PACKET 61");null===ue&&(ue=S[ae]),ae!==S.CHANNEL_OPEN&&ae!==S.CHANNEL_REQUEST&&ae!==S.CHANNEL_SUCCESS&&ae!==S.CHANNEL_FAILURE&&ae!==S.CHANNEL_EOF&&ae!==S.CHANNEL_CLOSE&&ae!==S.CHANNEL_DATA&&ae!==S.CHANNEL_EXTENDED_DATA&&ae!==S.CHANNEL_WINDOW_ADJUST&&ae!==S.DISCONNECT&&ae!==S.USERAUTH_REQUEST&&ae!==S.GLOBAL_REQUEST&&w(ce+ue)}if(d.status===X||ae<=4||ae>=20&&ae<=49){if(!1===fe(this,r))return;if(p.status===L)return}else if(d.status===j){if(50===p.rekeyQueue.length)return w("DEBUG: Parser: Max incoming re-key queue length reached"),this.disconnect(T.PROTOCOL_ERROR),r(new Error("Incoming re-key queue length limit reached"));var ge=p.seqno;++p.seqno>4294967295&&(p.seqno=0),p.rekeyQueue.push([ge,p.payload])}p.status=F,p.payload=void 0}}void 0!==s&&(s=void 0)}r()},ae.prototype.reset=function(e){if(this._state){var t=this._state;t.incoming.status=L,t.outgoing.status=q}else this._state={authsQueue:[],hostkeyFormat:void 0,kex:void 0,incoming:{status:L,expectedPacket:void 0,search:void 0,greeting:void 0,seqno:0,pktLen:void 0,padLen:void 0,pktExtra:void 0,payload:void 0,packet:void 0,kexinit:void 0,identRaw:void 0,rekeyQueue:[],ignoreNext:!1,expect:{amount:void 0,type:void 0,ptr:0,buf:void 0},decrypt:{instance:!1,info:void 0,iv:void 0,key:void 0,buf:void 0,type:void 0},hmac:{info:void 0,key:void 0,buf:void 0,type:!1},decompress:{instance:!1,type:!1}},outgoing:{status:q,seqno:0,bufSeqno:Buffer.allocUnsafe(4),rekeyQueue:[],kexinit:void 0,kexsecret:void 0,pubkey:void 0,exchangeHash:void 0,sessionId:void 0,sentNEWKEYS:!1,encrypt:{instance:!1,info:void 0,iv:void 0,key:void 0,type:void 0},hmac:{info:void 0,key:void 0,buf:void 0,type:!1},compress:{instance:!1,type:!1,queue:null}}};e||this.readable&&this.push(null)},ae.prototype.disconnect=function(e){var t=Buffer.alloc(13);return t[0]=S.DISCONNECT,void 0===T[e]&&(e=T.BY_APPLICATION),u(t,e,1),this.debug("DEBUG: Outgoing: Writing DISCONNECT ("+T[e]+")"),_e(this,t),this.reset(),!1},ae.prototype.ping=function(){return this.debug("DEBUG: Outgoing: Writing ping (GLOBAL_REQUEST: keepalive@openssh.com)"),_e(this,J)},ae.prototype.rekey=function(){var e=this._state.outgoing.status;if(e===j)throw new Error("A re-key is already in progress");if(e!==X)throw new Error("Cannot re-key yet");return this.debug("DEBUG: Outgoing: Starting re-key"),me(this)},ae.prototype.requestSuccess=function(e){var t;return Buffer.isBuffer(e)?((t=Buffer.allocUnsafe(1+e.length))[0]=S.REQUEST_SUCCESS,e.copy(t,1)):t=re,this.debug("DEBUG: Outgoing: Writing REQUEST_SUCCESS"),_e(this,t)},ae.prototype.requestFailure=function(){return this.debug("DEBUG: Outgoing: Writing REQUEST_FAILURE"),_e(this,ie)},ae.prototype.channelSuccess=function(e){var t=Buffer.allocUnsafe(5);return t[0]=S.CHANNEL_SUCCESS,u(t,e,1),this.debug("DEBUG: Outgoing: Writing CHANNEL_SUCCESS ("+e+")"),_e(this,t)},ae.prototype.channelFailure=function(e){var t=Buffer.allocUnsafe(5);return t[0]=S.CHANNEL_FAILURE,u(t,e,1),this.debug("DEBUG: Outgoing: Writing CHANNEL_FAILURE ("+e+")"),_e(this,t)},ae.prototype.channelEOF=function(e){var t=Buffer.allocUnsafe(5);return t[0]=S.CHANNEL_EOF,u(t,e,1),this.debug("DEBUG: Outgoing: Writing CHANNEL_EOF ("+e+")"),_e(this,t)},ae.prototype.channelClose=function(e){var t=Buffer.allocUnsafe(5);return t[0]=S.CHANNEL_CLOSE,u(t,e,1),this.debug("DEBUG: Outgoing: Writing CHANNEL_CLOSE ("+e+")"),_e(this,t)},ae.prototype.channelWindowAdjust=function(e,t){var r=Buffer.allocUnsafe(9);return r[0]=S.CHANNEL_WINDOW_ADJUST,u(r,e,1),u(r,t,5),this.debug("DEBUG: Outgoing: Writing CHANNEL_WINDOW_ADJUST ("+e+", "+t+")"),_e(this,r)},ae.prototype.channelData=function(e,t){var r=Buffer.isBuffer(t),i=r?t.length:Buffer.byteLength(t),n=Buffer.allocUnsafe(9+i);return n[0]=S.CHANNEL_DATA,u(n,e,1),u(n,i,5),r?t.copy(n,9):n.write(t,9,i,"utf8"),this.debug("DEBUG: Outgoing: Writing CHANNEL_DATA ("+e+")"),_e(this,n)},ae.prototype.channelExtData=function(e,t,r){var i=Buffer.isBuffer(t),n=i?t.length:Buffer.byteLength(t),s=Buffer.allocUnsafe(13+n);return s[0]=S.CHANNEL_EXTENDED_DATA,u(s,e,1),u(s,r,5),u(s,n,9),i?t.copy(s,13):s.write(t,13,n,"utf8"),this.debug("DEBUG: Outgoing: Writing CHANNEL_EXTENDED_DATA ("+e+")"),_e(this,s)},ae.prototype.channelOpenConfirm=function(e,t,r,i){var n=Buffer.allocUnsafe(17);return n[0]=S.CHANNEL_OPEN_CONFIRMATION,u(n,e,1),u(n,t,5),u(n,r,9),u(n,i,13),this.debug("DEBUG: Outgoing: Writing CHANNEL_OPEN_CONFIRMATION (r:"+e+", l:"+t+")"),_e(this,n)},ae.prototype.channelOpenFail=function(e,t,r,i){"string"!=typeof r&&(r=""),"string"!=typeof i&&(i="");var n=Buffer.byteLength(r),s=Buffer.byteLength(i),o=9,a=Buffer.allocUnsafe(13+n+4+s);return a[0]=S.CHANNEL_OPEN_FAILURE,u(a,e,1),u(a,t,5),u(a,n,o),o+=4,n&&(a.write(r,o,n,"utf8"),o+=n),u(a,s,o),s&&a.write(i,o+=4,s,"ascii"),this.debug("DEBUG: Outgoing: Writing CHANNEL_OPEN_FAILURE ("+e+")"),_e(this,a)},ae.prototype.service=function(e){if(this.server)throw new Error("Client-only method called in server mode");var t=Buffer.byteLength(e),r=Buffer.allocUnsafe(5+t);return r[0]=S.SERVICE_REQUEST,u(r,t,1),r.write(e,5,t,"ascii"),this.debug("DEBUG: Outgoing: Writing SERVICE_REQUEST ("+e+")"),_e(this,r)},ae.prototype.tcpipForward=function(e,t,r){if(this.server)throw new Error("Client-only method called in server mode");var i=Buffer.byteLength(e),n=Buffer.allocUnsafe(23+i+4);return n[0]=S.GLOBAL_REQUEST,u(n,13,1),n.write("tcpip-forward",5,13,"ascii"),n[18]=void 0===r||!0===r?1:0,u(n,i,19),n.write(e,23,i,"ascii"),u(n,t,23+i),this.debug("DEBUG: Outgoing: Writing GLOBAL_REQUEST (tcpip-forward)"),_e(this,n)},ae.prototype.cancelTcpipForward=function(e,t,r){if(this.server)throw new Error("Client-only method called in server mode");var i=Buffer.byteLength(e),n=Buffer.allocUnsafe(30+i+4);return n[0]=S.GLOBAL_REQUEST,u(n,20,1),n.write("cancel-tcpip-forward",5,20,"ascii"),n[25]=void 0===r||!0===r?1:0,u(n,i,26),n.write(e,30,i,"ascii"),u(n,t,30+i),this.debug("DEBUG: Outgoing: Writing GLOBAL_REQUEST (cancel-tcpip-forward)"),_e(this,n)},ae.prototype.openssh_streamLocalForward=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");var r=Buffer.byteLength(e),i=Buffer.allocUnsafe(41+r);return i[0]=S.GLOBAL_REQUEST,u(i,31,1),i.write("streamlocal-forward@openssh.com",5,31,"ascii"),i[36]=void 0===t||!0===t?1:0,u(i,r,37),i.write(e,41,r,"utf8"),this.debug("DEBUG: Outgoing: Writing GLOBAL_REQUEST (streamlocal-forward@openssh.com)"),_e(this,i)},ae.prototype.openssh_cancelStreamLocalForward=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");var r=Buffer.byteLength(e),i=Buffer.allocUnsafe(48+r);return i[0]=S.GLOBAL_REQUEST,u(i,38,1),i.write("cancel-streamlocal-forward@openssh.com",5,38,"ascii"),i[43]=void 0===t||!0===t?1:0,u(i,r,44),i.write(e,48,r,"utf8"),this.debug("DEBUG: Outgoing: Writing GLOBAL_REQUEST (cancel-streamlocal-forward@openssh.com)"),_e(this,i)},ae.prototype.directTcpip=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");var n=Buffer.byteLength(i.srcIP),s=Buffer.byteLength(i.dstIP),o=29,a=Buffer.allocUnsafe(33+n+4+4+s+4);return a[0]=S.CHANNEL_OPEN,u(a,12,1),a.write("direct-tcpip",5,12,"ascii"),u(a,e,17),u(a,t,21),u(a,r,25),u(a,s,o),a.write(i.dstIP,o+=4,s,"ascii"),u(a,i.dstPort,o+=s),u(a,n,o+=4),a.write(i.srcIP,o+=4,n,"ascii"),u(a,i.srcPort,o+=n),this.debug("DEBUG: Outgoing: Writing CHANNEL_OPEN ("+e+", direct-tcpip)"),_e(this,a)},ae.prototype.openssh_directStreamLocal=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");var n=Buffer.byteLength(i.socketPath),s=47,o=Buffer.allocUnsafe(51+n+4+4);return o[0]=S.CHANNEL_OPEN,u(o,30,1),o.write("direct-streamlocal@openssh.com",5,30,"ascii"),u(o,e,35),u(o,t,39),u(o,r,43),u(o,n,s),o.write(i.socketPath,s+=4,n,"utf8"),o.fill(0,o.length-8),this.debug("DEBUG: Outgoing: Writing CHANNEL_OPEN ("+e+", direct-streamlocal@openssh.com)"),_e(this,o)},ae.prototype.openssh_noMoreSessions=function(e){if(this.server)throw new Error("Client-only method called in server mode");var t=Buffer.allocUnsafe(34);return t[0]=S.GLOBAL_REQUEST,u(t,28,1),t.write("no-more-sessions@openssh.com",5,28,"ascii"),t[33]=void 0===e||!0===e?1:0,this.debug("DEBUG: Outgoing: Writing GLOBAL_REQUEST (no-more-sessions@openssh.com)"),_e(this,t)},ae.prototype.session=function(e,t,r){if(this.server)throw new Error("Client-only method called in server mode");var i=Buffer.allocUnsafe(24);return i[0]=S.CHANNEL_OPEN,u(i,7,1),i.write("session",5,7,"ascii"),u(i,e,12),u(i,t,16),u(i,r,20),this.debug("DEBUG: Outgoing: Writing CHANNEL_OPEN ("+e+", session)"),_e(this,i)},ae.prototype.windowChange=function(e,t,r,i,n){if(this.server)throw new Error("Client-only method called in server mode");var s=Buffer.allocUnsafe(39);return s[0]=S.CHANNEL_REQUEST,u(s,e,1),u(s,13,5),s.write("window-change",9,13,"ascii"),s[22]=0,u(s,r,23),u(s,t,27),u(s,n,31),u(s,i,35),this.debug("DEBUG: Outgoing: Writing CHANNEL_REQUEST ("+e+", window-change)"),_e(this,s)},ae.prototype.pty=function(e,t,r,i,n,s,o,a){if(this.server)throw new Error("Client-only method called in server mode");s&&s.length||(s="vt100"),!o||Buffer.isBuffer(o)||Array.isArray(o)||"object"!=typeof o||(o=function(e){for(var t,r,i,n=/^\d+$/,s=Object.keys(e),o=0,a=[],c=0,h=s.length;c>>24&255,a[o++]=i>>>16&255,a[o++]=i>>>8&255,a[o++]=255&i);return a[o]=B.TTY_OP_END,a}(o)),o&&o.length||(o=ne);var c=s.length,h=o.length,f=21,l=Buffer.allocUnsafe(21+c+4+4+4+4+4+h);if(l[0]=S.CHANNEL_REQUEST,u(l,e,1),u(l,7,5),l.write("pty-req",9,7,"ascii"),l[16]=void 0===a||!0===a?1:0,u(l,c,17),l.write(s,21,c,"utf8"),u(l,r,f+=c),u(l,t,f+=4),u(l,n,f+=4),u(l,i,f+=4),u(l,h,f+=4),f+=4,Array.isArray(o))for(var p=0;p=1)for(t=0;t-this._lookbehind_size?this.emit("info",!0,c,0,this._lookbehind_size+s):this.emit("info",!0),this._bufpos=s+i,s+i;s+=a[f]}if(s<0)for(;s<0&&!this._sbmh_memcmp(e,s,t-s);)s++;if(!(s>=0)){var h=this._lookbehind_size+s;return h>0&&this.emit("info",!1,c,0,h),c.copy(c,0,h,this._lookbehind_size-h),this._lookbehind_size-=h,e.copy(c,this._lookbehind_size),this._lookbehind_size+=t,this._bufpos=t,t}this.emit("info",!1,c,0,this._lookbehind_size),this._lookbehind_size=0}for(s>=0&&(s+=this._bufpos);s<=t-i;){var f;if((f=e[s+i-1])===o&&e[s]===r[0]&&n(r,0,e,s,i-1))return++this.matches,s>0?this.emit("info",!0,e,this._bufpos,s):this.emit("info",!0),this._bufpos=s+i,s+i;s+=a[f]}if(s0&&this.emit("info",!1,e,this._bufpos,s","description":"SSH2 and SFTP(v3) client/server protocol streams for node.js","main":"./index","engines":{"node":">=5.2.0"},"dependencies":{"@types/node":"^18.11.18","asn1":"~0.2.0","bcrypt-pbkdf":"^1.0.2","streamsearch":"~0.1.2"},"scripts":{"test":"node test/test.js"},"keywords":["ssh","ssh2","sftp","secure","protocol","streams","client","server"],"licenses":[{"type":"MIT","url":"http://github.com/olzie-12/ssh2-streams/raw/master/LICENSE"}],"repository":{"type":"git","url":"http://github.com/olzie-12/ssh2-streams.git"}}')},function(e,t,r){var i,n=r(61).Agent,s=r(62).Agent,o=r(0).inherits;function a(e,t){var n=e&&e.localAddress||this._defaultSrcIP,s=e&&e.localPort||0,o=e.host,a=e.port;void 0===i&&(i=r(29).Client);var h=new i,f=!1;h.on("ready",()=>{h.forwardOut(n,s,o,a,(e,r)=>{if(f=!0,e)return h.end(),t(e);r.once("close",()=>{h.end()}),t(null,function(e){return e.setKeepAlive=c,e.setNoDelay=c,e.setTimeout=c,e.ref=c,e.unref=c,e.destroySoon=e.destroy,e}(r))})}).on("error",t).on("close",()=>{f||t(new Error("Unexpected connection loss"))}).connect(this._connectCfg)}function c(){}[n,s].forEach(e=>{function r(t,i){if(!(this instanceof r))return new r(t,i);e.call(this,i),this._connectCfg=t,this._defaultSrcIP=i&&i.srcIP||"localhost"}o(r,e),r.prototype.createConnection=a,t[e===n?"SSHTTPAgent":"SSHTTPSAgent"]=r})},function(e,t){e.exports=__nccwpck_require__(3685)},function(e,t){e.exports=__nccwpck_require__(5687)},function(e,t,r){(function(t){var i=r(8).Socket,n=r(1).EventEmitter,s=r(0).inherits,o=r(21),a=r(5),c=r(64),h=r(7).readUInt32BE,f=r(7).writeUInt32BE,u=r(7).writeUInt32LE,l=/^\!(\d+) s ([A-Z0-9]{8}\-[A-Z0-9]{8}\-[A-Z0-9]{8}\-[A-Z0-9]{8})/,p=/^[/\\][/\\]\.[/\\]pipe[/\\].+/;if(e.exports=function(e,t,r,n,s){var o,d,g,E,v,y,_,w,b=0,S=Buffer.isBuffer(t),k=0,T=0,A=0,U=0,B=!1;function N(){var e;if(S){var r=9;e=Buffer.allocUnsafe(9+b+4+E+4),f(e,e.length-4,0),e[4]=13,f(e,b,5),t.copy(e,r),f(e,E,r+=b),n.copy(e,r+=4),f(e,0,r+=E),o.write(e)}else o.write(Buffer.from([0,0,0,1,11]))}function R(e){for(var r=0,i=e.length;r0?B=U:(t=void 0,B=!1),U=0)):++k===B&&(B=!1,k=0,t=void 0);else b<<=8,b+=e[r],4==++k&&(t=Buffer.allocUnsafe(b),k=0);else if(5===v)return d=S?new Error("Agent unable to sign data"):new Error("Unable to retrieve list of keys from agent"),o.removeAllListeners("data"),o.destroy()}function P(e){d=e}function D(){d?s(d):S&&!g||!S&&!y?s(new Error("Unexpected disconnection from agent")):S&&g?s(void 0,g):!S&&y&&s(void 0,y)}if("function"==typeof t&&"function"==typeof r?(_=t,w=r):S?(b=t.length,E=n.length):(s=t,t=void 0),"win32"!==process.platform||p.test(e))o=new i;else{if("pageant"!==e){var O=!1;return void a.readFile(e,(function t(r,n){if(r)return O?s(new Error("Invalid cygwin unix socket path")):void c.exec('cygpath -w "'+e+'"',(function(r,i,n){if(r||0===i.length)return s(new Error("Invalid cygwin unix socket path"));O=!0,e=i.toString().replace(/[\r\n]/g,""),a.readFile(e,t)}));var f;if(f=l.exec(n.toString("ascii"))){var p,d,g,m,E,v,y=0,_=!1,w=[],b=Buffer.allocUnsafe(12);for(b.fill(0),p=parseInt(f[1],10),d=f[2].replace(/\-/g,""),g=Buffer.allocUnsafe(16),E=0,v=0;v<32;++E,v+=2)g[E]=parseInt(d.substring(v,v+2),16);for(E=0;E<16;E+=4)u(g,h(g,E),E);function S(){y=0,m="secret",o.write(g)}function k(e){y+=e.length,"secret"===m?16===y&&(y=0,m="creds",o.write(b)):"creds"===m&&(_||w.push(e),12===y&&(o.removeListener("connect",S),o.removeListener("data",k),o.removeListener("close",T),_?(I(),o.emit("connect")):(_=!0,b=Buffer.concat(w),u(b,process.pid,0),o.destroy(),A())))}function T(){s(new Error("Problem negotiating cygwin unix socket security"))}function A(){(o=new i).once("connect",S),o.on("data",k),o.once("close",T),o.connect(p)}A()}else s(new Error("Malformed cygwin unix socket file"))}))}o=new m}function I(){var e;_||w?(o.once("connect",(function(){e=_();var t=!1;function r(){t||(o.destroy(),t=!0)}e.once("end",r).once("close",r).on("data",(function(e){o.write(e)})),o.on("data",(function(t){e.write(t)}))})),o.once("close",(function(){e||w()}))):(o.once("connect",N),o.on("data",R),o.once("error",P),o.once("close",D))}I(),o.connect(e)},"win32"===process.platform){var d={},g=o.resolve(t,"..","util/pagent.exe");function m(){this.proc=void 0,this.buffer=null}d[10]=new Error("Invalid pagent.exe arguments"),d[11]=new Error("Pageant is not running"),d[12]=new Error("pagent.exe could not create an mmap"),d[13]=new Error("pagent.exe could not set mode for stdin"),d[14]=new Error("pagent.exe could not set mode for stdout"),d[15]=new Error("pagent.exe did not get expected input payload"),s(m,n),m.prototype.write=function(e){if(null===this.buffer?this.buffer=e:this.buffer=Buffer.concat([this.buffer,e],this.buffer.length+e.length),!(this.buffer.length<4)){var t=h(this.buffer,0);if(!(this.buffer.length-44+t?this.buffer=this.buffer.slice(4+t):this.buffer=null;var r,i=this,n=!1;(r=this.proc=c.spawn(g,[e.length])).stdout.on("data",(function(e){i.emit("data",e)})),r.once("error",(function(e){n||(n=!0,i.emit("error",e))})),r.once("close",(function(e){i.proc=void 0,d[e]&&!n&&(n=!0,i.emit("error",d[e])),i.emit("close",n)})),r.stdin.end(e)}}},m.prototype.end=m.prototype.destroy=function(){this.buffer=null,this.proc&&(this.proc.kill(),this.proc=void 0)},m.prototype.connect=function(){this.emit("connect")}}}).call(this,"/")},function(e,t){e.exports=__nccwpck_require__(2081)},function(e,t,r){var i=r(0).inherits,n=r(1).EventEmitter;function s(e){var t=this;n.call(this),this._stream=e,e.on("error",(function(e){t.emit("error",e)})).on("end",(function(){t.emit("end")})).on("close",(function(){t.emit("close")})).on("continue",(function(){t.emit("continue")}))}i(s,n),s.prototype.end=function(){return this._stream.end()},s.prototype.createReadStream=function(e,t){return this._stream.createReadStream(e,t)},s.prototype.createWriteStream=function(e,t){return this._stream.createWriteStream(e,t)},s.prototype.open=function(e,t,r,i){return this._stream.open(e,t,r,i)},s.prototype.close=function(e,t){return this._stream.close(e,t)},s.prototype.read=function(e,t,r,i,n,s){return this._stream.readData(e,t,r,i,n,s)},s.prototype.write=function(e,t,r,i,n,s){return this._stream.writeData(e,t,r,i,n,s)},s.prototype.fastGet=function(e,t,r,i){return this._stream.fastGet(e,t,r,i)},s.prototype.fastPut=function(e,t,r,i){return this._stream.fastPut(e,t,r,i)},s.prototype.readFile=function(e,t,r){return this._stream.readFile(e,t,r)},s.prototype.writeFile=function(e,t,r,i){return this._stream.writeFile(e,t,r,i)},s.prototype.appendFile=function(e,t,r,i){return this._stream.appendFile(e,t,r,i)},s.prototype.exists=function(e,t){return this._stream.exists(e,t)},s.prototype.unlink=function(e,t){return this._stream.unlink(e,t)},s.prototype.rename=function(e,t,r){return this._stream.rename(e,t,r)},s.prototype.mkdir=function(e,t,r){return this._stream.mkdir(e,t,r)},s.prototype.rmdir=function(e,t){return this._stream.rmdir(e,t)},s.prototype.readdir=function(e,t,r){return this._stream.readdir(e,t,r)},s.prototype.fstat=function(e,t){return this._stream.fstat(e,t)},s.prototype.stat=function(e,t){return this._stream.stat(e,t)},s.prototype.lstat=function(e,t){return this._stream.lstat(e,t)},s.prototype.opendir=function(e,t){return this._stream.opendir(e,t)},s.prototype.setstat=function(e,t,r){return this._stream.setstat(e,t,r)},s.prototype.fsetstat=function(e,t,r){return this._stream.fsetstat(e,t,r)},s.prototype.futimes=function(e,t,r,i){return this._stream.futimes(e,t,r,i)},s.prototype.utimes=function(e,t,r,i){return this._stream.utimes(e,t,r,i)},s.prototype.fchown=function(e,t,r,i){return this._stream.fchown(e,t,r,i)},s.prototype.chown=function(e,t,r,i){return this._stream.chown(e,t,r,i)},s.prototype.fchmod=function(e,t,r){return this._stream.fchmod(e,t,r)},s.prototype.chmod=function(e,t,r){return this._stream.chmod(e,t,r)},s.prototype.readlink=function(e,t){return this._stream.readlink(e,t)},s.prototype.symlink=function(e,t,r){return this._stream.symlink(e,t,r)},s.prototype.realpath=function(e,t){return this._stream.realpath(e,t)},s.prototype.ext_openssh_rename=function(e,t,r){return this._stream.ext_openssh_rename(e,t,r)},s.prototype.ext_openssh_statvfs=function(e,t){return this._stream.ext_openssh_statvfs(e,t)},s.prototype.ext_openssh_fstatvfs=function(e,t){return this._stream.ext_openssh_fstatvfs(e,t)},s.prototype.ext_openssh_hardlink=function(e,t,r){return this._stream.ext_openssh_hardlink(e,t,r)},s.prototype.ext_openssh_fsync=function(e,t){return this._stream.ext_openssh_fsync(e,t)},e.exports=s},function(e,t,r){var i,n=r(8),s=r(1).EventEmitter,o=s.listenerCount,a=r(0).inherits,c=r(14),h=c.utils.parseKey,f=c.SSH2Stream,u=c.SFTPStream,l=c.constants,p=l.DISCONNECT_REASON,d=l.CHANNEL_OPEN_FAILURE,g=l.ALGORITHMS,m=r(33),E=r(67),v=r(7).writeUInt32BE,y=Math.pow(2,32)-1;function _(e,t){if(!(this instanceof _))return new _(e,t);var r,a={"ssh-rsa":null,"ssh-dss":null,"ssh-ed25519":null,"ecdsa-sha2-nistp256":null,"ecdsa-sha2-nistp384":null,"ecdsa-sha2-nistp521":null},c=e.hostKeys;if(!Array.isArray(c))throw new Error("hostKeys must be an array");for(r=0;r0){for(d=g.SUPPORTED_KEX,r=0;r0){for(d=g.SUPPORTED_CIPHER,r=0;r0){for(d=g.SUPPORTED_SERVER_HOST_KEY,r=m.length-1;r>=0;--r){if(-1===d.indexOf(m[r]))throw new Error("Unsupported server host key algorithm: "+m[r]);a[m[r]]||(v||(m=m.slice(),v=!0),m.splice(r,1))}m.length>0&&(l.serverHostKey=m)}if(m=e.algorithms.hmac,Array.isArray(m)&&m.length>0){for(d=g.SUPPORTED_HMAC,r=0;r0){for(d=g.SUPPORTED_COMPRESS,r=0;r=0;--r)a[y[r]]||y.splice(r,1);l.serverHostKey=y}!i&&_.KEEPALIVE_INTERVAL>0&&_.KEEPALIVE_CLIENT_INTERVAL>0&&_.KEEPALIVE_CLIENT_COUNT_MAX>=0&&(i=new E(_.KEEPALIVE_INTERVAL,_.KEEPALIVE_CLIENT_INTERVAL,_.KEEPALIVE_CLIENT_COUNT_MAX));var b=this;s.call(this),"function"==typeof t&&b.on("connection",t);var S,k,T={algorithms:l,hostKeys:a,server:!0};for(r=0,k=(S=Object.keys(e)).length;r=b.maxConnections)e.destroy();else{++b._connections,e.once("close",(function(e){--b._connections,s.read()})).on("error",(function(e){s.reset(),s.emit("error",e)}));var t=T;if(U){t={};for(var r,i=0;i0&&g[0].type;)"SUCCESS"===(t=g.shift()).type&&e.requestSuccess(t.buf),"FAILURE"===t.type&&e.requestFailure()}()}if(i&&g.push(s),("tcpip-forward"===t||"cancel-tcpip-forward"===t||"no-more-sessions@openssh.com"===t||"streamlocal-forward@openssh.com"===t||"cancel-streamlocal-forward@openssh.com"===t)&&o(r,"request")&&r.authenticated){var c,h;if(i){var f=!1;c=function(e){var r;f||(f=!0,"tcpip-forward"===t&&0===n.bindPort&&"number"==typeof e&&(r=Buffer.allocUnsafe(4),v(r,e,0)),a("SUCCESS",r))},h=function(){f||(f=!0,a("FAILURE"))}}if("no-more-sessions@openssh.com"===t)return r.noMoreSessions=!0,void(c&&c());r.emit("request",c,h,t,n)}else i&&a("FAILURE")})),e.on("CHANNEL_OPEN",(function(t){if("session"===t.type&&r.noMoreSessions||!r.authenticated){var i=d.ADMINISTRATIVELY_PROHIBITED;return e.channelOpenFail(t.sender,i)}var s,a,c=R(r),h=!1;if(!1===c)return e.channelOpenFail(t.sender,d.RESOURCE_SHORTAGE);switch(n[c]=!0,a=function(){if(!h){h=!0,delete n[c];var r=d.ADMINISTRATIVELY_PROHIBITED;return e.channelOpenFail(t.sender,r)}},t.type){case"session":o(r,"session")?(s=function(){if(!h)return h=!0,e.channelOpenConfirm(t.sender,c,m.MAX_WINDOW,m.PACKET_SIZE),new b(r,t,c)},r.emit("session",s,a)):a();break;case"direct-tcpip":o(r,"tcpip")?(s=function(){if(!h){h=!0,e.channelOpenConfirm(t.sender,c,m.MAX_WINDOW,m.PACKET_SIZE);var i={type:void 0,incoming:{id:c,window:m.MAX_WINDOW,packetSize:m.PACKET_SIZE,state:"open"},outgoing:{id:t.sender,window:t.window,packetSize:t.packetSize,state:"open"}};return new m(i,r)}},r.emit("tcpip",s,a,t.data)):a();break;case"direct-streamlocal@openssh.com":o(r,"openssh.streamlocal")?(s=function(){if(!h){h=!0,e.channelOpenConfirm(t.sender,c,m.MAX_WINDOW,m.PACKET_SIZE);var i={type:void 0,incoming:{id:c,window:m.MAX_WINDOW,packetSize:m.PACKET_SIZE,state:"open"},outgoing:{id:t.sender,window:t.window,packetSize:t.packetSize,state:"open"}};return new m(i,r)}},r.emit("openssh.streamlocal",s,a,t.data)):a();break;default:a()}})),e.on("NEWKEYS",(function(){++c>1&&r.emit("rekey")})),i&&this.once("ready",(function(){i.add(e)}))}function b(e,t,r){this.subtype=void 0;var i,n=!1,s=this,a=t.sender,c={type:"session",incoming:{id:r,window:m.MAX_WINDOW,packetSize:m.PACKET_SIZE,state:"open"},outgoing:{id:t.sender,window:t.window,packetSize:t.packetSize,state:"open"}};e._sshstream.on("CHANNEL_REQUEST:"+r,(function(t){var r,h,f=!1;if(t.wantReply&&("shell"!==t.request&&"exec"!==t.request&&"subsystem"!==t.request&&(r=function(){if(!(f||n||i))return f=!0,e._sshstream.channelSuccess(a)}),h=function(){if(!(f||n||i))return f=!0,e._sshstream.channelFailure(a)}),n)h&&h();else switch(t.request){case"env":o(s,"env")?s.emit("env",r,h,{key:t.key,val:t.val}):h&&h();break;case"pty-req":o(s,"pty")?s.emit("pty",r,h,{cols:t.cols,rows:t.rows,width:t.width,height:t.height,term:t.term,modes:t.modes}):h&&h();break;case"window-change":o(s,"window-change")?s.emit("window-change",r,h,{cols:t.cols,rows:t.rows,width:t.width,height:t.height}):h&&h();break;case"x11-req":o(s,"x11")?s.emit("x11",r,h,{single:t.single,protocol:t.protocol,cookie:t.cookie,screen:t.screen}):h&&h();break;case"signal":o(s,"signal")?s.emit("signal",r,h,{name:t.signal}):h&&h();break;case"auth-agent-req@openssh.com":o(s,"auth-agent")?s.emit("auth-agent",r,h):h&&h();break;case"shell":o(s,"shell")?(r=function(){if(!(f||n||i))return f=!0,t.wantReply&&e._sshstream.channelSuccess(a),(i=new m(c,e,{server:!0})).subtype=s.subtype=t.request,i},s.emit("shell",r,h)):h&&h();break;case"exec":o(s,"exec")?(r=function(){if(!(f||n||i))return f=!0,t.wantReply&&e._sshstream.channelSuccess(a),(i=new m(c,e,{server:!0})).subtype=s.subtype=t.request,i},s.emit("exec",r,h,{command:t.command})):h&&h();break;case"subsystem":r=function(){if(!(f||n||i)){if(f=!0,t.wantReply&&e._sshstream.channelSuccess(a),(i=new m(c,e,{server:!0})).subtype=s.subtype=t.request+":"+t.subsystem,"sftp"===t.subsystem){var r=new u({server:!0,debug:e._sshstream.debug});return i.pipe(r).pipe(i),r}return i}},"sftp"===t.subsystem&&o(s,"sftp")?s.emit("sftp",r,h):"sftp"!==t.subsystem&&o(s,"subsystem")?s.emit("subsystem",r,h,{name:t.subsystem}):h&&h();break;default:h&&h()}})).once("CHANNEL_EOF:"+r,(function(){n=!0,s.emit("eof"),s.emit("end")})).once("CHANNEL_CLOSE:"+r,(function(){n=!0,s.emit("close")}))}function S(e,t,r,i,n){s.call(this);var o=this;this.username=this.user=t,this.service=r,this.method=i,this._initialResponse=!1,this._finalResponse=!1,this._multistep=!1,this._cbfinal=function(e,t,r){o._finalResponse||(o._finalResponse=!0,n(o,e,t,r))},this._stream=e}a(_,s),_.prototype.listen=function(){return this._srv.listen.apply(this._srv,arguments),this},_.prototype.address=function(){return this._srv.address()},_.prototype.getConnections=function(e){this._srv.getConnections(e)},_.prototype.close=function(e){return this._srv.close(e),this},_.prototype.ref=function(){this._srv.ref()},_.prototype.unref=function(){this._srv.unref()},a(w,s),w.prototype.end=function(){return this._sshstream.disconnect(p.BY_APPLICATION)},w.prototype.x11=function(e,t,r){return N(this,"x11",{originAddr:e,originPort:t},r)},w.prototype.forwardOut=function(e,t,r,i,n){return N(this,"forwarded-tcpip",{boundAddr:e,boundPort:t,remoteAddr:r,remotePort:i},n)},w.prototype.openssh_forwardOutStreamLocal=function(e,t){return N(this,"forwarded-streamlocal@openssh.com",{socketPath:e},t)},w.prototype.rekey=function(e){var t,r=this._sshstream,i=!0;try{i=r.rekey()}catch(e){t=e}return"function"==typeof e&&(t?process.nextTick((function(){e(t)})):this.once("rekey",e)),i},a(b,s),a(S,s),S.prototype.accept=function(){this._cleanup&&this._cleanup(),this._initialResponse=!0,this._cbfinal(!0)},S.prototype.reject=function(e,t){this._cleanup&&this._cleanup(),this._initialResponse=!0,this._cbfinal(!1,e,t)};var k=/[ \t\r\n]*,[ \t\r\n]*/g;function T(e,t,r,i,n,s){S.call(this,e,t,r,i,s),this._multistep=!0;var o=this;this._cb=void 0,this._onInfoResponse=function(e){if(o._cb){var t=o._cb;o._cb=void 0,t(e)}},this.submethods=n.split(k),this.on("abort",(function(){o._cb&&o._cb(new Error("Authentication request aborted"))}))}function A(e,t,r,i,n,s){var o;if(S.call(this,e,t,r,i,s),this.key={algo:n.keyAlgo,data:n.key},this.signature=n.signature,this.signature)switch(n.keyAlgo){case"ssh-rsa":case"ssh-dss":o="sha1";break;case"ssh-ed25519":o=null;break;case"ecdsa-sha2-nistp256":o="sha256";break;case"ecdsa-sha2-nistp384":o="sha384";break;case"ecdsa-sha2-nistp521":o="sha512"}this.sigAlgo=o,this.blob=n.blob}function U(e,t,r,i,n,s){var o;if(S.call(this,e,t,r,i,s),this.key={algo:n.keyAlgo,data:n.key},this.signature=n.signature,this.signature)switch(n.keyAlgo){case"ssh-rsa":case"ssh-dss":o="sha1";break;case"ssh-ed25519":o=null;break;case"ecdsa-sha2-nistp256":o="sha256";break;case"ecdsa-sha2-nistp384":o="sha384";break;case"ecdsa-sha2-nistp521":o="sha512"}this.sigAlgo=o,this.blob=n.blob,this.localHostname=n.localHostname,this.localUsername=n.localUsername}function B(e,t,r,i,n,s){S.call(this,e,t,r,i,s),this.password=n}function N(e,t,r,i){var n=R(e),s=m.MAX_WINDOW,o=m.PACKET_SIZE,a=!0;if(!1===n)return i(new Error("No free channels available"));"function"==typeof r&&(i=r,r={}),e._channels[n]=!0;var c=e._sshstream;return c.once("CHANNEL_OPEN_CONFIRMATION:"+n,(function(r){c.removeAllListeners("CHANNEL_OPEN_FAILURE:"+n);var a={type:t,incoming:{id:n,window:s,packetSize:o,state:"open"},outgoing:{id:r.sender,window:r.window,packetSize:r.packetSize,state:"open"}};i(void 0,new m(a,e,{server:!0}))})).once("CHANNEL_OPEN_FAILURE:"+n,(function(t){c.removeAllListeners("CHANNEL_OPEN_CONFIRMATION:"+n),delete e._channels[n];var r=new Error("(SSH) Channel open failure: "+t.description);r.reason=t.reason,r.lang=t.lang,i(r)})),"forwarded-tcpip"===t?a=c.forwardedTcpip(n,s,o,r):"x11"===t?a=c.x11(n,s,o,r):"forwarded-streamlocal@openssh.com"===t&&(a=c.openssh_forwardedStreamLocal(n,s,o,r)),a}function R(e){if(e._curChan=t)if(++e._kacnt>i){var h=new Error("Keepalive timeout");h.level="client-timeout",e.emit("error",h),e.disconnect(),r(n,a),--a,c=n.length}else e._kalast=o,e.ping()}}i.prototype.start=function(){this._timer&&this.stop(),this._timer=setInterval(this._timerfn,this._timerInterval)},i.prototype.stop=function(){this._timer&&(clearInterval(this._timer),this._timer=void 0)},i.prototype.add=function(e){var t=this._streams,r=this;function i(){e._kalast=Date.now(),e._kacnt=0}e.once("end",(function(){r.remove(e)})).on("packet",i),t[t.length]=e,i(),this._timer||this.start()},i.prototype.remove=function(e){var t=this._streams,i=t.indexOf(e);i>-1&&r(t,i),t.length||this.stop()},e.exports=i}])})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9xdXNseS1jb3JlL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3F1c2x5LWNvcmUvZXh0ZXJuYWwgXCJ1dGlsXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBcImV2ZW50c1wiIiwid2VicGFjazovL3F1c2x5LWNvcmUvZXh0ZXJuYWwgXCJzdHJlYW1cIiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL0BvbHppZS0xMi9zc2gyLXN0cmVhbXMvbGliL3V0aWxzLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDItc3RyZWFtcy9saWIvYnVmZmVyLWhlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBcImNyeXB0b1wiIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDIvbGliL2J1ZmZlci1oZWxwZXJzLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvZXh0ZXJuYWwgXCJuZXRcIiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2Jhc2ljLWZ0cC9kaXN0L0ZpbGVJbmZvLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBcInRsc1wiIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvcGFyc2VDb250cm9sUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL3NyYy9zdHJhdGVnaWVzL3N0cmF0ZWd5LnRzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDItc3RyZWFtcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2FzbjEvbGliL2luZGV4LmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYXNuMS9saWIvYmVyL2Vycm9ycy5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2FzbjEvbGliL2Jlci90eXBlcy5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL0BvbHppZS0xMi9zc2gyLXN0cmVhbXMvbGliL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vc3JjL3V0aWxzL2Z1bmN0aW9uLnRzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9zcmMvc3RyYXRlZ2llcy9mdHAudHMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBcInBhdGhcIiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2Jhc2ljLWZ0cC9kaXN0L0Z0cENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9iYXNpYy1mdHAvZGlzdC9wYXJzZUxpc3QuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9iYXNpYy1mdHAvZGlzdC9wYXJzZUxpc3RNTFNELmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvbmV0VXRpbHMuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9iYXNpYy1mdHAvZGlzdC90cmFuc2Zlci5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vc3JjL3V0aWxzL2Z0cC50cyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vc3JjL3N0cmF0ZWdpZXMvc2Z0cC50cyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL0BvbHppZS0xMi9zc2gyL2xpYi9jbGllbnQuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBcImFzc2VydFwiIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvc2FmZXItYnVmZmVyL3NhZmVyLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDItc3RyZWFtcy9saWIva2V5UGFyc2VyLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDIvbGliL0NoYW5uZWwuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vc3JjL2NsaWVudC50cyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vc3JjL3Rhc2tzLnRzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvQ2xpZW50LmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvcGFyc2VMaXN0RE9TLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvcGFyc2VMaXN0VW5peC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2Jhc2ljLWZ0cC9kaXN0L1Byb2dyZXNzVHJhY2tlci5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2Jhc2ljLWZ0cC9kaXN0L1N0cmluZ1dyaXRlci5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2Jhc2ljLWZ0cC9kaXN0L1N0cmluZ0VuY29kaW5nLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9zcmMvdHJhbnNmZXIudHMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL3NyYy91dGlscy9hcnJheS50cyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vc3JjL3V0aWxzL2ZpbGUudHMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBcImRuc1wiIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDItc3RyZWFtcy9saWIvc2Z0cC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2FzbjEvbGliL2Jlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2FzbjEvbGliL2Jlci9yZWFkZXIuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBcImJ1ZmZlclwiIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYXNuMS9saWIvYmVyL3dyaXRlci5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2JjcnlwdC1wYmtkZi9pbmRleC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL3R3ZWV0bmFjbC9uYWNsLWZhc3QuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi1zdHJlYW1zL2xpYi9qc2JuLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDItc3RyZWFtcy9saWIvbm9kZS1mcy1jb21wYXQuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi1zdHJlYW1zL2xpYi9zc2guanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBcInpsaWJcIiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL3N0cmVhbXNlYXJjaC9saWIvc2JtaC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL0BvbHppZS0xMi9zc2gyL2xpYi9odHRwLWFnZW50cy5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlL2V4dGVybmFsIFwiaHR0cFwiIiwid2VicGFjazovL3F1c2x5LWNvcmUvZXh0ZXJuYWwgXCJodHRwc1wiIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDIvbGliL2FnZW50LmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvZXh0ZXJuYWwgXCJjaGlsZF9wcm9jZXNzXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi9saWIvU0ZUUFdyYXBwZXIuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi9saWIvc2VydmVyLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDIvbGliL2tlZXBhbGl2ZW1nci5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJnbG9iYWwiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsIkJlciIsInJlYWRVSW50MzJCRSIsIndyaXRlVUludDMyQkUiLCJyZWFkU3RyaW5nIiwiYnVmZmVyIiwic3RhcnQiLCJlbmNvZGluZyIsInN0cmVhbSIsImNiIiwibWF4TGVuIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJ1bmRlZmluZWQiLCJsZW4iLCJlbmQiLCJidWZmZXJMZW4iLCJsZW5ndGgiLCJsZWZ0IiwiSW5maW5pdHkiLCJfY2xlYW51cCIsIl9wb3MiLCJjb3B5IiwidG9TdHJpbmciLCJzbGljZSIsIml2X2luYyIsIml2IiwicmVhZEludCIsInBhcnNlS2V5Iiwic2lnU1NIVG9BU04xIiwic2lnIiwidHlwZSIsInNlbGYiLCJjYWxsYmFjayIsImFzbldyaXRlciIsIldyaXRlciIsInN0YXJ0U2VxdWVuY2UiLCJyTmV3IiwiYWxsb2NVbnNhZmUiLCJzTmV3Iiwid3JpdGVCdWZmZXIiLCJJbnRlZ2VyIiwiZW5kU2VxdWVuY2UiLCJEU0FTaWdCRVJUb0JhcmUiLCJzaWduYXR1cmUiLCJhc25SZWFkZXIiLCJSZWFkZXIiLCJyZWFkU2VxdWVuY2UiLCJyT2Zmc2V0Iiwic09mZnNldCIsIm5ld1NpZyIsIkVDRFNBU2lnQVNOMVRvU1NIIiwiYnVmIiwib2Zmc2V0Iiwid3JpdGVVSW50MzJMRSIsIkZpbGVUeXBlIiwiRmlsZUluZm8iLCJ0aGlzIiwiVW5rbm93biIsInNpemUiLCJyYXdNb2RpZmllZEF0IiwibW9kaWZpZWRBdCIsInBlcm1pc3Npb25zIiwiaGFyZExpbmtDb3VudCIsImxpbmsiLCJncm91cCIsInVzZXIiLCJ1bmlxdWVJRCIsIkRpcmVjdG9yeSIsIlN5bWJvbGljTGluayIsIkZpbGUiLCJVbml4UGVybWlzc2lvbiIsIlJlYWQiLCJXcml0ZSIsIkV4ZWN1dGUiLCJfX2NyZWF0ZUJpbmRpbmciLCJrIiwiazIiLCJfX2V4cG9ydFN0YXIiLCJ0cmFuc2Zlcl8xIiwiZW50ZXJQYXNzaXZlTW9kZUlQdjQiLCJlbnRlclBhc3NpdmVNb2RlSVB2NiIsInBvc2l0aXZlSW50ZXJtZWRpYXRlIiwicG9zaXRpdmVDb21wbGV0aW9uIiwiaXNNdWx0aWxpbmUiLCJpc1NpbmdsZUxpbmUiLCJwYXJzZUNvbnRyb2xSZXNwb25zZSIsImxpbmUiLCJ0ZXN0IiwidGV4dCIsImxpbmVzIiwic3BsaXQiLCJtZXNzYWdlcyIsInRva2VuUmVnZXgiLCJzdGFydEF0IiwicHVzaCIsImpvaW4iLCJ0b2tlbiIsInN1YnN0ciIsIlJlZ0V4cCIsInJlc3QiLCJjb2RlIiwiU3RyYXRlZ3kiLCJFdmVudEVtaXR0ZXIiLCJjb25maWciLCJvcHRpb25zIiwic3VwZXIiLCJkaXNjb25uZWN0IiwiY29ubmVjdCIsImluZm8iLCJ0cmFuc2ZlciIsIlRyYW5zZmVyIiwiZGF0YSIsInByb2dyZXNzIiwiZW1pdCIsImhhbmRsZVByb2dyZXNzIiwiY2xlYW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uQ2xlYW4iLCJyZW1vdmVMaXN0ZW5lciIsIm9uRGlzY29ubmVjdCIsIm9uUmVzb2x2ZSIsIm9uUmVqZWN0IiwiZXJyIiwib25jZSIsIlNGVFBTdHJlYW0iLCJTU0gyU3RyZWFtIiwidXRpbHMiLCJjb25zdGFudHMiLCJCZXJSZWFkZXIiLCJCZXJXcml0ZXIiLCJuZXdJbnZhbGlkQXNuMUVycm9yIiwibXNnIiwiZSIsIkVycm9yIiwibWVzc2FnZSIsIkVPQyIsIkJvb2xlYW4iLCJCaXRTdHJpbmciLCJPY3RldFN0cmluZyIsIk51bGwiLCJPSUQiLCJPYmplY3REZXNjcmlwdG9yIiwiRXh0ZXJuYWwiLCJSZWFsIiwiRW51bWVyYXRpb24iLCJQRFYiLCJVdGY4U3RyaW5nIiwiUmVsYXRpdmVPSUQiLCJTZXF1ZW5jZSIsIlNldCIsIk51bWVyaWNTdHJpbmciLCJQcmludGFibGVTdHJpbmciLCJUNjFTdHJpbmciLCJWaWRlb3RleFN0cmluZyIsIklBNVN0cmluZyIsIlVUQ1RpbWUiLCJHZW5lcmFsaXplZFRpbWUiLCJHcmFwaGljU3RyaW5nIiwiVmlzaWJsZVN0cmluZyIsIkdlbmVyYWxTdHJpbmciLCJVbml2ZXJzYWxTdHJpbmciLCJDaGFyYWN0ZXJTdHJpbmciLCJCTVBTdHJpbmciLCJDb25zdHJ1Y3RvciIsIkNvbnRleHQiLCJrZXlzIiwiY3J5cHRvIiwiZWRkc2FTdXBwb3J0ZWQiLCJzaWduIiwidmVyaWZ5IiwidmVyaWZpZWQiLCJmcm9tIiwiZXgiLCJjdXJ2ZTI1NTE5U3VwcG9ydGVkIiwiZGlmZmllSGVsbG1hbiIsImdlbmVyYXRlS2V5UGFpclN5bmMiLCJjcmVhdGVQdWJsaWNLZXkiLCJNRVNTQUdFIiwiRElTQ09OTkVDVCIsIklHTk9SRSIsIlVOSU1QTEVNRU5URUQiLCJERUJVRyIsIlNFUlZJQ0VfUkVRVUVTVCIsIlNFUlZJQ0VfQUNDRVBUIiwiS0VYSU5JVCIsIk5FV0tFWVMiLCJVU0VSQVVUSF9SRVFVRVNUIiwiVVNFUkFVVEhfRkFJTFVSRSIsIlVTRVJBVVRIX1NVQ0NFU1MiLCJVU0VSQVVUSF9CQU5ORVIiLCJHTE9CQUxfUkVRVUVTVCIsIlJFUVVFU1RfU1VDQ0VTUyIsIlJFUVVFU1RfRkFJTFVSRSIsIkNIQU5ORUxfT1BFTiIsIkNIQU5ORUxfT1BFTl9DT05GSVJNQVRJT04iLCJDSEFOTkVMX09QRU5fRkFJTFVSRSIsIkNIQU5ORUxfV0lORE9XX0FESlVTVCIsIkNIQU5ORUxfREFUQSIsIkNIQU5ORUxfRVhURU5ERURfREFUQSIsIkNIQU5ORUxfRU9GIiwiQ0hBTk5FTF9DTE9TRSIsIkNIQU5ORUxfUkVRVUVTVCIsIkNIQU5ORUxfU1VDQ0VTUyIsIkNIQU5ORUxfRkFJTFVSRSIsIktFWERIX0lOSVQiLCJLRVhESF9SRVBMWSIsIktFWERIX0dFWF9SRVFVRVNUIiwiS0VYREhfR0VYX0dST1VQIiwiS0VYREhfR0VYX0lOSVQiLCJLRVhESF9HRVhfUkVQTFkiLCJLRVhFQ0RIX0lOSVQiLCJLRVhFQ0RIX1JFUExZIiwiVVNFUkFVVEhfUEFTU1dEX0NIQU5HRVJFUSIsIlVTRVJBVVRIX1BLX09LIiwiVVNFUkFVVEhfSU5GT19SRVFVRVNUIiwiVVNFUkFVVEhfSU5GT19SRVNQT05TRSIsIkRZTkFNSUNfS0VYREhfTUVTU0FHRSIsIktFWERIX01FU1NBR0UiLCJESVNDT05ORUNUX1JFQVNPTiIsIkhPU1RfTk9UX0FMTE9XRURfVE9fQ09OTkVDVCIsIlBST1RPQ09MX0VSUk9SIiwiS0VZX0VYQ0hBTkdFX0ZBSUxFRCIsIlJFU0VSVkVEIiwiTUFDX0VSUk9SIiwiQ09NUFJFU1NJT05fRVJST1IiLCJTRVJWSUNFX05PVF9BVkFJTEFCTEUiLCJQUk9UT0NPTF9WRVJTSU9OX05PVF9TVVBQT1JURUQiLCJIT1NUX0tFWV9OT1RfVkVSSUZJQUJMRSIsIkNPTk5FQ1RJT05fTE9TVCIsIkJZX0FQUExJQ0FUSU9OIiwiVE9PX01BTllfQ09OTkVDVElPTlMiLCJBVVRIX0NBTkNFTEVEX0JZX1VTRVIiLCJOT19NT1JFX0FVVEhfTUVUSE9EU19BVkFJTEFCTEUiLCJJTExFR0FMX1VTRVJfTkFNRSIsIkFETUlOSVNUUkFUSVZFTFlfUFJPSElCSVRFRCIsIkNPTk5FQ1RfRkFJTEVEIiwiVU5LTk9XTl9DSEFOTkVMX1RZUEUiLCJSRVNPVVJDRV9TSE9SVEFHRSIsIlRFUk1JTkFMX01PREUiLCJUVFlfT1BfRU5EIiwiVklOVFIiLCJWUVVJVCIsIlZFUkFTRSIsIlZLSUxMIiwiVkVPRiIsIlZFT0wiLCJWRU9MMiIsIlZTVEFSVCIsIlZTVE9QIiwiVlNVU1AiLCJWRFNVU1AiLCJWUkVQUklOVCIsIlZXRVJBU0UiLCJWTE5FWFQiLCJWRkxVU0giLCJWU1dUQ0giLCJWU1RBVFVTIiwiVkRJU0NBUkQiLCJJR05QQVIiLCJQQVJNUksiLCJJTlBDSyIsIklTVFJJUCIsIklOTENSIiwiSUdOQ1IiLCJJQ1JOTCIsIklVQ0xDIiwiSVhPTiIsIklYQU5ZIiwiSVhPRkYiLCJJTUFYQkVMIiwiSVNJRyIsIklDQU5PTiIsIlhDQVNFIiwiRUNITyIsIkVDSE9FIiwiRUNIT0siLCJFQ0hPTkwiLCJOT0ZMU0giLCJUT1NUT1AiLCJJRVhURU4iLCJFQ0hPQ1RMIiwiRUNIT0tFIiwiUEVORElOIiwiT1BPU1QiLCJPTENVQyIsIk9OTENSIiwiT0NSTkwiLCJPTk9DUiIsIk9OTFJFVCIsIkNTNyIsIkNTOCIsIlBBUkVOQiIsIlBBUk9ERCIsIlRUWV9PUF9JU1BFRUQiLCJUVFlfT1BfT1NQRUVEIiwiQ0hBTk5FTF9FWFRFTkRFRF9EQVRBVFlQRSIsIlNUREVSUiIsIlNJR05BTFMiLCJERUZBVUxUX0tFWCIsInVuc2hpZnQiLCJTVVBQT1JURURfS0VYIiwiS0VYX0JVRiIsImNvbmNhdCIsIkRFRkFVTFRfU0VSVkVSX0hPU1RfS0VZIiwiU1VQUE9SVEVEX1NFUlZFUl9IT1NUX0tFWSIsIlNFUlZFUl9IT1NUX0tFWV9CVUYiLCJERUZBVUxUX0NJUEhFUiIsIlNVUFBPUlRFRF9DSVBIRVIiLCJDSVBIRVJfQlVGIiwiREVGQVVMVF9ITUFDIiwiU1VQUE9SVEVEX0hNQUMiLCJITUFDX0JVRiIsIkRFRkFVTFRfQ09NUFJFU1MiLCJTVVBQT1JURURfQ09NUFJFU1MiLCJDT01QUkVTU19CVUYiLCJtYWtlQ2lwaGVySW5mbyIsImJsb2NrTGVuIiwia2V5TGVuIiwiaXZMZW4iLCJhdXRoTGVuIiwiZGlzY2FyZExlbiIsIm1ha2VITUFDSW5mbyIsImFjdHVhbExlbiIsIkNJUEhFUl9JTkZPIiwiSE1BQ19JTkZPIiwiQUxHT1JJVEhNUyIsIktFWCIsIlNFUlZFUl9IT1NUX0tFWSIsIkNJUEhFUiIsIkhNQUMiLCJDT01QUkVTUyIsIlNTSF9UT19PUEVOU1NMIiwiQlVHUyIsIkJBRF9ESEdFWCIsIk9MRF9FWElUIiwiRFlOX1JQT1JUX0JVRyIsIkJVR0dZX0lNUExTIiwiRUREU0FfU1VQUE9SVEVEIiwiQ1VSVkUyNTUxOV9TVVBQT1JURUQiLCJleGVjRnVuY3Rpb24iLCJmIiwiYXJncyIsImVycm9yIiwiRnRwU3RyYXRlZ3kiLCJjb25uZWN0ZWQiLCJjbGllbnQiLCJDbGllbnQiLCJhY2Nlc3MiLCJzZWN1cmUiLCJpc0ZUUFMiLCJzZWN1cmVPcHRpb25zIiwiY2xvc2UiLCJmdHAiLCJzb2NrZXQiLCJkb3dubG9hZCIsImRlc3QiLCJoYW5kbGVUcmFuc2ZlciIsImRvd25sb2FkVG8iLCJyZW1vdGVQYXRoIiwidXBsb2FkIiwic291cmNlIiwidXBsb2FkRnJvbSIsImxpc3QiLCJwYXRoIiwiaGFuZGxlIiwidGhlbiIsIm1hcCIsImZvcm1hdEZpbGUiLCJleGlzdHMiLCJyZW5hbWUiLCJtb3ZlIiwicmVtb3ZlRmlsZSIsInJlbW92ZSIsInJlbW92ZUVtcHR5Rm9sZGVyIiwicmVtb3ZlRW1wdHlEaXIiLCJyZW1vdmVGb2xkZXIiLCJyZW1vdmVEaXIiLCJjcmVhdGVGb2xkZXIiLCJzZW5kIiwiY3JlYXRlRW1wdHlGaWxlIiwiUmVhZGFibGUiLCJxdWlldCIsInB3ZCIsImNvbW1hbmQiLCJmaWxlIiwiRnRwVXRpbHMiLCJsYXN0TW9kaWZpZWQiLCJnZXRWYWxpZERhdGUiLCJkYXRlIiwiZm4iLCJzdGFydHNXaXRoIiwiaGFuZGxlciIsInByZXBhcmVUcmFuc2ZlciIsInRyYWNrUHJvZ3Jlc3MiLCJieXRlcyIsImZpbmlzaFRyYW5zZmVyIiwiY2xvc2VkIiwicHJvdG9jb2wiLCJGVFBDb250ZXh0IiwiRlRQRXJyb3IiLCJuZXRfMSIsInBhcnNlQ29udHJvbFJlc3BvbnNlXzEiLCJyZXMiLCJjb25zdHJ1Y3RvciIsInRpbWVvdXQiLCJ2ZXJib3NlIiwiaXBGYW1pbHkiLCJ0bHNPcHRpb25zIiwiX3BhcnRpYWxSZXNwb25zZSIsIl9lbmNvZGluZyIsIl9zb2NrZXQiLCJfbmV3U29ja2V0IiwiX2RhdGFTb2NrZXQiLCJfdGFzayIsImNsb3NlV2l0aEVycm9yIiwiX2Nsb3NpbmdFcnJvciIsIl9jbG9zZVNvY2tldCIsIl9wYXNzVG9IYW5kbGVyIiwiX3N0b3BUcmFja2luZ1Rhc2siLCJyZW1vdGVBZGRyZXNzIiwiZGF0YVNvY2tldCIsImxvY2FsUG9ydCIsImRlc3Ryb3kiLCJfcmVtb3ZlU29ja2V0TGlzdGVuZXJzIiwic2V0VGltZW91dCIsInNldEVuY29kaW5nIiwic2V0S2VlcEFsaXZlIiwib24iLCJfb25Db250cm9sU29ja2V0RGF0YSIsImhhZEVycm9yIiwiX3NldHVwRGVmYXVsdEVycm9ySGFuZGxlcnMiLCJsb2ciLCJ3cml0ZSIsInRhc2siLCJyZXNwb25zZUhhbmRsZXIiLCJzdGFjayIsInJlc29sdmVQcm9taXNlIiwicmVqZWN0UHJvbWlzZSIsInJlc29sdmVyIiwiY29uc29sZSIsImNodW5rIiwidHJpbW1lZENodW5rIiwidHJpbSIsImNvbXBsZXRlUmVzcG9uc2UiLCJwYXJzZWQiLCJwYXJzZUludCIsInJlc3BvbnNlIiwiaWRlbnRpZmllciIsInJlbW92ZUFsbExpc3RlbmVycyIsIlNvY2tldCIsIl9fc2V0TW9kdWxlRGVmYXVsdCIsInYiLCJfX2ltcG9ydFN0YXIiLCJtb2QiLCJyZXN1bHQiLCJwYXJzZUxpc3QiLCJhdmFpbGFibGVQYXJzZXJzIiwic3RyaW5nSXNOb3RCbGFuayIsInN0ciIsIlJFR0VYX05FV0xJTkUiLCJyYXdMaXN0IiwiZmlsdGVyIiwidGVzdExpbmUiLCJwYXJzZXIiLCJmaW5kIiwiZmlsZXMiLCJwYXJzZUxpbmUiLCJ0cmFuc2Zvcm1MaXN0IiwicGFyc2VNTFN4RGF0ZSIsIkZpbGVJbmZvXzEiLCJwYXJzZVNpemUiLCJmYWN0SGFuZGxlcnNCeU5hbWUiLCJ0b0lTT1N0cmluZyIsImluZGV4T2YiLCJkaWdpdHMiLCJ3b3JsZCIsInNwbGl0U3RyaW5nT25jZSIsImRlbGltaXRlciIsInBvcyIsImZhY3QiLCJEYXRlIiwiVVRDIiwicGFja2VkRmFjdHMiLCJmYWN0cyIsImZhY3ROYW1lIiwiZmFjdFZhbHVlIiwiZmFjdEhhbmRsZXIiLCJ0b0xvd2VyQ2FzZSIsIm5vbkxpbmtzQnlJRCIsIk1hcCIsImlzU3ltYm9saWNMaW5rIiwic2V0IiwicmVzb2x2ZWRGaWxlcyIsInRhcmdldCIsImluY2x1ZGVzIiwiaXBJc1ByaXZhdGVWNEFkZHJlc3MiLCJ1cGdyYWRlU29ja2V0IiwiZGVzY3JpYmVBZGRyZXNzIiwiZGVzY3JpYmVUTFMiLCJ0bHNfMSIsIlRMU1NvY2tldCIsImdldFByb3RvY29sIiwicmVtb3RlRmFtaWx5IiwicmVtb3RlUG9ydCIsImFzc2lnbiIsInRsc1NvY2tldCIsInJlamVjdFVuYXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJhdXRob3JpemF0aW9uRXJyb3IiLCJpcCIsIm9jdGV0cyIsImNvbm5lY3RGb3JQYXNzaXZlVHJhbnNmZXIiLCJwYXJzZVBhc3ZSZXNwb25zZSIsInBhcnNlRXBzdlJlc3BvbnNlIiwibmV0VXRpbHNfMSIsImdyb3VwcyIsIm1hdGNoIiwicG9ydCIsIk51bWJlciIsImlzTmFOIiwiaG9zdCIsInJlcGxhY2UiLCJoYW5kbGVDb25uRXJyIiwiZmFtaWx5Iiwic2Vzc2lvbiIsImdldFNlc3Npb24iLCJhc3luYyIsInJlcXVlc3QiLCJjb250cm9sSG9zdCIsIlRyYW5zZmVyUmVzb2x2ZXIiLCJkYXRhVHJhbnNmZXJEb25lIiwidXBkYXRlQW5kU3RvcCIsInRyeVJlc29sdmUiLCJvbkNvbmRpdGlvbk9yRXZlbnQiLCJjb25kaXRpb24iLCJlbWl0dGVyIiwiZXZlbnROYW1lIiwiYWN0aW9uIiwidHJhY2tlciIsImZ1bGxDb21tYW5kIiwib25FcnJvciIsImdldENpcGhlciIsIm9uRGF0YVN0YXJ0IiwicGlwZSIsIm9uRGF0YURvbmUiLCJvbkNvbnRyb2xEb25lIiwib25VbmV4cGVjdGVkUmVxdWVzdCIsImRlc3RpbmF0aW9uIiwid3JpdGFibGVGaW5pc2hlZCIsIndTdGF0ZSIsIl93cml0YWJsZVN0YXRlIiwiZXJyb3JlZCIsImZpbmlzaGVkIiwiZW5kZWQiLCJpc1dyaXRhYmxlRmluaXNoZWQiLCJNU0RPU19EQVRFX1JFR0VYIiwiZ2V0RmlsZVR5cGUiLCJvd25lciIsIm1vbnRoIiwiZGF5IiwieWVhciIsIl9ob3VyIiwibWludXRlcyIsImhvdXIiLCJ0aW1lIiwiU2Z0cFN0cmF0ZWd5Iiwib25SZWFkeSIsIm9uS2V5Ym9hcmRJbnRlcmFjdGl2ZSIsIndyYXBwZXIiLCJnZXRXcmFwcGVyIiwidHJ5S2V5Ym9hcmQiLCJ1c2VybmFtZSIsInJlYWR5VGltZW91dCIsImluc3RydWN0aW9ucyIsImluc3RydWN0aW9uc0xhbmciLCJwcm9tcHRzIiwiZmluaXNoIiwicGFzc3dvcmQiLCJjcmVhdGVSZWFkU3RyZWFtIiwiYXV0b0Nsb3NlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJfbGlzdCIsImxvbmduYW1lIiwiZW50cnkiLCJnZXREYXRlRnJvbVVuaXhUaW1lIiwiYXR0cnMiLCJtdGltZSIsIl9zdGF0IiwidW5saW5rIiwicm1kaXIiLCJmaWxlUGF0aCIsImZpbGVuYW1lIiwiaXNEaXJlY3RvcnkiLCJta2RpciIsIl9vcGVuIiwiX2Nsb3NlIiwicmVhbHBhdGgiLCJoYW5kbGVOZXR3b3JrIiwiZXhlYyIsImJ1ZmZlcmVkIiwiYnl0ZUxlbmd0aCIsInVucGlwZSIsIl9zb2NrIiwicHJvbWlzaWZ5Iiwic2Z0cCIsInJlYWRkaXIiLCJzdGF0Iiwib3BlbiIsImRuc0xvb2t1cCIsImxvb2t1cCIsImluaGVyaXRzIiwiSEFTSEVTIiwiZ2V0SGFzaGVzIiwic3NoMl9zdHJlYW1zIiwiY29uc3RzIiwiSFRUUEFnZW50cyIsIkNoYW5uZWwiLCJhZ2VudFF1ZXJ5IiwiU0ZUUFdyYXBwZXIiLCJNQVhfQ0hBTk5FTCIsIk1hdGgiLCJwb3ciLCJSRV9PUEVOU1NIIiwiREVCVUdfTk9PUCIsImxvY2FsQWRkcmVzcyIsImZvcmNlSVB2NCIsImZvcmNlSVB2NiIsImtlZXBhbGl2ZUNvdW50TWF4Iiwia2VlcGFsaXZlSW50ZXJ2YWwiLCJwcml2YXRlS2V5IiwiYWdlbnQiLCJhbGxvd0FnZW50RndkIiwiYXV0aEhhbmRsZXIiLCJob3N0SGFzaEFsZ28iLCJob3N0SGFzaENiIiwic3RyaWN0VmVuZG9yIiwiZGVidWciLCJfcmVhZHlUaW1lb3V0IiwiX2NoYW5uZWxzIiwiX2NhbGxiYWNrcyIsIl9mb3J3YXJkaW5nIiwiX2ZvcndhcmRpbmdVbml4IiwiX2FjY2VwdFgxMSIsIl9hZ2VudEZ3ZEVuYWJsZWQiLCJfY3VyQ2hhbiIsIl9yZW1vdGVWZXIiLCJfc3Noc3RyZWFtIiwiX3Jlc2V0S0EiLCJvcGVuQ2hhbm5lbCIsIm9wdHMiLCJsb2NhbENoYW4iLCJuZXh0Q2hhbm5lbCIsImluaXRXaW5kb3ciLCJNQVhfV0lORE9XIiwibWF4UGFja2V0IiwiUEFDS0VUX1NJWkUiLCJyZXQiLCJzc2hzdHJlYW0iLCJvblN1Y2Nlc3MiLCJvbkZhaWx1cmUiLCJkaXJlY3RUY3BpcCIsIm9wZW5zc2hfZGlyZWN0U3RyZWFtTG9jYWwiLCJjaGFuaW5mbyIsImluY29taW5nIiwiaWQiLCJ3aW5kb3ciLCJwYWNrZXRTaXplIiwic3RhdGUiLCJvdXRnb2luZyIsInNlbmRlciIsImRlc2NyaXB0aW9uIiwicmVhc29uIiwibGFuZyIsImNoYW5uZWxzIiwicmVxWDExIiwiY2hhbiIsInNjcmVlbiIsImNmZyIsInNpbmdsZSIsImNvb2tpZSIsInJhbmRvbUNvb2tpZSIsIndhbnRSZXBseSIsImhhZF9lcnIiLCJfaGFzWDExIiwiX2NsaWVudCIsIngxMUZvcndhcmQiLCJyZXFQdHkiLCJyb3dzIiwiY29scyIsIndpZHRoIiwiaGVpZ2h0IiwidGVybSIsIm1vZGVzIiwicHR5IiwicmVxQWdlbnRGd2QiLCJvcGVuc3NoX2FnZW50Rm9yd2FyZCIsInJlcUVudiIsImVudiIsInZhbCIsInJlcVN1YnN5c3RlbSIsInN1YnR5cGUiLCJzdWJzeXN0ZW0iLCJ3cml0YWJsZSIsImhvc3RuYW1lIiwiYWxnb3JpdGhtcyIsImtleCIsImtleEJ1ZiIsImNpcGhlciIsImNpcGhlckJ1ZiIsInNlcnZlckhvc3RLZXkiLCJzZXJ2ZXJIb3N0S2V5QnVmIiwiaG1hYyIsImhtYWNCdWYiLCJjb21wcmVzcyIsImNvbXByZXNzQnVmIiwiYWxnb3NTdXBwb3J0ZWQiLCJhbGdvTGlzdCIsIkFycmF5IiwiaXNBcnJheSIsImxvY2FsSG9zdG5hbWUiLCJsb2NhbFVzZXJuYW1lIiwiYWdlbnRGb3J3YXJkIiwiY2FsbGJhY2tzIiwicGFzc3BocmFzZSIsImdldFByaXZhdGVQRU0iLCJzb2NrIiwic3RkZXJyIiwicmVzdW1lIiwia2F0aW1lciIsImN1ckF1dGgiLCJrYWludGVydmFsIiwia2Fjb3VudG1heCIsImthY291bnQiLCJzZW5kS0EiLCJjbGVhckludGVydmFsIiwicmVhZGFibGUiLCJsZXZlbCIsInJlc2V0S0EiLCJwaW5nIiwic2V0SW50ZXJ2YWwiLCJjbGVhclRpbWVvdXQiLCJjYWxsYmFja3NfIiwiY2hhbk5vcyIsImVhcmx5Q2IiLCJldjEiLCJldjIiLCJoZWFkZXIiLCJ2ZXJzaW9ucyIsInNvZnR3YXJlIiwiZ3JlZXRpbmciLCJob3N0VmVyaWZpZXIiLCJob3N0SGFzaCIsImhhc2hDYiIsImhhc2hlciIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJhZ2VudEtleXMiLCJjdXJQYXJ0aWFsIiwiY3VyQXV0aHNMZWZ0IiwiYWdlbnRLZXlQb3MiLCJhdXRoc0FsbG93ZWQiLCJhdXRoUG9zIiwiYXV0aHNMZWZ0IiwicGFydGlhbCIsImhhc1NlbnRBdXRoIiwiZG9OZXh0QXV0aCIsImF1dGhOYW1lIiwib25VU0VSQVVUSF9GQUlMVVJFIiwib25VU0VSQVVUSF9QS19PSyIsImF1dGhQYXNzd29yZCIsImF1dGhQSyIsImF1dGhIb3N0YmFzZWQiLCJ0cnlOZXh0QXV0aCIsImF1dGhLZXlib2FyZCIsIm9uVVNFUkFVVEhfSU5GT19SRVFVRVNUIiwiYXV0aE5vbmUiLCJhdXRoIiwidHJ5TmV4dEFnZW50S2V5IiwiYXV0aEluZm9SZXMiLCJhbnN3ZXJzIiwiYWdlbnRLZXkiLCJwdWJLZXlGdWxsVHlwZSIsInB1YktleVR5cGUiLCJzaWduZWQiLCJzaWdGdWxsVHlwZUxlbiIsInNlcnZpY2UiLCJzdmNOYW1lIiwiYWNjZXB0IiwiY2hhbm5lbE9wZW5Db25maXJtIiwiY2hhbm5lbE9wZW5GYWlsIiwicmVqZWN0Q29ubiIsImRlc3RJUCIsImRlc3RQb3J0Iiwic29ja2V0UGF0aCIsIm9uQ0hBTk5FTF9PUEVOIiwic2hpZnQiLCJyZXF1ZXN0RmFpbHVyZSIsInN0YXJ0VGltZW91dCIsImRvQ29ubmVjdCIsInNldE5vRGVsYXkiLCJzZXRNYXhMaXN0ZW5lcnMiLCJhZGRyZXNzIiwiY21kIiwiYWxsb3dIYWxmT3BlbiIsInRvZG8iLCJyZXFDYiIsIngxMSIsInJlcUV4ZWMiLCJzaGVsbCIsInduZG9wdHMiLCJyZXFTaGVsbCIsInN1YnN5cyIsInNlcnZlcklkZW50UmF3IiwiX3N0YXRlIiwiaWRlbnRSYXciLCJvbkV4aXQiLCJzaWduYWwiLCJmb3J3YXJkSW4iLCJiaW5kQWRkciIsImJpbmRQb3J0IiwicmVhbFBvcnQiLCJyZW1vdGVCdWdzIiwidGNwaXBGb3J3YXJkIiwidW5mb3J3YXJkSW4iLCJjYW5jZWxUY3BpcEZvcndhcmQiLCJmb3J3YXJkT3V0Iiwic3JjSVAiLCJzcmNQb3J0IiwiZHN0SVAiLCJkc3RQb3J0Iiwib3BlbnNzaF9ub01vcmVTZXNzaW9ucyIsInByb2Nlc3MiLCJuZXh0VGljayIsIm9wZW5zc2hfZm9yd2FyZEluU3RyZWFtTG9jYWwiLCJvcGVuc3NoX3N0cmVhbUxvY2FsRm9yd2FyZCIsIm9wZW5zc2hfdW5mb3J3YXJkSW5TdHJlYW1Mb2NhbCIsIm9wZW5zc2hfY2FuY2VsU3RyZWFtTG9jYWxGb3J3YXJkIiwib3BlbnNzaF9mb3J3YXJkT3V0U3RyZWFtTG9jYWwiLCJyYW5kb21GaWxsU3luYyIsImFsbG9jIiwicmFuZG9tQnl0ZXMiLCJTZXJ2ZXIiLCJTRlRQX1NUQVRVU19DT0RFIiwiU1RBVFVTX0NPREUiLCJTRlRQX09QRU5fTU9ERSIsIk9QRU5fTU9ERSIsIkhUVFBBZ2VudCIsIlNTSFRUUEFnZW50IiwiSFRUUFNBZ2VudCIsIlNTSFRUUFNBZ2VudCIsInNhZmVyIiwiU2FmZXIiLCJVaW50OEFycmF5IiwiZW5jb2RpbmdPck9mZnNldCIsIlR5cGVFcnJvciIsImZpbGwiLCJSYW5nZUVycm9yIiwia1N0cmluZ01heExlbmd0aCIsImJpbmRpbmciLCJNQVhfTEVOR1RIIiwia01heExlbmd0aCIsIk1BWF9TVFJJTkdfTEVOR1RIIiwiY3J5cHRvU2lnbiIsImNyeXB0b1ZlcmlmeSIsImNyZWF0ZVNpZ24iLCJjcmVhdGVWZXJpZnkiLCJjcmVhdGVEZWNpcGhlcml2IiwiY3JlYXRlSG1hYyIsInN1cHBvcnRlZE9wZW5TU0xDaXBoZXJzIiwiZ2V0Q2lwaGVycyIsImJjcnlwdF9wYmtkZiIsInBia2RmIiwiYnVmZmVySGVscGVycyIsIlNZTV9IQVNIX0FMR08iLCJTWU1fUFJJVl9QRU0iLCJTWU1fUFVCX1BFTSIsIlNZTV9QVUJfU1NIIiwiU1lNX0RFQ1JZUFRFRCIsIkNJUEhFUl9JTkZPX09QRU5TU0wiLCJjaXBoZXJOYW1lIiwidHJpbVN0YXJ0IiwiU3RyaW5nIiwiY2hhckNvZGVBdCIsIm1ha2VQRU0iLCJjb21iaW5lQnVmZmVycyIsImJ1ZjEiLCJidWYyIiwic2tpcEZpZWxkcyIsIm5maWVsZHMiLCJidWZMZW4iLCJnZW5PcGVuU1NMUlNBUHViIiwid3JpdGVPSUQiLCJ3cml0ZU51bGwiLCJ3cml0ZUJ5dGUiLCJnZW5PcGVuU1NIUlNBUHViIiwicHVibGljS2V5IiwiZ2VuT3BlblNTTFJTQVByaXYiLCJnZW5SU0FBU04xQnVmIiwicSIsImRtcDEiLCJkbXExIiwiaXFtcCIsIndyaXRlSW50IiwiRnVuY3Rpb24iLCJCaWdJbnQiLCJibiIsImhleCIsInNpZ2JpdCIsIkJpZ0ludGVnZXIiLCJwYmkiLCJxYmkiLCJkYmkiLCJkbXAxYmkiLCJzdWJ0cmFjdCIsIk9ORSIsImRtcTFiaSIsInRvQnl0ZUFycmF5IiwiZ2VuT3BlblNTTERTQVB1YiIsImciLCJ5IiwiZ2VuT3BlblNTSERTQVB1YiIsImdlbk9wZW5TU0xEU0FQcml2IiwieCIsImdlbk9wZW5TU0xFZFB1YiIsInB1YiIsIl9lbnN1cmUiLCJfYnVmIiwiX29mZnNldCIsImdlbk9wZW5TU0hFZFB1YiIsImdlbk9wZW5TU0xFQ0RTQVB1YiIsIm9pZCIsIlEiLCJnZW5PcGVuU1NIRUNEU0FQdWIiLCJjdXJ2ZU5hbWUiLCJnZW5PcGVuU1NMRUNEU0FQcml2IiwicHJpdiIsInJlZ2V4cCIsIkJhc2VLZXkiLCJwZW0iLCJwcml2S2V5IiwidHJ5U2lnbiIsInZlcmlmaWVyIiwicHViS2V5IiwidHJ5VmVyaWZ5IiwiZ2V0UHVibGljUEVNIiwiZ2V0UHVibGljU1NIIiwiT3BlblNTSF9Qcml2YXRlIiwiY29tbWVudCIsInByaXZQRU0iLCJwdWJQRU0iLCJwdWJTU0giLCJhbGdvIiwiZGVjcnlwdGVkIiwiT3BlblNTSF9PbGRfUHJpdmF0ZSIsIlBQS19Qcml2YXRlIiwicGFyc2VERVIiLCJiYXNlVHlwZSIsImZ1bGxUeXBlIiwiZWRwdWIiLCJlY3B1YiIsIk9wZW5TU0hfUHVibGljIiwiUkZDNDcxNl9QdWJsaWMiLCJwYXJzZSIsIm1hZ2ljIiwiZW5jSW5mbyIsImNpcGhlcktleSIsImNpcGhlcklWIiwia2RmTmFtZSIsImtkZk9wdGlvbnMiLCJzYWx0Iiwicm91bmRzIiwiZ2VuIiwia2V5Q291bnQiLCJwdWJEYXRhIiwicHJpdkJsb2IiLCJhdXRoVGFnTGVuZ3RoIiwiZGVjaXBoZXIiLCJzZXRBdXRoVGFnIiwiZmluYWwiLCJua2V5cyIsImNoZWNrMSIsImNoZWNrMiIsImVkcHJpdiIsImVjcHJpdiIsInByaXZDb21tZW50IiwiY250IiwicGFyc2VPcGVuU1NIUHJpdktleXMiLCJyZWFkZXIiLCJoZWFkZXJzIiwic2VwSWR4IiwiaXZTbGljZSIsInNldEF1dG9QYWRkaW5nIiwidGVtcEVDREgiLCJlcnJNc2ciLCJlY1NTTE5hbWUiLCJlY1ByaXYiLCJyZWFkQnl0ZSIsInJlYWRMZW5ndGgiLCJyZWFkT0lEIiwicHViQmxvYiIsImNyZWF0ZUVDREgiLCJzZXRQcml2YXRlS2V5IiwiZ2V0UHVibGljS2V5IiwiRU1QVFlfUEFTU1BIUkFTRSIsIlBQS19JViIsIlBQS19QUDEiLCJQUEtfUFAyIiwiZW5jcnlwdGVkIiwibWFjIiwidHlwZUxlbiIsImNpcGhlck5hbWVMZW4iLCJjb21tZW50TGVuIiwicHViTGVuIiwicHJpdkxlbiIsIm1hY0RhdGEiLCJSRV9IRUFERVIiLCJSRV9IRUFERVJfRU5EUyIsInBhcnNlREVSS2V5IiwiRHVwbGV4U3RyZWFtIiwiRHVwbGV4IiwiUmVhZGFibGVTdHJlYW0iLCJXcml0YWJsZVN0cmVhbSIsIldyaXRhYmxlIiwiQ1VTVE9NX0VWRU5UUyIsIkNVU1RPTV9FVkVOVFNfTEVOIiwic3RyZWFtT3B0cyIsImhpZ2hXYXRlck1hcmsiLCJzZXJ2ZXIiLCJleGl0Q29kZSIsImV4aXRTaWduYWwiLCJleGl0RHVtcCIsImV4aXREZXNjIiwiZXhpdExhbmciLCJpbmNvbWluZ0lkIiwib25kcmFpbiIsIl93YWl0Q2xpZW50RHJhaW4iLCJfd2FpdFdpbmRvdyIsIl9jaHVuayIsIl93cml0ZSIsIl9jaHVua2NiIiwiX2NodW5rRXJyIiwiX2NodW5rY2JFcnIiLCJvbkZpbmlzaCIsImVvZiIsIm9uRW5kIiwiZW5kaW5nIiwid2luZG93QWRqdXN0IiwiX3dhaXRDaGFuRHJhaW4iLCJhbXQiLCJfa2FsYXN0Iiwibm93IiwiX2thY250IiwiY29yZWR1bXAiLCJjaGFubmVsRmFpbHVyZSIsInN0ZGluIiwic3Rkb3V0IiwiU2VydmVyU3RkZXJyIiwiX3JlYWQiLCJjaGFubmVsV2luZG93QWRqdXN0IiwiY2hhbm5lbCIsIl9jaGFubmVsIiwiY2hhbm5lbEVPRiIsImNoYW5uZWxDbG9zZSIsInNsaWNlTGVuIiwiY2hhbm5lbERhdGEiLCJzZXRXaW5kb3ciLCJ3aW5kb3dDaGFuZ2UiLCJzaWduYWxOYW1lIiwiZXhpdCIsImNvcmVEdW1wZWQiLCJleGl0U3RhdHVzIiwiY2hhbm5lbEV4dERhdGEiLCJ3b3JrZXJzIiwidGFza3MiLCJUYXNrc01hbmFnZXIiLCJ0cmFuc2ZlcnMiLCJzdHJhdGVnaWVzIiwiZnRwcyIsImhhbmRsZVdvcmtlckV2ZW50cyIsImluc3RhbmNlIiwib25Db25uZWN0Iiwib25Qcm9ncmVzcyIsImNsZWFyV29ya2VyRXZlbnRzIiwiZ2V0V29ya2VySW5zdGFuY2UiLCJpbmRleCIsIndvcmtlckZpbHRlciIsIndvcmtlciIsInBvb2wiLCJfY29uZmlnIiwic3RyYXRlZ3kiLCJfY29ubmVjdGlvbk9wdGlvbnMiLCJmb3JFYWNoIiwiY3JlYXRlV29ya2VyIiwic2V0V29ya2VyR3JvdXBzIiwidHJhbnNmZXJQb29sIiwicmVwZWF0Iiwic2V0V29ya2VycyIsImFsbCIsImRlbGV0ZUFsbFRhc2tzIiwiYWJvcnQiLCJ0cmFuc2ZlcklkcyIsIndvcmtlckluZGV4ZXMiLCJpbnN0YW5jZXMiLCJ3b3JrZXJJbmRleCIsImRlbGV0ZVRhc2tzIiwicGF1c2VXb3JrZXJzIiwicmVzdW1lV29ya2VycyIsImxvY2FsUGF0aCIsImZsYWdzIiwiZ2V0UGF0aEZyb21TdHJlYW0iLCJ0YXNrSWQiLCJ0b3RhbEJ5dGVzIiwiZ2V0RmlsZVNpemUiLCJkaXJlY3Rpb24iLCJjcmVhdGVUYXNrSWQiLCJkZWxldGUiLCJERUZBVUxUX0dST1VQX0ZJTFRFUiIsInF1ZXVlIiwidGFza0NvdW50ZXIiLCJ1bmF2YWlsYWJsZVdvcmtlcnMiLCJnZXRXb3JrZXIiLCJidXN5IiwiZmluaXNoVGFzayIsInByb2Nlc3NOZXh0IiwicGF1c2VkIiwiaW5kZXhlcyIsIndvcmtlcnNDaGVjayIsImxpc3RlbmVyIiwiZ2V0V29ya2VycyIsImlkcyIsImZzXzEiLCJwYXRoXzEiLCJ1dGlsXzEiLCJGdHBDb250ZXh0XzEiLCJwYXJzZUxpc3RfMSIsIlByb2dyZXNzVHJhY2tlcl8xIiwiU3RyaW5nV3JpdGVyXzEiLCJwYXJzZUxpc3RNTFNEXzEiLCJmc1JlYWREaXIiLCJmc01rRGlyIiwiZnNTdGF0IiwiZnNPcGVuIiwiZnNDbG9zZSIsImZzVW5saW5rIiwiaWdub3JlRXJyb3IiLCJmdW5jIiwiYXZhaWxhYmxlTGlzdENvbW1hbmRzIiwiX2VudGVyRmlyc3RDb21wYXRpYmxlTW9kZSIsIl9wcm9ncmVzc1RyYWNrZXIiLCJQcm9ncmVzc1RyYWNrZXIiLCJzdG9wIiwicmVzZXQiLCJfaGFuZGxlQ29ubmVjdFJlc3BvbnNlIiwiaWdub3JlRXJyb3JDb2Rlc0RFUFJFQ0FURUQiLCJzZW5kSWdub3JpbmdFcnJvciIsImhhc1RMUyIsInVzZUV4cGxpY2l0VExTIiwid2VsY29tZSIsImNvbm5lY3RJbXBsaWNpdFRMUyIsInVzZVRMUyIsImxvZ2luIiwidXNlRGVmYXVsdFNldHRpbmdzIiwiZmVhdHVyZXMiLCJ2YWxpZFBhdGgiLCJwcm90ZWN0V2hpdGVzcGFjZSIsInNyY1BhdGgiLCJkZXN0UGF0aCIsInZhbGlkU3JjIiwidmFsaWREZXN0IiwiaWdub3JlRXJyb3JDb2RlcyIsImJ5dGVzT3ZlcmFsbCIsInJlcG9ydFRvIiwidG9SZW1vdGVQYXRoIiwiX3VwbG9hZFdpdGhDb21tYW5kIiwiX3VwbG9hZExvY2FsRmlsZSIsIl91cGxvYWRGcm9tU3RyZWFtIiwiZmQiLCJsb2NhbFN0YXJ0IiwibG9jYWxFbmRJbmNsdXNpdmUiLCJmcm9tUmVtb3RlUGF0aCIsIl9kb3dubG9hZFRvRmlsZSIsIl9kb3dubG9hZFRvU3RyZWFtIiwiYXBwZW5kaW5nVG9Mb2NhbEZpbGUiLCJmaWxlU3lzdGVtRmxhZ3MiLCJsb2NhbEZpbGVTdGF0cyIsImhhc0Rvd25sb2FkZWREYXRhIiwibGFzdEVycm9yIiwiY2FuZGlkYXRlIiwicGFyc2VkTGlzdCIsIl9yZXF1ZXN0TGlzdFdpdGhDb21tYW5kIiwiU3RyaW5nV3JpdGVyIiwiZ2V0VGV4dCIsInJlbW90ZURpclBhdGgiLCJfZXhpdEF0Q3VycmVudERpcmVjdG9yeSIsImNkIiwiY2xlYXJXb3JraW5nRGlyIiwiY2R1cCIsImxvY2FsRGlyUGF0aCIsImVuc3VyZURpciIsIl91cGxvYWRUb1dvcmtpbmdEaXIiLCJmdWxsUGF0aCIsInN0YXRzIiwiaXNGaWxlIiwiX29wZW5EaXIiLCJfZG93bmxvYWRGcm9tV29ya2luZ0RpciIsInJlY3Vyc2l2ZSIsImVuc3VyZUxvY2FsRGlyZWN0b3J5IiwibmFtZXMiLCJkaXJOYW1lIiwiZW5kc1dpdGgiLCJ1c2VyRGlyIiwiYXBwZW5kRnJvbSIsInVwbG9hZEZyb21EaXIiLCJkb3dubG9hZFRvRGlyIiwiUkVfTElORSIsInBhcnNlTW9kZSIsInciLCJleGVjVG9rZW4iLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInN1YnN0cmluZyIsIm5vb3AiLCJpbnRlcnZhbE1zIiwib25TdG9wIiwib25IYW5kbGUiLCJsYXN0Qnl0ZXMiLCJ1cGRhdGVGdW5jIiwic3RvcFdpdGhVcGRhdGUiLCJwb2xsIiwiYnl0ZXNSZWFkIiwiYnl0ZXNXcml0dGVuIiwic3RyZWFtXzEiLCJhcmd1bWVudHMiLCJfIiwic3BlZWQiLCJldGEiLCJwZXJjZW50Iiwic3RhcnRUaW1lIiwiZWxhcHNlZCIsInJvdW5kIiwicmF0ZSIsImNvdW50IiwiVHJhbnNmb3JtU3RyZWFtIiwiVHJhbnNmb3JtIiwidXRpbCIsImlzRGF0ZSIsImxpc3RlbmVyQ291bnQiLCJmcyIsIkFUVFIiLCJPSyIsIkVPRiIsIk5PX1NVQ0hfRklMRSIsIlBFUk1JU1NJT05fREVOSUVEIiwiRkFJTFVSRSIsIkJBRF9NRVNTQUdFIiwiTk9fQ09OTkVDVElPTiIsIk9QX1VOU1VQUE9SVEVEIiwiU1RBVFVTX0NPREVfU1RSIiwiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiUkVRVUVTVCIsIklOSVQiLCJPUEVOIiwiQ0xPU0UiLCJSRUFEIiwiV1JJVEUiLCJMU1RBVCIsIkZTVEFUIiwiU0VUU1RBVCIsIkZTRVRTVEFUIiwiT1BFTkRJUiIsIlJFQURESVIiLCJSRU1PVkUiLCJNS0RJUiIsIlJNRElSIiwiUkVBTFBBVEgiLCJTVEFUIiwiUkVOQU1FIiwiUkVBRExJTksiLCJTWU1MSU5LIiwiRVhURU5ERUQiLCJSRVNQT05TRSIsIlZFUlNJT04iLCJTVEFUVVMiLCJIQU5ETEUiLCJEQVRBIiwiTkFNRSIsIkFUVFJTIiwiQVBQRU5EIiwiQ1JFQVQiLCJUUlVOQyIsIkVYQ0wiLCJNQVhfUkVRSUQiLCJDTElFTlRfVkVSU0lPTl9CVUZGRVIiLCJTRVJWRVJfVkVSU0lPTl9CVUZGRVIiLCJyZW1vdGVJZGVudFJhdyIsIl9pc09wZW5TU0giLCJfbmVlZENvbnRpbnVlIiwic3RhdHVzIiwid3JpdGVSZXFpZCIsInBrdExlZnQiLCJwa3RIZHJCdWYiLCJwa3RCdWYiLCJwa3RUeXBlIiwidmVyc2lvbiIsImV4dGVuc2lvbnMiLCJtYXhEYXRhTGVuIiwicmVxdWVzdHMiLCJmYXN0WGZlciIsInNyYyIsImRzdCIsImRzdFBhdGgiLCJvbnN0ZXAiLCJmaWxlU2l6ZSIsImZzaXplIiwiY29uY3VycmVuY3kiLCJjaHVua1NpemUiLCJzdGVwIiwibW9kZU51bSIsInNyY0hhbmRsZSIsImRzdEhhbmRsZSIsInJlYWRidWYiLCJwZHN0IiwidG90YWwiLCJidWZzaXplIiwib25lcnJvciIsImNiZmluYWwiLCJzb3VyY2VIYW5kbGUiLCJ0cnlTdGF0IiwiZXJyXyIsImF0dHJzXyIsImRlc3RIYW5kbGUiLCJ0cnlDcmVhdGVCdWZmZXIiLCJvbnJlYWQiLCJuYiIsImRzdHBvcyIsImRhdGFwb3MiLCJvcmlnQ2h1bmtMZW4iLCJ3cml0ZUNiIiwic2luZ2xlUmVhZCIsIndyaXRlRGF0YSIsIm1ha2VDYiIsInBzcmMiLCJyZWFkIiwicmVhZERhdGEiLCJzdGFydFJlYWRzIiwicmVhZHMiLCJmY2htb2QiLCJ0cnlBZ2FpbiIsImNobW9kIiwiZnN0YXQiLCJ3cml0ZUFsbCIsInBvc2l0aW9uIiwiY2FsbGJhY2tfIiwid3JpdGVFcnIiLCJ3cml0dGVuIiwicmVhZEF0dHJzIiwiU3RhdHMiLCJyZWFkVUludDY0QkUiLCJ1aWQiLCJnaWQiLCJhdGltZSIsImV4dGNvdW50IiwiYXR0cnNUb0J5dGVzIiwiYXR0ckJ5dGVzIiwibmJ5dGVzIiwic2l6ZUJ5dGVzIiwidG9Vbml4VGltZXN0YW1wIiwiZ2V0VGltZSIsIl9fcmVhZCIsIl9fcHVzaCIsIl9yZWFkYWJsZVN0YXRlIiwiZW5kRW1pdHRlZCIsImZsb3dpbmciLCJfdHJhbnNmb3JtIiwiY2h1bmtMZWZ0IiwiY2h1bmtMZW4iLCJjaHVua1BvcyIsImV4dG5hbWUiLCJleHRkYXRhIiwiYnVmbGVuIiwiZXZOYW1lIiwicGZsYWdzIiwic3RyMSIsInN0cjIiLCJyZXEiLCJkYXRhTGVuIiwicmVxQnVmTGVuIiwibmFtZXNMZW4iLCJleHRlbmRlZCIsImZfYnNpemUiLCJmX2Zyc2l6ZSIsImZfYmxvY2tzIiwiZl9iZnJlZSIsImZfYmF2YWlsIiwiZl9maWxlcyIsImZfZmZyZWUiLCJmX2ZhdmFpbCIsImZfc2lkIiwiZl9mbGFnIiwiZl9uYW1lbWF4IiwiZXJyQ29kZSIsIlJlYWRTdHJlYW0iLCJXcml0ZVN0cmVhbSIsImZsYWdzXyIsInN0cmluZ1RvRmxhZ3MiLCJhdHRyRmxhZ3MiLCJwYXRobGVuIiwicmVxaWQiLCJqIiwibGVuMiIsImhhbmRsZWxlbiIsIm9mZiIsIm91dCIsIl93YW50RU9GRXJyb3IiLCJvdmVyZmxvdyIsIm9yaWdQb3NpdGlvbiIsImZhc3RHZXQiLCJmYXN0UHV0IiwicmVhZEZpbGUiLCJmbGFnIiwiYnVmZmVycyIsImlzRW5jb2RpbmciLCJhZnRlclJlYWQiLCJlciIsImhhbmRsZV8iLCJzdCIsImVyXyIsInN0XyIsIndyaXRlRmlsZSIsIm9wZW5FcnIiLCJhcHBlbmRGaWxlIiwiX2V4dGVuZCIsImZuYW1lbGVuIiwib2xkUGF0aCIsIm5ld1BhdGgiLCJvbGRsZW4iLCJuZXdsZW4iLCJ3aGVyZSIsImRvRmlsdGVyIiwiZnVsbCIsImVudHJpZXMiLCJvcGVuZGlyIiwicmVyZWFkIiwic3BsaWNlIiwibHN0YXQiLCJzZXRzdGF0IiwiZnNldHN0YXQiLCJmdXRpbWVzIiwidXRpbWVzIiwiZmNob3duIiwiY2hvd24iLCJyZWFkbGluayIsInN5bWxpbmsiLCJ0YXJnZXRQYXRoIiwibGlua1BhdGgiLCJsaW5rbGVuIiwidGFyZ2V0bGVuIiwiZXh0X29wZW5zc2hfcmVuYW1lIiwiZXh0X29wZW5zc2hfc3RhdHZmcyIsImV4dF9vcGVuc3NoX2ZzdGF0dmZzIiwiZXh0X29wZW5zc2hfaGFyZGxpbmsiLCJleHRfb3BlbnNzaF9mc3luYyIsIm1zZ0xlbiIsImxhbmdMZW4iLCJoYW5kbGVMZW4iLCJuYW1lQXR0cnMiLCJhdHRyIiwic3RyaW5nRmxhZ01hcCIsInN0cmluZ0ZsYWdNYXBLZXlzIiwiaW5pdGlhbCIsImZsYWdzVG9TdHJpbmciLCJfY2hlY2tNb2RlUHJvcGVydHkiLCJTX0lGTVQiLCJTX0lGRElSIiwiU19JRlJFRyIsImlzQmxvY2tEZXZpY2UiLCJTX0lGQkxLIiwiaXNDaGFyYWN0ZXJEZXZpY2UiLCJTX0lGQ0hSIiwiU19JRkxOSyIsImlzRklGTyIsIlNfSUZJRk8iLCJpc1NvY2tldCIsIlNfSUZTT0NLIiwiZnNDb21wYXQiLCJ2YWxpZGF0ZU51bWJlciIsImRlc3Ryb3lJbXBsIiwiRVJSX09VVF9PRl9SQU5HRSIsIkVSUl9JTlZBTElEX0FSR19UWVBFIiwicG9vbEZyYWdtZW50cyIsImNoZWNrUG9zaXRpb24iLCJpc1NhZmVJbnRlZ2VyIiwiaXNJbnRlZ2VyIiwicm91bmRVcFRvTXVsdGlwbGVPZjgiLCJlbWl0Q2xvc2UiLCJfb3BlbmluZyIsImNsb3NlU3RyZWFtIiwib25jbG9zZSIsInNldERlZmF1bHRFbmNvZGluZyIsImZpbmFsQ2FsbGVkIiwiZGVzdHJveWVkIiwicG9vbFNpemUiLCJ1c2VkIiwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIiwicG9wIiwidGhpc1Bvb2wiLCJ0b1JlYWQiLCJtaW4iLCJiIiwibmV3VXNlZCIsImFsaWduZWRFbmQiLCJhbGlnbmVkU3RhcnQiLCJfZGVzdHJveSIsImNvbmZpZ3VyYWJsZSIsIl9maW5hbCIsIl93cml0ZXYiLCJ3cml0ZXNMZWZ0Iiwib253cml0ZSIsImRlc3Ryb3lTb29uIiwiZXJyb3JzIiwidHlwZXMiLCJhc3NlcnQiLCJBU04xIiwiX3NpemUiLCJfbGVuIiwicGVlayIsImxlbkIiLCJ0YWciLCJzZXEiLCJfcmVhZFRhZyIsInJlYWRCb29sZWFuIiwicmVhZEVudW1lcmF0aW9uIiwicmV0YnVmIiwidmFsdWVzIiwiYnl0ZSIsIm9rIiwiZmIiLCJERUZBVUxUX09QVFMiLCJncm93dGhGYWN0b3IiLCJ0byIsImVxdWFsIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9vcHRpb25zIiwiX3NlcSIsInN6Iiwid3JpdGVFbnVtZXJhdGlvbiIsIndyaXRlQm9vbGVhbiIsIndyaXRlU3RyaW5nIiwid3JpdGVMZW5ndGgiLCJ3cml0ZVN0cmluZ0FycmF5Iiwic3RyaW5ncyIsInRtcCIsIm9jdGV0IiwiZW5jb2RlT2N0ZXQiLCJfc2hpZnQiLCJjcnlwdG9faGFzaF9zaGE1MTIiLCJsb3dsZXZlbCIsImNyeXB0b19oYXNoIiwiQkxGX0oiLCJCbG93ZmlzaCIsIlMiLCJVaW50MzJBcnJheSIsIlAiLCJGIiwieDgiLCJzdHJlYW0yd29yZCIsImRhdGFieXRlcyIsInRlbXAiLCJlbmNpcGhlciIsImJ5dGVPZmZzZXQiLCJzdWJhcnJheSIsImV4cGFuZDBzdGF0ZSIsImtleWJ5dGVzIiwiZDgiLCJleHBhbmRzdGF0ZSIsImVuYyIsImJsb2NrcyIsImRlYyIsImJjcnlwdF9oYXNoIiwic2hhMnBhc3MiLCJzaGEyc2FsdCIsImNkYXRhIiwiY2lwaGVydGV4dCIsIkJMT0NLUyIsIkhBU0hTSVpFIiwiaGFzaCIsInBhc3MiLCJwYXNzbGVuIiwic2FsdGxlbiIsImtleWxlbiIsInN0cmlkZSIsInRtcG91dCIsImNvdW50c2FsdCIsIm9yaWdrZXlsZW4iLCJmbG9vciIsIm5hY2wiLCJnZiIsImluaXQiLCJGbG9hdDY0QXJyYXkiLCJyYW5kb21ieXRlcyIsIl8wIiwiXzkiLCJnZjAiLCJnZjEiLCJfMTIxNjY1IiwiRCIsIkQyIiwiWCIsIlkiLCJJIiwidHM2NCIsImgiLCJ2biIsInhpIiwieWkiLCJjcnlwdG9fdmVyaWZ5XzE2IiwiY3J5cHRvX3ZlcmlmeV8zMiIsImNyeXB0b19jb3JlX3NhbHNhMjAiLCJpbnAiLCJ1IiwiajAiLCJqMSIsImoyIiwiajMiLCJqNCIsImo1IiwiajYiLCJqNyIsImo4IiwiajkiLCJqMTAiLCJqMTEiLCJqMTIiLCJqMTMiLCJqMTQiLCJqMTUiLCJ4MCIsIngxIiwieDIiLCJ4MyIsIng0IiwieDUiLCJ4NiIsIng3IiwieDkiLCJ4MTAiLCJ4MTIiLCJ4MTMiLCJ4MTQiLCJ4MTUiLCJjb3JlX3NhbHNhMjAiLCJjcnlwdG9fY29yZV9oc2Fsc2EyMCIsImNvcmVfaHNhbHNhMjAiLCJzaWdtYSIsImNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3IiLCJjcG9zIiwibXBvcyIsInoiLCJjcnlwdG9fc3RyZWFtX3NhbHNhMjAiLCJjcnlwdG9fc3RyZWFtIiwic24iLCJjcnlwdG9fc3RyZWFtX3hvciIsInBvbHkxMzA1IiwidDAiLCJ0MSIsInQyIiwidDMiLCJ0NCIsInQ1IiwidDYiLCJ0NyIsIlVpbnQxNkFycmF5IiwicGFkIiwibGVmdG92ZXIiLCJmaW4iLCJjcnlwdG9fb25ldGltZWF1dGgiLCJvdXRwb3MiLCJjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5IiwiaHBvcyIsImNyeXB0b19zZWNyZXRib3giLCJjcnlwdG9fc2VjcmV0Ym94X29wZW4iLCJzZXQyNTUxOSIsImEiLCJjYXIyNTUxOSIsInNlbDI1NTE5IiwicGFjazI1NTE5IiwibmVxMjU1MTkiLCJwYXIyNTUxOSIsInVucGFjazI1NTE5IiwiQSIsIloiLCJNIiwidDgiLCJ0OSIsInQxMCIsInQxMSIsInQxMiIsInQxMyIsInQxNCIsInQxNSIsInQxNiIsInQxNyIsInQxOCIsInQxOSIsInQyMCIsInQyMSIsInQyMiIsInQyMyIsInQyNCIsInQyNSIsInQyNiIsInQyNyIsInQyOCIsInQyOSIsInQzMCIsImIwIiwiYjEiLCJiMiIsImIzIiwiYjQiLCJiNSIsImI2IiwiYjciLCJiOCIsImI5IiwiYjEwIiwiYjExIiwiYjEyIiwiYjEzIiwiYjE0IiwiYjE1IiwiaW52MjU1MTkiLCJjcnlwdG9fc2NhbGFybXVsdCIsIngzMiIsIngxNiIsImNyeXB0b19zY2FsYXJtdWx0X2Jhc2UiLCJjcnlwdG9fYm94X2tleXBhaXIiLCJjcnlwdG9fYm94X2JlZm9yZW5tIiwiZDAiLCJkMSIsImQyIiwiZDMiLCJkNCIsImQ1IiwiZDYiLCJkNyIsImQ5IiwiaGliaXQiLCJoMCIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImg3IiwiaDgiLCJoOSIsInIwIiwicjEiLCJyMiIsInIzIiwicjQiLCJyNSIsInI2IiwicjciLCJyOCIsInI5IiwibWFjcG9zIiwibWFzayIsIndhbnQiLCJjcnlwdG9fYm94X2FmdGVybm0iLCJjcnlwdG9fYm94X29wZW5fYWZ0ZXJubSIsIksiLCJjcnlwdG9faGFzaGJsb2Nrc19obCIsImhoIiwiaGwiLCJiaDAiLCJiaDEiLCJiaDIiLCJiaDMiLCJiaDQiLCJiaDUiLCJiaDYiLCJiaDciLCJibDAiLCJibDEiLCJibDIiLCJibDMiLCJibDQiLCJibDUiLCJibDYiLCJibDciLCJ0aCIsInRsIiwid2giLCJJbnQzMkFycmF5Iiwid2wiLCJhaDAiLCJhaDEiLCJhaDIiLCJhaDMiLCJhaDQiLCJhaDUiLCJhaDYiLCJhaDciLCJhbDAiLCJhbDEiLCJhbDIiLCJhbDMiLCJhbDQiLCJhbDUiLCJhbDYiLCJhbDciLCJhZGQiLCJjc3dhcCIsInBhY2siLCJ0eCIsInR5IiwiemkiLCJzY2FsYXJtdWx0Iiwic2NhbGFyYmFzZSIsImNyeXB0b19zaWduX2tleXBhaXIiLCJwayIsInNrIiwic2VlZGVkIiwiTCIsIm1vZEwiLCJjYXJyeSIsInJlZHVjZSIsImNyeXB0b19zaWduIiwic20iLCJzbWxlbiIsInVucGFja25lZyIsImNoayIsIm51bSIsImRlbiIsImRlbjIiLCJkZW40IiwiZGVuNiIsInBvdzI1MjMiLCJjcnlwdG9fc2lnbl9vcGVuIiwiY2hlY2tMZW5ndGhzIiwiY2hlY2tBcnJheVR5cGVzIiwiY2xlYW51cCIsImFyciIsImNyeXB0b19ib3giLCJjcnlwdG9fYm94X29wZW4iLCJjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTIiwiY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTIiwiY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMiLCJjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyIsImNyeXB0b19zY2FsYXJtdWx0X0JZVEVTIiwiY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMiLCJjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTIiwiY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUyIsImNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyIsImNyeXB0b19ib3hfTk9OQ0VCWVRFUyIsImNyeXB0b19ib3hfWkVST0JZVEVTIiwiY3J5cHRvX2JveF9CT1haRVJPQllURVMiLCJjcnlwdG9fc2lnbl9CWVRFUyIsImNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTIiwiY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMiLCJjcnlwdG9fc2lnbl9TRUVEQllURVMiLCJjcnlwdG9faGFzaF9CWVRFUyIsImRlY29kZVVURjgiLCJlbmNvZGVVVEY4IiwiZW5jb2RlQmFzZTY0IiwiZGVjb2RlQmFzZTY0Iiwic2VjcmV0Ym94Iiwibm9uY2UiLCJib3giLCJrZXlMZW5ndGgiLCJub25jZUxlbmd0aCIsIm92ZXJoZWFkTGVuZ3RoIiwic2NhbGFyTXVsdCIsImJhc2UiLCJzY2FsYXJMZW5ndGgiLCJncm91cEVsZW1lbnRMZW5ndGgiLCJzZWNyZXRLZXkiLCJiZWZvcmUiLCJjaGVja0JveExlbmd0aHMiLCJhZnRlciIsImtleVBhaXIiLCJmcm9tU2VjcmV0S2V5IiwicHVibGljS2V5TGVuZ3RoIiwic2VjcmV0S2V5TGVuZ3RoIiwic2hhcmVkS2V5TGVuZ3RoIiwic2lnbmVkTXNnIiwibWxlbiIsImRldGFjaGVkIiwiZnJvbVNlZWQiLCJzZWVkIiwic2VlZExlbmd0aCIsInNpZ25hdHVyZUxlbmd0aCIsImhhc2hMZW5ndGgiLCJzZXRQUk5HIiwibXNDcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJmcm9tTnVtYmVyIiwiZnJvbVN0cmluZyIsIm5iaSIsImFtIiwieGwiLCJ4aCIsIkRCIiwiRE0iLCJEViIsIkZWIiwiRjEiLCJCSV9GUCIsIkYyIiwicnIiLCJ2diIsIkJJX1JDIiwiaW50MmNoYXIiLCJpbnRBdCIsIm5idiIsImZyb21JbnQiLCJuYml0cyIsIkNsYXNzaWMiLCJNb250Z29tZXJ5IiwibXAiLCJpbnZEaWdpdCIsIm1wbCIsIm1waCIsInVtIiwibXQyIiwib3BfYW5kIiwib3Bfb3IiLCJvcF94b3IiLCJvcF9hbmRub3QiLCJsYml0IiwiY2JpdCIsIk51bGxFeHAiLCJuTm9wIiwiQmFycmV0dCIsInEzIiwiZGxTaGlmdFRvIiwibXUiLCJkaXZpZGUiLCJjb252ZXJ0IiwiY29tcGFyZVRvIiwicmV2ZXJ0IiwiZGl2UmVtVG8iLCJtdWxUbyIsIm11bHRpcGx5VG8iLCJzcXJUbyIsInNxdWFyZVRvIiwiYWJzIiwiWkVSTyIsInN1YlRvIiwiY29weVRvIiwidTAiLCJjbGFtcCIsImRyU2hpZnRUbyIsImZyb21SYWRpeCIsIm1pIiwic2giLCJtYXgiLCJsU2hpZnRUbyIsImJzIiwiY2JzIiwiYm0iLCJkcyIsInJTaGlmdFRvIiwicG0iLCJwdCIsInRzIiwibXMiLCJuc2giLCJ5cyIsInkwIiwieXQiLCJxZCIsImlzRXZlbiIsImV4cCIsIm5lZ2F0ZSIsInRvUmFkaXgiLCJrbSIsImJpdExlbmd0aCIsIm1vZFBvd0ludCIsIm11bHRpcGx5VXBwZXJUbyIsIm11bHRpcGx5TG93ZXJUbyIsImRBZGRPZmZzZXQiLCJsb3dwcmltZXMiLCJscGxpbSIsIkxOMiIsInNpZ251bSIsImNzIiwiaW50VmFsdWUiLCJkTXVsdGlwbHkiLCJ0ZXN0Qml0IiwiYml0d2lzZVRvIiwic2hpZnRMZWZ0IiwiaXNQcm9iYWJsZVByaW1lIiwibmV4dEJ5dGVzIiwib3AiLCJjaGFuZ2VCaXQiLCJhZGRUbyIsIm1vZEludCIsIm1pbGxlclJhYmluIiwibjEiLCJnZXRMb3dlc3RTZXRCaXQiLCJzaGlmdFJpZ2h0IiwicmFuZG9tIiwibW9kUG93IiwiY2xvbmUiLCJieXRlVmFsdWUiLCJzaG9ydFZhbHVlIiwiZXF1YWxzIiwiYW5kIiwib3IiLCJ4b3IiLCJhbmROb3QiLCJub3QiLCJiaXRDb3VudCIsInNldEJpdCIsImNsZWFyQml0IiwiZmxpcEJpdCIsIm11bHRpcGx5IiwicmVtYWluZGVyIiwiZGl2aWRlQW5kUmVtYWluZGVyIiwiazEiLCJnMiIsImlzMSIsIm1vZEludmVyc2UiLCJhYyIsImdjZCIsInNxdWFyZSIsImluc3BlY3QiLCJFUlJfSU5URVJOQUxfQVNTRVJUSU9OIiwiYWRkTnVtZXJpY2FsU2VwYXJhdG9yIiwib25lT2YiLCJleHBlY3RlZCIsInRoaW5nIiwiZmFpbCIsImNhcHR1cmVTdGFja1RyYWNlIiwic3VmZml4IiwiTUFYXzMyQklUX0lOVCIsIk1BWF8zMkJJVF9CSUdJTlQiLCJlbWl0RXJyb3JBbmRDbG9zZU5UIiwiZW1pdEVycm9yTlQiLCJlbWl0Q2xvc2VOVCIsInJhbmdlIiwiaW5wdXQiLCJyZXBsYWNlRGVmYXVsdEJvb2xlYW4iLCJyZWNlaXZlZCIsImFjdHVhbCIsImRldGVybWluZXIiLCJyZWFkYWJsZURlc3Ryb3llZCIsIndyaXRhYmxlRGVzdHJveWVkIiwiZXJyb3JFbWl0dGVkIiwiemxpYiIsIlN0cmVhbVNlYXJjaCIsIkJVR0dZX0lNUExTX0xFTiIsIk1PRFVMRV9WRVIiLCJJTl9JTklUIiwiSU5fR1JFRVRJTkciLCJJTl9IRUFERVIiLCJJTl9QQUNLRVRCRUZPUkUiLCJJTl9QQUNLRVQiLCJJTl9QQUNLRVREQVRBIiwiSU5fUEFDS0VUREFUQVZFUklGWSIsIklOX1BBQ0tFVERBVEFBRlRFUiIsIk9VVF9JTklUIiwiT1VUX1JFQURZIiwiT1VUX1JFS0VZSU5HIiwiWl9QQVJUSUFMX0ZMVVNIIiwiWkxJQl9PUFRTIiwiZmx1c2giLCJSRV9OVUxMIiwiSURFTlRfUFJFRklYX0JVRkZFUiIsIkVNUFRZX0JVRkZFUiIsIkhNQUNfQ09NUFVURSIsIlBJTkdfUEFDS0VUIiwiTkVXS0VZU19QQUNLRVQiLCJVU0VSQVVUSF9TVUNDRVNTX1BBQ0tFVCIsIlJFUVVFU1RfU1VDQ0VTU19QQUNLRVQiLCJSRVFVRVNUX0ZBSUxVUkVfUEFDS0VUIiwiTk9fVEVSTUlOQUxfTU9ERVNfQlVGRkVSIiwiS0VYREhfR0VYX1JFUV9QQUNLRVQiLCJieXRlc1NlbnQiLCJieXRlc1JlY2VpdmVkIiwibWF4UGFja2V0U2l6ZSIsImhvc3RLZXlzIiwiaWRlbnQiLCJhbGdvcyIsImJ1ZlNlcW5vIiwiZGVzYyIsIm9uRElTQ09OTkVDVCIsImZpcnN0Rm9sbG93cyIsIm91dHN0YXRlIiwia2V4aW5pdCIsImNoZWNrIiwic2VydmVyTGlzdCIsImNsaWVudExpc3QiLCJpbnN0YXRlIiwia2V4TGlzdCIsImNvcGllZCIsImtleF9hbGdvcml0aG0iLCJpZ25vcmVOZXh0Iiwic3J2SG9zdEtleSIsImhvc3RrZXlGb3JtYXQiLCJlbmNyeXB0IiwiZGVjcnlwdCIsInNjIiwiZGVjb21wcmVzcyIsIktleUV4Y2hhbmdlIiwiZ2VuZXJhdGVLZXlzIiwicHVia2V5IiwiY2hlY2tfS0VYSU5JVCIsImV4cGVjdGVkUGFja2V0IiwicGt0SW5pdCIsIktFWERIX0dFWF9SRVEiLCJvbktFWElOSVQiLCJvbk5FV0tFWVMiLCJjdXJIb3N0S2V5IiwiaG9zdGtleSIsImhvc3RrZXlBbGdvIiwiY29udmVydFB1YmxpY0tleSIsInNlY3JldCIsImNvbXB1dGVTZWNyZXQiLCJsZW5fZ2V4X3ByaW1lIiwibGVuX2dleF9nZW4iLCJnZXhfcHJpbWUiLCJnZXhfZ2VuIiwibGVuX2lkZW50IiwibGVuX3NpZGVudCIsImxlbl9pbml0IiwibGVuX3Npbml0IiwibGVuX2hvc3RrZXkiLCJsZW5fcHVia2V5IiwibGVuX3NwdWJrZXkiLCJsZW5fc2VjcmV0IiwiZXhjaGFuZ2VCdWZMZW4iLCJkaFBhcmFtcyIsImdldERIUGFyYW1zIiwicHJpbWUiLCJnZW5lcmF0b3IiLCJicCIsImV4Y2hhbmdlQnVmIiwiZXhjaGFuZ2VIYXNoIiwic2Vzc2lvbklkIiwia2V4c2VjcmV0IiwiY29udmVydFNpZ25hdHVyZSIsInNpZ2xlbiIsInBrdFJlcGx5Iiwic2VudE5FV0tFWVMiLCJvbktFWERIX0lOSVQiLCJvbktFWERIX1JFUExZIiwidmVyaWZpZWRIb3N0IiwiaG9zdGtleV9mb3JtYXQiLCJzaWdfZm9ybWF0Iiwic3luYyIsImVtaXR0ZWQiLCJwZXJtaXR0ZWQiLCJyYXdzaWciLCJob3N0UHViS2V5Iiwic2V0REhQYXJhbXMiLCJvbktFWERIX0dFWF9HUk9VUCIsImJhbm5lciIsIm91dENpcGhlckluZm8iLCJkaEhhc2hBbGdvIiwiYXV0aHNRdWV1ZSIsImNpcGhlckFsZ28iLCJjcmVhdGVDaXBoZXJpdiIsImluQ2lwaGVySW5mbyIsImVtcHR5QnVmIiwiZGVjaXBoZXJBbGdvIiwib3V0SE1BQ0luZm8iLCJpbkhNQUNJbmZvIiwiaW5ITUFDU2l6ZSIsImNyZWF0ZURlZmxhdGUiLCJjcmVhdGVJbmZsYXRlIiwicmVrZXlRdWV1ZSIsInFsZW4iLCJjdXJTZXFubyIsInNlcW5vIiwicGF5bG9hZCIsInBhcnNlUGFja2V0IiwiZXhwZWN0RGF0YSIsImdldFBhY2tldFR5cGUiLCJzZXJ2aWNlTmFtZSIsInJlY2lwaWVudCIsImRhdGFUeXBlIiwiYnl0ZXNUb0FkZCIsImNoYW5UeXBlIiwicmVhc29uQ29kZSIsInJlYXNvblRleHQiLCJtZXRob2REYXRhIiwibWV0aG9kRGVzYyIsIm1ldGhvZCIsInBrU2lnbmVkIiwia2V5QWxnbyIsImJsb2IiLCJ1c2VybG9jYWwiLCJibG9iRW5kIiwic2tpcExlbiIsImF1dGhzIiwicGFydFN1Y2Nlc3MiLCJyZXFEYXRhIiwibGFuZ3VhZ2VzIiwicmVhZExpc3QiLCJwYXJzZV9LRVhJTklUIiwib3Bjb2RlIiwiYnl0ZXNUb01vZGVzIiwiY2xpZW50Q29udHJvbCIsInBhcnNlX0NIQU5ORUxfUkVRVUVTVCIsInBhcnNlX0tFWERIX1JFUExZIiwicGFyc2VfS0VYIiwiYXV0aE1ldGhvZCIsImluc3RyIiwibnByb21wdHMiLCJwcm9tcHQiLCJlY2hvIiwibnJlc3BvbnNlcyIsInJlc3BvbnNlcyIsInBhcnNlX1VTRVJBVVRIIiwidW5pbXBsIiwiaG1hY1ZlcmlmeSIsInBhY2tldCIsImNhbGNIbWFjIiwicGt0TGVuIiwicGFkTGVuIiwidGltaW5nU2FmZUVxdWFsIiwiZGVjcnlwdERhdGEiLCJhbW91bnQiLCJleHBlY3QiLCJwdHIiLCJyZXRyeSIsInJhbmRCeXRlcyIsIm15Q29va2llIiwiaG9zdEtleUJ1ZiIsImtleEluaXRTaXplIiwiY29tcHJlc3NQYXlsb2FkIiwiY29tcHJlc3NGbHVzaENiIiwic2VuZF8iLCJieXBhc3MiLCJwdGxlbiIsImNvcHlSYW5kUGFkQnl0ZXMiLCJlbmNEYXRhIiwiZW5jcnlwdGVyIiwibGVuYnVmIiwic2V0QUFEIiwiYXV0aFRhZyIsImdldEF1dGhUYWciLCJkZWNvbXAiLCJza2lwRGVjcnlwdCIsImRlY3J5cHRBdXRoTW9kZSIsImNobGVuIiwiY2hsZWZ0Iiwic2VhcmNoIiwic3MiLCJvbkluZm8iLCJtYXRjaGVkIiwibWF4TWF0Y2hlcyIsImlkeERhc2giLCJpZHhTcGFjZSIsImNvbW1lbnRzIiwicnVsZSIsIm1hY1NpemUiLCJobWFjSW5mbyIsImZ1bGxQYWNrZXRMZW4iLCJtYXhQYXlsb2FkTGVuIiwicmVtYWluTGVuIiwicGt0RXh0cmEiLCJwYWRTdGFydCIsImRlY29tcEJ1ZiIsImRlY29tcEJ1ZkxlbiIsIm5leHRTbGljZSIsInB0eXBlIiwibXNnUGFja2V0IiwibXNnUGt0VHlwZSIsIm5vZW5kIiwicmVrZXkiLCJyZXF1ZXN0U3VjY2VzcyIsImNoYW5uZWxTdWNjZXNzIiwiZGF0YUlzQnVmZmVyIiwicmVtb3RlQ2hhbiIsImRlc2NMZW4iLCJzdmNOYW1lTGVuIiwiYWRkcmxlbiIsInNyY2xlbiIsImRzdGxlbiIsIlJFX0lTX05VTSIsIm1vZGVzVG9CeXRlcyIsInRlcm1MZW4iLCJtb2Rlc0xlbiIsImNtZGxlbiIsInNpZ25hbExlbiIsInZhbExlbiIsInByb3RvbGVuIiwiY29va2llbGVuIiwibmFtZUxlbiIsInVzZXJMZW4iLCJwYXNzTGVuIiwiY2JTaWduIiwia2V5VHlwZSIsImFsZ29MZW4iLCJwdWJLZXlMZW4iLCJzZXNMZW4iLCJzaWdMZW4iLCJzaWdidWYiLCJob3N0bmFtZUxlbiIsInVzZXJsb2NhbExlbiIsInJlc0xlbiIsInJlc3BvbnNlc0xlbiIsInNlcnZpY2VBY2NlcHQiLCJiYW5uZXJMZW4iLCJwYWNrZXRMZW4iLCJmb3J3YXJkZWRUY3BpcCIsImJvdW5kQWRkckxlbiIsImJvdW5kQWRkciIsInJlbW90ZUFkZHJMZW4iLCJyZW1vdGVBZGRyIiwiYm91bmRQb3J0IiwiYWRkckxlbiIsIm9yaWdpbkFkZHIiLCJvcmlnaW5Qb3J0Iiwib3BlbnNzaF9hdXRoQWdlbnQiLCJvcGVuc3NoX2ZvcndhcmRlZFN0cmVhbUxvY2FsIiwiYXV0aEZhaWx1cmUiLCJhdXRoTWV0aG9kcyIsImlzUGFydGlhbCIsIm1ldGhvZHMiLCJtZXRob2RzTGVuIiwiYXV0aFN1Y2Nlc3MiLCJhdXRoUEtPSyIsImtleUFsZ29MZW4iLCJhdXRoUGFzc3dkQ2hnIiwicHJvbXB0TGVuIiwiYXV0aEluZm9SZXEiLCJwcm9tcHRzTGVuIiwiaW5zdHJMZW4iLCJfcHJpbWUiLCJfZ2VuZXJhdG9yIiwiY29udmVydFRvTXBpbnQiLCJuZXdCdWYiLCJpZHgiLCJfa2V4IiwiZ2V0UHJpbWUiLCJnZXRHZW5lcmF0b3IiLCJfa2V5cyIsIl9wdWJsaWMiLCJjcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAiLCJjcmVhdGVEaWZmaWVIZWxsbWFuIiwiZXhwb3J0IiwiZm9ybWF0IiwibmV3S2V5Iiwib3RoZXJQdWJsaWNLZXkiLCJfc2VuZCIsImpzbWVtY21wIiwicG9zMSIsInBvczIiLCJTQk1IIiwibmVlZGxlIiwibmVlZGxlX2xlbiIsIm1hdGNoZXMiLCJfb2NjIiwiX2xvb2tiZWhpbmRfc2l6ZSIsIl9uZWVkbGUiLCJfYnVmcG9zIiwiX2xvb2tiZWhpbmQiLCJfc2JtaF9mZWVkIiwibGFzdF9uZWVkbGVfY2hhciIsIm9jYyIsImxvb2tiZWhpbmQiLCJjaCIsIl9zYm1oX2xvb2t1cF9jaGFyIiwiX3NibWhfbWVtY21wIiwiYnl0ZXNUb0N1dE9mZiIsIkh0dHBBZ2VudCIsIkFnZW50IiwiSHR0cHNBZ2VudCIsImNyZWF0ZUNvbm5lY3Rpb24iLCJfZGVmYXVsdFNyY0lQIiwidHJpZWRGb3J3YXJkIiwicmVmIiwidW5yZWYiLCJkZWNvcmF0ZVN0cmVhbSIsIl9jb25uZWN0Q2ZnIiwiY3RvciIsIlNTSEFnZW50IiwiY29ubmVjdENmZyIsImFnZW50T3B0aW9ucyIsImNwIiwiUkVfQ1lHV0lOX1NPQ0siLCJXSU5ET1dTX1BJUEVfUkVHRVgiLCJzb2NrUGF0aCIsImRhdGFsZW4iLCJpc1NpZ25pbmciLCJjb21sZW4iLCJvbmNvbm5lY3QiLCJvbmRhdGEiLCJwbGF0Zm9ybSIsInRyaWVkQ3lncGF0aCIsInJlYWRDeWdzb2NrZXQiLCJzZWNyZXRidWYiLCJiYyIsImlzUmV0cnlpbmciLCJpbmJ1ZiIsImNyZWRzYnVmIiwiX29uY29ubmVjdCIsIl9vbmRhdGEiLCJfb25jbG9zZSIsImFkZFNvY2tMaXN0ZW5lcnMiLCJwaWQiLCJ0cnlDb25uZWN0IiwiUGFnZWFudFNvY2siLCJpc0RvbmUiLCJvbkRvbmUiLCJFUlJPUiIsIkVYRVBBVEgiLCJfX2Rpcm5hbWUiLCJwcm9jIiwic3Bhd24iLCJraWxsIiwiX3N0cmVhbSIsImthTWdyIiwibmV0IiwiS2VlcGFsaXZlTWFuYWdlciIsImhvc3RLZXlzXyIsImhvc3RLZXlBbGdvcyIsIktFRVBBTElWRV9JTlRFUlZBTCIsIktFRVBBTElWRV9DTElFTlRfSU5URVJWQUwiLCJLRUVQQUxJVkVfQ0xJRU5UX0NPVU5UX01BWCIsInN0cmVhbWNmZyIsIm9sZERlYnVnIiwiY2ZnS2V5cyIsIl9zcnYiLCJfY29ubmVjdGlvbnMiLCJtYXhDb25uZWN0aW9ucyIsImNvbm5jZmciLCJkZWJ1Z1ByZWZpeCIsImhydGltZSIsIm9uQ2xpZW50UHJlSGVhZGVyRXJyb3IiLCJub01vcmVTZXNzaW9ucyIsImF1dGhlbnRpY2F0ZWQiLCJoYXNFcnIiLCJhdXRoQ3R4IiwiZXhjaGFuZ2VzIiwiYWNjZXB0ZWRBdXRoU3ZjIiwicGVuZGluZ0F1dGhzIiwib25VU0VSQVVUSF9SRVFVRVNUIiwiY3R4IiwiS2V5Ym9hcmRBdXRoQ29udGV4dCIsIm9uQXV0aERlY2lkZSIsIlBLQXV0aENvbnRleHQiLCJIb3N0YmFzZWRBdXRoQ29udGV4dCIsIlB3ZEF1dGhDb250ZXh0IiwiQXV0aENvbnRleHQiLCJfaW5pdGlhbFJlc3BvbnNlIiwiX211bHRpc3RlcCIsIl9maW5hbFJlc3BvbnNlIiwiYWxsb3dlZCIsIm1ldGhvZHNMZWZ0IiwidW5zZW50R2xvYmFsUmVxdWVzdHNSZXBsaWVzIiwicmVwbHkiLCJzZXRSZXBseSIsInNlbmRSZXBsaWVzIiwicmVwbGllZCIsImNob3NlblBvcnQiLCJidWZQb3J0IiwiU2Vzc2lvbiIsIm91dGdvaW5nSWQiLCJfY2JmaW5hbCIsImxpc3RlbiIsImFwcGx5IiwiZ2V0Q29ubmVjdGlvbnMiLCJSRV9LQklOVF9TVUJNRVRIT0RTIiwic3VibWV0aG9kcyIsIl9jYiIsIl9vbkluZm9SZXNwb25zZSIsInBrSW5mbyIsInNpZ0FsZ28iLCJ0aXRsZSIsImNyZWF0ZVNlcnZlciIsIkluY29taW5nQ2xpZW50Iiwic3BsaWNlT25lIiwiTWFuYWdlciIsImludGVydmFsIiwic3RyZWFtSW50ZXJ2YWwiLCJrYUNvdW50TWF4Iiwic3RyZWFtcyIsIl9zdHJlYW1zIiwiX3RpbWVyIiwiX3RpbWVySW50ZXJ2YWwiLCJfdGltZXJmbiIsImxhc3QiXSwibWFwcGluZ3MiOiJDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxJQUNRLG1CQUFYRyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sR0FBSUgsR0FDZSxpQkFBWkMsUUFDZEEsUUFBUSxjQUFnQkQsSUFFeEJELEVBQUssY0FBZ0JDLElBUnZCLENBU0dLLFFBQVEsV0FDWCxPLFlDVEUsSUFBSUMsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVVAsUUFHbkMsSUFBSUMsRUFBU0ksRUFBaUJFLEdBQVksQ0FDekNDLEVBQUdELEVBQ0hFLEdBQUcsRUFDSFQsUUFBUyxJQVVWLE9BTkFVLEVBQVFILEdBQVVJLEtBQUtWLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNNLEdBRy9ETCxFQUFPUSxHQUFJLEVBR0pSLEVBQU9ELFFBMERmLE9BckRBTSxFQUFvQk0sRUFBSUYsRUFHeEJKLEVBQW9CTyxFQUFJUixFQUd4QkMsRUFBb0JRLEVBQUksU0FBU2QsRUFBU2UsRUFBTUMsR0FDM0NWLEVBQW9CVyxFQUFFakIsRUFBU2UsSUFDbENHLE9BQU9DLGVBQWVuQixFQUFTZSxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVWLEVBQW9CZ0IsRUFBSSxTQUFTdEIsR0FDWCxvQkFBWHVCLFFBQTBCQSxPQUFP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V0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFVBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFVBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksU0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFVBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsUUFBWSxVQUFZLFVBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksU0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksYUFDdEMsSUFBSUEsWUFBWSxDQUNkLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFNBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFNBQ3BDLFVBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFNBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFVBQ3BDLFVBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFVBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFVBQ3BDLFVBQVksVUFBWSxXQUFZLFVBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFNBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFVBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFVBQ3BDLFdBQVksVUFBWSxVQUFZLFVBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFNBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFVBQVksVUFBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxTQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFVBQ3BDLFVBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFVBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFVBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxVQUFZLFVBQ3BDLFdBQVksVUFBWSxVQUFZLFVBQ3BDLFVBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFVBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxXQUFZLGFBQ3RDLElBQUlBLFlBQVksQ0FDZCxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFNBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxVQUNwQyxVQUFZLFdBQVksVUFBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFNBQVksV0FBWSxTQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxVQUNwQyxVQUFZLFNBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxVQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxVQUNwQyxVQUFZLFVBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksUUFBWSxVQUNwQyxVQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxhQUN0QyxJQUFJQSxZQUFZLENBQ2QsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFVBQVksU0FDcEMsV0FBWSxTQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFNBQVksU0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxVQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFNBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksU0FDcEMsVUFBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxVQUFZLFNBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsU0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxVQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFVBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxTQUFZLFNBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksYUFFeEM3K0MsS0FBSzgrQyxFQUFJLElBQUlELFlBQVksQ0FDdkIsVUFBWSxXQUFZLFVBQVksU0FDcEMsV0FBWSxVQUFZLFVBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxjQUdoQixTQUFTRSxFQUFFSCxFQUFH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QU95QixLQWFYLFNBQVMycUIsSUFDUDV0QixFQUFPcWhDLFFBQVUxakIsS0FBSzJqQixNQUN0QnRoQyxFQUFPdWhDLE9BQVMsRUFibEJ2aEMsRUFBT3NILEtBQUssT0FBTyxXQUNqQjlGLEVBQUt1VixPQUFPL1csTUFDWHNhLEdBQUcsU0FBVXNULEdBRWhCNnRELEVBQVFBLEVBQVFoN0UsUUFBVVQsRUFFMUI0dEIsSUFFSzNxQixLQUFLMDRFLFFBQ1IxNEUsS0FBS25ELFNBUVR1N0UsRUFBUWo4RSxVQUFVMlgsT0FBUyxTQUFTL1csR0FDbEMsSUFBSXk3RSxFQUFVeDRFLEtBQUt5NEUsU0FDZmw0QyxFQUFRaTRDLEVBQVFyK0QsUUFBUXBkLEdBQ3hCd2pDLEdBQVMsR0FDWDQzQyxFQUFVSyxFQUFTajRDLEdBQ2hCaTRDLEVBQVFoN0UsUUFDWHdDLEtBQUt5a0MsUUFHVHpxQyxFQUFPRCxRQUFVcStFIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicXVzbHktY29yZVwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJxdXNseS1jb3JlXCJdID0gZmFjdG9yeSgpO1xufSkoZ2xvYmFsLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMzQpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXRpbFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJldmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3RyZWFtXCIpOyIsInZhciBCZXIgPSByZXF1aXJlKCdhc24xJykuQmVyO1xuXG52YXIgcmVhZFVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLnJlYWRVSW50MzJCRTtcbnZhciB3cml0ZVVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLndyaXRlVUludDMyQkU7XG5cbi8vIFhYWCB0aGUgdmFsdWUgb2YgMjQwMCBmcm9tIGRyb3BiZWFyIGlzIG9ubHkgZm9yIGNlcnRhaW4gc3RyaW5ncywgbm90IGFsbFxuLy8gc3RyaW5ncy4gZm9yIGV4YW1wbGUgdGhlIGxpc3Qgc3RyaW5ncyB1c2VkIGR1cmluZyBoYW5kc2hha2VzXG52YXIgTUFYX1NUUklOR19MRU4gPSBJbmZpbml0eTsvLzI0MDA7IC8vIHRha2VuIGZyb20gZHJvcGJlYXJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGl2X2luYzogaXZfaW5jLFxuICByZWFkSW50OiByZWFkSW50LFxuICByZWFkU3RyaW5nOiByZWFkU3RyaW5nLFxuICBwYXJzZUtleTogcmVxdWlyZSgnLi9rZXlQYXJzZXInKS5wYXJzZUtleSxcbiAgc2lnU1NIVG9BU04xOiBzaWdTU0hUb0FTTjEsXG4gIERTQVNpZ0JFUlRvQmFyZTogRFNBU2lnQkVSVG9CYXJlLFxuICBFQ0RTQVNpZ0FTTjFUb1NTSDogRUNEU0FTaWdBU04xVG9TU0hcbn07XG5cbmZ1bmN0aW9uIGl2X2luYyhpdikge1xuICB2YXIgbiA9IDEyO1xuICB2YXIgYyA9IDA7XG4gIGRvIHtcbiAgICAtLW47XG4gICAgYyA9IGl2W25dO1xuICAgIGlmIChjID09PSAyNTUpXG4gICAgICBpdltuXSA9IDA7XG4gICAgZWxzZSB7XG4gICAgICBpdltuXSA9ICsrYztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gd2hpbGUgKG4gPiA0KTtcbn1cblxuZnVuY3Rpb24gcmVhZEludChidWZmZXIsIHN0YXJ0LCBzdHJlYW0sIGNiKSB7XG4gIHZhciBidWZmZXJMZW4gPSBidWZmZXIubGVuZ3RoO1xuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IGJ1ZmZlckxlbiB8fCAoYnVmZmVyTGVuIC0gc3RhcnQpIDwgNCkge1xuICAgIHN0cmVhbSAmJiBzdHJlYW0uX2NsZWFudXAoY2IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiByZWFkVUludDMyQkUoYnVmZmVyLCBzdGFydCk7XG59XG5cbmZ1bmN0aW9uIERTQVNpZ0JFUlRvQmFyZShzaWduYXR1cmUpIHtcbiAgaWYgKHNpZ25hdHVyZS5sZW5ndGggPD0gNDApXG4gICAgcmV0dXJuIHNpZ25hdHVyZTtcbiAgLy8gVGhpcyBpcyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gZ2V0IGZyb20gQkVSIGVuY29kZWQgciBhbmQgcyB0aGF0XG4gIC8vIE9wZW5TU0wgZ2l2ZXMgdXMsIHRvIGp1c3QgdGhlIGJhcmUgdmFsdWVzIGJhY2sgdG8gYmFjayAoNDAgYnl0ZXNcbiAgLy8gdG90YWwpIGxpa2UgT3BlblNTSCAoYW5kIHBvc3NpYmx5IG90aGVycykgYXJlIGV4cGVjdGluZ1xuICB2YXIgYXNuUmVhZGVyID0gbmV3IEJlci5SZWFkZXIoc2lnbmF0dXJlKTtcbiAgYXNuUmVhZGVyLnJlYWRTZXF1ZW5jZSgpO1xuICB2YXIgciA9IGFzblJlYWRlci5yZWFkU3RyaW5nKEJlci5JbnRlZ2VyLCB0cnVlKTtcbiAgdmFyIHMgPSBhc25SZWFkZXIucmVhZFN0cmluZyhCZXIuSW50ZWdlciwgdHJ1ZSk7XG4gIHZhciByT2Zmc2V0ID0gMDtcbiAgdmFyIHNPZmZzZXQgPSAwO1xuICBpZiAoci5sZW5ndGggPCAyMCkge1xuICAgIHZhciByTmV3ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIwKTtcbiAgICByLmNvcHkock5ldywgMSk7XG4gICAgciA9IHJOZXc7XG4gICAgclswXSA9IDA7XG4gIH1cbiAgaWYgKHMubGVuZ3RoIDwgMjApIHtcbiAgICB2YXIgc05ldyA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyMCk7XG4gICAgcy5jb3B5KHNOZXcsIDEpO1xuICAgIHMgPSBzTmV3O1xuICAgIHNbMF0gPSAwO1xuICB9XG4gIGlmIChyLmxlbmd0aCA+IDIwICYmIHJbMF0gPT09IDB4MDApXG4gICAgck9mZnNldCA9IDE7XG4gIGlmIChzLmxlbmd0aCA+IDIwICYmIHNbMF0gPT09IDB4MDApXG4gICAgc09mZnNldCA9IDE7XG4gIHZhciBuZXdTaWcgPSBCdWZmZXIuYWxsb2NVbnNhZmUoKHIubGVuZ3RoIC0gck9mZnNldCkgKyAocy5sZW5ndGggLSBzT2Zmc2V0KSk7XG4gIHIuY29weShuZXdTaWcsIDAsIHJPZmZzZXQpO1xuICBzLmNvcHkobmV3U2lnLCByLmxlbmd0aCAtIHJPZmZzZXQsIHNPZmZzZXQpO1xuICByZXR1cm4gbmV3U2lnO1xufVxuXG5mdW5jdGlvbiBFQ0RTQVNpZ0FTTjFUb1NTSChzaWduYXR1cmUpIHtcbiAgaWYgKHNpZ25hdHVyZVswXSA9PT0gMHgwMClcbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICAvLyBDb252ZXJ0IFNTSCBzaWduYXR1cmUgcGFyYW1ldGVycyB0byBBU04uMSBCRVIgdmFsdWVzIGZvciBPcGVuU1NMXG4gIHZhciBhc25SZWFkZXIgPSBuZXcgQmVyLlJlYWRlcihzaWduYXR1cmUpO1xuICBhc25SZWFkZXIucmVhZFNlcXVlbmNlKCk7XG4gIHZhciByID0gYXNuUmVhZGVyLnJlYWRTdHJpbmcoQmVyLkludGVnZXIsIHRydWUpO1xuICB2YXIgcyA9IGFzblJlYWRlci5yZWFkU3RyaW5nKEJlci5JbnRlZ2VyLCB0cnVlKTtcbiAgaWYgKHIgPT09IG51bGwgfHwgcyA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBuZXdTaWcgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIHIubGVuZ3RoICsgNCArIHMubGVuZ3RoKTtcbiAgd3JpdGVVSW50MzJCRShuZXdTaWcsIHIubGVuZ3RoLCAwKTtcbiAgci5jb3B5KG5ld1NpZywgNCk7XG4gIHdyaXRlVUludDMyQkUobmV3U2lnLCBzLmxlbmd0aCwgNCArIHIubGVuZ3RoKTtcbiAgcy5jb3B5KG5ld1NpZywgNCArIDQgKyByLmxlbmd0aCk7XG4gIHJldHVybiBuZXdTaWc7XG59XG5cbmZ1bmN0aW9uIHNpZ1NTSFRvQVNOMShzaWcsIHR5cGUsIHNlbGYsIGNhbGxiYWNrKSB7XG4gIHZhciBhc25Xcml0ZXI7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3NzaC1kc3MnOlxuICAgICAgaWYgKHNpZy5sZW5ndGggPiA0MClcbiAgICAgICAgcmV0dXJuIHNpZztcbiAgICAgIC8vIENoYW5nZSBiYXJlIHNpZ25hdHVyZSByIGFuZCBzIHZhbHVlcyB0byBBU04uMSBCRVIgdmFsdWVzIGZvciBPcGVuU1NMXG4gICAgICBhc25Xcml0ZXIgPSBuZXcgQmVyLldyaXRlcigpO1xuICAgICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAgIHZhciByID0gc2lnLnNsaWNlKDAsIDIwKTtcbiAgICAgIHZhciBzID0gc2lnLnNsaWNlKDIwKTtcbiAgICAgIGlmIChyWzBdICYgMHg4MCkge1xuICAgICAgICB2YXIgck5ldyA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyMSk7XG4gICAgICAgIHJOZXdbMF0gPSAweDAwO1xuICAgICAgICByLmNvcHkock5ldywgMSk7XG4gICAgICAgIHIgPSByTmV3O1xuICAgICAgfSBlbHNlIGlmIChyWzBdID09PSAweDAwICYmICEoclsxXSAmIDB4ODApKSB7XG4gICAgICAgIHIgPSByLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNbMF0gJiAweDgwKSB7XG4gICAgICAgIHZhciBzTmV3ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIxKTtcbiAgICAgICAgc05ld1swXSA9IDB4MDA7XG4gICAgICAgIHMuY29weShzTmV3LCAxKTtcbiAgICAgICAgcyA9IHNOZXc7XG4gICAgICB9IGVsc2UgaWYgKHNbMF0gPT09IDB4MDAgJiYgIShzWzFdICYgMHg4MCkpIHtcbiAgICAgICAgcyA9IHMuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIociwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHMsIEJlci5JbnRlZ2VyKTtcbiAgICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICAgICAgcmV0dXJuIGFzbldyaXRlci5idWZmZXI7XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDI1Nic6XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDM4NCc6XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDUyMSc6XG4gICAgICB2YXIgciA9IHJlYWRTdHJpbmcoc2lnLCAwLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAociA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBzID0gcmVhZFN0cmluZyhzaWcsIHNpZy5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAocyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgYXNuV3JpdGVyID0gbmV3IEJlci5Xcml0ZXIoKTtcbiAgICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIociwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHMsIEJlci5JbnRlZ2VyKTtcbiAgICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICAgICAgcmV0dXJuIGFzbldyaXRlci5idWZmZXI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzaWc7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhZFN0cmluZyhidWZmZXIsIHN0YXJ0LCBlbmNvZGluZywgc3RyZWFtLCBjYiwgbWF4TGVuKSB7XG4gIGlmIChlbmNvZGluZyAmJiAhQnVmZmVyLmlzQnVmZmVyKGVuY29kaW5nKSAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ251bWJlcicpXG4gICAgICBtYXhMZW4gPSBjYjtcbiAgICBjYiA9IHN0cmVhbTtcbiAgICBzdHJlYW0gPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXJ0IHx8IChzdGFydCA9IDApO1xuICB2YXIgYnVmZmVyTGVuID0gYnVmZmVyLmxlbmd0aDtcbiAgdmFyIGxlZnQgPSAoYnVmZmVyTGVuIC0gc3RhcnQpO1xuICB2YXIgbGVuO1xuICB2YXIgZW5kO1xuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IGJ1ZmZlckxlbiB8fCBsZWZ0IDwgNCkge1xuICAgIHN0cmVhbSAmJiBzdHJlYW0uX2NsZWFudXAoY2IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxlbiA9IHJlYWRVSW50MzJCRShidWZmZXIsIHN0YXJ0KTtcbiAgaWYgKGxlbiA+IChtYXhMZW4gfHwgTUFYX1NUUklOR19MRU4pIHx8IGxlZnQgPCAoNCArIGxlbikpIHtcbiAgICBzdHJlYW0gJiYgc3RyZWFtLl9jbGVhbnVwKGNiKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGFydCArPSA0O1xuICBlbmQgPSBzdGFydCArIGxlbjtcbiAgYnVmZmVyLl9wb3MgPSBlbmQ7XG5cbiAgaWYgKGVuY29kaW5nKSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihlbmNvZGluZykpIHtcbiAgICAgIGJ1ZmZlci5jb3B5KGVuY29kaW5nLCAwLCBzdGFydCwgZW5kKTtcbiAgICAgIHJldHVybiBlbmNvZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZyhlbmNvZGluZywgc3RhcnQsIGVuZCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cbn1cblxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlYWRVSW50MzJCRTogZnVuY3Rpb24gcmVhZFVJbnQzMkJFKGJ1Ziwgb2Zmc2V0KSB7XG4gICAgcmV0dXJuIGJ1ZltvZmZzZXQrK10gKiAxNjc3NzIxNlxuICAgICAgICAgICArIGJ1ZltvZmZzZXQrK10gKiA2NTUzNlxuICAgICAgICAgICArIGJ1ZltvZmZzZXQrK10gKiAyNTZcbiAgICAgICAgICAgKyBidWZbb2Zmc2V0XTtcbiAgfSxcbiAgd3JpdGVVSW50MzJCRTogZnVuY3Rpb24gd3JpdGVVSW50MzJCRShidWYsIHZhbHVlLCBvZmZzZXQpIHtcbiAgICBidWZbb2Zmc2V0KytdID0gKHZhbHVlID4+PiAyNCk7XG4gICAgYnVmW29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gMTYpO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAodmFsdWUgPj4+IDgpO1xuICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9LFxuICB3cml0ZVVJbnQzMkxFOiBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFKGJ1ZiwgdmFsdWUsIG9mZnNldCkge1xuICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgICBidWZbb2Zmc2V0KytdID0gKHZhbHVlID4+PiA4KTtcbiAgICBidWZbb2Zmc2V0KytdID0gKHZhbHVlID4+PiAxNik7XG4gICAgYnVmW29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gMjQpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlYWRVSW50MzJCRTogZnVuY3Rpb24gcmVhZFVJbnQzMkJFKGJ1Ziwgb2Zmc2V0KSB7XG4gICAgcmV0dXJuIGJ1ZltvZmZzZXQrK10gKiAxNjc3NzIxNlxuICAgICAgICAgICArIGJ1ZltvZmZzZXQrK10gKiA2NTUzNlxuICAgICAgICAgICArIGJ1ZltvZmZzZXQrK10gKiAyNTZcbiAgICAgICAgICAgKyBidWZbb2Zmc2V0XTtcbiAgfSxcbiAgd3JpdGVVSW50MzJCRTogZnVuY3Rpb24gd3JpdGVVSW50MzJCRShidWYsIHZhbHVlLCBvZmZzZXQpIHtcbiAgICBidWZbb2Zmc2V0KytdID0gKHZhbHVlID4+PiAyNCk7XG4gICAgYnVmW29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gMTYpO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAodmFsdWUgPj4+IDgpO1xuICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9LFxuICB3cml0ZVVJbnQzMkxFOiBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFKGJ1ZiwgdmFsdWUsIG9mZnNldCkge1xuICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgICBidWZbb2Zmc2V0KytdID0gKHZhbHVlID4+PiA4KTtcbiAgICBidWZbb2Zmc2V0KytdID0gKHZhbHVlID4+PiAxNik7XG4gICAgYnVmW29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gMjQpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJuZXRcIik7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZpbGVJbmZvID0gZXhwb3J0cy5GaWxlVHlwZSA9IHZvaWQgMDtcbnZhciBGaWxlVHlwZTtcbihmdW5jdGlvbiAoRmlsZVR5cGUpIHtcbiAgICBGaWxlVHlwZVtGaWxlVHlwZVtcIlVua25vd25cIl0gPSAwXSA9IFwiVW5rbm93blwiO1xuICAgIEZpbGVUeXBlW0ZpbGVUeXBlW1wiRmlsZVwiXSA9IDFdID0gXCJGaWxlXCI7XG4gICAgRmlsZVR5cGVbRmlsZVR5cGVbXCJEaXJlY3RvcnlcIl0gPSAyXSA9IFwiRGlyZWN0b3J5XCI7XG4gICAgRmlsZVR5cGVbRmlsZVR5cGVbXCJTeW1ib2xpY0xpbmtcIl0gPSAzXSA9IFwiU3ltYm9saWNMaW5rXCI7XG59KShGaWxlVHlwZSA9IGV4cG9ydHMuRmlsZVR5cGUgfHwgKGV4cG9ydHMuRmlsZVR5cGUgPSB7fSkpO1xuLyoqXG4gKiBEZXNjcmliZXMgYSBmaWxlLCBkaXJlY3Rvcnkgb3Igc3ltYm9saWMgbGluay5cbiAqL1xuY2xhc3MgRmlsZUluZm8ge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50eXBlID0gRmlsZVR5cGUuVW5rbm93bjtcbiAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVucGFyc2VkLCByYXcgbW9kaWZpY2F0aW9uIGRhdGUgYXMgYSBzdHJpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIGBtb2RpZmllZEF0YCBpcyB1bmRlZmluZWQsIHRoZSBGVFAgc2VydmVyIHlvdSdyZSBjb25uZWN0ZWQgdG8gZG9lc24ndCBzdXBwb3J0IHRoZSBtb3JlIG1vZGVyblxuICAgICAgICAgKiBNTFNEIGNvbW1hbmQgZm9yIG1hY2hpbmUtcmVhZGFibGUgZGlyZWN0b3J5IGxpc3RpbmdzLiBUaGUgb2xkZXIgY29tbWFuZCBMSVNUIGlzIHRoZW4gdXNlZCByZXR1cm5pbmdcbiAgICAgICAgICogcmVzdWx0cyB0aGF0IHZhcnkgYSBsb3QgYmV0d2VlbiBzZXJ2ZXJzIGFzIHRoZSBmb3JtYXQgaGFzbid0IGJlZW4gc3RhbmRhcmRpemVkLiBIZXJlLCBkaXJlY3RvcnkgbGlzdGluZ3NcbiAgICAgICAgICogYW5kIGVzcGVjaWFsbHkgbW9kaWZpY2F0aW9uIGRhdGVzIHdlcmUgbWVhbnQgdG8gYmUgaHVtYW4tcmVhZGFibGUgZmlyc3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEJlIGNhcmVmdWwgd2hlbiBzdGlsbCB0cnlpbmcgdG8gcGFyc2UgdGhpcyBieSB5b3Vyc2VsZi4gUGFyc2luZyBkYXRlcyBmcm9tIGxpc3RpbmdzIHVzaW5nIExJU1QgaXNcbiAgICAgICAgICogdW5yZWxpYWJsZS4gVGhpcyBsaWJyYXJ5IGRlY2lkZXMgdG8gb2ZmZXIgcGFyc2VkIGRhdGVzIG9ubHkgd2hlbiB0aGV5J3JlIGFic29sdXRlbHkgcmVsaWFibGUgYW5kIHNhZmUgdG9cbiAgICAgICAgICogdXNlIGUuZy4gZm9yIGNvbXBhcmlzb25zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yYXdNb2RpZmllZEF0ID0gXCJcIjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhcnNlZCBtb2RpZmljYXRpb24gZGF0ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQXZhaWxhYmxlIGlmIHRoZSBGVFAgc2VydmVyIHN1cHBvcnRzIHRoZSBNTFNEIGNvbW1hbmQuIE9ubHkgTUxTRCBndWFyYW50ZWVzIGRhdGVzIHRoYW4gY2FuIGJlIHJlbGlhYmx5XG4gICAgICAgICAqIHBhcnNlZCB3aXRoIHRoZSBjb3JyZWN0IHRpbWV6b25lIGFuZCBhIHJlc29sdXRpb24gZG93biB0byBzZWNvbmRzLiBTZWUgYHJhd01vZGlmaWVkQXRgIHByb3BlcnR5IGZvciB0aGUgdW5wYXJzZWRcbiAgICAgICAgICogZGF0ZSB0aGF0IGlzIGFsd2F5cyBhdmFpbGFibGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1vZGlmaWVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVbml4IHBlcm1pc3Npb25zIGlmIHByZXNlbnQuIElmIHRoZSB1bmRlcmx5aW5nIEZUUCBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmcgb24gVW5peCB0aGlzIHdpbGwgYmUgdW5kZWZpbmVkLlxuICAgICAgICAgKiBJZiBzZXQsIHlvdSBtaWdodCBiZSBhYmxlIHRvIGVkaXQgcGVybWlzc2lvbnMgd2l0aCB0aGUgRlRQIGNvbW1hbmQgYFNJVEUgQ0hNT0RgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhhcmQgbGluayBjb3VudCBpZiBhdmFpbGFibGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhhcmRMaW5rQ291bnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaW5rIG5hbWUgZm9yIHN5bWJvbGljIGxpbmtzIGlmIGF2YWlsYWJsZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGluayA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVuaXggZ3JvdXAgaWYgYXZhaWxhYmxlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ncm91cCA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVuaXggdXNlciBpZiBhdmFpbGFibGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVzZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVbmlxdWUgSUQgaWYgYXZhaWxhYmxlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51bmlxdWVJRCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB9XG4gICAgZ2V0IGlzRGlyZWN0b3J5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBGaWxlVHlwZS5EaXJlY3Rvcnk7XG4gICAgfVxuICAgIGdldCBpc1N5bWJvbGljTGluaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gRmlsZVR5cGUuU3ltYm9saWNMaW5rO1xuICAgIH1cbiAgICBnZXQgaXNGaWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBGaWxlVHlwZS5GaWxlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXByZWNhdGVkLCBsZWdhY3kgQVBJLiBVc2UgYHJhd01vZGlmaWVkQXRgIGluc3RlYWQuXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBnZXQgZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3TW9kaWZpZWRBdDtcbiAgICB9XG4gICAgc2V0IGRhdGUocmF3TW9kaWZpZWRBdCkge1xuICAgICAgICB0aGlzLnJhd01vZGlmaWVkQXQgPSByYXdNb2RpZmllZEF0O1xuICAgIH1cbn1cbmV4cG9ydHMuRmlsZUluZm8gPSBGaWxlSW5mbztcbkZpbGVJbmZvLlVuaXhQZXJtaXNzaW9uID0ge1xuICAgIFJlYWQ6IDQsXG4gICAgV3JpdGU6IDIsXG4gICAgRXhlY3V0ZTogMVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqXG4gKiBQdWJsaWMgQVBJXG4gKi9cbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9DbGllbnRcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0Z0cENvbnRleHRcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0ZpbGVJbmZvXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wYXJzZUxpc3RcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1N0cmluZ0VuY29kaW5nXCIpLCBleHBvcnRzKTtcbnZhciB0cmFuc2Zlcl8xID0gcmVxdWlyZShcIi4vdHJhbnNmZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbnRlclBhc3NpdmVNb2RlSVB2NFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhbnNmZXJfMS5lbnRlclBhc3NpdmVNb2RlSVB2NDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVudGVyUGFzc2l2ZU1vZGVJUHY2XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFuc2Zlcl8xLmVudGVyUGFzc2l2ZU1vZGVJUHY2OyB9IH0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidGxzXCIpOyIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wb3NpdGl2ZUludGVybWVkaWF0ZSA9IGV4cG9ydHMucG9zaXRpdmVDb21wbGV0aW9uID0gZXhwb3J0cy5pc011bHRpbGluZSA9IGV4cG9ydHMuaXNTaW5nbGVMaW5lID0gZXhwb3J0cy5wYXJzZUNvbnRyb2xSZXNwb25zZSA9IHZvaWQgMDtcbmNvbnN0IExGID0gXCJcXG5cIjtcbi8qKlxuICogUGFyc2UgYW4gRlRQIGNvbnRyb2wgcmVzcG9uc2UgYXMgYSBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLiBBIG1lc3NhZ2UgaXMgYSBjb21wbGV0ZVxuICogc2luZ2xlLSBvciBtdWx0aWxpbmUgcmVzcG9uc2UuIEEgcmVzcG9uc2UgY2FuIGFsc28gY29udGFpbiBtdWx0aXBsZSBtdWx0aWxpbmUgcmVzcG9uc2VzXG4gKiB0aGF0IHdpbGwgZWFjaCBiZSByZXByZXNlbnRlZCBieSBhIG1lc3NhZ2UuIEEgcmVzcG9uc2UgY2FuIGFsc28gYmUgaW5jb21wbGV0ZVxuICogYW5kIGJlIGNvbXBsZXRlZCBvbiB0aGUgbmV4dCBpbmNvbWluZyBkYXRhIGNodW5rIGZvciB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24gYWxzb1xuICogZGVzY3JpYmVzIGEgYHJlc3RgLiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGFsbCBDUkxGIHRvIExGLlxuICovXG5mdW5jdGlvbiBwYXJzZUNvbnRyb2xSZXNwb25zZSh0ZXh0KSB7XG4gICAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgY29uc3QgbWVzc2FnZXMgPSBbXTtcbiAgICBsZXQgc3RhcnRBdCA9IDA7XG4gICAgbGV0IHRva2VuUmVnZXg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbaV07XG4gICAgICAgIC8vIE5vIGdyb3VwIGhhcyBiZWVuIG9wZW5lZC5cbiAgICAgICAgaWYgKCF0b2tlblJlZ2V4KSB7XG4gICAgICAgICAgICBpZiAoaXNNdWx0aWxpbmUobGluZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBPcGVuIGEgZ3JvdXAgYnkgc2V0dGluZyBhbiBleHBlY3RlZCB0b2tlbi5cbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IGxpbmUuc3Vic3RyKDAsIDMpO1xuICAgICAgICAgICAgICAgIHRva2VuUmVnZXggPSBuZXcgUmVnRXhwKGBeJHt0b2tlbn0oPzokfCApYCk7XG4gICAgICAgICAgICAgICAgc3RhcnRBdCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1NpbmdsZUxpbmUobGluZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgbGluZXMgY2FuIGJlIGdyb3VwZWQgaW1tZWRpYXRlbHkuXG4gICAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBHcm91cCBoYXMgYmVlbiBvcGVuZWQsIGV4cGVjdCBjbG9zaW5nIHRva2VuLlxuICAgICAgICBlbHNlIGlmICh0b2tlblJlZ2V4LnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgIHRva2VuUmVnZXggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGxpbmVzLnNsaWNlKHN0YXJ0QXQsIGkgKyAxKS5qb2luKExGKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVGhlIGxhc3QgZ3JvdXAgbWlnaHQgbm90IGhhdmUgYmVlbiBjbG9zZWQsIHJlcG9ydCBpdCBhcyBhIHJlc3QuXG4gICAgY29uc3QgcmVzdCA9IHRva2VuUmVnZXggPyBsaW5lcy5zbGljZShzdGFydEF0KS5qb2luKExGKSArIExGIDogXCJcIjtcbiAgICByZXR1cm4geyBtZXNzYWdlcywgcmVzdCB9O1xufVxuZXhwb3J0cy5wYXJzZUNvbnRyb2xSZXNwb25zZSA9IHBhcnNlQ29udHJvbFJlc3BvbnNlO1xuZnVuY3Rpb24gaXNTaW5nbGVMaW5lKGxpbmUpIHtcbiAgICByZXR1cm4gL15cXGRcXGRcXGQoPzokfCApLy50ZXN0KGxpbmUpO1xufVxuZXhwb3J0cy5pc1NpbmdsZUxpbmUgPSBpc1NpbmdsZUxpbmU7XG5mdW5jdGlvbiBpc011bHRpbGluZShsaW5lKSB7XG4gICAgcmV0dXJuIC9eXFxkXFxkXFxkLS8udGVzdChsaW5lKTtcbn1cbmV4cG9ydHMuaXNNdWx0aWxpbmUgPSBpc011bHRpbGluZTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgYW4gRlRQIHJldHVybiBjb2RlIGRlc2NyaWJlcyBhIHBvc2l0aXZlIGNvbXBsZXRpb24uXG4gKi9cbmZ1bmN0aW9uIHBvc2l0aXZlQ29tcGxldGlvbihjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgPj0gMjAwICYmIGNvZGUgPCAzMDA7XG59XG5leHBvcnRzLnBvc2l0aXZlQ29tcGxldGlvbiA9IHBvc2l0aXZlQ29tcGxldGlvbjtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgYW4gRlRQIHJldHVybiBjb2RlIGRlc2NyaWJlcyBhIHBvc2l0aXZlIGludGVybWVkaWF0ZSByZXNwb25zZS5cbiAqL1xuZnVuY3Rpb24gcG9zaXRpdmVJbnRlcm1lZGlhdGUoY29kZSkge1xuICAgIHJldHVybiBjb2RlID49IDMwMCAmJiBjb2RlIDwgNDAwO1xufVxuZXhwb3J0cy5wb3NpdGl2ZUludGVybWVkaWF0ZSA9IHBvc2l0aXZlSW50ZXJtZWRpYXRlO1xuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IFdyaXRhYmxlLCBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5cbmltcG9ydCB7XG4gIElGaWxlLFxuICBJVHJhbnNmZXJPcHRpb25zLFxuICBJVHJhbnNmZXJQcm9ncmVzc0xpc3RlbmVyLFxuICBJVHJhbnNmZXJJbmZvLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRyYW5zZmVyIH0gZnJvbSAnLi4vdHJhbnNmZXInO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgU3RyYXRlZ3kge1xuICBvbihldmVudDogJ2Nvbm5lY3QnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXM7XG4gIG9uKGV2ZW50OiAnZGlzY29ubmVjdCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpcztcbiAgb24oZXZlbnQ6ICdwcm9ncmVzcycsIGxpc3RlbmVyOiBJVHJhbnNmZXJQcm9ncmVzc0xpc3RlbmVyKTogdGhpcztcblxuICBvbmNlKGV2ZW50OiAnY29ubmVjdCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpcztcbiAgb25jZShldmVudDogJ2Rpc2Nvbm5lY3QnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXM7XG59XG5cbi8qKlxuICogQW4gYWJzdHJhY3QgY2xhc3MsIHdoaWNoIGFsbG93cyB0byBjcmVhdGUgYSBjdXN0b20gcHJvdG9jb2wuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTdHJhdGVneSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjb25uZWN0ZWQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSB0cmFuc2ZlcjogVHJhbnNmZXI7XG5cbiAgcHVibGljIGFic3RyYWN0IGNvbm5lY3Q6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgcHVibGljIGFic3RyYWN0IGRpc2Nvbm5lY3Q6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgcHVibGljIGFzeW5jIGFib3J0KCkge1xuICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGRvd25sb2FkOiAoXG4gICAgZGVzdDogV3JpdGFibGUsXG4gICAgaW5mbzogSVRyYW5zZmVySW5mbyxcbiAgICBvcHRpb25zPzogSVRyYW5zZmVyT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCB1cGxvYWQ6IChcbiAgICBzb3VyY2U6IFJlYWRhYmxlLFxuICAgIGluZm86IElUcmFuc2ZlckluZm8sXG4gICAgb3B0aW9ucz86IElUcmFuc2Zlck9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgbGlzdDogKHBhdGg/OiBzdHJpbmcpID0+IFByb21pc2U8SUZpbGVbXT47XG5cbiAgcHVibGljIGFic3RyYWN0IHNpemU6IChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8bnVtYmVyPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgZXhpc3RzOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBtb3ZlOiAoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgcmVtb3ZlRmlsZTogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgcmVtb3ZlRW1wdHlGb2xkZXI6IChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG5cbiAgcHVibGljIGFic3RyYWN0IHJlbW92ZUZvbGRlcjogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgY3JlYXRlRm9sZGVyOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBjcmVhdGVFbXB0eUZpbGU6IChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG5cbiAgcHVibGljIGFic3RyYWN0IHB3ZDogKCkgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBzZW5kOiAoY29tbWFuZDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZzogYW55LFxuICAgIHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zPzogYW55LFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByZXBhcmVUcmFuc2ZlcihpbmZvOiBJVHJhbnNmZXJJbmZvLCBvcHRpb25zPzogSVRyYW5zZmVyT3B0aW9ucykge1xuICAgIHRoaXMudHJhbnNmZXIgPSBuZXcgVHJhbnNmZXIoaW5mbywgb3B0aW9ucywgKGRhdGEsIHByb2dyZXNzKSA9PiB7XG4gICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgZGF0YSwgcHJvZ3Jlc3MpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmZXIuaGFuZGxlUHJvZ3Jlc3M7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmluaXNoVHJhbnNmZXIoKSB7XG4gICAgdGhpcy50cmFuc2ZlciA9IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlTmV0d29yazxUID0gdm9pZD4oY2I6IGFueSwgY2xlYW4/OiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgb25DbGVhbiA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignZGlzY29ubmVjdCcsIG9uRGlzY29ubmVjdCk7XG5cbiAgICAgICAgaWYgKGNsZWFuKSB7XG4gICAgICAgICAgY2xlYW4ob25SZXNvbHZlLCBvblJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uRGlzY29ubmVjdCA9ICgpID0+IG9uUmVzb2x2ZShudWxsKTtcblxuICAgICAgY29uc3Qgb25SZXNvbHZlID0gKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBvbkNsZWFuKCk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblJlamVjdCA9IChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIG9uQ2xlYW4oKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9uY2UoJ2Rpc2Nvbm5lY3QnLCBvbkRpc2Nvbm5lY3QpO1xuXG4gICAgICBjYihvblJlc29sdmUsIG9uUmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFNGVFBTdHJlYW06IHJlcXVpcmUoJy4vbGliL3NmdHAnKSxcbiAgU1NIMlN0cmVhbTogcmVxdWlyZSgnLi9saWIvc3NoJyksXG4gIHV0aWxzOiByZXF1aXJlKCcuL2xpYi91dGlscycpLFxuICBjb25zdGFudHM6IHJlcXVpcmUoJy4vbGliL2NvbnN0YW50cycpXG59OyIsIi8vIENvcHlyaWdodCAyMDExIE1hcmsgQ2F2YWdlIDxtY2F2YWdlQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuLy8gSWYgeW91IGhhdmUgbm8gaWRlYSB3aGF0IEFTTi4xIG9yIEJFUiBpcywgc2VlIHRoaXM6XG4vLyBmdHA6Ly9mdHAucnNhLmNvbS9wdWIvcGtjcy9hc2NpaS9sYXltYW4uYXNjXG5cbnZhciBCZXIgPSByZXF1aXJlKCcuL2Jlci9pbmRleCcpO1xuXG5cblxuLy8gLS0tIEV4cG9ydGVkIEFQSVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICBCZXI6IEJlcixcblxuICBCZXJSZWFkZXI6IEJlci5SZWFkZXIsXG5cbiAgQmVyV3JpdGVyOiBCZXIuV3JpdGVyXG5cbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxMSBNYXJrIENhdmFnZSA8bWNhdmFnZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgbmV3SW52YWxpZEFzbjFFcnJvcjogZnVuY3Rpb24gKG1zZykge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCk7XG4gICAgZS5uYW1lID0gJ0ludmFsaWRBc24xRXJyb3InO1xuICAgIGUubWVzc2FnZSA9IG1zZyB8fCAnJztcbiAgICByZXR1cm4gZTtcbiAgfVxuXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTEgTWFyayBDYXZhZ2UgPG1jYXZhZ2VAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFT0M6IDAsXG4gIEJvb2xlYW46IDEsXG4gIEludGVnZXI6IDIsXG4gIEJpdFN0cmluZzogMyxcbiAgT2N0ZXRTdHJpbmc6IDQsXG4gIE51bGw6IDUsXG4gIE9JRDogNixcbiAgT2JqZWN0RGVzY3JpcHRvcjogNyxcbiAgRXh0ZXJuYWw6IDgsXG4gIFJlYWw6IDksIC8vIGZsb2F0XG4gIEVudW1lcmF0aW9uOiAxMCxcbiAgUERWOiAxMSxcbiAgVXRmOFN0cmluZzogMTIsXG4gIFJlbGF0aXZlT0lEOiAxMyxcbiAgU2VxdWVuY2U6IDE2LFxuICBTZXQ6IDE3LFxuICBOdW1lcmljU3RyaW5nOiAxOCxcbiAgUHJpbnRhYmxlU3RyaW5nOiAxOSxcbiAgVDYxU3RyaW5nOiAyMCxcbiAgVmlkZW90ZXhTdHJpbmc6IDIxLFxuICBJQTVTdHJpbmc6IDIyLFxuICBVVENUaW1lOiAyMyxcbiAgR2VuZXJhbGl6ZWRUaW1lOiAyNCxcbiAgR3JhcGhpY1N0cmluZzogMjUsXG4gIFZpc2libGVTdHJpbmc6IDI2LFxuICBHZW5lcmFsU3RyaW5nOiAyOCxcbiAgVW5pdmVyc2FsU3RyaW5nOiAyOSxcbiAgQ2hhcmFjdGVyU3RyaW5nOiAzMCxcbiAgQk1QU3RyaW5nOiAzMSxcbiAgQ29uc3RydWN0b3I6IDMyLFxuICBDb250ZXh0OiAxMjhcbn07XG4iLCJ2YXIgaTtcbnZhciBrZXlzO1xudmFyIGxlbjtcblxudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xudmFyIGVkZHNhU3VwcG9ydGVkID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodHlwZW9mIGNyeXB0by5zaWduID09PSAnZnVuY3Rpb24nXG4gICAgICAmJiB0eXBlb2YgY3J5cHRvLnZlcmlmeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBrZXkgPSAnLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxyXFxuTUM0Q0FRQXdCUVlESzJWd0JDSUVJSEtqK3NWYTlXY0QnXG4gICAgICAgICAgICAgICsgJy9xMkRKVUphZjQzS3B0Yzh4WXVVUUE0Yk9Gajl2QzhUXFxyXFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLSc7XG4gICAgdmFyIGRhdGEgPSBCdWZmZXIuZnJvbSgnYScpO1xuICAgIHZhciBzaWc7XG4gICAgdmFyIHZlcmlmaWVkO1xuICAgIHRyeSB7XG4gICAgICBzaWcgPSBjcnlwdG8uc2lnbihudWxsLCBkYXRhLCBrZXkpO1xuICAgICAgdmVyaWZpZWQgPSBjcnlwdG8udmVyaWZ5KG51bGwsIGRhdGEsIGtleSwgc2lnKTtcbiAgICB9IGNhdGNoIChleCkge31cbiAgICByZXR1cm4gKEJ1ZmZlci5pc0J1ZmZlcihzaWcpICYmIHNpZy5sZW5ndGggPT09IDY0ICYmIHZlcmlmaWVkID09PSB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn0pKCk7XG5cbnZhciBjdXJ2ZTI1NTE5U3VwcG9ydGVkID0gKHR5cGVvZiBjcnlwdG8uZGlmZmllSGVsbG1hbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIGNyeXB0by5nZW5lcmF0ZUtleVBhaXJTeW5jID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSA9PT0gJ2Z1bmN0aW9uJyk7XG5cbnZhciBNRVNTQUdFID0gZXhwb3J0cy5NRVNTQUdFID0ge1xuICAvLyBUcmFuc3BvcnQgbGF5ZXIgcHJvdG9jb2wgLS0gZ2VuZXJpYyAoMS0xOSlcbiAgRElTQ09OTkVDVDogMSxcbiAgSUdOT1JFOiAyLFxuICBVTklNUExFTUVOVEVEOiAzLFxuICBERUJVRzogNCxcbiAgU0VSVklDRV9SRVFVRVNUOiA1LFxuICBTRVJWSUNFX0FDQ0VQVDogNixcblxuICAvLyBUcmFuc3BvcnQgbGF5ZXIgcHJvdG9jb2wgLS0gYWxnb3JpdGhtIG5lZ290aWF0aW9uICgyMC0yOSlcbiAgS0VYSU5JVDogMjAsXG4gIE5FV0tFWVM6IDIxLFxuXG4gIC8vIFRyYW5zcG9ydCBsYXllciBwcm90b2NvbCAtLSBrZXkgZXhjaGFuZ2UgbWV0aG9kLXNwZWNpZmljICgzMC00OSlcblxuICAvLyBVc2VyIGF1dGggcHJvdG9jb2wgLS0gZ2VuZXJpYyAoNTAtNTkpXG4gIFVTRVJBVVRIX1JFUVVFU1Q6IDUwLFxuICBVU0VSQVVUSF9GQUlMVVJFOiA1MSxcbiAgVVNFUkFVVEhfU1VDQ0VTUzogNTIsXG4gIFVTRVJBVVRIX0JBTk5FUjogNTMsXG5cbiAgLy8gVXNlciBhdXRoIHByb3RvY29sIC0tIHVzZXIgYXV0aCBtZXRob2Qtc3BlY2lmaWMgKDYwLTc5KVxuXG4gIC8vIENvbm5lY3Rpb24gcHJvdG9jb2wgLS0gZ2VuZXJpYyAoODAtODkpXG4gIEdMT0JBTF9SRVFVRVNUOiA4MCxcbiAgUkVRVUVTVF9TVUNDRVNTOiA4MSxcbiAgUkVRVUVTVF9GQUlMVVJFOiA4MixcblxuICAvLyBDb25uZWN0aW9uIHByb3RvY29sIC0tIGNoYW5uZWwtcmVsYXRlZCAoOTAtMTI3KVxuICBDSEFOTkVMX09QRU46IDkwLFxuICBDSEFOTkVMX09QRU5fQ09ORklSTUFUSU9OOiA5MSxcbiAgQ0hBTk5FTF9PUEVOX0ZBSUxVUkU6IDkyLFxuICBDSEFOTkVMX1dJTkRPV19BREpVU1Q6IDkzLFxuICBDSEFOTkVMX0RBVEE6IDk0LFxuICBDSEFOTkVMX0VYVEVOREVEX0RBVEE6IDk1LFxuICBDSEFOTkVMX0VPRjogOTYsXG4gIENIQU5ORUxfQ0xPU0U6IDk3LFxuICBDSEFOTkVMX1JFUVVFU1Q6IDk4LFxuICBDSEFOTkVMX1NVQ0NFU1M6IDk5LFxuICBDSEFOTkVMX0ZBSUxVUkU6IDEwMFxuXG4gIC8vIFJlc2VydmVkIGZvciBjbGllbnQgcHJvdG9jb2xzICgxMjgtMTkxKVxuXG4gIC8vIExvY2FsIGV4dGVuc2lvbnMgKDE5Mi0xNTUpXG59O1xuZm9yIChpID0gMCwga2V5cyA9IE9iamVjdC5rZXlzKE1FU1NBR0UpLCBsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICBNRVNTQUdFW01FU1NBR0Vba2V5c1tpXV1dID0ga2V5c1tpXTtcbi8vIGNvbnRleHQtc3BlY2lmaWMgbWVzc2FnZSBjb2Rlczpcbk1FU1NBR0UuS0VYREhfSU5JVCA9IDMwO1xuTUVTU0FHRS5LRVhESF9SRVBMWSA9IDMxO1xuTUVTU0FHRS5LRVhESF9HRVhfUkVRVUVTVCA9IDM0O1xuTUVTU0FHRS5LRVhESF9HRVhfR1JPVVAgPSAzMTtcbk1FU1NBR0UuS0VYREhfR0VYX0lOSVQgPSAzMjtcbk1FU1NBR0UuS0VYREhfR0VYX1JFUExZID0gMzM7XG5NRVNTQUdFLktFWEVDREhfSU5JVCA9IDMwOyAvLyBpbmNsdWRlZCBoZXJlIGZvciBjb21wbGV0ZW5lc3Ncbk1FU1NBR0UuS0VYRUNESF9SRVBMWSA9IDMxOyAvLyBpbmNsdWRlZCBoZXJlIGZvciBjb21wbGV0ZW5lc3Ncbk1FU1NBR0UuVVNFUkFVVEhfUEFTU1dEX0NIQU5HRVJFUSA9IDYwO1xuTUVTU0FHRS5VU0VSQVVUSF9QS19PSyA9IDYwO1xuTUVTU0FHRS5VU0VSQVVUSF9JTkZPX1JFUVVFU1QgPSA2MDtcbk1FU1NBR0UuVVNFUkFVVEhfSU5GT19SRVNQT05TRSA9IDYxO1xuXG52YXIgRFlOQU1JQ19LRVhESF9NRVNTQUdFID0gZXhwb3J0cy5EWU5BTUlDX0tFWERIX01FU1NBR0UgPSB7fTtcbkRZTkFNSUNfS0VYREhfTUVTU0FHRVtNRVNTQUdFLktFWERIX0dFWF9HUk9VUF0gPSAnS0VYREhfR0VYX0dST1VQJztcbkRZTkFNSUNfS0VYREhfTUVTU0FHRVtNRVNTQUdFLktFWERIX0dFWF9SRVBMWV0gPSAnS0VYREhfR0VYX1JFUExZJztcblxudmFyIEtFWERIX01FU1NBR0UgPSBleHBvcnRzLktFWERIX01FU1NBR0UgPSB7fTtcbktFWERIX01FU1NBR0VbTUVTU0FHRS5LRVhESF9JTklUXSA9ICdLRVhESF9JTklUJztcbktFWERIX01FU1NBR0VbTUVTU0FHRS5LRVhESF9SRVBMWV0gPSAnS0VYREhfUkVQTFknO1xuXG52YXIgRElTQ09OTkVDVF9SRUFTT04gPSBleHBvcnRzLkRJU0NPTk5FQ1RfUkVBU09OID0ge1xuICBIT1NUX05PVF9BTExPV0VEX1RPX0NPTk5FQ1Q6IDEsXG4gIFBST1RPQ09MX0VSUk9SOiAyLFxuICBLRVlfRVhDSEFOR0VfRkFJTEVEOiAzLFxuICBSRVNFUlZFRDogNCxcbiAgTUFDX0VSUk9SOiA1LFxuICBDT01QUkVTU0lPTl9FUlJPUjogNixcbiAgU0VSVklDRV9OT1RfQVZBSUxBQkxFOiA3LFxuICBQUk9UT0NPTF9WRVJTSU9OX05PVF9TVVBQT1JURUQ6IDgsXG4gIEhPU1RfS0VZX05PVF9WRVJJRklBQkxFOiA5LFxuICBDT05ORUNUSU9OX0xPU1Q6IDEwLFxuICBCWV9BUFBMSUNBVElPTjogMTEsXG4gIFRPT19NQU5ZX0NPTk5FQ1RJT05TOiAxMixcbiAgQVVUSF9DQU5DRUxFRF9CWV9VU0VSOiAxMyxcbiAgTk9fTU9SRV9BVVRIX01FVEhPRFNfQVZBSUxBQkxFOiAxNCxcbiAgSUxMRUdBTF9VU0VSX05BTUU6IDE1XG59O1xuZm9yIChpID0gMCwga2V5cyA9IE9iamVjdC5rZXlzKERJU0NPTk5FQ1RfUkVBU09OKSwgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgIGkgPCBsZW47XG4gICAgICsraSkge1xuICBESVNDT05ORUNUX1JFQVNPTltESVNDT05ORUNUX1JFQVNPTltrZXlzW2ldXV0gPSBrZXlzW2ldO1xufVxuXG52YXIgQ0hBTk5FTF9PUEVOX0ZBSUxVUkUgPSBleHBvcnRzLkNIQU5ORUxfT1BFTl9GQUlMVVJFID0ge1xuICBBRE1JTklTVFJBVElWRUxZX1BST0hJQklURUQ6IDEsXG4gIENPTk5FQ1RfRkFJTEVEOiAyLFxuICBVTktOT1dOX0NIQU5ORUxfVFlQRTogMyxcbiAgUkVTT1VSQ0VfU0hPUlRBR0U6IDRcbn07XG5mb3IgKGkgPSAwLCBrZXlzID0gT2JqZWN0LmtleXMoQ0hBTk5FTF9PUEVOX0ZBSUxVUkUpLCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgaSA8IGxlbjtcbiAgICAgKytpKSB7XG4gIENIQU5ORUxfT1BFTl9GQUlMVVJFW0NIQU5ORUxfT1BFTl9GQUlMVVJFW2tleXNbaV1dXSA9IGtleXNbaV07XG59XG5cbnZhciBURVJNSU5BTF9NT0RFID0gZXhwb3J0cy5URVJNSU5BTF9NT0RFID0ge1xuICBUVFlfT1BfRU5EOiAwLCAgICAgICAgLy8gSW5kaWNhdGVzIGVuZCBvZiBvcHRpb25zLlxuICBWSU5UUjogMSwgICAgICAgICAgICAgLy8gSW50ZXJydXB0IGNoYXJhY3RlcjsgMjU1IGlmIG5vbmUuIFNpbWlsYXJseSBmb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgb3RoZXIgY2hhcmFjdGVycy4gIE5vdCBhbGwgb2YgdGhlc2UgY2hhcmFjdGVycyBhcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzdXBwb3J0ZWQgb24gYWxsIHN5c3RlbXMuXG4gIFZRVUlUOiAyLCAgICAgICAgICAgICAvLyBUaGUgcXVpdCBjaGFyYWN0ZXIgKHNlbmRzIFNJR1FVSVQgc2lnbmFsIG9uIFBPU0lYXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgc3lzdGVtcykuXG4gIFZFUkFTRTogMywgICAgICAgICAgICAvLyBFcmFzZSB0aGUgY2hhcmFjdGVyIHRvIGxlZnQgb2YgdGhlIGN1cnNvci5cbiAgVktJTEw6IDQsICAgICAgICAgICAgIC8vIEtpbGwgdGhlIGN1cnJlbnQgaW5wdXQgbGluZS5cbiAgVkVPRjogNSwgICAgICAgICAgICAgIC8vIEVuZC1vZi1maWxlIGNoYXJhY3RlciAoc2VuZHMgRU9GIGZyb20gdGhlIHRlcm1pbmFsKS5cbiAgVkVPTDogNiwgICAgICAgICAgICAgIC8vIEVuZC1vZi1saW5lIGNoYXJhY3RlciBpbiBhZGRpdGlvbiB0byBjYXJyaWFnZSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBhbmQvb3IgbGluZWZlZWQuXG4gIFZFT0wyOiA3LCAgICAgICAgICAgICAvLyBBZGRpdGlvbmFsIGVuZC1vZi1saW5lIGNoYXJhY3Rlci5cbiAgVlNUQVJUOiA4LCAgICAgICAgICAgIC8vIENvbnRpbnVlcyBwYXVzZWQgb3V0cHV0IChub3JtYWxseSBjb250cm9sLVEpLlxuICBWU1RPUDogOSwgICAgICAgICAgICAgLy8gUGF1c2VzIG91dHB1dCAobm9ybWFsbHkgY29udHJvbC1TKS5cbiAgVlNVU1A6IDEwLCAgICAgICAgICAgIC8vIFN1c3BlbmRzIHRoZSBjdXJyZW50IHByb2dyYW0uXG4gIFZEU1VTUDogMTEsICAgICAgICAgICAvLyBBbm90aGVyIHN1c3BlbmQgY2hhcmFjdGVyLlxuICBWUkVQUklOVDogMTIsICAgICAgICAgLy8gUmVwcmludHMgdGhlIGN1cnJlbnQgaW5wdXQgbGluZS5cbiAgVldFUkFTRTogMTMsICAgICAgICAgIC8vIEVyYXNlcyBhIHdvcmQgbGVmdCBvZiBjdXJzb3IuXG4gIFZMTkVYVDogMTQsICAgICAgICAgICAvLyBFbnRlciB0aGUgbmV4dCBjaGFyYWN0ZXIgdHlwZWQgbGl0ZXJhbGx5LCBldmVuIGlmIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgaXMgYSBzcGVjaWFsIGNoYXJhY3RlclxuICBWRkxVU0g6IDE1LCAgICAgICAgICAgLy8gQ2hhcmFjdGVyIHRvIGZsdXNoIG91dHB1dC5cbiAgVlNXVENIOiAxNiwgICAgICAgICAgIC8vIFN3aXRjaCB0byBhIGRpZmZlcmVudCBzaGVsbCBsYXllci5cbiAgVlNUQVRVUzogMTcsICAgICAgICAgIC8vIFByaW50cyBzeXN0ZW0gc3RhdHVzIGxpbmUgKGxvYWQsIGNvbW1hbmQsIHBpZCwgZXRjKS5cbiAgVkRJU0NBUkQ6IDE4LCAgICAgICAgIC8vIFRvZ2dsZXMgdGhlIGZsdXNoaW5nIG9mIHRlcm1pbmFsIG91dHB1dC5cbiAgSUdOUEFSOiAzMCwgICAgICAgICAgIC8vIFRoZSBpZ25vcmUgcGFyaXR5IGZsYWcuICBUaGUgcGFyYW1ldGVyIFNIT1VMRCBiZSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgaWYgdGhpcyBmbGFnIGlzIEZBTFNFLCBhbmQgMSBpZiBpdCBpcyBUUlVFLlxuICBQQVJNUks6IDMxLCAgICAgICAgICAgLy8gTWFyayBwYXJpdHkgYW5kIGZyYW1pbmcgZXJyb3JzLlxuICBJTlBDSzogMzIsICAgICAgICAgICAgLy8gRW5hYmxlIGNoZWNraW5nIG9mIHBhcml0eSBlcnJvcnMuXG4gIElTVFJJUDogMzMsICAgICAgICAgICAvLyBTdHJpcCA4dGggYml0IG9mZiBjaGFyYWN0ZXJzLlxuICBJTkxDUjogMzQsICAgICAgICAgICAgLy8gTWFwIE5MIGludG8gQ1Igb24gaW5wdXQuXG4gIElHTkNSOiAzNSwgICAgICAgICAgICAvLyBJZ25vcmUgQ1Igb24gaW5wdXQuXG4gIElDUk5MOiAzNiwgICAgICAgICAgICAvLyBNYXAgQ1IgdG8gTkwgb24gaW5wdXQuXG4gIElVQ0xDOiAzNywgICAgICAgICAgICAvLyBUcmFuc2xhdGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLlxuICBJWE9OOiAzOCwgICAgICAgICAgICAgLy8gRW5hYmxlIG91dHB1dCBmbG93IGNvbnRyb2wuXG4gIElYQU5ZOiAzOSwgICAgICAgICAgICAvLyBBbnkgY2hhciB3aWxsIHJlc3RhcnQgYWZ0ZXIgc3RvcC5cbiAgSVhPRkY6IDQwLCAgICAgICAgICAgIC8vIEVuYWJsZSBpbnB1dCBmbG93IGNvbnRyb2wuXG4gIElNQVhCRUw6IDQxLCAgICAgICAgICAvLyBSaW5nIGJlbGwgb24gaW5wdXQgcXVldWUgZnVsbC5cbiAgSVNJRzogNTAsICAgICAgICAgICAgIC8vIEVuYWJsZSBzaWduYWxzIElOVFIsIFFVSVQsIFtEXVNVU1AuXG4gIElDQU5PTjogNTEsICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgaW5wdXQgbGluZXMuXG4gIFhDQVNFOiA1MiwgICAgICAgICAgICAvLyBFbmFibGUgaW5wdXQgYW5kIG91dHB1dCBvZiB1cHBlcmNhc2UgY2hhcmFjdGVycyBieVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHByZWNlZGluZyB0aGVpciBsb3dlcmNhc2UgZXF1aXZhbGVudHMgd2l0aCBcIlxcXCIuXG4gIEVDSE86IDUzLCAgICAgICAgICAgICAvLyBFbmFibGUgZWNob2luZy5cbiAgRUNIT0U6IDU0LCAgICAgICAgICAgIC8vIFZpc3VhbGx5IGVyYXNlIGNoYXJzLlxuICBFQ0hPSzogNTUsICAgICAgICAgICAgLy8gS2lsbCBjaGFyYWN0ZXIgZGlzY2FyZHMgY3VycmVudCBsaW5lLlxuICBFQ0hPTkw6IDU2LCAgICAgICAgICAgLy8gRWNobyBOTCBldmVuIGlmIEVDSE8gaXMgb2ZmLlxuICBOT0ZMU0g6IDU3LCAgICAgICAgICAgLy8gRG9uJ3QgZmx1c2ggYWZ0ZXIgaW50ZXJydXB0LlxuICBUT1NUT1A6IDU4LCAgICAgICAgICAgLy8gU3RvcCBiYWNrZ3JvdW5kIGpvYnMgZnJvbSBvdXRwdXQuXG4gIElFWFRFTjogNTksICAgICAgICAgICAvLyBFbmFibGUgZXh0ZW5zaW9ucy5cbiAgRUNIT0NUTDogNjAsICAgICAgICAgIC8vIEVjaG8gY29udHJvbCBjaGFyYWN0ZXJzIGFzIF4oQ2hhcikuXG4gIEVDSE9LRTogNjEsICAgICAgICAgICAvLyBWaXN1YWwgZXJhc2UgZm9yIGxpbmUga2lsbC5cbiAgUEVORElOOiA2MiwgICAgICAgICAgIC8vIFJldHlwZSBwZW5kaW5nIGlucHV0LlxuICBPUE9TVDogNzAsICAgICAgICAgICAgLy8gRW5hYmxlIG91dHB1dCBwcm9jZXNzaW5nLlxuICBPTENVQzogNzEsICAgICAgICAgICAgLy8gQ29udmVydCBsb3dlcmNhc2UgdG8gdXBwZXJjYXNlLlxuICBPTkxDUjogNzIsICAgICAgICAgICAgLy8gTWFwIE5MIHRvIENSLU5MLlxuICBPQ1JOTDogNzMsICAgICAgICAgICAgLy8gVHJhbnNsYXRlIGNhcnJpYWdlIHJldHVybiB0byBuZXdsaW5lIChvdXRwdXQpLlxuICBPTk9DUjogNzQsICAgICAgICAgICAgLy8gVHJhbnNsYXRlIG5ld2xpbmUgdG8gY2FycmlhZ2UgcmV0dXJuLW5ld2xpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIChvdXRwdXQpLlxuICBPTkxSRVQ6IDc1LCAgICAgICAgICAgLy8gTmV3bGluZSBwZXJmb3JtcyBhIGNhcnJpYWdlIHJldHVybiAob3V0cHV0KS5cbiAgQ1M3OiA5MCwgICAgICAgICAgICAgIC8vIDcgYml0IG1vZGUuXG4gIENTODogOTEsICAgICAgICAgICAgICAvLyA4IGJpdCBtb2RlLlxuICBQQVJFTkI6IDkyLCAgICAgICAgICAgLy8gUGFyaXR5IGVuYWJsZS5cbiAgUEFST0REOiA5MywgICAgICAgICAgIC8vIE9kZCBwYXJpdHksIGVsc2UgZXZlbi5cbiAgVFRZX09QX0lTUEVFRDogMTI4LCAgIC8vIFNwZWNpZmllcyB0aGUgaW5wdXQgYmF1ZCByYXRlIGluIGJpdHMgcGVyIHNlY29uZC5cbiAgVFRZX09QX09TUEVFRDogMTI5ICAgIC8vIFNwZWNpZmllcyB0aGUgb3V0cHV0IGJhdWQgcmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuXG59O1xuZm9yIChpID0gMCwga2V5cyA9IE9iamVjdC5rZXlzKFRFUk1JTkFMX01PREUpLCBsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICBURVJNSU5BTF9NT0RFW1RFUk1JTkFMX01PREVba2V5c1tpXV1dID0ga2V5c1tpXTtcblxudmFyIENIQU5ORUxfRVhURU5ERURfREFUQVRZUEUgPSBleHBvcnRzLkNIQU5ORUxfRVhURU5ERURfREFUQVRZUEUgPSB7XG4gIFNUREVSUjogMVxufTtcbmZvciAoaSA9IDAsIGtleXMgPSBPYmplY3Qua2V5cyhDSEFOTkVMX0VYVEVOREVEX0RBVEFUWVBFKSwgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgIGkgPCBsZW47XG4gICAgICsraSkge1xuICBDSEFOTkVMX0VYVEVOREVEX0RBVEFUWVBFW0NIQU5ORUxfRVhURU5ERURfREFUQVRZUEVba2V5c1tpXV1dID0ga2V5c1tpXTtcbn1cblxuZXhwb3J0cy5TSUdOQUxTID0gWydBQlJUJywgJ0FMUk0nLCAnRlBFJywgJ0hVUCcsICdJTEwnLCAnSU5UJyxcbiAgICAgICAgICAgICAgICAgICAnUVVJVCcsICdTRUdWJywgJ1RFUk0nLCAnVVNSMScsICdVU1IyJywgJ0tJTEwnLFxuICAgICAgICAgICAgICAgICAgICdQSVBFJ107XG5cbnZhciBERUZBVUxUX0tFWCA9IFtcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU2NTYjc2VjdGlvbi0xMC4xXG4gICdlY2RoLXNoYTItbmlzdHAyNTYnLFxuICAnZWNkaC1zaGEyLW5pc3RwMzg0JyxcbiAgJ2VjZGgtc2hhMi1uaXN0cDUyMScsXG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ0MTkjc2VjdGlvbi00XG4gICdkaWZmaWUtaGVsbG1hbi1ncm91cC1leGNoYW5nZS1zaGEyNTYnLFxuXG4gICdkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTI1NicsXG4gICdkaWZmaWUtaGVsbG1hbi1ncm91cDE2LXNoYTUxMicsXG4gICdkaWZmaWUtaGVsbG1hbi1ncm91cDE4LXNoYTUxMicsXG5cbiAgJ2RpZmZpZS1oZWxsbWFuLWdyb3VwMTQtc2hhMScsIC8vIFJFUVVJUkVEXG5dO1xuaWYgKGN1cnZlMjU1MTlTdXBwb3J0ZWQpIHtcbiAgREVGQVVMVF9LRVgudW5zaGlmdCgnY3VydmUyNTUxOS1zaGEyNTYnKTtcbiAgREVGQVVMVF9LRVgudW5zaGlmdCgnY3VydmUyNTUxOS1zaGEyNTZAbGlic3NoLm9yZycpO1xufVxudmFyIFNVUFBPUlRFRF9LRVggPSBbXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NDE5I3NlY3Rpb24tNFxuICAnZGlmZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMScsXG5cbiAgJ2RpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExJyAgLy8gUkVRVUlSRURcbl07XG52YXIgS0VYX0JVRiA9IEJ1ZmZlci5mcm9tKERFRkFVTFRfS0VYLmpvaW4oJywnKSwgJ2FzY2lpJyk7XG5TVVBQT1JURURfS0VYID0gREVGQVVMVF9LRVguY29uY2F0KFNVUFBPUlRFRF9LRVgpO1xuXG52YXIgREVGQVVMVF9TRVJWRVJfSE9TVF9LRVkgPSBbXG4gICdlY2RzYS1zaGEyLW5pc3RwMjU2JyxcbiAgJ2VjZHNhLXNoYTItbmlzdHAzODQnLFxuICAnZWNkc2Etc2hhMi1uaXN0cDUyMScsXG4gICdzc2gtcnNhJyxcbl07XG5pZiAoZWRkc2FTdXBwb3J0ZWQpXG4gIERFRkFVTFRfU0VSVkVSX0hPU1RfS0VZLnVuc2hpZnQoJ3NzaC1lZDI1NTE5Jyk7XG52YXIgU1VQUE9SVEVEX1NFUlZFUl9IT1NUX0tFWSA9IFtcbiAgJ3NzaC1kc3MnXG5dO1xudmFyIFNFUlZFUl9IT1NUX0tFWV9CVUYgPSBCdWZmZXIuZnJvbShERUZBVUxUX1NFUlZFUl9IT1NUX0tFWS5qb2luKCcsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc2NpaScpO1xuU1VQUE9SVEVEX1NFUlZFUl9IT1NUX0tFWSA9IERFRkFVTFRfU0VSVkVSX0hPU1RfS0VZLmNvbmNhdChcbiAgU1VQUE9SVEVEX1NFUlZFUl9IT1NUX0tFWVxuKTtcblxudmFyIERFRkFVTFRfQ0lQSEVSID0gW1xuICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MzQ0I3NlY3Rpb24tNFxuICAnYWVzMTI4LWN0cicsXG4gICdhZXMxOTItY3RyJyxcbiAgJ2FlczI1Ni1jdHInLFxuXG4gIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU2NDdcbiAgJ2FlczEyOC1nY20nLFxuICAnYWVzMTI4LWdjbUBvcGVuc3NoLmNvbScsXG4gICdhZXMyNTYtZ2NtJyxcbiAgJ2FlczI1Ni1nY21Ab3BlbnNzaC5jb20nXG5dO1xudmFyIFNVUFBPUlRFRF9DSVBIRVIgPSBbXG4gICdhZXMyNTYtY2JjJyxcbiAgJ2FlczE5Mi1jYmMnLFxuICAnYWVzMTI4LWNiYycsXG4gICdibG93ZmlzaC1jYmMnLFxuICAnM2Rlcy1jYmMnLFxuXG4gIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQzNDUjc2VjdGlvbi00OlxuICAnYXJjZm91cjI1NicsXG4gICdhcmNmb3VyMTI4JyxcblxuICAnY2FzdDEyOC1jYmMnLFxuICAnYXJjZm91cidcbl07XG52YXIgQ0lQSEVSX0JVRiA9IEJ1ZmZlci5mcm9tKERFRkFVTFRfQ0lQSEVSLmpvaW4oJywnKSwgJ2FzY2lpJyk7XG5TVVBQT1JURURfQ0lQSEVSID0gREVGQVVMVF9DSVBIRVIuY29uY2F0KFNVUFBPUlRFRF9DSVBIRVIpO1xuXG52YXIgREVGQVVMVF9ITUFDID0gW1xuICAnaG1hYy1zaGEyLTI1NicsXG4gICdobWFjLXNoYTItNTEyJyxcbiAgJ2htYWMtc2hhMScsXG5dO1xudmFyIFNVUFBPUlRFRF9ITUFDID0gW1xuICAnaG1hYy1tZDUnLFxuICAnaG1hYy1zaGEyLTI1Ni05NicsIC8vIGZpcnN0IDk2IGJpdHMgb2YgSE1BQy1TSEEyNTZcbiAgJ2htYWMtc2hhMi01MTItOTYnLCAvLyBmaXJzdCA5NiBiaXRzIG9mIEhNQUMtU0hBNTEyXG4gICdobWFjLXJpcGVtZDE2MCcsXG4gICdobWFjLXNoYTEtOTYnLCAgICAgLy8gZmlyc3QgOTYgYml0cyBvZiBITUFDLVNIQTFcbiAgJ2htYWMtbWQ1LTk2JyAgICAgICAvLyBmaXJzdCA5NiBiaXRzIG9mIEhNQUMtTUQ1XG5dO1xudmFyIEhNQUNfQlVGID0gQnVmZmVyLmZyb20oREVGQVVMVF9ITUFDLmpvaW4oJywnKSwgJ2FzY2lpJyk7XG5TVVBQT1JURURfSE1BQyA9IERFRkFVTFRfSE1BQy5jb25jYXQoU1VQUE9SVEVEX0hNQUMpO1xuXG52YXIgREVGQVVMVF9DT01QUkVTUyA9IFtcbiAgJ25vbmUnLFxuICAnemxpYkBvcGVuc3NoLmNvbScsIC8vIFpMSUIgKExaNzcpIGNvbXByZXNzaW9uLCBleGNlcHRcbiAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGRvZXMgbm90IHN0YXJ0IHVudGlsIGFmdGVyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3VjY2Vzc2Z1bCB1c2VyIGF1dGhlbnRpY2F0aW9uXG4gICd6bGliJyAgICAgICAgICAgICAgLy8gWkxJQiAoTFo3NykgY29tcHJlc3Npb25cbl07XG52YXIgU1VQUE9SVEVEX0NPTVBSRVNTID0gW107XG52YXIgQ09NUFJFU1NfQlVGID0gQnVmZmVyLmZyb20oREVGQVVMVF9DT01QUkVTUy5qb2luKCcsJyksICdhc2NpaScpO1xuU1VQUE9SVEVEX0NPTVBSRVNTID0gREVGQVVMVF9DT01QUkVTUy5jb25jYXQoU1VQUE9SVEVEX0NPTVBSRVNTKTtcblxuZnVuY3Rpb24gbWFrZUNpcGhlckluZm8oYmxvY2tMZW4sIGtleUxlbiwgaXZMZW4sIGF1dGhMZW4sIGRpc2NhcmRMZW4sIHN0cmVhbSkge1xuICByZXR1cm4ge1xuICAgIGJsb2NrTGVuOiBibG9ja0xlbixcbiAgICBrZXlMZW46IGtleUxlbixcbiAgICBpdkxlbjogaXZMZW4gPT09IDAgPyBibG9ja0xlbiA6IGl2TGVuLFxuICAgIGF1dGhMZW46IGF1dGhMZW4sXG4gICAgZGlzY2FyZExlbjogZGlzY2FyZExlbixcbiAgICBzdHJlYW06IHN0cmVhbSxcbiAgfTtcbn1cbmV4cG9ydHMuQ0lQSEVSX0lORk8gPSB7XG4gICdhZXMxMjgtZ2NtJzogbWFrZUNpcGhlckluZm8oMTYsIDE2LCAxMiwgMTYsIDAsIGZhbHNlKSxcbiAgJ2FlczI1Ni1nY20nOiBtYWtlQ2lwaGVySW5mbygxNiwgMzIsIDEyLCAxNiwgMCwgZmFsc2UpLFxuICAnYWVzMTI4LWdjbUBvcGVuc3NoLmNvbSc6IG1ha2VDaXBoZXJJbmZvKDE2LCAxNiwgMTIsIDE2LCAwLCBmYWxzZSksXG4gICdhZXMyNTYtZ2NtQG9wZW5zc2guY29tJzogbWFrZUNpcGhlckluZm8oMTYsIDMyLCAxMiwgMTYsIDAsIGZhbHNlKSxcblxuICAnYWVzMTI4LWNiYyc6IG1ha2VDaXBoZXJJbmZvKDE2LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnYWVzMTkyLWNiYyc6IG1ha2VDaXBoZXJJbmZvKDE2LCAyNCwgMCwgMCwgMCwgZmFsc2UpLFxuICAnYWVzMjU2LWNiYyc6IG1ha2VDaXBoZXJJbmZvKDE2LCAzMiwgMCwgMCwgMCwgZmFsc2UpLFxuICAncmlqbmRhZWwtY2JjQGx5c2F0b3IubGl1LnNlJzogbWFrZUNpcGhlckluZm8oMTYsIDMyLCAwLCAwLCAwLCBmYWxzZSksXG4gICczZGVzLWNiYyc6IG1ha2VDaXBoZXJJbmZvKDgsIDI0LCAwLCAwLCAwLCBmYWxzZSksXG4gICdibG93ZmlzaC1jYmMnOiBtYWtlQ2lwaGVySW5mbyg4LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnaWRlYS1jYmMnOiBtYWtlQ2lwaGVySW5mbyg4LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnY2FzdDEyOC1jYmMnOiBtYWtlQ2lwaGVySW5mbyg4LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnY2FtZWxsaWExMjgtY2JjJzogbWFrZUNpcGhlckluZm8oMTYsIDE2LCAwLCAwLCAwLCBmYWxzZSksXG4gICdjYW1lbGxpYTE5Mi1jYmMnOiBtYWtlQ2lwaGVySW5mbygxNiwgMjQsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2NhbWVsbGlhMjU2LWNiYyc6IG1ha2VDaXBoZXJJbmZvKDE2LCAzMiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnY2FtZWxsaWExMjgtY2JjQG9wZW5zc2guY29tJzogbWFrZUNpcGhlckluZm8oMTYsIDE2LCAwLCAwLCAwLCBmYWxzZSksXG4gICdjYW1lbGxpYTE5Mi1jYmNAb3BlbnNzaC5jb20nOiBtYWtlQ2lwaGVySW5mbygxNiwgMjQsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2NhbWVsbGlhMjU2LWNiY0BvcGVuc3NoLmNvbSc6IG1ha2VDaXBoZXJJbmZvKDE2LCAzMiwgMCwgMCwgMCwgZmFsc2UpLFxuXG4gICdhZXMxMjgtY3RyJzogbWFrZUNpcGhlckluZm8oMTYsIDE2LCAwLCAwLCAwLCBmYWxzZSksXG4gICdhZXMxOTItY3RyJzogbWFrZUNpcGhlckluZm8oMTYsIDI0LCAwLCAwLCAwLCBmYWxzZSksXG4gICdhZXMyNTYtY3RyJzogbWFrZUNpcGhlckluZm8oMTYsIDMyLCAwLCAwLCAwLCBmYWxzZSksXG4gICczZGVzLWN0cic6IG1ha2VDaXBoZXJJbmZvKDgsIDI0LCAwLCAwLCAwLCBmYWxzZSksXG4gICdibG93ZmlzaC1jdHInOiBtYWtlQ2lwaGVySW5mbyg4LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnY2FzdDEyOC1jdHInOiBtYWtlQ2lwaGVySW5mbyg4LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnY2FtZWxsaWExMjgtY3RyJzogbWFrZUNpcGhlckluZm8oMTYsIDE2LCAwLCAwLCAwLCBmYWxzZSksXG4gICdjYW1lbGxpYTE5Mi1jdHInOiBtYWtlQ2lwaGVySW5mbygxNiwgMjQsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2NhbWVsbGlhMjU2LWN0cic6IG1ha2VDaXBoZXJJbmZvKDE2LCAzMiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnY2FtZWxsaWExMjgtY3RyQG9wZW5zc2guY29tJzogbWFrZUNpcGhlckluZm8oMTYsIDE2LCAwLCAwLCAwLCBmYWxzZSksXG4gICdjYW1lbGxpYTE5Mi1jdHJAb3BlbnNzaC5jb20nOiBtYWtlQ2lwaGVySW5mbygxNiwgMjQsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2NhbWVsbGlhMjU2LWN0ckBvcGVuc3NoLmNvbSc6IG1ha2VDaXBoZXJJbmZvKDE2LCAzMiwgMCwgMCwgMCwgZmFsc2UpLFxuXG4gIC8qIFRoZSBcImFyY2ZvdXIxMjhcIiBhbGdvcml0aG0gaXMgdGhlIFJDNCBjaXBoZXIsIGFzIGRlc2NyaWJlZCBpblxuICAgICBbU0NITkVJRVJdLCB1c2luZyBhIDEyOC1iaXQga2V5LiAgVGhlIGZpcnN0IDE1MzYgYnl0ZXMgb2Yga2V5c3RyZWFtXG4gICAgIGdlbmVyYXRlZCBieSB0aGUgY2lwaGVyIE1VU1QgYmUgZGlzY2FyZGVkLCBhbmQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlXG4gICAgIGZpcnN0IGVuY3J5cHRlZCBwYWNrZXQgTVVTVCBiZSBlbmNyeXB0ZWQgdXNpbmcgdGhlIDE1Mzd0aCBieXRlIG9mXG4gICAgIGtleXN0cmVhbS5cblxuICAgICAtLSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MzQ1I3NlY3Rpb24tNCAqL1xuICAnYXJjZm91cic6IG1ha2VDaXBoZXJJbmZvKDgsIDE2LCAwLCAwLCAxNTM2LCB0cnVlKSxcbiAgJ2FyY2ZvdXIxMjgnOiBtYWtlQ2lwaGVySW5mbyg4LCAxNiwgMCwgMCwgMTUzNiwgdHJ1ZSksXG4gICdhcmNmb3VyMjU2JzogbWFrZUNpcGhlckluZm8oOCwgMzIsIDAsIDAsIDE1MzYsIHRydWUpLFxuICAnYXJjZm91cjUxMic6IG1ha2VDaXBoZXJJbmZvKDgsIDY0LCAwLCAwLCAxNTM2LCB0cnVlKSxcbn07XG5cbmZ1bmN0aW9uIG1ha2VITUFDSW5mbyhsZW4sIGFjdHVhbExlbikge1xuICByZXR1cm4geyBsZW46IGxlbiwgYWN0dWFsTGVuOiBhY3R1YWxMZW4gfTtcbn1cbmV4cG9ydHMuSE1BQ19JTkZPID0ge1xuICAnaG1hYy1tZDUnOiBtYWtlSE1BQ0luZm8oMTYsIDE2KSxcbiAgJ2htYWMtbWQ1LTk2JzogbWFrZUhNQUNJbmZvKDE2LCAxMiksXG4gICdobWFjLXJpcGVtZDE2MCc6IG1ha2VITUFDSW5mbygyMCwgMjApLFxuICAnaG1hYy1zaGExJzogbWFrZUhNQUNJbmZvKDIwLCAyMCksXG4gICdobWFjLXNoYTEtOTYnOiBtYWtlSE1BQ0luZm8oMjAsIDEyKSxcbiAgJ2htYWMtc2hhMi0yNTYnOiBtYWtlSE1BQ0luZm8oMzIsIDMyKSxcbiAgJ2htYWMtc2hhMi0yNTYtOTYnOiBtYWtlSE1BQ0luZm8oMzIsIDEyKSxcbiAgJ2htYWMtc2hhMi01MTInOiBtYWtlSE1BQ0luZm8oNjQsIDY0KSxcbiAgJ2htYWMtc2hhMi01MTItOTYnOiBtYWtlSE1BQ0luZm8oNjQsIDEyKSxcbn07XG5cbmV4cG9ydHMuQUxHT1JJVEhNUyA9IHtcbiAgS0VYOiBERUZBVUxUX0tFWCxcbiAgS0VYX0JVRjogS0VYX0JVRixcbiAgU1VQUE9SVEVEX0tFWDogU1VQUE9SVEVEX0tFWCxcblxuICBTRVJWRVJfSE9TVF9LRVk6IERFRkFVTFRfU0VSVkVSX0hPU1RfS0VZLFxuICBTRVJWRVJfSE9TVF9LRVlfQlVGOiBTRVJWRVJfSE9TVF9LRVlfQlVGLFxuICBTVVBQT1JURURfU0VSVkVSX0hPU1RfS0VZOiBTVVBQT1JURURfU0VSVkVSX0hPU1RfS0VZLFxuXG4gIENJUEhFUjogREVGQVVMVF9DSVBIRVIsXG4gIENJUEhFUl9CVUY6IENJUEhFUl9CVUYsXG4gIFNVUFBPUlRFRF9DSVBIRVI6IFNVUFBPUlRFRF9DSVBIRVIsXG5cbiAgSE1BQzogREVGQVVMVF9ITUFDLFxuICBITUFDX0JVRjogSE1BQ19CVUYsXG4gIFNVUFBPUlRFRF9ITUFDOiBTVVBQT1JURURfSE1BQyxcblxuICBDT01QUkVTUzogREVGQVVMVF9DT01QUkVTUyxcbiAgQ09NUFJFU1NfQlVGOiBDT01QUkVTU19CVUYsXG4gIFNVUFBPUlRFRF9DT01QUkVTUzogU1VQUE9SVEVEX0NPTVBSRVNTXG59O1xuZXhwb3J0cy5TU0hfVE9fT1BFTlNTTCA9IHtcbiAgLy8gRUNESCBrZXkgZXhjaGFuZ2VcbiAgJ2VjZGgtc2hhMi1uaXN0cDI1Nic6ICdwcmltZTI1NnYxJywgLy8gT3BlblNTTCdzIG5hbWUgZm9yICdzZWNwMjU2cjEnXG4gICdlY2RoLXNoYTItbmlzdHAzODQnOiAnc2VjcDM4NHIxJyxcbiAgJ2VjZGgtc2hhMi1uaXN0cDUyMSc6ICdzZWNwNTIxcjEnLFxuICAvLyBDaXBoZXJzXG4gICdhZXMxMjgtZ2NtJzogJ2Flcy0xMjgtZ2NtJyxcbiAgJ2FlczI1Ni1nY20nOiAnYWVzLTI1Ni1nY20nLFxuICAnYWVzMTI4LWdjbUBvcGVuc3NoLmNvbSc6ICdhZXMtMTI4LWdjbScsXG4gICdhZXMyNTYtZ2NtQG9wZW5zc2guY29tJzogJ2Flcy0yNTYtZ2NtJyxcbiAgJzNkZXMtY2JjJzogJ2Rlcy1lZGUzLWNiYycsXG4gICdibG93ZmlzaC1jYmMnOiAnYmYtY2JjJyxcbiAgJ2FlczI1Ni1jYmMnOiAnYWVzLTI1Ni1jYmMnLFxuICAnYWVzMTkyLWNiYyc6ICdhZXMtMTkyLWNiYycsXG4gICdhZXMxMjgtY2JjJzogJ2Flcy0xMjgtY2JjJyxcbiAgJ2lkZWEtY2JjJzogJ2lkZWEtY2JjJyxcbiAgJ2Nhc3QxMjgtY2JjJzogJ2Nhc3QtY2JjJyxcbiAgJ3Jpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSc6ICdhZXMtMjU2LWNiYycsXG4gICdhcmNmb3VyMTI4JzogJ3JjNCcsXG4gICdhcmNmb3VyMjU2JzogJ3JjNCcsXG4gICdhcmNmb3VyNTEyJzogJ3JjNCcsXG4gICdhcmNmb3VyJzogJ3JjNCcsXG4gICdjYW1lbGxpYTEyOC1jYmMnOiAnY2FtZWxsaWEtMTI4LWNiYycsXG4gICdjYW1lbGxpYTE5Mi1jYmMnOiAnY2FtZWxsaWEtMTkyLWNiYycsXG4gICdjYW1lbGxpYTI1Ni1jYmMnOiAnY2FtZWxsaWEtMjU2LWNiYycsXG4gICdjYW1lbGxpYTEyOC1jYmNAb3BlbnNzaC5jb20nOiAnY2FtZWxsaWEtMTI4LWNiYycsXG4gICdjYW1lbGxpYTE5Mi1jYmNAb3BlbnNzaC5jb20nOiAnY2FtZWxsaWEtMTkyLWNiYycsXG4gICdjYW1lbGxpYTI1Ni1jYmNAb3BlbnNzaC5jb20nOiAnY2FtZWxsaWEtMjU2LWNiYycsXG4gICczZGVzLWN0cic6ICdkZXMtZWRlMycsXG4gICdibG93ZmlzaC1jdHInOiAnYmYtZWNiJyxcbiAgJ2FlczI1Ni1jdHInOiAnYWVzLTI1Ni1jdHInLFxuICAnYWVzMTkyLWN0cic6ICdhZXMtMTkyLWN0cicsXG4gICdhZXMxMjgtY3RyJzogJ2Flcy0xMjgtY3RyJyxcbiAgJ2Nhc3QxMjgtY3RyJzogJ2Nhc3Q1LWVjYicsXG4gICdjYW1lbGxpYTEyOC1jdHInOiAnY2FtZWxsaWEtMTI4LWVjYicsXG4gICdjYW1lbGxpYTE5Mi1jdHInOiAnY2FtZWxsaWEtMTkyLWVjYicsXG4gICdjYW1lbGxpYTI1Ni1jdHInOiAnY2FtZWxsaWEtMjU2LWVjYicsXG4gICdjYW1lbGxpYTEyOC1jdHJAb3BlbnNzaC5jb20nOiAnY2FtZWxsaWEtMTI4LWVjYicsXG4gICdjYW1lbGxpYTE5Mi1jdHJAb3BlbnNzaC5jb20nOiAnY2FtZWxsaWEtMTkyLWVjYicsXG4gICdjYW1lbGxpYTI1Ni1jdHJAb3BlbnNzaC5jb20nOiAnY2FtZWxsaWEtMjU2LWVjYicsXG4gIC8vIEhNQUNcbiAgJ2htYWMtc2hhMS05Nic6ICdzaGExJyxcbiAgJ2htYWMtc2hhMSc6ICdzaGExJyxcbiAgJ2htYWMtc2hhMi0yNTYnOiAnc2hhMjU2JyxcbiAgJ2htYWMtc2hhMi0yNTYtOTYnOiAnc2hhMjU2JyxcbiAgJ2htYWMtc2hhMi01MTInOiAnc2hhNTEyJyxcbiAgJ2htYWMtc2hhMi01MTItOTYnOiAnc2hhNTEyJyxcbiAgJ2htYWMtbWQ1LTk2JzogJ21kNScsXG4gICdobWFjLW1kNSc6ICdtZDUnLFxuICAnaG1hYy1yaXBlbWQxNjAnOiAncmlwZW1kMTYwJ1xufTtcblxudmFyIEJVR1MgPSBleHBvcnRzLkJVR1MgPSB7XG4gIEJBRF9ESEdFWDogMSxcbiAgT0xEX0VYSVQ6IDIsXG4gIERZTl9SUE9SVF9CVUc6IDRcbn07XG5cbmV4cG9ydHMuQlVHR1lfSU1QTFMgPSBbXG4gIFsgJ0Npc2NvLTEuMjUnLCBCVUdTLkJBRF9ESEdFWCBdLFxuICBbIC9eWzAtOS5dKyQvLCBCVUdTLk9MRF9FWElUIF0sIC8vIG9sZCBTU0guY29tIGltcGxlbWVudGF0aW9uc1xuICBbIC9eT3BlblNTSF81XFwuXFxkKy8sIEJVR1MuRFlOX1JQT1JUX0JVRyBdXG5dO1xuXG5leHBvcnRzLkVERFNBX1NVUFBPUlRFRCA9IGVkZHNhU3VwcG9ydGVkO1xuZXhwb3J0cy5DVVJWRTI1NTE5X1NVUFBPUlRFRCA9IGN1cnZlMjU1MTlTdXBwb3J0ZWQ7XG4iLCJpbXBvcnQgeyBJVGFza1Jlc3BvbnNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjb25zdCBleGVjRnVuY3Rpb24gPSBhc3luYyAoXG4gIGY6IEZ1bmN0aW9uLFxuICAuLi5hcmdzOiBhbnlcbik6IFByb21pc2U8SVRhc2tSZXNwb25zZT4gPT4ge1xuICBsZXQgZGF0YTogYW55O1xuICBsZXQgZXJyb3I6IEVycm9yO1xuXG4gIHRyeSB7XG4gICAgZGF0YSA9IGF3YWl0IGYoLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yID0gZXJyO1xuICB9XG5cbiAgcmV0dXJuIHsgZGF0YSwgZXJyb3IgfTtcbn07XG4iLCJpbXBvcnQgeyBDbGllbnQsIEZpbGVJbmZvIH0gZnJvbSAnYmFzaWMtZnRwJztcbmltcG9ydCB7IFdyaXRhYmxlLCBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5cbmltcG9ydCB7IFN0cmF0ZWd5IH0gZnJvbSAnLi9zdHJhdGVneSc7XG5pbXBvcnQge1xuICBJRmlsZSxcbiAgSUZ0cENvbmZpZyxcbiAgSVRyYW5zZmVyT3B0aW9ucyxcbiAgSUZ0cE9wdGlvbnMsXG4gIElUcmFuc2ZlckluZm8sXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRnRwVXRpbHMgfSBmcm9tICcuLi91dGlscy9mdHAnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRnRwU3RyYXRlZ3kge1xuICBjb25maWc6IElGdHBDb25maWc7XG4gIG9wdGlvbnM6IElGdHBPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRnRwU3RyYXRlZ3kgZXh0ZW5kcyBTdHJhdGVneSB7XG4gIHByb3RlY3RlZCBjbGllbnQ6IENsaWVudDtcblxuICBwdWJsaWMgZ2V0IGNvbm5lY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQ/LmNsb3NlZCA9PT0gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzRlRQUygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucHJvdG9jb2wgPT09ICdmdHBzJztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgc29ja2V0KCkge1xuICAgIHJldHVybiB0aGlzLmNsaWVudD8uZnRwPy5zb2NrZXQ7XG4gIH1cblxuICBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLmNsaWVudCkge1xuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgQ2xpZW50KCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jbGllbnQuYWNjZXNzKHtcbiAgICAgIHNlY3VyZTogdGhpcy5pc0ZUUFMsXG4gICAgICBzZWN1cmVPcHRpb25zOiB0aGlzLm9wdGlvbnM/LnNlY3VyZU9wdGlvbnMsXG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICB9KTtcblxuICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpO1xuICB9O1xuXG4gIGRpc2Nvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGVkKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3QnKTtcblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50LmNsb3NlKCk7XG5cbiAgICAgICAgdGhpcy5jbGllbnQuZnRwLnNvY2tldC5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNsaWVudCA9IG51bGw7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIGRvd25sb2FkID0gYXN5bmMgKFxuICAgIGRlc3Q6IFdyaXRhYmxlLFxuICAgIGluZm86IElUcmFuc2ZlckluZm8sXG4gICAgb3B0aW9ucz86IElUcmFuc2Zlck9wdGlvbnMsXG4gICkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVRyYW5zZmVyKFxuICAgICAgKCkgPT4gdGhpcy5jbGllbnQuZG93bmxvYWRUbyhkZXN0LCBpbmZvLnJlbW90ZVBhdGgsIGluZm8uc3RhcnRBdCksXG4gICAgICBpbmZvLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICB9O1xuXG4gIHVwbG9hZCA9IGFzeW5jIChcbiAgICBzb3VyY2U6IFJlYWRhYmxlLFxuICAgIGluZm86IElUcmFuc2ZlckluZm8sXG4gICAgb3B0aW9ucz86IElUcmFuc2Zlck9wdGlvbnMsXG4gICkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVRyYW5zZmVyKFxuICAgICAgKCkgPT4gdGhpcy5jbGllbnQudXBsb2FkRnJvbShzb3VyY2UsIGluZm8ucmVtb3RlUGF0aCksXG4gICAgICBpbmZvLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICB9O1xuXG4gIGxpc3QgPSAocGF0aCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZTxJRmlsZVtdPigoKSA9PlxuICAgICAgdGhpcy5jbGllbnQubGlzdChwYXRoKS50aGVuKChyKSA9PiByLm1hcCh0aGlzLmZvcm1hdEZpbGUpKSxcbiAgICApO1xuICB9O1xuXG4gIHNpemUgPSAocGF0aCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZTxudW1iZXI+KCgpID0+IHRoaXMuY2xpZW50LnNpemUocGF0aCkpO1xuICB9O1xuXG4gIGV4aXN0cyA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jbGllbnQucmVuYW1lKHBhdGgsIHBhdGgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIG1vdmUgPSAoc291cmNlLCBkZXN0KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlKCgpID0+IHRoaXMuY2xpZW50LnJlbmFtZShzb3VyY2UsIGRlc3QpKTtcbiAgfTtcblxuICByZW1vdmVGaWxlID0gKHBhdGgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUoKCkgPT4gdGhpcy5jbGllbnQucmVtb3ZlKHBhdGgpKTtcbiAgfTtcblxuICByZW1vdmVFbXB0eUZvbGRlciA9IChwYXRoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlKCgpID0+IHRoaXMuY2xpZW50LnJlbW92ZUVtcHR5RGlyKHBhdGgpKTtcbiAgfTtcblxuICByZW1vdmVGb2xkZXIgPSAocGF0aCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZSgoKSA9PiB0aGlzLmNsaWVudC5yZW1vdmVEaXIocGF0aCkpO1xuICB9O1xuXG4gIGNyZWF0ZUZvbGRlciA9IGFzeW5jIChwYXRoKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kKGBNS0QgJHtwYXRofWApO1xuICB9O1xuXG4gIGNyZWF0ZUVtcHR5RmlsZSA9IGFzeW5jIChwYXRoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gUmVhZGFibGUuZnJvbSgnXFxuJyk7XG5cbiAgICBhd2FpdCB0aGlzLnVwbG9hZChzb3VyY2UsIHsgcmVtb3RlUGF0aDogcGF0aCB9LCB7IHF1aWV0OiB0cnVlIH0pO1xuICB9O1xuXG4gIHB3ZCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGU8c3RyaW5nPigoKSA9PiB0aGlzLmNsaWVudC5wd2QoKSk7XG4gIH07XG5cbiAgc2VuZCA9IChjb21tYW5kKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlPHN0cmluZz4oKCkgPT5cbiAgICAgIHRoaXMuY2xpZW50LnNlbmQoY29tbWFuZCkudGhlbigocikgPT4gci5tZXNzYWdlKSxcbiAgICApO1xuICB9O1xuXG4gIHByb3RlY3RlZCBmb3JtYXRGaWxlID0gKGZpbGU6IEZpbGVJbmZvKTogSUZpbGUgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GdHBVdGlscy5mb3JtYXRGaWxlKGZpbGUpLFxuICAgICAgbGFzdE1vZGlmaWVkOiBGdHBVdGlscy5nZXRWYWxpZERhdGUoZmlsZS5kYXRlKSxcbiAgICB9O1xuICB9O1xuXG4gIHByb3RlY3RlZCBoYW5kbGUgPSBhc3luYyA8VCA9IHZvaWQ+KGZuOiBGdW5jdGlvbik6IFByb21pc2U8VD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIubWVzc2FnZSBhcyBzdHJpbmc7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWVzc2FnZSAhPT0gJ0NsaWVudCBpcyBjbG9zZWQnICYmXG4gICAgICAgICFtZXNzYWdlLnN0YXJ0c1dpdGgoJ1VzZXIgY2xvc2VkIGNsaWVudCBkdXJpbmcgdGFzaycpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHByb3RlY3RlZCBoYW5kbGVUcmFuc2ZlciA9IGFzeW5jIChcbiAgICBmbjogRnVuY3Rpb24sXG4gICAgaW5mbzogSVRyYW5zZmVySW5mbyxcbiAgICBvcHRpb25zOiBJVHJhbnNmZXJPcHRpb25zLFxuICApID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5wcmVwYXJlVHJhbnNmZXIoaW5mbywgb3B0aW9ucyk7XG5cbiAgICB0aGlzLmNsaWVudC50cmFja1Byb2dyZXNzKChpbmZvKSA9PiBoYW5kbGVyKGluZm8uYnl0ZXMpKTtcblxuICAgIGF3YWl0IHRoaXMuaGFuZGxlKGZuKTtcblxuICAgIHRoaXMuY2xpZW50Py50cmFja1Byb2dyZXNzKHVuZGVmaW5lZCk7XG4gICAgdGhpcy5maW5pc2hUcmFuc2ZlcigpO1xuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRlRQQ29udGV4dCA9IGV4cG9ydHMuRlRQRXJyb3IgPSB2b2lkIDA7XG5jb25zdCBuZXRfMSA9IHJlcXVpcmUoXCJuZXRcIik7XG5jb25zdCBwYXJzZUNvbnRyb2xSZXNwb25zZV8xID0gcmVxdWlyZShcIi4vcGFyc2VDb250cm9sUmVzcG9uc2VcIik7XG4vKipcbiAqIERlc2NyaWJlcyBhbiBGVFAgc2VydmVyIGVycm9yIHJlc3BvbnNlIGluY2x1ZGluZyB0aGUgRlRQIHJlc3BvbnNlIGNvZGUuXG4gKi9cbmNsYXNzIEZUUEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHJlcykge1xuICAgICAgICBzdXBlcihyZXMubWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgdGhpcy5jb2RlID0gcmVzLmNvZGU7XG4gICAgfVxufVxuZXhwb3J0cy5GVFBFcnJvciA9IEZUUEVycm9yO1xuLyoqXG4gKiBGVFBDb250ZXh0IGhvbGRzIHRoZSBjb250cm9sIGFuZCBkYXRhIHNvY2tldHMgb2YgYW4gRlRQIGNvbm5lY3Rpb24gYW5kIHByb3ZpZGVzIGFcbiAqIHNpbXBsaWZpZWQgd2F5IHRvIGludGVyYWN0IHdpdGggYW4gRlRQIHNlcnZlciwgaGFuZGxlIHJlc3BvbnNlcywgZXJyb3JzIGFuZCB0aW1lb3V0cy5cbiAqXG4gKiBJdCBkb2Vzbid0IGltcGxlbWVudCBvciB1c2UgYW55IEZUUCBjb21tYW5kcy4gSXQncyBvbmx5IGEgZm91bmRhdGlvbiB0byBtYWtlIHdyaXRpbmcgYW4gRlRQXG4gKiBjbGllbnQgYXMgZWFzeSBhcyBwb3NzaWJsZS4gWW91IHdvbid0IHVzdWFsbHkgaW5zdGFudGlhdGUgdGhpcywgYnV0IHVzZSBgQ2xpZW50YC5cbiAqL1xuY2xhc3MgRlRQQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGUgYW4gRlRQIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFwcGx5IHRvIGNvbnRyb2wgYW5kIGRhdGEgY29ubmVjdGlvbnMuIFVzZSAwIGZvciBubyB0aW1lb3V0LlxuICAgICAqIEBwYXJhbSBlbmNvZGluZyAtIEVuY29kaW5nIHRvIHVzZSBmb3IgY29udHJvbCBjb25uZWN0aW9uLiBVVEYtOCBieSBkZWZhdWx0LiBVc2UgXCJsYXRpbjFcIiBmb3Igb2xkZXIgc2VydmVycy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0aW1lb3V0ID0gMCwgZW5jb2RpbmcgPSBcInV0ZjhcIikge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgICAgICAvKiogRGVidWctbGV2ZWwgbG9nZ2luZyBvZiBhbGwgc29ja2V0IGNvbW11bmljYXRpb24uICovXG4gICAgICAgIHRoaXMudmVyYm9zZSA9IGZhbHNlO1xuICAgICAgICAvKiogSVAgdmVyc2lvbiB0byBwcmVmZXIgKDQ6IElQdjQsIDY6IElQdjYsIHVuZGVmaW5lZDogYXV0b21hdGljKS4gKi9cbiAgICAgICAgdGhpcy5pcEZhbWlseSA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqIE9wdGlvbnMgZm9yIFRMUyBjb25uZWN0aW9ucy4gKi9cbiAgICAgICAgdGhpcy50bHNPcHRpb25zID0ge307XG4gICAgICAgIC8qKiBBIG11bHRpbGluZSByZXNwb25zZSBtaWdodCBiZSByZWNlaXZlZCBhcyBtdWx0aXBsZSBjaHVua3MuICovXG4gICAgICAgIHRoaXMuX3BhcnRpYWxSZXNwb25zZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuX2VuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgICAgIC8vIEhlbHAgVHlwZXNjcmlwdCB1bmRlcnN0YW5kIHRoYXQgd2UgZG8gaW5kZWVkIHNldCBfc29ja2V0IGluIHRoZSBjb25zdHJ1Y3RvciBidXQgdXNlIHRoZSBzZXR0ZXIgbWV0aG9kIHRvIGRvIHNvLlxuICAgICAgICB0aGlzLl9zb2NrZXQgPSB0aGlzLnNvY2tldCA9IHRoaXMuX25ld1NvY2tldCgpO1xuICAgICAgICB0aGlzLl9kYXRhU29ja2V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGUgY29udGV4dC5cbiAgICAgKi9cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgLy8gSW50ZXJuYWxseSwgY2xvc2luZyBhIGNvbnRleHQgaXMgYWx3YXlzIGRlc2NyaWJlZCB3aXRoIGFuIGVycm9yLiBJZiB0aGVyZSBpcyBzdGlsbCBhIHRhc2sgcnVubmluZywgaXQgd2lsbFxuICAgICAgICAvLyBhYm9ydCB3aXRoIGFuIGV4Y2VwdGlvbiB0aGF0IHRoZSB1c2VyIGNsb3NlZCB0aGUgY2xpZW50IGR1cmluZyBhIHRhc2suIElmIG5vIHRhc2sgaXMgcnVubmluZywgbm8gZXhjZXB0aW9uIGlzXG4gICAgICAgIC8vIHRocm93biBidXQgYWxsIG5ld2x5IHN1Ym1pdHRlZCB0YXNrcyBhZnRlciB0aGF0IHdpbGwgYWJvcnQgdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSBjbGllbnQgaGFzIGJlZW4gY2xvc2VkLlxuICAgICAgICAvLyBJbiBhZGRpdGlvbiB0aGUgdXNlciB3aWxsIGdldCBhIHN0YWNrIHRyYWNlIHBvaW50aW5nIHRvIHdoZXJlIGV4YWN0bHkgdGhlIGNsaWVudCBoYXMgYmVlbiBjbG9zZWQuIFNvIGluIGFueVxuICAgICAgICAvLyBjYXNlIHVzZSBfY2xvc2luZ0Vycm9yIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29udGV4dCBpcyBjbG9zZWQuIFRoaXMgYWxzbyBhbGxvd3MgdXMgdG8gaGF2ZSBhIHNpbmdsZSBjb2RlLXBhdGhcbiAgICAgICAgLy8gZm9yIGNsb3NpbmcgYSBjb250ZXh0IG1ha2luZyB0aGUgaW1wbGVtZW50YXRpb24gZWFzaWVyLlxuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5fdGFzayA/IFwiVXNlciBjbG9zZWQgY2xpZW50IGR1cmluZyB0YXNrXCIgOiBcIlVzZXIgY2xvc2VkIGNsaWVudFwiO1xuICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IoZXJyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIGNvbnRleHQgd2l0aCBhbiBlcnJvci5cbiAgICAgKi9cbiAgICBjbG9zZVdpdGhFcnJvcihlcnIpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBjb250ZXh0IGFscmVhZHkgaGFzIGJlZW4gY2xvc2VkLCBkb24ndCBvdmVyd3JpdGUgdGhlIHJlYXNvbi5cbiAgICAgICAgaWYgKHRoaXMuX2Nsb3NpbmdFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Nsb3NpbmdFcnJvciA9IGVycjtcbiAgICAgICAgLy8gQmVmb3JlIGdpdmluZyB0aGUgdXNlcidzIHRhc2sgYSBjaGFuY2UgdG8gcmVhY3QsIG1ha2Ugc3VyZSB3ZSB3b24ndCBiZSBib3RoZXJlZCB3aXRoIGFueSBpbnB1dHMuXG4gICAgICAgIHRoaXMuX2Nsb3NlU29ja2V0KHRoaXMuX3NvY2tldCk7XG4gICAgICAgIHRoaXMuX2Nsb3NlU29ja2V0KHRoaXMuX2RhdGFTb2NrZXQpO1xuICAgICAgICAvLyBHaXZlIHRoZSB1c2VyJ3MgdGFzayBhIGNoYW5jZSB0byByZWFjdCwgbWF5YmUgY2xlYW51cCByZXNvdXJjZXMuXG4gICAgICAgIHRoaXMuX3Bhc3NUb0hhbmRsZXIoZXJyKTtcbiAgICAgICAgLy8gVGhlIHRhc2sgbWlnaHQgbm90IGhhdmUgYmVlbiByZWplY3RlZCBieSB0aGUgdXNlciBhZnRlciByZWNlaXZpbmcgdGhlIGVycm9yLlxuICAgICAgICB0aGlzLl9zdG9wVHJhY2tpbmdUYXNrKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNvbnRleHQgaGFzIGJlZW4gY2xvc2VkIG9yIGhhc24ndCBiZWVuIGNvbm5lY3RlZCB5ZXQuIFlvdSBjYW4gcmVvcGVuIGl0IHdpdGggYGFjY2Vzc2AuXG4gICAgICovXG4gICAgZ2V0IGNsb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0LnJlbW90ZUFkZHJlc3MgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9jbG9zaW5nRXJyb3IgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzZXQgdGhpcyBjb250ZXggYW5kIGFsbCBvZiBpdHMgc3RhdGUuXG4gICAgICovXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gdGhpcy5fbmV3U29ja2V0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgRlRQIGNvbnRyb2wgc29ja2V0LlxuICAgICAqL1xuICAgIGdldCBzb2NrZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb2NrZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc29ja2V0IGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uLiBUaGlzIHdpbGwgb25seSBjbG9zZSB0aGUgY3VycmVudCBjb250cm9sIHNvY2tldFxuICAgICAqIGlmIHRoZSBuZXcgb25lIGlzIG5vdCBhbiB1cGdyYWRlIHRvIHRoZSBjdXJyZW50IG9uZS5cbiAgICAgKi9cbiAgICBzZXQgc29ja2V0KHNvY2tldCkge1xuICAgICAgICAvLyBObyBkYXRhIHNvY2tldCBzaG91bGQgYmUgb3BlbiBpbiBhbnkgY2FzZSB3aGVyZSB0aGUgY29udHJvbCBzb2NrZXQgaXMgc2V0IG9yIHVwZ3JhZGVkLlxuICAgICAgICB0aGlzLmRhdGFTb2NrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudGxzT3B0aW9ucyA9IHt9O1xuICAgICAgICAvLyBUaGlzIGJlaW5nIGEgc29mdCByZXNldCwgcmVtb3ZlIGFueSByZW1haW5pbmcgcGFydGlhbCByZXNwb25zZS5cbiAgICAgICAgdGhpcy5fcGFydGlhbFJlc3BvbnNlID0gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMuX3NvY2tldCkge1xuICAgICAgICAgICAgLy8gT25seSBjbG9zZSB0aGUgY3VycmVudCBjb25uZWN0aW9uIGlmIHRoZSBuZXcgaXMgbm90IGFuIHVwZ3JhZGUuXG4gICAgICAgICAgICBjb25zdCBpc1VwZ3JhZGUgPSBzb2NrZXQubG9jYWxQb3J0ID09PSB0aGlzLl9zb2NrZXQubG9jYWxQb3J0O1xuICAgICAgICAgICAgaWYgKCFpc1VwZ3JhZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU29ja2V0TGlzdGVuZXJzKHRoaXMuX3NvY2tldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgLy8gU2V0dGluZyBhIGNvbXBsZXRlbHkgbmV3IGNvbnRyb2wgc29ja2V0IGlzIGluIGVzc2VuY2Ugc29tZXRoaW5nIGxpa2UgYSByZXNldC4gVGhhdCdzXG4gICAgICAgICAgICAvLyB3aHkgd2UgYWxzbyBjbG9zZSBhbnkgb3BlbiBkYXRhIGNvbm5lY3Rpb24gYWJvdmUuIFdlIGNhbiBnbyBvbmUgc3RlcCBmdXJ0aGVyIGFuZCByZXNldFxuICAgICAgICAgICAgLy8gYSBwb3NzaWJsZSBjbG9zaW5nIGVycm9yLiBUaGF0IG1lYW5zIHRoYXQgYSBjbG9zZWQgRlRQQ29udGV4dCBjYW4gYmUgXCJyZW9wZW5lZFwiIGJ5XG4gICAgICAgICAgICAvLyBzZXR0aW5nIGEgbmV3IGNvbnRyb2wgc29ja2V0LlxuICAgICAgICAgICAgdGhpcy5fY2xvc2luZ0Vycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IGEgdGltZW91dCB5ZXQuIFRpbWVvdXQgZm9yIGNvbnRyb2wgc29ja2V0cyBpcyBvbmx5IGFjdGl2ZSBkdXJpbmcgYSB0YXNrLCBzZWUgaGFuZGxlKCkgYmVsb3cuXG4gICAgICAgICAgICBzb2NrZXQuc2V0VGltZW91dCgwKTtcbiAgICAgICAgICAgIHNvY2tldC5zZXRFbmNvZGluZyh0aGlzLl9lbmNvZGluZyk7XG4gICAgICAgICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUpO1xuICAgICAgICAgICAgc29ja2V0Lm9uKFwiZGF0YVwiLCBkYXRhID0+IHRoaXMuX29uQ29udHJvbFNvY2tldERhdGEoZGF0YSkpO1xuICAgICAgICAgICAgLy8gU2VydmVyIHNlbmRpbmcgYSBGSU4gcGFja2V0IGlzIHRyZWF0ZWQgYXMgYW4gZXJyb3IuXG4gICAgICAgICAgICBzb2NrZXQub24oXCJlbmRcIiwgKCkgPT4gdGhpcy5jbG9zZVdpdGhFcnJvcihuZXcgRXJyb3IoXCJTZXJ2ZXIgc2VudCBGSU4gcGFja2V0IHVuZXhwZWN0ZWRseSwgY2xvc2luZyBjb25uZWN0aW9uLlwiKSkpO1xuICAgICAgICAgICAgLy8gQ29udHJvbCBiZWluZyBjbG9zZWQgd2l0aG91dCBlcnJvciBieSBzZXJ2ZXIgaXMgdHJlYXRlZCBhcyBhbiBlcnJvci5cbiAgICAgICAgICAgIHNvY2tldC5vbihcImNsb3NlXCIsIGhhZEVycm9yID0+IHsgaWYgKCFoYWRFcnJvcilcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKG5ldyBFcnJvcihcIlNlcnZlciBjbG9zZWQgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuXCIpKTsgfSk7XG4gICAgICAgICAgICB0aGlzLl9zZXR1cERlZmF1bHRFcnJvckhhbmRsZXJzKHNvY2tldCwgXCJjb250cm9sIHNvY2tldFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb2NrZXQgPSBzb2NrZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3VycmVudCBGVFAgZGF0YSBjb25uZWN0aW9uIGlmIHByZXNlbnQuXG4gICAgICovXG4gICAgZ2V0IGRhdGFTb2NrZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU29ja2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHNvY2tldCBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbi4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGZvcm1lciBkYXRhIHNvY2tldC5cbiAgICAgKi9cbiAgICBzZXQgZGF0YVNvY2tldChzb2NrZXQpIHtcbiAgICAgICAgdGhpcy5fY2xvc2VTb2NrZXQodGhpcy5fZGF0YVNvY2tldCk7XG4gICAgICAgIGlmIChzb2NrZXQpIHtcbiAgICAgICAgICAgIC8vIERvbid0IHNldCBhIHRpbWVvdXQgeWV0LiBUaW1lb3V0IGRhdGEgc29ja2V0IHNob3VsZCBiZSBhY3RpdmF0ZWQgd2hlbiBkYXRhIHRyYW5zbWlzc2lvbiBzdGFydHNcbiAgICAgICAgICAgIC8vIGFuZCB0aW1lb3V0IG9uIGNvbnRyb2wgc29ja2V0IGlzIGRlYWN0aXZhdGVkLlxuICAgICAgICAgICAgc29ja2V0LnNldFRpbWVvdXQoMCk7XG4gICAgICAgICAgICB0aGlzLl9zZXR1cERlZmF1bHRFcnJvckhhbmRsZXJzKHNvY2tldCwgXCJkYXRhIHNvY2tldFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhU29ja2V0ID0gc29ja2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnRseSB1c2VkIGVuY29kaW5nLlxuICAgICAqL1xuICAgIGdldCBlbmNvZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuY29kaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGVuY29kaW5nIHVzZWQgZm9yIHRoZSBjb250cm9sIHNvY2tldC5cbiAgICAgKlxuICAgICAqIFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2J1ZmZlci5odG1sI2J1ZmZlcl9idWZmZXJzX2FuZF9jaGFyYWN0ZXJfZW5jb2RpbmdzIGZvciB3aGF0IGVuY29kaW5nc1xuICAgICAqIGFyZSBzdXBwb3J0ZWQgYnkgTm9kZS5cbiAgICAgKi9cbiAgICBzZXQgZW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgICAgICAgdGhpcy5fZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5zZXRFbmNvZGluZyhlbmNvZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCBhbiBGVFAgY29tbWFuZCB3aXRob3V0IHdhaXRpbmcgZm9yIG9yIGhhbmRsaW5nIHRoZSByZXN1bHQuXG4gICAgICovXG4gICAgc2VuZChjb21tYW5kKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5zUGFzc3dvcmQgPSBjb21tYW5kLnN0YXJ0c1dpdGgoXCJQQVNTXCIpO1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gY29udGFpbnNQYXNzd29yZCA/IFwiPiBQQVNTICMjI1wiIDogYD4gJHtjb21tYW5kfWA7XG4gICAgICAgIHRoaXMubG9nKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLl9zb2NrZXQud3JpdGUoY29tbWFuZCArIFwiXFxyXFxuXCIsIHRoaXMuZW5jb2RpbmcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIGFuIEZUUCBjb21tYW5kIGFuZCBoYW5kbGUgdGhlIGZpcnN0IHJlc3BvbnNlLiBVc2UgdGhpcyBpZiB5b3UgaGF2ZSBhIHNpbXBsZVxuICAgICAqIHJlcXVlc3QtcmVzcG9uc2Ugc2l0dWF0aW9uLlxuICAgICAqL1xuICAgIHJlcXVlc3QoY29tbWFuZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGUoY29tbWFuZCwgKHJlcywgdGFzaykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGFzay5yZWplY3QocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhc2sucmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCBhbiBGVFAgY29tbWFuZCBhbmQgaGFuZGxlIGFueSByZXNwb25zZSB1bnRpbCB5b3UgcmVzb2x2ZS9yZWplY3QuIFVzZSB0aGlzIGlmIHlvdSBleHBlY3QgbXVsdGlwbGUgcmVzcG9uc2VzXG4gICAgICogdG8gYSByZXF1ZXN0LiBUaGlzIHJldHVybnMgYSBQcm9taXNlIHRoYXQgd2lsbCBob2xkIHdoYXRldmVyIHRoZSByZXNwb25zZSBoYW5kbGVyIHBhc3NlZCBvbiB3aGVuIHJlc29sdmluZy9yZWplY3RpbmcgaXRzIHRhc2suXG4gICAgICovXG4gICAgaGFuZGxlKGNvbW1hbmQsIHJlc3BvbnNlSGFuZGxlcikge1xuICAgICAgICBpZiAodGhpcy5fdGFzaykge1xuICAgICAgICAgICAgLy8gVGhlIHVzZXIgb3IgY2xpZW50IGluc3RhbmNlIGNhbGxlZCBgaGFuZGxlKClgIHdoaWxlIGEgdGFzayBpcyBzdGlsbCBydW5uaW5nLlxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKFwiVXNlciBsYXVuY2hlZCBhIHRhc2sgd2hpbGUgYW5vdGhlciBvbmUgaXMgc3RpbGwgcnVubmluZy4gRm9yZ290IHRvIHVzZSAnYXdhaXQnIG9yICcudGhlbigpJz9cIik7XG4gICAgICAgICAgICBlcnIuc3RhY2sgKz0gYFxcblJ1bm5pbmcgdGFzayBsYXVuY2hlZCBhdDogJHt0aGlzLl90YXNrLnN0YWNrfWA7XG4gICAgICAgICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKGVycik7XG4gICAgICAgICAgICAvLyBEb24ndCByZXR1cm4gaGVyZSwgY29udGludWUgd2l0aCByZXR1cm5pbmcgdGhlIFByb21pc2UgdGhhdCB3aWxsIHRoZW4gYmUgcmVqZWN0ZWRcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIGNvbnRleHQgY2xvc2VkIGFscmVhZHkuIFRoYXQgd2F5LCB1c2VycyB3aWxsIHJlY2VpdmUgYW4gZXhjZXB0aW9uIHdoZXJlXG4gICAgICAgICAgICAvLyB0aGV5IGNhbGxlZCB0aGlzIG1ldGhvZCBieSBtaXN0YWtlLlxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZVByb21pc2UsIHJlamVjdFByb21pc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2sgfHwgXCJVbmtub3duIGNhbGwgc3RhY2tcIjtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVyID0ge1xuICAgICAgICAgICAgICAgIHJlc29sdmU6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BUcmFja2luZ1Rhc2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UoLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWplY3Q6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BUcmFja2luZ1Rhc2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0UHJvbWlzZShlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl90YXNrID0ge1xuICAgICAgICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgICAgICAgIHJlc29sdmVyLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlSGFuZGxlclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbG9zaW5nRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGNsaWVudCBoYXMgYmVlbiBjbG9zZWQuIFByb3ZpZGUgYW4gZXJyb3IgdGhhdCBkZXNjcmliZXMgdGhpcyBvbmUgYXMgYmVpbmcgY2F1c2VkXG4gICAgICAgICAgICAgICAgLy8gYnkgYF9jbG9zaW5nRXJyb3JgLCBpbmNsdWRlIHN0YWNrIHRyYWNlcyBmb3IgYm90aC5cbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXCJDbGllbnQgaXMgY2xvc2VkXCIpOyAvLyBUeXBlICdFcnJvcicgaXMgbm90IGNvcnJlY3RseSBkZWZpbmVkLCBkb2Vzbid0IGhhdmUgJ2NvZGUnLlxuICAgICAgICAgICAgICAgIGVyci5zdGFjayArPSBgXFxuQ2xvc2luZyByZWFzb246ICR7dGhpcy5fY2xvc2luZ0Vycm9yLnN0YWNrfWA7XG4gICAgICAgICAgICAgICAgZXJyLmNvZGUgPSB0aGlzLl9jbG9zaW5nRXJyb3IuY29kZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5fY2xvc2luZ0Vycm9yLmNvZGUgOiBcIjBcIjtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXNzVG9IYW5kbGVyKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gT25seSB0cmFjayBjb250cm9sIHNvY2tldCB0aW1lb3V0IGR1cmluZyB0aGUgbGlmZWN5Y2xlIG9mIGEgdGFzay4gVGhpcyBhdm9pZHMgdGltZW91dHMgb24gaWRsZSBzb2NrZXRzLFxuICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQgc29ja2V0IGJlaGF2aW91ciB3aGljaCBpcyBub3QgZXhwZWN0ZWQgYnkgbW9zdCB1c2Vycy5cbiAgICAgICAgICAgIHRoaXMuc29ja2V0LnNldFRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKGNvbW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nIG1lc3NhZ2UgaWYgc2V0IHRvIGJlIHZlcmJvc2UuXG4gICAgICovXG4gICAgbG9nKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBjb250cm9sIHNvY2tldCBpcyB1c2luZyBUTFMuIFRoaXMgZG9lcyBub3QgbWVhbiB0aGF0IGEgc2Vzc2lvblxuICAgICAqIGhhcyBhbHJlYWR5IGJlZW4gbmVnb3RpYXRlZC5cbiAgICAgKi9cbiAgICBnZXQgaGFzVExTKCkge1xuICAgICAgICByZXR1cm4gXCJlbmNyeXB0ZWRcIiBpbiB0aGlzLl9zb2NrZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgcmVmZXJlbmNlIHRvIGN1cnJlbnQgdGFzayBhbmQgaGFuZGxlci4gVGhpcyB3b24ndCByZXNvbHZlIG9yIHJlamVjdCB0aGUgdGFzay5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgX3N0b3BUcmFja2luZ1Rhc2soKSB7XG4gICAgICAgIC8vIERpc2FibGUgdGltZW91dCBvbiBjb250cm9sIHNvY2tldCBpZiB0aGVyZSBpcyBubyB0YXNrIGFjdGl2ZS5cbiAgICAgICAgdGhpcy5zb2NrZXQuc2V0VGltZW91dCgwKTtcbiAgICAgICAgdGhpcy5fdGFzayA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGluY29taW5nIGRhdGEgb24gdGhlIGNvbnRyb2wgc29ja2V0LiBUaGUgY2h1bmsgaXMgZ29pbmcgdG8gYmUgb2YgdHlwZSBgc3RyaW5nYFxuICAgICAqIGJlY2F1c2Ugd2UgbGV0IGBzb2NrZXRgIGhhbmRsZSBlbmNvZGluZyB3aXRoIGBzZXRFbmNvZGluZ2AuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIF9vbkNvbnRyb2xTb2NrZXREYXRhKGNodW5rKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRDaHVuayA9IGNodW5rLnRyaW0oKTtcbiAgICAgICAgdGhpcy5sb2coYDwgJHt0cmltbWVkQ2h1bmt9YCk7XG4gICAgICAgIC8vIFRoaXMgY2h1bmsgbWlnaHQgY29tcGxldGUgYW4gZWFybGllciBwYXJ0aWFsIHJlc3BvbnNlLlxuICAgICAgICBjb25zdCBjb21wbGV0ZVJlc3BvbnNlID0gdGhpcy5fcGFydGlhbFJlc3BvbnNlICsgdHJpbW1lZENodW5rO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvbnRyb2xSZXNwb25zZV8xLnBhcnNlQ29udHJvbFJlc3BvbnNlKGNvbXBsZXRlUmVzcG9uc2UpO1xuICAgICAgICAvLyBSZW1lbWJlciBhbnkgaW5jb21wbGV0ZSByZW1haW5kZXIuXG4gICAgICAgIHRoaXMuX3BhcnRpYWxSZXNwb25zZSA9IHBhcnNlZC5yZXN0O1xuICAgICAgICAvLyBFYWNoIHJlc3BvbnNlIGdyb3VwIGlzIHBhc3NlZCBhbG9uZyBpbmRpdmlkdWFsbHkuXG4gICAgICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBwYXJzZWQubWVzc2FnZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBwYXJzZUludChtZXNzYWdlLnN1YnN0cigwLCAzKSwgMTApO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7IGNvZGUsIG1lc3NhZ2UgfTtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGNvZGUgPj0gNDAwID8gbmV3IEZUUEVycm9yKHJlc3BvbnNlKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuX3Bhc3NUb0hhbmRsZXIoZXJyID8gZXJyIDogcmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgdGhlIGN1cnJlbnQgaGFuZGxlciBhIHJlc3BvbnNlLiBUaGlzIGlzIHVzdWFsbHkgYSBjb250cm9sIHNvY2tldCByZXNwb25zZVxuICAgICAqIG9yIGEgc29ja2V0IGV2ZW50LCBsaWtlIGFuIGVycm9yIG9yIHRpbWVvdXQuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIF9wYXNzVG9IYW5kbGVyKHJlc3BvbnNlKSB7XG4gICAgICAgIGlmICh0aGlzLl90YXNrKSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrLnJlc3BvbnNlSGFuZGxlcihyZXNwb25zZSwgdGhpcy5fdGFzay5yZXNvbHZlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXJyb3JzIG90aGVyIHRoYW4gRlRQRXJyb3IgYWx3YXlzIGNsb3NlIHRoZSBjbGllbnQuIElmIHRoZXJlIGlzbid0IGFuIGFjdGl2ZSB0YXNrIHRvIGhhbmRsZSB0aGUgZXJyb3IsXG4gICAgICAgIC8vIHRoZSBuZXh0IG9uZSBzdWJtaXR0ZWQgd2lsbCByZWNlaXZlIGl0IHVzaW5nIGBfY2xvc2luZ0Vycm9yYC5cbiAgICAgICAgLy8gVGhlcmUgaXMgb25seSBvbmUgZWRnZS1jYXNlOiBJZiB0aGVyZSBpcyBhbiBGVFBFcnJvciB3aGlsZSBubyB0YXNrIGlzIGFjdGl2ZSwgdGhlIGVycm9yIHdpbGwgYmUgZHJvcHBlZC5cbiAgICAgICAgLy8gQnV0IHRoYXQgbWVhbnMgdGhhdCB0aGUgdXNlciBzZW50IGFuIEZUUCBjb21tYW5kIHdpdGggbm8gaW50ZW50aW9uIG9mIGhhbmRsaW5nIHRoZSByZXN1bHQuIFNvIHdoeSBzaG91bGQgdGhlXG4gICAgICAgIC8vIGVycm9yIGJlIGhhbmRsZWQ/IE1heWJlIGxvZyBpdCBhdCBsZWFzdD8gRGVidWcgbG9nZ2luZyB3aWxsIGFscmVhZHkgZG8gdGhhdCBhbmQgdGhlIGNsaWVudCBzdGF5cyB1c2VhYmxlIGFmdGVyXG4gICAgICAgIC8vIEZUUEVycm9yLiBTbyBtYXliZSBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHVwIGFsbCBlcnJvciBoYW5kbGVycyBmb3IgYSBzb2NrZXQuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIF9zZXR1cERlZmF1bHRFcnJvckhhbmRsZXJzKHNvY2tldCwgaWRlbnRpZmllcikge1xuICAgICAgICBzb2NrZXQub25jZShcImVycm9yXCIsIGVycm9yID0+IHtcbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYCAoJHtpZGVudGlmaWVyfSlgO1xuICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICBzb2NrZXQub25jZShcImNsb3NlXCIsIGhhZEVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChoYWRFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IobmV3IEVycm9yKGBTb2NrZXQgY2xvc2VkIGR1ZSB0byB0cmFuc21pc3Npb24gZXJyb3IgKCR7aWRlbnRpZmllcn0pYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc29ja2V0Lm9uY2UoXCJ0aW1lb3V0XCIsICgpID0+IHRoaXMuY2xvc2VXaXRoRXJyb3IobmV3IEVycm9yKGBUaW1lb3V0ICgke2lkZW50aWZpZXJ9KWApKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlIGEgc29ja2V0LlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBfY2xvc2VTb2NrZXQoc29ja2V0KSB7XG4gICAgICAgIGlmIChzb2NrZXQpIHtcbiAgICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVTb2NrZXRMaXN0ZW5lcnMoc29ja2V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYWxsIGRlZmF1bHQgbGlzdGVuZXJzIGZvciBzb2NrZXQuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIF9yZW1vdmVTb2NrZXRMaXN0ZW5lcnMoc29ja2V0KSB7XG4gICAgICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgLy8gQmVmb3JlIE5vZGUuanMgMTAuMy4wLCB1c2luZyBgc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycygpYCB3aXRob3V0IGFueSBuYW1lIGRpZCBub3Qgd29yazogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yMDkyMy5cbiAgICAgICAgc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycyhcInRpbWVvdXRcIik7XG4gICAgICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJkYXRhXCIpO1xuICAgICAgICBzb2NrZXQucmVtb3ZlQWxsTGlzdGVuZXJzKFwiZW5kXCIpO1xuICAgICAgICBzb2NrZXQucmVtb3ZlQWxsTGlzdGVuZXJzKFwiZXJyb3JcIik7XG4gICAgICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJjbG9zZVwiKTtcbiAgICAgICAgc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycyhcImNvbm5lY3RcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgYSBuZXcgc29ja2V0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogSW50ZXJuYWwgdXNlIG9ubHksIHJlcGxhY2VkIGZvciB1bml0IHRlc3RzLlxuICAgICAqL1xuICAgIF9uZXdTb2NrZXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgbmV0XzEuU29ja2V0KCk7XG4gICAgfVxufVxuZXhwb3J0cy5GVFBDb250ZXh0ID0gRlRQQ29udGV4dDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VMaXN0ID0gdm9pZCAwO1xuY29uc3QgZG9zUGFyc2VyID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3BhcnNlTGlzdERPU1wiKSk7XG5jb25zdCB1bml4UGFyc2VyID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3BhcnNlTGlzdFVuaXhcIikpO1xuY29uc3QgbWxzZFBhcnNlciA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9wYXJzZUxpc3RNTFNEXCIpKTtcbi8qKlxuICogQXZhaWxhYmxlIGRpcmVjdG9yeSBsaXN0aW5nIHBhcnNlcnMuIFRoZXNlIGFyZSBjYW5kaWRhdGVzIHRoYXQgd2lsbCBiZSB0ZXN0ZWRcbiAqIGluIHRoZSBvcmRlciBwcmVzZW50ZWQuIFRoZSBmaXJzdCBjYW5kaWRhdGUgd2lsbCBiZSB1c2VkIHRvIHBhcnNlIHRoZSB3aG9sZSBsaXN0LlxuICovXG5jb25zdCBhdmFpbGFibGVQYXJzZXJzID0gW1xuICAgIGRvc1BhcnNlcixcbiAgICB1bml4UGFyc2VyLFxuICAgIG1sc2RQYXJzZXIgLy8gS2VlcCBNTFNEIGxhc3QsIG1heSBhY2NlcHQgZmlsZW5hbWUgb25seVxuXTtcbmZ1bmN0aW9uIGZpcnN0Q29tcGF0aWJsZVBhcnNlcihsaW5lLCBwYXJzZXJzKSB7XG4gICAgcmV0dXJuIHBhcnNlcnMuZmluZChwYXJzZXIgPT4gcGFyc2VyLnRlc3RMaW5lKGxpbmUpID09PSB0cnVlKTtcbn1cbmZ1bmN0aW9uIHN0cmluZ0lzTm90Qmxhbmsoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci50cmltKCkgIT09IFwiXCI7XG59XG5jb25zdCBSRUdFWF9ORVdMSU5FID0gL1xccj9cXG4vO1xuLyoqXG4gKiBQYXJzZSByYXcgZGlyZWN0b3J5IGxpc3RpbmcuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTGlzdChyYXdMaXN0KSB7XG4gICAgY29uc3QgbGluZXMgPSByYXdMaXN0XG4gICAgICAgIC5zcGxpdChSRUdFWF9ORVdMSU5FKVxuICAgICAgICAuZmlsdGVyKHN0cmluZ0lzTm90QmxhbmspO1xuICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCB0ZXN0TGluZSA9IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHBhcnNlciA9IGZpcnN0Q29tcGF0aWJsZVBhcnNlcih0ZXN0TGluZSwgYXZhaWxhYmxlUGFyc2Vycyk7XG4gICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBsaWJyYXJ5IG9ubHkgc3VwcG9ydHMgTUxTRCwgVW5peC0gb3IgRE9TLXN0eWxlIGRpcmVjdG9yeSBsaXN0aW5nLiBZb3VyIEZUUCBzZXJ2ZXIgc2VlbXMgdG8gYmUgdXNpbmcgYW5vdGhlciBmb3JtYXQuIFlvdSBjYW4gc2VlIHRoZSB0cmFuc21pdHRlZCBsaXN0aW5nIHdoZW4gc2V0dGluZyBgY2xpZW50LmZ0cC52ZXJib3NlID0gdHJ1ZWAuIFlvdSBjYW4gdGhlbiBwcm92aWRlIGEgY3VzdG9tIHBhcnNlciB0byBgY2xpZW50LnBhcnNlTGlzdGAsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy5cIik7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVzID0gbGluZXNcbiAgICAgICAgLm1hcChwYXJzZXIucGFyc2VMaW5lKVxuICAgICAgICAuZmlsdGVyKChpbmZvKSA9PiBpbmZvICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBwYXJzZXIudHJhbnNmb3JtTGlzdChmaWxlcyk7XG59XG5leHBvcnRzLnBhcnNlTGlzdCA9IHBhcnNlTGlzdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZU1MU3hEYXRlID0gZXhwb3J0cy50cmFuc2Zvcm1MaXN0ID0gZXhwb3J0cy5wYXJzZUxpbmUgPSBleHBvcnRzLnRlc3RMaW5lID0gdm9pZCAwO1xuY29uc3QgRmlsZUluZm9fMSA9IHJlcXVpcmUoXCIuL0ZpbGVJbmZvXCIpO1xuZnVuY3Rpb24gcGFyc2VTaXplKHZhbHVlLCBpbmZvKSB7XG4gICAgaW5mby5zaXplID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbn1cbi8qKlxuICogUGFyc2VycyBmb3IgTUxTRCBmYWN0cy5cbiAqL1xuY29uc3QgZmFjdEhhbmRsZXJzQnlOYW1lID0ge1xuICAgIFwic2l6ZVwiOiBwYXJzZVNpemUsXG4gICAgXCJzaXpkXCI6IHBhcnNlU2l6ZSxcbiAgICBcInVuaXF1ZVwiOiAodmFsdWUsIGluZm8pID0+IHtcbiAgICAgICAgaW5mby51bmlxdWVJRCA9IHZhbHVlO1xuICAgIH0sXG4gICAgXCJtb2RpZnlcIjogKHZhbHVlLCBpbmZvKSA9PiB7XG4gICAgICAgIGluZm8ubW9kaWZpZWRBdCA9IHBhcnNlTUxTeERhdGUodmFsdWUpO1xuICAgICAgICBpbmZvLnJhd01vZGlmaWVkQXQgPSBpbmZvLm1vZGlmaWVkQXQudG9JU09TdHJpbmcoKTtcbiAgICB9LFxuICAgIFwidHlwZVwiOiAodmFsdWUsIGluZm8pID0+IHtcbiAgICAgICAgLy8gVGhlcmUgc2VlbXMgdG8gYmUgY29uZnVzaW9uIG9uIGhvdyB0byBoYW5kbGUgc3ltYm9saWMgbGlua3MgZm9yIFVuaXguIFJGQyAzNjU5IGRvZXNuJ3QgZGVzY3JpYmVcbiAgICAgICAgLy8gdGhpcyBidXQgbWVudGlvbnMgc29tZSBleGFtcGxlcyB1c2luZyB0aGUgc3ludGF4IGB0eXBlPU9TLnVuaXg9c2xpbms6PHRhcmdldD5gLiBCdXQgYWNjb3JkaW5nIHRvXG4gICAgICAgIC8vIGFuIGVudHJ5IGluIHRoZSBFcnJhdGEgKGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL2VycmF0YS9laWQxNTAwKSB0aGlzIHN5bnRheCBjYW4ndCBiZSB2YWxpZC5cbiAgICAgICAgLy8gSW5zdGVhZCBpdCBwcm9wb3NlcyB0byB1c2UgYHR5cGU9T1MudW5peD1zeW1saW5rYCBhbmQgdG8gdGhlbiBsaXN0IHRoZSBhY3R1YWwgdGFyZ2V0IG9mIHRoZVxuICAgICAgICAvLyBzeW1ib2xpYyBsaW5rIGFzIGFub3RoZXIgZW50cnkgaW4gdGhlIGRpcmVjdG9yeSBsaXN0aW5nLiBUaGUgdW5pcXVlIGlkZW50aWZpZXJzIGNhbiB0aGVuIGJlIHVzZWRcbiAgICAgICAgLy8gdG8gZGVyaXZlIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gbGluayhzKSBhbmQgdGFyZ2V0LiBXZSdsbCBoYXZlIHRvIGhhbmRsZSBib3RoIGNhc2VzIGFzIHRoZXJlXG4gICAgICAgIC8vIGFyZSBkaWZmZXJpbmcgb3BpbmlvbnMgb24gaG93IHRvIGRlYWwgd2l0aCB0aGlzLiBIZXJlIGFyZSBzb21lIGxpbmtzIG9uIHRoaXMgdG9waWM6XG4gICAgICAgIC8vIC0gUHJvRlRQRCBzb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9mdHBkL3Byb2Z0cGQvYmxvYi81NmU2ZGZhNTk4Y2JkNGVmNWM2Y2JhNDM5YmNiY2Q1M2E2M2UzYjIxL21vZHVsZXMvbW9kX2ZhY3RzLmMjTDUzMVxuICAgICAgICAvLyAtIFByb0ZUUEQgYnVnOiBodHRwOi8vYnVncy5wcm9mdHBkLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMxOFxuICAgICAgICAvLyAtIFByb0ZUUEQgc3RhdGVtZW50OiBodHRwOi8vd3d3LnByb2Z0cGQub3JnL2RvY3MvbW9kdWxlcy9tb2RfZmFjdHMuaHRtbFxuICAgICAgICAvLyDigJMgRmlsZVppbGxhIGJ1ZzogaHR0cHM6Ly90cmFjLmZpbGV6aWxsYS1wcm9qZWN0Lm9yZy90aWNrZXQvOTMxMFxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIk9TLnVuaXg9c2xpbmtcIikpIHtcbiAgICAgICAgICAgIGluZm8udHlwZSA9IEZpbGVJbmZvXzEuRmlsZVR5cGUuU3ltYm9saWNMaW5rO1xuICAgICAgICAgICAgaW5mby5saW5rID0gdmFsdWUuc3Vic3RyKHZhbHVlLmluZGV4T2YoXCI6XCIpICsgMSk7XG4gICAgICAgICAgICByZXR1cm4gMSAvKiBDb250aW51ZSAqLztcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgICAgICAgICAgIGluZm8udHlwZSA9IEZpbGVJbmZvXzEuRmlsZVR5cGUuRmlsZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkaXJcIjpcbiAgICAgICAgICAgICAgICBpbmZvLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLkRpcmVjdG9yeTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJPUy51bml4PXN5bWxpbmtcIjpcbiAgICAgICAgICAgICAgICBpbmZvLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLlN5bWJvbGljTGluaztcbiAgICAgICAgICAgICAgICAvLyBUaGUgdGFyZ2V0IG9mIHRoZSBzeW1ib2xpYyBsaW5rIG1pZ2h0IGJlIGRlZmluZWQgaW4gYW5vdGhlciBsaW5lIGluIHRoZSBkaXJlY3RvcnkgbGlzdGluZy5cbiAgICAgICAgICAgICAgICAvLyBXZSdsbCBoYW5kbGUgdGhpcyBpbiBgdHJhbnNmb3JtTGlzdCgpYCBiZWxvdy5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjZGlyXCI6IC8vIEN1cnJlbnQgZGlyZWN0b3J5IGJlaW5nIGxpc3RlZFxuICAgICAgICAgICAgY2FzZSBcInBkaXJcIjogLy8gUGFyZW50IGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIHJldHVybiAyIC8qIElnbm9yZUZpbGUgKi87IC8vIERvbid0IGluY2x1ZGUgdGhlc2UgZW50cmllcyBpbiB0aGUgbGlzdGluZ1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpbmZvLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLlVua25vd247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDEgLyogQ29udGludWUgKi87XG4gICAgfSxcbiAgICBcInVuaXgubW9kZVwiOiAodmFsdWUsIGluZm8pID0+IHtcbiAgICAgICAgY29uc3QgZGlnaXRzID0gdmFsdWUuc3Vic3RyKC0zKTtcbiAgICAgICAgaW5mby5wZXJtaXNzaW9ucyA9IHtcbiAgICAgICAgICAgIHVzZXI6IHBhcnNlSW50KGRpZ2l0c1swXSwgMTApLFxuICAgICAgICAgICAgZ3JvdXA6IHBhcnNlSW50KGRpZ2l0c1sxXSwgMTApLFxuICAgICAgICAgICAgd29ybGQ6IHBhcnNlSW50KGRpZ2l0c1syXSwgMTApXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBcInVuaXgub3duZXJuYW1lXCI6ICh2YWx1ZSwgaW5mbykgPT4ge1xuICAgICAgICBpbmZvLnVzZXIgPSB2YWx1ZTtcbiAgICB9LFxuICAgIFwidW5peC5vd25lclwiOiAodmFsdWUsIGluZm8pID0+IHtcbiAgICAgICAgaWYgKGluZm8udXNlciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgaW5mby51c2VyID0gdmFsdWU7XG4gICAgfSxcbiAgICBnZXQgXCJ1bml4LnVpZFwiKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tcInVuaXgub3duZXJcIl07XG4gICAgfSxcbiAgICBcInVuaXguZ3JvdXBuYW1lXCI6ICh2YWx1ZSwgaW5mbykgPT4ge1xuICAgICAgICBpbmZvLmdyb3VwID0gdmFsdWU7XG4gICAgfSxcbiAgICBcInVuaXguZ3JvdXBcIjogKHZhbHVlLCBpbmZvKSA9PiB7XG4gICAgICAgIGlmIChpbmZvLmdyb3VwID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBpbmZvLmdyb3VwID0gdmFsdWU7XG4gICAgfSxcbiAgICBnZXQgXCJ1bml4LmdpZFwiKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tcInVuaXguZ3JvdXBcIl07XG4gICAgfVxuICAgIC8vIFJlZ2FyZGluZyB0aGUgZmFjdCBcInBlcm1cIjpcbiAgICAvLyBXZSBkb24ndCBoYW5kbGUgcGVybWlzc2lvbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gXCJwZXJtXCIgYmVjYXVzZSBpdHMgaW5mb3JtYXRpb24gaXMgY29uY2VwdHVhbGx5XG4gICAgLy8gZGlmZmVyZW50IGZyb20gd2hhdCB1c2VycyBvZiBGVFAgY2xpZW50cyB1c3VhbGx5IGFzc29jaWF0ZSB3aXRoIFwicGVybWlzc2lvbnNcIi4gVGhvc2UgdGhhdCBoYXZlXG4gICAgLy8gc29tZSBleHBlY3RhdGlvbnMgKGFuZCBwcm9iYWJseSB3YW50IHRvIGVkaXQgdGhlbSB3aXRoIGEgU0lURSBjb21tYW5kKSBvZnRlbiB1bmtub3dpbmdseSBleHBlY3RcbiAgICAvLyB0aGUgVW5peCBwZXJtaXNzaW9uIHN5c3RlbS4gVGhlIGluZm9ybWF0aW9uIHBhc3NlZCBieSBcInBlcm1cIiBkZXNjcmliZXMgd2hhdCBGVFAgY29tbWFuZHMgY2FuIGJlXG4gICAgLy8gZXhlY3V0ZWQgd2l0aCBhIGZpbGUvZGlyZWN0b3J5LiBCdXQgZXZlbiB0aGlzIGNhbiBiZSBlaXRoZXIgaW5jb21wbGV0ZSBvciBqdXN0IG1lYW50IGFzIGEgXCJndWlkZVwiXG4gICAgLy8gYXMgdGhlIHNwZWMgbWVudGlvbnMuIEZyb20gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM2NTkjc2VjdGlvbi03LjUuNTogXCJUaGUgcGVybWlzc2lvbnMgYXJlXG4gICAgLy8gZGVzY3JpYmVkIGhlcmUgYXMgdGhleSBhcHBseSB0byBGVFAgY29tbWFuZHMuIFRoZXkgbWF5IG5vdCBtYXAgZWFzaWx5IGludG8gcGFydGljdWxhciBwZXJtaXNzaW9uc1xuICAgIC8vIGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyJ3Mgb3BlcmF0aW5nIHN5c3RlbS5cIiBUaGUgcGFyc2VyIGJ5IEFwYWNoZSBDb21tb25zIHRyaWVzIHRvIHRyYW5zbGF0ZSB0aGVzZVxuICAgIC8vIHRvIFVuaXggcGVybWlzc2lvbnMg4oCTIHRoaXMgaXMgbWlzbGVhZGluZyB1c2VycyBhbmQgbWlnaHQgbm90IGV2ZW4gYmUgY29ycmVjdC5cbn07XG4vKipcbiAqIFNwbGl0IGEgc3RyaW5nIG9uY2UgYXQgdGhlIGZpcnN0IHBvc2l0aW9uIG9mIGEgZGVsaW1pdGVyLiBGb3IgZXhhbXBsZVxuICogYHNwbGl0U3RyaW5nT25jZShcImEgYiBjIGRcIiwgXCIgXCIpYCByZXR1cm5zIGBbXCJhXCIsIFwiYiBjIGRcIl1gLlxuICovXG5mdW5jdGlvbiBzcGxpdFN0cmluZ09uY2Uoc3RyLCBkZWxpbWl0ZXIpIHtcbiAgICBjb25zdCBwb3MgPSBzdHIuaW5kZXhPZihkZWxpbWl0ZXIpO1xuICAgIGNvbnN0IGEgPSBzdHIuc3Vic3RyKDAsIHBvcyk7XG4gICAgY29uc3QgYiA9IHN0ci5zdWJzdHIocG9zICsgZGVsaW1pdGVyLmxlbmd0aCk7XG4gICAgcmV0dXJuIFthLCBiXTtcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgZ2l2ZW4gbGluZSBtaWdodCBiZSBwYXJ0IG9mIGFuIE1MU0QgbGlzdGluZy5cbiAqXG4gKiAtIEV4YW1wbGUgMTogYHNpemU9MTUyMjc7dHlwZT1kaXI7cGVybT1lbDttb2RpZnk9MjAxOTA0MTkwNjU3MzA7IHRlc3Qgb25lYFxuICogLSBFeGFtcGxlIDI6IGAgZmlsZSBuYW1lYCAobGVhZGluZyBzcGFjZSlcbiAqL1xuZnVuY3Rpb24gdGVzdExpbmUobGluZSkge1xuICAgIHJldHVybiAvXlxcUys9XFxTKzsvLnRlc3QobGluZSkgfHwgbGluZS5zdGFydHNXaXRoKFwiIFwiKTtcbn1cbmV4cG9ydHMudGVzdExpbmUgPSB0ZXN0TGluZTtcbi8qKlxuICogUGFyc2Ugc2luZ2xlIGxpbmUgYXMgTUxTRCBsaXN0aW5nLCBzZWUgc3BlY2lmaWNhdGlvbiBhdCBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzY1OSNzZWN0aW9uLTcuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTGluZShsaW5lKSB7XG4gICAgY29uc3QgW3BhY2tlZEZhY3RzLCBuYW1lXSA9IHNwbGl0U3RyaW5nT25jZShsaW5lLCBcIiBcIik7XG4gICAgaWYgKG5hbWUgPT09IFwiXCIgfHwgbmFtZSA9PT0gXCIuXCIgfHwgbmFtZSA9PT0gXCIuLlwiKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGluZm8gPSBuZXcgRmlsZUluZm9fMS5GaWxlSW5mbyhuYW1lKTtcbiAgICBjb25zdCBmYWN0cyA9IHBhY2tlZEZhY3RzLnNwbGl0KFwiO1wiKTtcbiAgICBmb3IgKGNvbnN0IGZhY3Qgb2YgZmFjdHMpIHtcbiAgICAgICAgY29uc3QgW2ZhY3ROYW1lLCBmYWN0VmFsdWVdID0gc3BsaXRTdHJpbmdPbmNlKGZhY3QsIFwiPVwiKTtcbiAgICAgICAgaWYgKCFmYWN0VmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZhY3RIYW5kbGVyID0gZmFjdEhhbmRsZXJzQnlOYW1lW2ZhY3ROYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAoIWZhY3RIYW5kbGVyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBmYWN0SGFuZGxlcihmYWN0VmFsdWUsIGluZm8pO1xuICAgICAgICBpZiAocmVzdWx0ID09PSAyIC8qIElnbm9yZUZpbGUgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG59XG5leHBvcnRzLnBhcnNlTGluZSA9IHBhcnNlTGluZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUxpc3QoZmlsZXMpIHtcbiAgICAvLyBDcmVhdGUgYSBtYXAgb2YgYWxsIGZpbGVzIHRoYXQgYXJlIG5vdCBzeW1ib2xpYyBsaW5rcyBieSB0aGVpciB1bmlxdWUgSURcbiAgICBjb25zdCBub25MaW5rc0J5SUQgPSBuZXcgTWFwKCk7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmICghZmlsZS5pc1N5bWJvbGljTGluayAmJiBmaWxlLnVuaXF1ZUlEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5vbkxpbmtzQnlJRC5zZXQoZmlsZS51bmlxdWVJRCwgZmlsZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzb2x2ZWRGaWxlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICAvLyBUcnkgdG8gYXNzb2NpYXRlIHVucmVzb2x2ZWQgc3ltYm9saWMgbGlua3Mgd2l0aCBhIHRhcmdldCBmaWxlL2RpcmVjdG9yeS5cbiAgICAgICAgaWYgKGZpbGUuaXNTeW1ib2xpY0xpbmsgJiYgZmlsZS51bmlxdWVJRCAhPT0gdW5kZWZpbmVkICYmIGZpbGUubGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBub25MaW5rc0J5SUQuZ2V0KGZpbGUudW5pcXVlSUQpO1xuICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmlsZS5saW5rID0gdGFyZ2V0Lm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIHRhcmdldCBvZiBhIHN5bWJvbGljIGxpbmsgaXMgbGlzdGVkIGFzIGFuIGVudHJ5IGluIHRoZSBkaXJlY3RvcnkgbGlzdGluZyBidXQgbWlnaHRcbiAgICAgICAgLy8gaGF2ZSBhIHBhdGggcG9pbnRpbmcgb3V0c2lkZSBvZiB0aGlzIGRpcmVjdG9yeS4gSW4gdGhhdCBjYXNlIHdlIGRvbid0IHdhbnQgdGhpcyBlbnRyeVxuICAgICAgICAvLyB0byBiZSBwYXJ0IG9mIHRoZSBsaXN0aW5nLiBXZSBnZW5lcmFsbHkgZG9uJ3Qgd2FudCB0aGVzZSBraW5kIG9mIGVudHJpZXMgYXQgYWxsLlxuICAgICAgICBjb25zdCBpc1BhcnRPZkRpcmVjdG9yeSA9ICFmaWxlLm5hbWUuaW5jbHVkZXMoXCIvXCIpO1xuICAgICAgICBpZiAoaXNQYXJ0T2ZEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgIHJlc29sdmVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZWRGaWxlcztcbn1cbmV4cG9ydHMudHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybUxpc3Q7XG4vKipcbiAqIFBhcnNlIGRhdGUgYXMgc3BlY2lmaWVkIGluIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNjU5I3NlY3Rpb24tMi4zLlxuICpcbiAqIE1lc3NhZ2UgY29udGFpbnMgcmVzcG9uc2UgY29kZSBhbmQgbW9kaWZpZWQgdGltZSBpbiB0aGUgZm9ybWF0OiBZWVlZTU1EREhITU1TU1suc3NzXVxuICogRm9yIGV4YW1wbGUgYDE5OTkxMDA1MjEzMTAyYCBvciBgMTk5ODA2MTUxMDAwNDUuMDE0YC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VNTFN4RGF0ZShmYWN0KSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCtmYWN0LnNsaWNlKDAsIDQpLCAvLyBZZWFyXG4gICAgK2ZhY3Quc2xpY2UoNCwgNikgLSAxLCAvLyBNb250aFxuICAgICtmYWN0LnNsaWNlKDYsIDgpLCAvLyBEYXRlXG4gICAgK2ZhY3Quc2xpY2UoOCwgMTApLCAvLyBIb3Vyc1xuICAgICtmYWN0LnNsaWNlKDEwLCAxMiksIC8vIE1pbnV0ZXNcbiAgICArZmFjdC5zbGljZSgxMiwgMTQpLCAvLyBTZWNvbmRzXG4gICAgK2ZhY3Quc2xpY2UoMTUsIDE4KSAvLyBNaWxsaXNlY29uZHNcbiAgICApKTtcbn1cbmV4cG9ydHMucGFyc2VNTFN4RGF0ZSA9IHBhcnNlTUxTeERhdGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXBJc1ByaXZhdGVWNEFkZHJlc3MgPSBleHBvcnRzLnVwZ3JhZGVTb2NrZXQgPSBleHBvcnRzLmRlc2NyaWJlQWRkcmVzcyA9IGV4cG9ydHMuZGVzY3JpYmVUTFMgPSB2b2lkIDA7XG5jb25zdCB0bHNfMSA9IHJlcXVpcmUoXCJ0bHNcIik7XG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZW5jcnlwdGlvbiBvbiBhIGdpdmVuIHNvY2tldCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gZGVzY3JpYmVUTFMoc29ja2V0KSB7XG4gICAgaWYgKHNvY2tldCBpbnN0YW5jZW9mIHRsc18xLlRMU1NvY2tldCkge1xuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHNvY2tldC5nZXRQcm90b2NvbCgpO1xuICAgICAgICByZXR1cm4gcHJvdG9jb2wgPyBwcm90b2NvbCA6IFwiU2VydmVyIHNvY2tldCBvciBkaXNjb25uZWN0ZWQgY2xpZW50IHNvY2tldFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJObyBlbmNyeXB0aW9uXCI7XG59XG5leHBvcnRzLmRlc2NyaWJlVExTID0gZGVzY3JpYmVUTFM7XG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcmVtb3RlIGFkZHJlc3Mgb2YgYSBzb2NrZXQuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlQWRkcmVzcyhzb2NrZXQpIHtcbiAgICBpZiAoc29ja2V0LnJlbW90ZUZhbWlseSA9PT0gXCJJUHY2XCIpIHtcbiAgICAgICAgcmV0dXJuIGBbJHtzb2NrZXQucmVtb3RlQWRkcmVzc31dOiR7c29ja2V0LnJlbW90ZVBvcnR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3NvY2tldC5yZW1vdGVBZGRyZXNzfToke3NvY2tldC5yZW1vdGVQb3J0fWA7XG59XG5leHBvcnRzLmRlc2NyaWJlQWRkcmVzcyA9IGRlc2NyaWJlQWRkcmVzcztcbi8qKlxuICogVXBncmFkZSBhIHNvY2tldCBjb25uZWN0aW9uIHdpdGggVExTLlxuICovXG5mdW5jdGlvbiB1cGdyYWRlU29ja2V0KHNvY2tldCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHRsc09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBzb2NrZXRcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRsc1NvY2tldCA9IHRsc18xLmNvbm5lY3QodGxzT3B0aW9ucywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0Q2VydGlmaWNhdGUgPSB0bHNPcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZCAhPT0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZXhwZWN0Q2VydGlmaWNhdGUgJiYgIXRsc1NvY2tldC5hdXRob3JpemVkKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHRsc1NvY2tldC5hdXRob3JpemF0aW9uRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGVycm9yIGxpc3RlbmVyIGFkZGVkIGJlbG93LlxuICAgICAgICAgICAgICAgIHRsc1NvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJlcnJvclwiKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRsc1NvY2tldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLm9uY2UoXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudXBncmFkZVNvY2tldCA9IHVwZ3JhZGVTb2NrZXQ7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhbiBJUCBpcyBhIHByaXZhdGUgYWRkcmVzcyBhY2NvcmRpbmcgdG8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5MTgjc2VjdGlvbi0zLlxuICogVGhpcyB3aWxsIGhhbmRsZSBJUHY0LW1hcHBlZCBJUHY2IGFkZHJlc3NlcyBjb3JyZWN0bHkgYnV0IHJldHVybiBmYWxzZSBmb3IgYWxsIG90aGVyIElQdjYgYWRkcmVzc2VzLlxuICpcbiAqIEBwYXJhbSBpcCAgVGhlIElQIGFzIGEgc3RyaW5nLCBlLmcuIFwiMTkyLjE2OC4wLjFcIlxuICovXG5mdW5jdGlvbiBpcElzUHJpdmF0ZVY0QWRkcmVzcyhpcCA9IFwiXCIpIHtcbiAgICAvLyBIYW5kbGUgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzZXMgbGlrZSA6OmZmZmY6MTkyLjE2OC4wLjFcbiAgICBpZiAoaXAuc3RhcnRzV2l0aChcIjo6ZmZmZjpcIikpIHtcbiAgICAgICAgaXAgPSBpcC5zdWJzdHIoNyk7IC8vIFN0cmlwIDo6ZmZmZjogcHJlZml4XG4gICAgfVxuICAgIGNvbnN0IG9jdGV0cyA9IGlwLnNwbGl0KFwiLlwiKS5tYXAobyA9PiBwYXJzZUludChvLCAxMCkpO1xuICAgIHJldHVybiBvY3RldHNbMF0gPT09IDEwIC8vIDEwLjAuMC4wIC0gMTAuMjU1LjI1NS4yNTVcbiAgICAgICAgfHwgKG9jdGV0c1swXSA9PT0gMTcyICYmIG9jdGV0c1sxXSA+PSAxNiAmJiBvY3RldHNbMV0gPD0gMzEpIC8vIDE3Mi4xNi4wLjAgLSAxNzIuMzEuMjU1LjI1NVxuICAgICAgICB8fCAob2N0ZXRzWzBdID09PSAxOTIgJiYgb2N0ZXRzWzFdID09PSAxNjgpOyAvLyAxOTIuMTY4LjAuMCAtIDE5Mi4xNjguMjU1LjI1NVxufVxuZXhwb3J0cy5pcElzUHJpdmF0ZVY0QWRkcmVzcyA9IGlwSXNQcml2YXRlVjRBZGRyZXNzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRvd25sb2FkVG8gPSBleHBvcnRzLnVwbG9hZEZyb20gPSBleHBvcnRzLmNvbm5lY3RGb3JQYXNzaXZlVHJhbnNmZXIgPSBleHBvcnRzLnBhcnNlUGFzdlJlc3BvbnNlID0gZXhwb3J0cy5lbnRlclBhc3NpdmVNb2RlSVB2NCA9IGV4cG9ydHMucGFyc2VFcHN2UmVzcG9uc2UgPSBleHBvcnRzLmVudGVyUGFzc2l2ZU1vZGVJUHY2ID0gdm9pZCAwO1xuY29uc3QgbmV0VXRpbHNfMSA9IHJlcXVpcmUoXCIuL25ldFV0aWxzXCIpO1xuY29uc3QgdGxzXzEgPSByZXF1aXJlKFwidGxzXCIpO1xuY29uc3QgcGFyc2VDb250cm9sUmVzcG9uc2VfMSA9IHJlcXVpcmUoXCIuL3BhcnNlQ29udHJvbFJlc3BvbnNlXCIpO1xuLyoqXG4gKiBQcmVwYXJlIGEgZGF0YSBzb2NrZXQgdXNpbmcgcGFzc2l2ZSBtb2RlIG92ZXIgSVB2Ni5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW50ZXJQYXNzaXZlTW9kZUlQdjYoZnRwKSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZnRwLnJlcXVlc3QoXCJFUFNWXCIpO1xuICAgIGNvbnN0IHBvcnQgPSBwYXJzZUVwc3ZSZXNwb25zZShyZXMubWVzc2FnZSk7XG4gICAgaWYgKCFwb3J0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHBhcnNlIEVQU1YgcmVzcG9uc2U6IFwiICsgcmVzLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBjb25zdCBjb250cm9sSG9zdCA9IGZ0cC5zb2NrZXQucmVtb3RlQWRkcmVzcztcbiAgICBpZiAoY29udHJvbEhvc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb250cm9sIHNvY2tldCBpcyBkaXNjb25uZWN0ZWQsIGNhbid0IGdldCByZW1vdGUgYWRkcmVzcy5cIik7XG4gICAgfVxuICAgIGF3YWl0IGNvbm5lY3RGb3JQYXNzaXZlVHJhbnNmZXIoY29udHJvbEhvc3QsIHBvcnQsIGZ0cCk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZW50ZXJQYXNzaXZlTW9kZUlQdjYgPSBlbnRlclBhc3NpdmVNb2RlSVB2Njtcbi8qKlxuICogUGFyc2UgYW4gRVBTViByZXNwb25zZS4gUmV0dXJucyBvbmx5IHRoZSBwb3J0IGFzIGluIEVQU1YgdGhlIGhvc3Qgb2YgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBpcyB1c2VkLlxuICovXG5mdW5jdGlvbiBwYXJzZUVwc3ZSZXNwb25zZShtZXNzYWdlKSB7XG4gICAgLy8gR2V0IHBvcnQgZnJvbSBFUFNWIHJlc3BvbnNlLCBlLmcuIFwiMjI5IEVudGVyaW5nIEV4dGVuZGVkIFBhc3NpdmUgTW9kZSAofHx8NjQ0NnwpXCJcbiAgICAvLyBTb21lIEZUUCBTZXJ2ZXJzIHN1Y2ggYXMgdGhlIG9uZSBvbiBJQk0gaSAoT1MvNDAwKSB1c2UgISBpbnN0ZWFkIG9mIHwgaW4gdGhlaXIgRVBTViByZXNwb25zZS5cbiAgICBjb25zdCBncm91cHMgPSBtZXNzYWdlLm1hdGNoKC9bfCFdezN9KC4rKVt8IV0vKTtcbiAgICBpZiAoZ3JvdXBzID09PSBudWxsIHx8IGdyb3Vwc1sxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgcGFyc2UgcmVzcG9uc2UgdG8gJ0VQU1YnOiAke21lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludChncm91cHNbMV0sIDEwKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBvcnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgcGFyc2UgcmVzcG9uc2UgdG8gJ0VQU1YnLCBwb3J0IGlzIG5vdCBhIG51bWJlcjogJHttZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcG9ydDtcbn1cbmV4cG9ydHMucGFyc2VFcHN2UmVzcG9uc2UgPSBwYXJzZUVwc3ZSZXNwb25zZTtcbi8qKlxuICogUHJlcGFyZSBhIGRhdGEgc29ja2V0IHVzaW5nIHBhc3NpdmUgbW9kZSBvdmVyIElQdjQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVudGVyUGFzc2l2ZU1vZGVJUHY0KGZ0cCkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZ0cC5yZXF1ZXN0KFwiUEFTVlwiKTtcbiAgICBjb25zdCB0YXJnZXQgPSBwYXJzZVBhc3ZSZXNwb25zZShyZXMubWVzc2FnZSk7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcGFyc2UgUEFTViByZXNwb25zZTogXCIgKyByZXMubWVzc2FnZSk7XG4gICAgfVxuICAgIC8vIElmIHRoZSBob3N0IGluIHRoZSBQQVNWIHJlc3BvbnNlIGhhcyBhIGxvY2FsIGFkZHJlc3Mgd2hpbGUgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBoYXNuJ3QsXG4gICAgLy8gd2UgYXNzdW1lIGEgTkFUIGlzc3VlIGFuZCB1c2UgdGhlIElQIG9mIHRoZSBjb250cm9sIGNvbm5lY3Rpb24gYXMgdGhlIHRhcmdldCBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbi5cbiAgICAvLyBXZSBjYW4ndCBhbHdheXMgcGVyZm9ybSB0aGlzIHJlcGxhY2VtZW50IGJlY2F1c2UgaXQncyBwb3NzaWJsZSAoYWx0aG91Z2ggdW5saWtlbHkpIHRoYXQgdGhlIEZUUCBzZXJ2ZXJcbiAgICAvLyBpbmRlZWQgdXNlcyBhIGRpZmZlcmVudCBob3N0IGZvciBkYXRhIGNvbm5lY3Rpb25zLlxuICAgIGNvbnN0IGNvbnRyb2xIb3N0ID0gZnRwLnNvY2tldC5yZW1vdGVBZGRyZXNzO1xuICAgIGlmIChuZXRVdGlsc18xLmlwSXNQcml2YXRlVjRBZGRyZXNzKHRhcmdldC5ob3N0KSAmJiBjb250cm9sSG9zdCAmJiAhbmV0VXRpbHNfMS5pcElzUHJpdmF0ZVY0QWRkcmVzcyhjb250cm9sSG9zdCkpIHtcbiAgICAgICAgdGFyZ2V0Lmhvc3QgPSBjb250cm9sSG9zdDtcbiAgICB9XG4gICAgYXdhaXQgY29ubmVjdEZvclBhc3NpdmVUcmFuc2Zlcih0YXJnZXQuaG9zdCwgdGFyZ2V0LnBvcnQsIGZ0cCk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZW50ZXJQYXNzaXZlTW9kZUlQdjQgPSBlbnRlclBhc3NpdmVNb2RlSVB2NDtcbi8qKlxuICogUGFyc2UgYSBQQVNWIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBwYXJzZVBhc3ZSZXNwb25zZShtZXNzYWdlKSB7XG4gICAgLy8gR2V0IGhvc3QgYW5kIHBvcnQgZnJvbSBQQVNWIHJlc3BvbnNlLCBlLmcuIFwiMjI3IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAoMTkyLDE2OCwxLDEwMCwxMCwyMjkpXCJcbiAgICBjb25zdCBncm91cHMgPSBtZXNzYWdlLm1hdGNoKC8oWy1cXGRdKyxbLVxcZF0rLFstXFxkXSssWy1cXGRdKyksKFstXFxkXSspLChbLVxcZF0rKS8pO1xuICAgIGlmIChncm91cHMgPT09IG51bGwgfHwgZ3JvdXBzLmxlbmd0aCAhPT0gNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IHBhcnNlIHJlc3BvbnNlIHRvICdQQVNWJzogJHttZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBob3N0OiBncm91cHNbMV0ucmVwbGFjZSgvLC9nLCBcIi5cIiksXG4gICAgICAgIHBvcnQ6IChwYXJzZUludChncm91cHNbMl0sIDEwKSAmIDI1NSkgKiAyNTYgKyAocGFyc2VJbnQoZ3JvdXBzWzNdLCAxMCkgJiAyNTUpXG4gICAgfTtcbn1cbmV4cG9ydHMucGFyc2VQYXN2UmVzcG9uc2UgPSBwYXJzZVBhc3ZSZXNwb25zZTtcbmZ1bmN0aW9uIGNvbm5lY3RGb3JQYXNzaXZlVHJhbnNmZXIoaG9zdCwgcG9ydCwgZnRwKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlQ29ubkVyciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID0gXCJDYW4ndCBvcGVuIGRhdGEgY29ubmVjdGlvbiBpbiBwYXNzaXZlIG1vZGU6IFwiICsgZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNvY2tldCA9IGZ0cC5fbmV3U29ja2V0KCk7XG4gICAgICAgIHNvY2tldC5vbihcImVycm9yXCIsIGhhbmRsZUNvbm5FcnIpO1xuICAgICAgICBzb2NrZXQuY29ubmVjdCh7IHBvcnQsIGhvc3QsIGZhbWlseTogZnRwLmlwRmFtaWx5IH0sICgpID0+IHtcbiAgICAgICAgICAgIGlmIChmdHAuc29ja2V0IGluc3RhbmNlb2YgdGxzXzEuVExTU29ja2V0KSB7XG4gICAgICAgICAgICAgICAgc29ja2V0ID0gdGxzXzEuY29ubmVjdChPYmplY3QuYXNzaWduKHt9LCBmdHAudGxzT3B0aW9ucywge1xuICAgICAgICAgICAgICAgICAgICBzb2NrZXQsXG4gICAgICAgICAgICAgICAgICAgIC8vIFJldXNlIHRoZSBUTFMgc2Vzc2lvbiBuZWdvdGlhdGVkIGVhcmxpZXIgd2hlbiB0aGUgY29udHJvbCBjb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhcyB1cGdyYWRlZC4gU2VydmVycyBleHBlY3QgdGhpcyBiZWNhdXNlIGl0IHByb3ZpZGVzIGFkZGl0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VjdXJpdHk6IElmIGEgY29tcGxldGVseSBuZXcgc2Vzc2lvbiB3b3VsZCBiZSBuZWdvdGlhdGVkLCBhIGhhY2tlclxuICAgICAgICAgICAgICAgICAgICAvLyBjb3VsZCBndWVzcyB0aGUgcG9ydCBhbmQgY29ubmVjdCB0byB0aGUgbmV3IGRhdGEgY29ubmVjdGlvbiBiZWZvcmUgd2UgZG9cbiAgICAgICAgICAgICAgICAgICAgLy8gYnkganVzdCBzdGFydGluZyBoaXMvaGVyIG93biBUTFMgc2Vzc2lvbi5cbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbjogZnRwLnNvY2tldC5nZXRTZXNzaW9uKClcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgLy8gSXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRyYW5zZmVyIHRhc2sgdG8gd2FpdCB1bnRpbCB0aGVcbiAgICAgICAgICAgICAgICAvLyBUTFMgc29ja2V0IGlzc3VlZCB0aGUgZXZlbnQgJ3NlY3VyZUNvbm5lY3QnLiBXZSBjYW4ndCBkbyB0aGlzXG4gICAgICAgICAgICAgICAgLy8gaGVyZSBiZWNhdXNlIHNvbWUgc2VydmVycyB3aWxsIHN0YXJ0IHVwZ3JhZGluZyBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAvLyBzcGVjaWZpYyB0cmFuc2ZlciByZXF1ZXN0IGhhcyBiZWVuIG1hZGUuIExpc3QgYW5kIGRvd25sb2FkIGRvbid0XG4gICAgICAgICAgICAgICAgLy8gaGF2ZSB0byB3YWl0IGZvciB0aGlzIGV2ZW50IGJlY2F1c2UgdGhlIHNlcnZlciBzZW5kcyB3aGVuZXZlciBpdFxuICAgICAgICAgICAgICAgIC8vIGlzIHJlYWR5LiBCdXQgZm9yIHVwbG9hZCB0aGlzIGhhcyB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQsXG4gICAgICAgICAgICAgICAgLy8gc2VlIHRoZSBkZXRhaWxzIGluIHRoZSB1cGxvYWQoKSBmdW5jdGlvbiBiZWxvdy5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIExldCB0aGUgRlRQQ29udGV4dCBsaXN0ZW4gdG8gZXJyb3JzIGZyb20gbm93IG9uLCByZW1vdmUgbG9jYWwgaGFuZGxlci5cbiAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIGhhbmRsZUNvbm5FcnIpO1xuICAgICAgICAgICAgZnRwLmRhdGFTb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jb25uZWN0Rm9yUGFzc2l2ZVRyYW5zZmVyID0gY29ubmVjdEZvclBhc3NpdmVUcmFuc2Zlcjtcbi8qKlxuICogSGVscHMgcmVzb2x2aW5nL3JlamVjdGluZyB0cmFuc2ZlcnMuXG4gKlxuICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgZm9yIGFsbCBGVFAgdHJhbnNmZXJzLiBGb3IgZXhhbXBsZSB3aGVuIGRvd25sb2FkaW5nLCB0aGUgc2VydmVyIG1pZ2h0IGNvbmZpcm1cbiAqIHdpdGggXCIyMjYgVHJhbnNmZXIgY29tcGxldGVcIiB3aGVuIGluIGZhY3QgdGhlIGRvd25sb2FkIG9uIHRoZSBkYXRhIGNvbm5lY3Rpb24gaGFzIG5vdCBmaW5pc2hlZFxuICogeWV0LiBXaXRoIGFsbCB0cmFuc2ZlcnMgd2UgbWFrZSBzdXJlIHRoYXQgYSkgdGhlIHJlc3VsdCBhcnJpdmVkIGFuZCBiKSBoYXMgYmVlbiBjb25maXJtZWQgYnlcbiAqIGUuZy4gdGhlIGNvbnRyb2wgY29ubmVjdGlvbi4gV2UganVzdCBkb24ndCBrbm93IGluIHdoaWNoIG9yZGVyIHRoaXMgd2lsbCBoYXBwZW4uXG4gKi9cbmNsYXNzIFRyYW5zZmVyUmVzb2x2ZXIge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlIGEgVHJhbnNmZXJSZXNvbHZlclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGZ0cCwgcHJvZ3Jlc3MpIHtcbiAgICAgICAgdGhpcy5mdHAgPSBmdHA7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5kYXRhVHJhbnNmZXJEb25lID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmsgdGhlIGJlZ2lubmluZyBvZiBhIHRyYW5zZmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSB0cmFuc2ZlciwgdXN1YWxseSB0aGUgZmlsZW5hbWUuXG4gICAgICogQHBhcmFtIHR5cGUgLSBUeXBlIG9mIHRyYW5zZmVyLCB1c3VhbGx5IFwidXBsb2FkXCIgb3IgXCJkb3dubG9hZFwiLlxuICAgICAqL1xuICAgIG9uRGF0YVN0YXJ0KG5hbWUsIHR5cGUpIHtcbiAgICAgICAgLy8gTGV0IHRoZSBkYXRhIHNvY2tldCBiZSBpbiBjaGFyZ2Ugb2YgdHJhY2tpbmcgdGltZW91dHMgZHVyaW5nIHRyYW5zZmVyLlxuICAgICAgICAvLyBUaGUgY29udHJvbCBzb2NrZXQgc2l0cyBpZGxlIGR1cmluZyB0aGlzIHRpbWUgYW55d2F5IGFuZCBtaWdodCBwcm92b2tlXG4gICAgICAgIC8vIGEgdGltZW91dCB1bm5lY2Vzc2FyaWx5LiBUaGUgY29udHJvbCBjb25uZWN0aW9uIHdpbGwgdGFrZSBjYXJlXG4gICAgICAgIC8vIG9mIHRpbWVvdXRzIGFnYWluIG9uY2UgZGF0YSB0cmFuc2ZlciBpcyBjb21wbGV0ZSBvciBmYWlsZWQuXG4gICAgICAgIGlmICh0aGlzLmZ0cC5kYXRhU29ja2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGEgdHJhbnNmZXIgc2hvdWxkIHN0YXJ0IGJ1dCB0aGVyZSBpcyBubyBkYXRhIGNvbm5lY3Rpb24uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnRwLnNvY2tldC5zZXRUaW1lb3V0KDApO1xuICAgICAgICB0aGlzLmZ0cC5kYXRhU29ja2V0LnNldFRpbWVvdXQodGhpcy5mdHAudGltZW91dCk7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3Muc3RhcnQodGhpcy5mdHAuZGF0YVNvY2tldCwgbmFtZSwgdHlwZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGNvbm5lY3Rpb24gaGFzIGZpbmlzaGVkIHRoZSB0cmFuc2Zlci5cbiAgICAgKi9cbiAgICBvbkRhdGFEb25lKHRhc2spIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzcy51cGRhdGVBbmRTdG9wKCk7XG4gICAgICAgIC8vIEhhbmQtb3ZlciB0aW1lb3V0IHRyYWNraW5nIGJhY2sgdG8gdGhlIGNvbnRyb2wgY29ubmVjdGlvbi4gSXQncyBwb3NzaWJsZSB0aGF0XG4gICAgICAgIC8vIHdlIGRvbid0IHJlY2VpdmUgdGhlIHJlc3BvbnNlIG92ZXIgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiB0aGF0IHRoZSB0cmFuc2ZlciBpc1xuICAgICAgICAvLyBkb25lLiBJbiB0aGlzIGNhc2UsIHdlIHdhbnQgdG8gY29ycmVjdGx5IGFzc29jaWF0ZSB0aGUgcmVzdWx0aW5nIHRpbWVvdXQgd2l0aFxuICAgICAgICAvLyB0aGUgY29udHJvbCBjb25uZWN0aW9uLlxuICAgICAgICB0aGlzLmZ0cC5zb2NrZXQuc2V0VGltZW91dCh0aGlzLmZ0cC50aW1lb3V0KTtcbiAgICAgICAgaWYgKHRoaXMuZnRwLmRhdGFTb2NrZXQpIHtcbiAgICAgICAgICAgIHRoaXMuZnRwLmRhdGFTb2NrZXQuc2V0VGltZW91dCgwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFUcmFuc2ZlckRvbmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnRyeVJlc29sdmUodGFzayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjb250cm9sIGNvbm5lY3Rpb24gcmVwb3J0cyB0aGUgdHJhbnNmZXIgYXMgZmluaXNoZWQuXG4gICAgICovXG4gICAgb25Db250cm9sRG9uZSh0YXNrLCByZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMudHJ5UmVzb2x2ZSh0YXNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQW4gZXJyb3IgaGFzIGJlZW4gcmVwb3J0ZWQgYW5kIHRoZSB0YXNrIHNob3VsZCBiZSByZWplY3RlZC5cbiAgICAgKi9cbiAgICBvbkVycm9yKHRhc2ssIGVycikge1xuICAgICAgICB0aGlzLnByb2dyZXNzLnVwZGF0ZUFuZFN0b3AoKTtcbiAgICAgICAgdGhpcy5mdHAuc29ja2V0LnNldFRpbWVvdXQodGhpcy5mdHAudGltZW91dCk7XG4gICAgICAgIHRoaXMuZnRwLmRhdGFTb2NrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRhc2sucmVqZWN0KGVycik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnRyb2wgY29ubmVjdGlvbiBzZW50IGFuIHVuZXhwZWN0ZWQgcmVxdWVzdCByZXF1aXJpbmcgYSByZXNwb25zZSBmcm9tIG91ciBwYXJ0LiBXZVxuICAgICAqIGNhbid0IHByb3ZpZGUgdGhhdCAoYmVjYXVzZSB1bmtub3duKSBhbmQgaGF2ZSB0byBjbG9zZSB0aGUgY29udHJleHQgd2l0aCBhbiBlcnJvciBiZWNhdXNlXG4gICAgICogdGhlIEZUUCBzZXJ2ZXIgaXMgbm93IGNhdWdodCB1cCBpbiBhIHN0YXRlIHdlIGNhbid0IHJlc29sdmUuXG4gICAgICovXG4gICAgb25VbmV4cGVjdGVkUmVxdWVzdChyZXNwb25zZSkge1xuICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgRlRQIHJlc3BvbnNlIGlzIHJlcXVlc3RpbmcgYW4gYW5zd2VyOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHRoaXMuZnRwLmNsb3NlV2l0aEVycm9yKGVycik7XG4gICAgfVxuICAgIHRyeVJlc29sdmUodGFzaykge1xuICAgICAgICAvLyBUbyByZXNvbHZlLCB3ZSBuZWVkIGJvdGggY29udHJvbCBhbmQgZGF0YSBjb25uZWN0aW9uIHRvIHJlcG9ydCB0aGF0IHRoZSB0cmFuc2ZlciBpcyBkb25lLlxuICAgICAgICBjb25zdCBjYW5SZXNvbHZlID0gdGhpcy5kYXRhVHJhbnNmZXJEb25lICYmIHRoaXMucmVzcG9uc2UgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNhblJlc29sdmUpIHtcbiAgICAgICAgICAgIHRoaXMuZnRwLmRhdGFTb2NrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0YXNrLnJlc29sdmUodGhpcy5yZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB1cGxvYWRGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgY29uc3QgcmVzb2x2ZXIgPSBuZXcgVHJhbnNmZXJSZXNvbHZlcihjb25maWcuZnRwLCBjb25maWcudHJhY2tlcik7XG4gICAgY29uc3QgZnVsbENvbW1hbmQgPSBgJHtjb25maWcuY29tbWFuZH0gJHtjb25maWcucmVtb3RlUGF0aH1gO1xuICAgIHJldHVybiBjb25maWcuZnRwLmhhbmRsZShmdWxsQ29tbWFuZCwgKHJlcywgdGFzaykgPT4ge1xuICAgICAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJlc29sdmVyLm9uRXJyb3IodGFzaywgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyZXMuY29kZSA9PT0gMTUwIHx8IHJlcy5jb2RlID09PSAxMjUpIHsgLy8gUmVhZHkgdG8gdXBsb2FkXG4gICAgICAgICAgICBjb25zdCBkYXRhU29ja2V0ID0gY29uZmlnLmZ0cC5kYXRhU29ja2V0O1xuICAgICAgICAgICAgaWYgKCFkYXRhU29ja2V0KSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZXIub25FcnJvcih0YXNrLCBuZXcgRXJyb3IoXCJVcGxvYWQgc2hvdWxkIGJlZ2luIGJ1dCBubyBkYXRhIGNvbm5lY3Rpb24gaXMgYXZhaWxhYmxlLlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHVzaW5nIFRMUywgd2UgaGF2ZSB0byB3YWl0IHVudGlsIHRoZSBkYXRhU29ja2V0IGlzc3VlZFxuICAgICAgICAgICAgLy8gJ3NlY3VyZUNvbm5lY3QnLiBJZiB0aGlzIGhhc24ndCBoYXBwZW5lZCB5ZXQsIGdldENpcGhlcigpIHJldHVybnMgdW5kZWZpbmVkLlxuICAgICAgICAgICAgY29uc3QgY2FuVXBsb2FkID0gXCJnZXRDaXBoZXJcIiBpbiBkYXRhU29ja2V0ID8gZGF0YVNvY2tldC5nZXRDaXBoZXIoKSAhPT0gdW5kZWZpbmVkIDogdHJ1ZTtcbiAgICAgICAgICAgIG9uQ29uZGl0aW9uT3JFdmVudChjYW5VcGxvYWQsIGRhdGFTb2NrZXQsIFwic2VjdXJlQ29ubmVjdFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmZ0cC5sb2coYFVwbG9hZGluZyB0byAke25ldFV0aWxzXzEuZGVzY3JpYmVBZGRyZXNzKGRhdGFTb2NrZXQpfSAoJHtuZXRVdGlsc18xLmRlc2NyaWJlVExTKGRhdGFTb2NrZXQpfSlgKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlci5vbkRhdGFTdGFydChjb25maWcucmVtb3RlUGF0aCwgY29uZmlnLnR5cGUpO1xuICAgICAgICAgICAgICAgIHNvdXJjZS5waXBlKGRhdGFTb2NrZXQpLm9uY2UoXCJmaW5pc2hcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU29ja2V0LmRlc3Ryb3koKTsgLy8gRXhwbGljaXRseSBjbG9zZS9kZXN0cm95IHRoZSBzb2NrZXQgdG8gc2lnbmFsIHRoZSBlbmQuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLm9uRGF0YURvbmUodGFzayk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJzZUNvbnRyb2xSZXNwb25zZV8xLnBvc2l0aXZlQ29tcGxldGlvbihyZXMuY29kZSkpIHsgLy8gVHJhbnNmZXIgY29tcGxldGVcbiAgICAgICAgICAgIHJlc29sdmVyLm9uQ29udHJvbERvbmUodGFzaywgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJzZUNvbnRyb2xSZXNwb25zZV8xLnBvc2l0aXZlSW50ZXJtZWRpYXRlKHJlcy5jb2RlKSkge1xuICAgICAgICAgICAgcmVzb2x2ZXIub25VbmV4cGVjdGVkUmVxdWVzdChyZXMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElnbm9yZSBhbGwgb3RoZXIgcG9zaXRpdmUgcHJlbGltaW5hcnkgcmVzcG9uc2UgY29kZXMgKDwgMjAwKVxuICAgIH0pO1xufVxuZXhwb3J0cy51cGxvYWRGcm9tID0gdXBsb2FkRnJvbTtcbmZ1bmN0aW9uIGRvd25sb2FkVG8oZGVzdGluYXRpb24sIGNvbmZpZykge1xuICAgIGlmICghY29uZmlnLmZ0cC5kYXRhU29ja2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvd25sb2FkIHdpbGwgYmUgaW5pdGlhdGVkIGJ1dCBubyBkYXRhIGNvbm5lY3Rpb24gaXMgYXZhaWxhYmxlLlwiKTtcbiAgICB9XG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGRhdGEgdHJhbnNtaXNzaW9uIGJlZ2lucyBiZWZvcmUgdGhlIGNvbnRyb2wgc29ja2V0XG4gICAgLy8gcmVjZWl2ZXMgdGhlIGFubm91bmNlbWVudC4gU3RhcnQgbGlzdGVuaW5nIGZvciBkYXRhIGltbWVkaWF0ZWx5LlxuICAgIGNvbmZpZy5mdHAuZGF0YVNvY2tldC5waXBlKGRlc3RpbmF0aW9uKTtcbiAgICBjb25zdCByZXNvbHZlciA9IG5ldyBUcmFuc2ZlclJlc29sdmVyKGNvbmZpZy5mdHAsIGNvbmZpZy50cmFja2VyKTtcbiAgICByZXR1cm4gY29uZmlnLmZ0cC5oYW5kbGUoY29uZmlnLmNvbW1hbmQsIChyZXMsIHRhc2spID0+IHtcbiAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXNvbHZlci5vbkVycm9yKHRhc2ssIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocmVzLmNvZGUgPT09IDE1MCB8fCByZXMuY29kZSA9PT0gMTI1KSB7IC8vIFJlYWR5IHRvIGRvd25sb2FkXG4gICAgICAgICAgICBjb25zdCBkYXRhU29ja2V0ID0gY29uZmlnLmZ0cC5kYXRhU29ja2V0O1xuICAgICAgICAgICAgaWYgKCFkYXRhU29ja2V0KSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZXIub25FcnJvcih0YXNrLCBuZXcgRXJyb3IoXCJEb3dubG9hZCBzaG91bGQgYmVnaW4gYnV0IG5vIGRhdGEgY29ubmVjdGlvbiBpcyBhdmFpbGFibGUuXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcuZnRwLmxvZyhgRG93bmxvYWRpbmcgZnJvbSAke25ldFV0aWxzXzEuZGVzY3JpYmVBZGRyZXNzKGRhdGFTb2NrZXQpfSAoJHtuZXRVdGlsc18xLmRlc2NyaWJlVExTKGRhdGFTb2NrZXQpfSlgKTtcbiAgICAgICAgICAgIHJlc29sdmVyLm9uRGF0YVN0YXJ0KGNvbmZpZy5yZW1vdGVQYXRoLCBjb25maWcudHlwZSk7XG4gICAgICAgICAgICBvbkNvbmRpdGlvbk9yRXZlbnQoaXNXcml0YWJsZUZpbmlzaGVkKGRlc3RpbmF0aW9uKSwgZGVzdGluYXRpb24sIFwiZmluaXNoXCIsICgpID0+IHJlc29sdmVyLm9uRGF0YURvbmUodGFzaykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJlcy5jb2RlID09PSAzNTApIHsgLy8gUmVzdGFydGluZyBhdCBzdGFydEF0LlxuICAgICAgICAgICAgY29uZmlnLmZ0cC5zZW5kKFwiUkVUUiBcIiArIGNvbmZpZy5yZW1vdGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJzZUNvbnRyb2xSZXNwb25zZV8xLnBvc2l0aXZlQ29tcGxldGlvbihyZXMuY29kZSkpIHsgLy8gVHJhbnNmZXIgY29tcGxldGVcbiAgICAgICAgICAgIHJlc29sdmVyLm9uQ29udHJvbERvbmUodGFzaywgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJzZUNvbnRyb2xSZXNwb25zZV8xLnBvc2l0aXZlSW50ZXJtZWRpYXRlKHJlcy5jb2RlKSkge1xuICAgICAgICAgICAgcmVzb2x2ZXIub25VbmV4cGVjdGVkUmVxdWVzdChyZXMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElnbm9yZSBhbGwgb3RoZXIgcG9zaXRpdmUgcHJlbGltaW5hcnkgcmVzcG9uc2UgY29kZXMgKDwgMjAwKVxuICAgIH0pO1xufVxuZXhwb3J0cy5kb3dubG9hZFRvID0gZG93bmxvYWRUbztcbi8qKlxuICogQ2FsbHMgYSBmdW5jdGlvbiBpbW1lZGlhdGVseSBpZiBhIGNvbmRpdGlvbiBpcyBtZXQgb3Igc3Vic2NyaWJlcyB0byBhbiBldmVudCBhbmQgY2FsbHNcbiAqIGl0IG9uY2UgdGhlIGV2ZW50IGlzIGVtaXR0ZWQuXG4gKlxuICogQHBhcmFtIGNvbmRpdGlvbiAgVGhlIGNvbmRpdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGVtaXR0ZXIgIFRoZSBlbWl0dGVyIHRvIHVzZSBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBAcGFyYW0gZXZlbnROYW1lICBUaGUgZXZlbnQgdG8gc3Vic2NyaWJlIHRvIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIEBwYXJhbSBhY3Rpb24gIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICovXG5mdW5jdGlvbiBvbkNvbmRpdGlvbk9yRXZlbnQoY29uZGl0aW9uLCBlbWl0dGVyLCBldmVudE5hbWUsIGFjdGlvbikge1xuICAgIGlmIChjb25kaXRpb24gPT09IHRydWUpIHtcbiAgICAgICAgYWN0aW9uKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBlbWl0dGVyLm9uY2UoZXZlbnROYW1lLCAoKSA9PiBhY3Rpb24oKSk7XG4gICAgfVxufVxuLyoqXG4gKiBEZXRlY3Qgd2hldGhlciBhIHdyaXRhYmxlIHN0cmVhbSBpcyBmaW5pc2hlZCwgc3VwcG9ydGluZyBOb2RlIDguXG4gKiBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzNlMmEzMDA3MTA3YjdhMTAwNzk0ZjRlNGFkYmRlMTkyNjNmYzc0NjQvbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcyNMMjgtTDMzXG4gKi9cbmZ1bmN0aW9uIGlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtLndyaXRhYmxlRmluaXNoZWQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgICBpZiAoIXdTdGF0ZSB8fCB3U3RhdGUuZXJyb3JlZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB3U3RhdGUuZmluaXNoZWQgfHwgKHdTdGF0ZS5lbmRlZCAmJiB3U3RhdGUubGVuZ3RoID09PSAwKTtcbn1cbiIsImltcG9ydCB7IEZpbGVJbmZvLCBGaWxlVHlwZSB9IGZyb20gJ2Jhc2ljLWZ0cCc7XG5cbmltcG9ydCB7IElGaWxlLCBJRmlsZVR5cGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuY29uc3QgTVNET1NfREFURV9SRUdFWCA9IC9bMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1bMC05XVxcc1swLTldWzAtOV1cXDpbMC05XVswLTldW1BBXU0vZ2k7XG5cbmV4cG9ydCBjbGFzcyBGdHBVdGlscyB7XG4gIC8qKlxuICAgKiBGb3JtYXRzIHJhdyBmaWxlIGluZm8uXG4gICAqIERvZXNuJ3QgaW5jbHVkZSBgbGFzdE1vZGlmaWVkYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0RmlsZShmaWxlOiBGaWxlSW5mbyk6IElGaWxlIHtcbiAgICBjb25zdCB7IHBlcm1pc3Npb25zLCBuYW1lLCBzaXplLCB1c2VyLCBncm91cCwgdHlwZSB9ID0gZmlsZTtcblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogdGhpcy5nZXRGaWxlVHlwZSh0eXBlKSxcbiAgICAgIHNpemUsXG4gICAgICBvd25lcjogdXNlcixcbiAgICAgIGdyb3VwLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgb3duZXI6IHBlcm1pc3Npb25zPy51c2VyLFxuICAgICAgICBncm91cDogcGVybWlzc2lvbnM/Lmdyb3VwLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRGaWxlVHlwZSh0eXBlOiBGaWxlVHlwZSk6IElGaWxlVHlwZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEZpbGVUeXBlLkRpcmVjdG9yeToge1xuICAgICAgICByZXR1cm4gJ2ZvbGRlcic7XG4gICAgICB9XG4gICAgICBjYXNlIEZpbGVUeXBlLkZpbGU6IHtcbiAgICAgICAgcmV0dXJuICdmaWxlJztcbiAgICAgIH1cbiAgICAgIGNhc2UgRmlsZVR5cGUuU3ltYm9saWNMaW5rOiB7XG4gICAgICAgIHJldHVybiAnc3ltYm9saWMtbGluayc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICd1bmtub3duJztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIG1zLWRvcyBkYXRlIGFuZCBKUyBkYXRlIG9iamVjdCBmb3JtYXRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRWYWxpZERhdGUoc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBkYXRlID0gc3RyLnRyaW0oKTtcblxuICAgIGNvbnN0IG1hdGNoID0gZGF0ZS5tYXRjaChNU0RPU19EQVRFX1JFR0VYKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCBbbW9udGgsIGRheSwgeWVhciwgX2hvdXIsIG1pbnV0ZXNdID0gZGF0ZS5tYXRjaCgvWzAtOV1bMC05XS9nKTtcblxuICAgIGxldCBob3VyID0gcGFyc2VJbnQoX2hvdXIpO1xuXG4gICAgaWYgKGRhdGVbZGF0ZS5sZW5ndGggLSAyXSA9PT0gJ1AnKSB7XG4gICAgICBob3VyICs9IDEyO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgIHBhcnNlSW50KGAyMCR7eWVhcn1gKSxcbiAgICAgIHBhcnNlSW50KG1vbnRoKSAtIDEsXG4gICAgICBwYXJzZUludChkYXkpLFxuICAgICAgaG91cixcbiAgICAgIHBhcnNlSW50KG1pbnV0ZXMpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldERhdGVGcm9tVW5peFRpbWUodGltZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRpbWUgKiAxMDAwKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgV3JpdGFibGUsIFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgU29ja2V0IH0gZnJvbSAnbmV0JztcbmltcG9ydCB7IENsaWVudCwgU0ZUUFdyYXBwZXIsIENsaWVudENoYW5uZWwgfSBmcm9tICdAb2x6aWUtMTIvc3NoMic7XG5pbXBvcnQgeyBTdGF0cywgRmlsZUVudHJ5IH0gZnJvbSAnQG9semllLTEyL3NzaDItc3RyZWFtcyc7XG5pbXBvcnQgeyBGaWxlSW5mbywgcGFyc2VMaXN0IH0gZnJvbSAnYmFzaWMtZnRwJztcblxuaW1wb3J0IHsgU3RyYXRlZ3kgfSBmcm9tICcuL3N0cmF0ZWd5JztcbmltcG9ydCB7XG4gIElGaWxlLFxuICBJVHJhbnNmZXJPcHRpb25zLFxuICBJRnRwQ29uZmlnLFxuICBJU0Z0cE9wdGlvbnMsXG4gIElUcmFuc2ZlckluZm8sXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRnRwVXRpbHMgfSBmcm9tICcuLi91dGlscy9mdHAnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgU2Z0cFN0cmF0ZWd5IHtcbiAgY29uZmlnOiBJRnRwQ29uZmlnO1xuICBvcHRpb25zOiBJU0Z0cE9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBTZnRwU3RyYXRlZ3kgZXh0ZW5kcyBTdHJhdGVneSB7XG4gIHByb3RlY3RlZCBjbGllbnQ6IENsaWVudDtcblxuICBwcm90ZWN0ZWQgd3JhcHBlcjogU0ZUUFdyYXBwZXI7XG5cbiAgcHVibGljIGNvbm5lY3RlZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBnZXQgc29ja2V0KCk6IFNvY2tldCB7XG4gICAgcmV0dXJuICh0aGlzLmNsaWVudCBhcyBhbnkpLl9zb2NrO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFdyYXBwZXIoKTogU0ZUUFdyYXBwZXIge1xuICAgIHJldHVybiBwcm9taXNpZnkodGhpcy5jbGllbnQuc2Z0cCkuYmluZCh0aGlzLmNsaWVudCkoKTtcbiAgfVxuXG4gIGNvbm5lY3QgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNsaWVudCA9IG5ldyBDbGllbnQoKTtcblxuICAgICAgY29uc3QgY2xlYW4gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICB0aGlzLmNsaWVudC5yZW1vdmVMaXN0ZW5lcigncmVhZHknLCBvblJlYWR5KTtcbiAgICAgICAgdGhpcy5jbGllbnQucmVtb3ZlTGlzdGVuZXIoXG4gICAgICAgICAgJ2tleWJvYXJkLWludGVyYWN0aXZlJyxcbiAgICAgICAgICB0aGlzLm9uS2V5Ym9hcmRJbnRlcmFjdGl2ZSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgICBjbGVhbigpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblJlYWR5ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjbGVhbigpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVyID0gYXdhaXQgdGhpcy5nZXRXcmFwcGVyKCk7XG4gICAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpO1xuXG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBjbGVhbigpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNsaWVudC5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgdGhpcy5jbGllbnQub25jZSgncmVhZHknLCBvblJlYWR5KTtcbiAgICAgIHRoaXMuY2xpZW50Lm9uY2UoJ2VuZCcsIHRoaXMub25EaXNjb25uZWN0KTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucz8udHJ5S2V5Ym9hcmQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQub25jZSgna2V5Ym9hcmQtaW50ZXJhY3RpdmUnLCB0aGlzLm9uS2V5Ym9hcmRJbnRlcmFjdGl2ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xpZW50LmNvbm5lY3Qoe1xuICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMuY29uZmlnLnVzZXIsXG4gICAgICAgIHJlYWR5VGltZW91dDogdGhpcy5vcHRpb25zPy50aW1lb3V0LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIG9uS2V5Ym9hcmRJbnRlcmFjdGl2ZSA9IChcbiAgICBuYW1lLFxuICAgIGluc3RydWN0aW9ucyxcbiAgICBpbnN0cnVjdGlvbnNMYW5nLFxuICAgIHByb21wdHMsXG4gICAgZmluaXNoLFxuICApID0+IHtcbiAgICBmaW5pc2goW3RoaXMuY29uZmlnLnBhc3N3b3JkXSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIG9uRGlzY29ubmVjdCA9ICgpID0+IHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5jbGllbnQgPSBudWxsO1xuICAgIHRoaXMud3JhcHBlciA9IG51bGw7XG5cbiAgICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3QnKTtcbiAgfTtcblxuICBkaXNjb25uZWN0ID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jbGllbnQuZW5kKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBkb3dubG9hZCA9IGFzeW5jIChcbiAgICBkZXN0OiBXcml0YWJsZSxcbiAgICBpbmZvOiBJVHJhbnNmZXJJbmZvLFxuICAgIG9wdGlvbnM/OiBJVHJhbnNmZXJPcHRpb25zLFxuICApID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLndyYXBwZXI/LmNyZWF0ZVJlYWRTdHJlYW0oaW5mby5yZW1vdGVQYXRoLCB7XG4gICAgICBzdGFydDogaW5mby5zdGFydEF0LFxuICAgICAgYXV0b0Nsb3NlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlVHJhbnNmZXIoc291cmNlLCBkZXN0LCBpbmZvLCBvcHRpb25zKTtcbiAgfTtcblxuICB1cGxvYWQgPSBhc3luYyAoXG4gICAgc291cmNlOiBSZWFkYWJsZSxcbiAgICBpbmZvOiBJVHJhbnNmZXJJbmZvLFxuICAgIG9wdGlvbnM/OiBJVHJhbnNmZXJPcHRpb25zLFxuICApID0+IHtcbiAgICBjb25zdCBkZXN0ID0gdGhpcy53cmFwcGVyPy5jcmVhdGVXcml0ZVN0cmVhbShpbmZvLnJlbW90ZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlVHJhbnNmZXIoc291cmNlLCBkZXN0LCBpbmZvLCBvcHRpb25zKTtcbiAgfTtcblxuICBsaXN0ID0gKHBhdGggPSAnLi8nKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3QocGF0aCkudGhlbigoZmlsZXMpID0+XG4gICAgICBmaWxlcz8ubWFwKChyKSA9PiB0aGlzLmZvcm1hdEZpbGUocGFyc2VMaXN0KHIubG9uZ25hbWUpWzBdLCByKSksXG4gICAgKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZm9ybWF0RmlsZSA9IChmaWxlOiBGaWxlSW5mbywgZW50cnk6IEZpbGVFbnRyeSk6IElGaWxlID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uRnRwVXRpbHMuZm9ybWF0RmlsZShmaWxlKSxcbiAgICAgIGxhc3RNb2RpZmllZDogRnRwVXRpbHMuZ2V0RGF0ZUZyb21Vbml4VGltZShlbnRyeS5hdHRycy5tdGltZSksXG4gICAgfTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgX2xpc3QocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlPEZpbGVFbnRyeVtdPih0aGlzLndyYXBwZXI/LnJlYWRkaXIsIHBhdGgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zdGF0KHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZTxTdGF0cz4odGhpcy53cmFwcGVyPy5zdGF0LCBwYXRoKTtcbiAgfVxuXG4gIHNpemUgPSAocGF0aCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0KHBhdGgpLnRoZW4oKHIpID0+IHI/LnNpemUpO1xuICB9O1xuXG4gIGV4aXN0cyA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fc3RhdChwYXRoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBtb3ZlID0gKHNvdXJjZSwgZGVzdCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZSh0aGlzLndyYXBwZXI/LnJlbmFtZSwgc291cmNlLCBkZXN0KTtcbiAgfTtcblxuICByZW1vdmVGaWxlID0gKHBhdGgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUodGhpcy53cmFwcGVyPy51bmxpbmssIHBhdGgpO1xuICB9O1xuXG4gIHJlbW92ZUVtcHR5Rm9sZGVyID0gKHBhdGgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUodGhpcy53cmFwcGVyPy5ybWRpciwgcGF0aCk7XG4gIH07XG5cbiAgcmVtb3ZlRm9sZGVyID0gYXN5bmMgKHBhdGgpID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMuX2xpc3QocGF0aCk7XG5cbiAgICBpZiAoZmlsZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoICsgJy8nICsgZmlsZS5maWxlbmFtZTtcblxuICAgICAgICBpZiAoKGZpbGUuYXR0cnMgYXMgYW55KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVGb2xkZXIoZmlsZVBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlRmlsZShmaWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJlbW92ZUVtcHR5Rm9sZGVyKHBhdGgpO1xuICB9O1xuXG4gIGNyZWF0ZUZvbGRlciA9IChwYXRoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlKHRoaXMud3JhcHBlcj8ubWtkaXIsIHBhdGgpO1xuICB9O1xuXG4gIGNyZWF0ZUVtcHR5RmlsZSA9IGFzeW5jIChwYXRoKSA9PiB7XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy5fb3BlbihwYXRoLCAndycpO1xuXG4gICAgaWYgKGJ1ZmZlcikge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2UoYnVmZmVyKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvdGVjdGVkIF9vcGVuKHBhdGg6IHN0cmluZywgbW9kZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlPEJ1ZmZlcj4odGhpcy53cmFwcGVyPy5vcGVuLCBwYXRoLCBtb2RlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfY2xvc2UoYnVmZmVyOiBCdWZmZXIpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUodGhpcy53cmFwcGVyPy5jbG9zZSwgYnVmZmVyKTtcbiAgfVxuXG4gIHB3ZCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGU8c3RyaW5nPih0aGlzLndyYXBwZXI/LnJlYWxwYXRoLCAnLi8nKTtcbiAgfTtcblxuICBzZW5kID0gYXN5bmMgKGNvbW1hbmQpID0+IHtcbiAgICBsZXQgc3RyZWFtOiBDbGllbnRDaGFubmVsO1xuICAgIGxldCBkYXRhID0gJyc7XG5cbiAgICBhd2FpdCB0aGlzLmhhbmRsZU5ldHdvcmsoXG4gICAgICAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50LmV4ZWMoY29tbWFuZCwgKGVyciwgc3RyZWFtKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuXG4gICAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgICAgIGRhdGEgKz0gY2h1bms7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsIHJlc29sdmUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgICBzdHJlYW0uY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGhhbmRsZSA9IDxUID0gdm9pZD4oZm46IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZU5ldHdvcms8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFmbikgcmV0dXJuIHJlc29sdmUobnVsbCk7XG5cbiAgICAgIGZuLmJpbmQodGhpcy53cmFwcGVyKSguLi5hcmdzLCAoZXJyLCAuLi5kYXRhKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgcmVzb2x2ZSguLi5kYXRhKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHByb3RlY3RlZCBoYW5kbGVUcmFuc2ZlciA9IChcbiAgICBzb3VyY2U6IFJlYWRhYmxlLFxuICAgIGRlc3Q6IFdyaXRhYmxlLFxuICAgIGluZm86IElUcmFuc2ZlckluZm8sXG4gICAgb3B0aW9uczogSVRyYW5zZmVyT3B0aW9ucyxcbiAgKSA9PiB7XG4gICAgaWYgKCFzb3VyY2UgfHwgIWRlc3QpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMucHJlcGFyZVRyYW5zZmVyKGluZm8sIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTmV0d29yayhcbiAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IGJ1ZmZlcmVkID0gMDtcblxuICAgICAgICBzb3VyY2Uub24oJ2RhdGEnLCAoY2h1bms6IEJ1ZmZlcikgPT4ge1xuICAgICAgICAgIGJ1ZmZlcmVkICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaGFuZGxlcihidWZmZXJlZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNvdXJjZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHNvdXJjZS5vbmNlKCdjbG9zZScsIHJlc29sdmUpO1xuXG4gICAgICAgIHNvdXJjZS5waXBlKGRlc3QpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgc291cmNlLnVucGlwZShkZXN0KTtcbiAgICAgICAgc291cmNlLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICB0aGlzLmZpbmlzaFRyYW5zZmVyKCk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG59XG4iLCJ2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgU29ja2V0ID0gcmVxdWlyZSgnbmV0JykuU29ja2V0O1xudmFyIGRuc0xvb2t1cCA9IHJlcXVpcmUoJ2RucycpLmxvb2t1cDtcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgSEFTSEVTID0gY3J5cHRvLmdldEhhc2hlcygpO1xuXG52YXIgc3NoMl9zdHJlYW1zID0gcmVxdWlyZSgnQG9semllLTEyL3NzaDItc3RyZWFtcycpO1xudmFyIFNTSDJTdHJlYW0gPSBzc2gyX3N0cmVhbXMuU1NIMlN0cmVhbTtcbnZhciBTRlRQU3RyZWFtID0gc3NoMl9zdHJlYW1zLlNGVFBTdHJlYW07XG52YXIgY29uc3RzID0gc3NoMl9zdHJlYW1zLmNvbnN0YW50cztcbnZhciBCVUdTID0gY29uc3RzLkJVR1M7XG52YXIgQUxHT1JJVEhNUyA9IGNvbnN0cy5BTEdPUklUSE1TO1xudmFyIEVERFNBX1NVUFBPUlRFRCA9IGNvbnN0cy5FRERTQV9TVVBQT1JURUQ7XG52YXIgcGFyc2VLZXkgPSBzc2gyX3N0cmVhbXMudXRpbHMucGFyc2VLZXk7XG5cbnZhciBIVFRQQWdlbnRzID0gcmVxdWlyZSgnLi9odHRwLWFnZW50cycpO1xudmFyIENoYW5uZWwgPSByZXF1aXJlKCcuL0NoYW5uZWwnKTtcbnZhciBhZ2VudFF1ZXJ5ID0gcmVxdWlyZSgnLi9hZ2VudCcpO1xudmFyIFNGVFBXcmFwcGVyID0gcmVxdWlyZSgnLi9TRlRQV3JhcHBlcicpO1xudmFyIHJlYWRVSW50MzJCRSA9IHJlcXVpcmUoJy4vYnVmZmVyLWhlbHBlcnMnKS5yZWFkVUludDMyQkU7XG5cbnZhciBNQVhfQ0hBTk5FTCA9IE1hdGgucG93KDIsIDMyKSAtIDE7XG52YXIgUkVfT1BFTlNTSCA9IC9eT3BlblNTSF8oPzooPyFbMC00XSlcXGQpfCg/OlxcZHsyLH0pLztcbnZhciBERUJVR19OT09QID0gZnVuY3Rpb24obXNnKSB7fTtcblxuZnVuY3Rpb24gQ2xpZW50KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2xpZW50KSlcbiAgICByZXR1cm4gbmV3IENsaWVudCgpO1xuXG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHRoaXMuY29uZmlnID0ge1xuICAgIGhvc3Q6IHVuZGVmaW5lZCxcbiAgICBwb3J0OiB1bmRlZmluZWQsXG4gICAgbG9jYWxBZGRyZXNzOiB1bmRlZmluZWQsXG4gICAgbG9jYWxQb3J0OiB1bmRlZmluZWQsXG4gICAgZm9yY2VJUHY0OiB1bmRlZmluZWQsXG4gICAgZm9yY2VJUHY2OiB1bmRlZmluZWQsXG4gICAga2VlcGFsaXZlQ291bnRNYXg6IHVuZGVmaW5lZCxcbiAgICBrZWVwYWxpdmVJbnRlcnZhbDogdW5kZWZpbmVkLFxuICAgIHJlYWR5VGltZW91dDogdW5kZWZpbmVkLFxuXG4gICAgdXNlcm5hbWU6IHVuZGVmaW5lZCxcbiAgICBwYXNzd29yZDogdW5kZWZpbmVkLFxuICAgIHByaXZhdGVLZXk6IHVuZGVmaW5lZCxcbiAgICB0cnlLZXlib2FyZDogdW5kZWZpbmVkLFxuICAgIGFnZW50OiB1bmRlZmluZWQsXG4gICAgYWxsb3dBZ2VudEZ3ZDogdW5kZWZpbmVkLFxuICAgIGF1dGhIYW5kbGVyOiB1bmRlZmluZWQsXG5cbiAgICBob3N0SGFzaEFsZ286IHVuZGVmaW5lZCxcbiAgICBob3N0SGFzaENiOiB1bmRlZmluZWQsXG4gICAgc3RyaWN0VmVuZG9yOiB1bmRlZmluZWQsXG4gICAgZGVidWc6IHVuZGVmaW5lZFxuICB9O1xuXG4gIHRoaXMuX3JlYWR5VGltZW91dCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fY2hhbm5lbHMgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fZm9yd2FyZGluZyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fZm9yd2FyZGluZ1VuaXggPSB1bmRlZmluZWQ7XG4gIHRoaXMuX2FjY2VwdFgxMSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fYWdlbnRGd2RFbmFibGVkID0gdW5kZWZpbmVkO1xuICB0aGlzLl9jdXJDaGFuID0gdW5kZWZpbmVkO1xuICB0aGlzLl9yZW1vdGVWZXIgPSB1bmRlZmluZWQ7XG5cbiAgdGhpcy5fc3Noc3RyZWFtID0gdW5kZWZpbmVkO1xuICB0aGlzLl9zb2NrID0gdW5kZWZpbmVkO1xuICB0aGlzLl9yZXNldEtBID0gdW5kZWZpbmVkO1xufVxuaW5oZXJpdHMoQ2xpZW50LCBFdmVudEVtaXR0ZXIpO1xuXG5DbGllbnQucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbihjZmcpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0aGlzLl9zb2NrICYmIHRoaXMuX3NvY2sud3JpdGFibGUpIHtcbiAgICB0aGlzLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmNvbm5lY3QoY2ZnKTtcbiAgICB9KTtcbiAgICB0aGlzLmVuZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuY29uZmlnLmhvc3QgPSBjZmcuaG9zdG5hbWUgfHwgY2ZnLmhvc3QgfHwgJ2xvY2FsaG9zdCc7XG4gIHRoaXMuY29uZmlnLnBvcnQgPSBjZmcucG9ydCB8fCAyMjtcbiAgdGhpcy5jb25maWcubG9jYWxBZGRyZXNzID0gKHR5cGVvZiBjZmcubG9jYWxBZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcubG9jYWxBZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIHRoaXMuY29uZmlnLmxvY2FsUG9ydCA9ICh0eXBlb2YgY2ZnLmxvY2FsUG9ydCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR5cGVvZiBjZmcubG9jYWxQb3J0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcubG9jYWxQb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIHRoaXMuY29uZmlnLmZvcmNlSVB2NCA9IGNmZy5mb3JjZUlQdjQgfHwgZmFsc2U7XG4gIHRoaXMuY29uZmlnLmZvcmNlSVB2NiA9IGNmZy5mb3JjZUlQdjYgfHwgZmFsc2U7XG4gIHRoaXMuY29uZmlnLmtlZXBhbGl2ZUNvdW50TWF4ID0gKHR5cGVvZiBjZmcua2VlcGFsaXZlQ291bnRNYXggPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNmZy5rZWVwYWxpdmVDb3VudE1heCA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2ZnLmtlZXBhbGl2ZUNvdW50TWF4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMyk7XG4gIHRoaXMuY29uZmlnLmtlZXBhbGl2ZUludGVydmFsID0gKHR5cGVvZiBjZmcua2VlcGFsaXZlSW50ZXJ2YWwgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNmZy5rZWVwYWxpdmVJbnRlcnZhbCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcua2VlcGFsaXZlSW50ZXJ2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwKTtcbiAgdGhpcy5jb25maWcucmVhZHlUaW1lb3V0ID0gKHR5cGVvZiBjZmcucmVhZHlUaW1lb3V0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2ZnLnJlYWR5VGltZW91dCA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNmZy5yZWFkeVRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMjAwMDApO1xuXG4gIHZhciBhbGdvcml0aG1zID0ge1xuICAgIGtleDogdW5kZWZpbmVkLFxuICAgIGtleEJ1ZjogdW5kZWZpbmVkLFxuICAgIGNpcGhlcjogdW5kZWZpbmVkLFxuICAgIGNpcGhlckJ1ZjogdW5kZWZpbmVkLFxuICAgIHNlcnZlckhvc3RLZXk6IHVuZGVmaW5lZCxcbiAgICBzZXJ2ZXJIb3N0S2V5QnVmOiB1bmRlZmluZWQsXG4gICAgaG1hYzogdW5kZWZpbmVkLFxuICAgIGhtYWNCdWY6IHVuZGVmaW5lZCxcbiAgICBjb21wcmVzczogdW5kZWZpbmVkLFxuICAgIGNvbXByZXNzQnVmOiB1bmRlZmluZWRcbiAgfTtcbiAgdmFyIGk7XG4gIGlmICh0eXBlb2YgY2ZnLmFsZ29yaXRobXMgPT09ICdvYmplY3QnICYmIGNmZy5hbGdvcml0aG1zICE9PSBudWxsKSB7XG4gICAgdmFyIGFsZ29zU3VwcG9ydGVkO1xuICAgIHZhciBhbGdvTGlzdDtcblxuICAgIGFsZ29MaXN0ID0gY2ZnLmFsZ29yaXRobXMua2V4O1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsZ29MaXN0KSAmJiBhbGdvTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBhbGdvc1N1cHBvcnRlZCA9IEFMR09SSVRITVMuU1VQUE9SVEVEX0tFWDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhbGdvTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoYWxnb3NTdXBwb3J0ZWQuaW5kZXhPZihhbGdvTGlzdFtpXSkgPT09IC0xKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQga2V5IGV4Y2hhbmdlIGFsZ29yaXRobTogJyArIGFsZ29MaXN0W2ldKTtcbiAgICAgIH1cbiAgICAgIGFsZ29yaXRobXMua2V4ID0gYWxnb0xpc3Q7XG4gICAgfVxuXG4gICAgYWxnb0xpc3QgPSBjZmcuYWxnb3JpdGhtcy5jaXBoZXI7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb0xpc3QpICYmIGFsZ29MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFsZ29zU3VwcG9ydGVkID0gQUxHT1JJVEhNUy5TVVBQT1JURURfQ0lQSEVSO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFsZ29MaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhbGdvc1N1cHBvcnRlZC5pbmRleE9mKGFsZ29MaXN0W2ldKSA9PT0gLTEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjaXBoZXIgYWxnb3JpdGhtOiAnICsgYWxnb0xpc3RbaV0pO1xuICAgICAgfVxuICAgICAgYWxnb3JpdGhtcy5jaXBoZXIgPSBhbGdvTGlzdDtcbiAgICB9XG5cbiAgICBhbGdvTGlzdCA9IGNmZy5hbGdvcml0aG1zLnNlcnZlckhvc3RLZXk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb0xpc3QpICYmIGFsZ29MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFsZ29zU3VwcG9ydGVkID0gQUxHT1JJVEhNUy5TVVBQT1JURURfU0VSVkVSX0hPU1RfS0VZO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFsZ29MaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhbGdvc1N1cHBvcnRlZC5pbmRleE9mKGFsZ29MaXN0W2ldKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHNlcnZlciBob3N0IGtleSBhbGdvcml0aG06ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYWxnb0xpc3RbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhbGdvcml0aG1zLnNlcnZlckhvc3RLZXkgPSBhbGdvTGlzdDtcbiAgICB9XG5cbiAgICBhbGdvTGlzdCA9IGNmZy5hbGdvcml0aG1zLmhtYWM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb0xpc3QpICYmIGFsZ29MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFsZ29zU3VwcG9ydGVkID0gQUxHT1JJVEhNUy5TVVBQT1JURURfSE1BQztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhbGdvTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoYWxnb3NTdXBwb3J0ZWQuaW5kZXhPZihhbGdvTGlzdFtpXSkgPT09IC0xKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgSE1BQyBhbGdvcml0aG06ICcgKyBhbGdvTGlzdFtpXSk7XG4gICAgICB9XG4gICAgICBhbGdvcml0aG1zLmhtYWMgPSBhbGdvTGlzdDtcbiAgICB9XG5cbiAgICBhbGdvTGlzdCA9IGNmZy5hbGdvcml0aG1zLmNvbXByZXNzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsZ29MaXN0KSAmJiBhbGdvTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBhbGdvc1N1cHBvcnRlZCA9IEFMR09SSVRITVMuU1VQUE9SVEVEX0NPTVBSRVNTO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFsZ29MaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhbGdvc1N1cHBvcnRlZC5pbmRleE9mKGFsZ29MaXN0W2ldKSA9PT0gLTEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjb21wcmVzc2lvbiBhbGdvcml0aG06ICcgKyBhbGdvTGlzdFtpXSk7XG4gICAgICB9XG4gICAgICBhbGdvcml0aG1zLmNvbXByZXNzID0gYWxnb0xpc3Q7XG4gICAgfVxuICB9XG4gIGlmIChhbGdvcml0aG1zLmNvbXByZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoY2ZnLmNvbXByZXNzKSB7XG4gICAgICBhbGdvcml0aG1zLmNvbXByZXNzID0gWyd6bGliQG9wZW5zc2guY29tJywgJ3psaWInXTtcbiAgICAgIGlmIChjZmcuY29tcHJlc3MgIT09ICdmb3JjZScpXG4gICAgICAgIGFsZ29yaXRobXMuY29tcHJlc3MucHVzaCgnbm9uZScpO1xuICAgIH0gZWxzZSBpZiAoY2ZnLmNvbXByZXNzID09PSBmYWxzZSlcbiAgICAgIGFsZ29yaXRobXMuY29tcHJlc3MgPSBbJ25vbmUnXTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2ZnLnVzZXJuYW1lID09PSAnc3RyaW5nJylcbiAgICB0aGlzLmNvbmZpZy51c2VybmFtZSA9IGNmZy51c2VybmFtZTtcbiAgZWxzZSBpZiAodHlwZW9mIGNmZy51c2VyID09PSAnc3RyaW5nJylcbiAgICB0aGlzLmNvbmZpZy51c2VybmFtZSA9IGNmZy51c2VyO1xuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXJuYW1lJyk7XG5cbiAgdGhpcy5jb25maWcucGFzc3dvcmQgPSAodHlwZW9mIGNmZy5wYXNzd29yZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcucGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpO1xuICB0aGlzLmNvbmZpZy5wcml2YXRlS2V5ID0gKHR5cGVvZiBjZmcucHJpdmF0ZUtleSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBCdWZmZXIuaXNCdWZmZXIoY2ZnLnByaXZhdGVLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcucHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgdGhpcy5jb25maWcubG9jYWxIb3N0bmFtZSA9ICh0eXBlb2YgY2ZnLmxvY2FsSG9zdG5hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2ZnLmxvY2FsSG9zdG5hbWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcubG9jYWxIb3N0bmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgdGhpcy5jb25maWcubG9jYWxVc2VybmFtZSA9ICh0eXBlb2YgY2ZnLmxvY2FsVXNlcm5hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2ZnLmxvY2FsVXNlcm5hbWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcubG9jYWxVc2VybmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgdGhpcy5jb25maWcudHJ5S2V5Ym9hcmQgPSAoY2ZnLnRyeUtleWJvYXJkID09PSB0cnVlKTtcbiAgdGhpcy5jb25maWcuYWdlbnQgPSAodHlwZW9mIGNmZy5hZ2VudCA9PT0gJ3N0cmluZycgJiYgY2ZnLmFnZW50Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICA/IGNmZy5hZ2VudFxuICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIHRoaXMuY29uZmlnLmFsbG93QWdlbnRGd2QgPSAoY2ZnLmFnZW50Rm9yd2FyZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuY29uZmlnLmFnZW50ICE9PSB1bmRlZmluZWQpO1xuICB2YXIgYXV0aEhhbmRsZXIgPSB0aGlzLmNvbmZpZy5hdXRoSGFuZGxlciA9IChcbiAgICB0eXBlb2YgY2ZnLmF1dGhIYW5kbGVyID09PSAnZnVuY3Rpb24nID8gY2ZnLmF1dGhIYW5kbGVyIDogdW5kZWZpbmVkXG4gICk7XG5cbiAgdGhpcy5jb25maWcuc3RyaWN0VmVuZG9yID0gKHR5cGVvZiBjZmcuc3RyaWN0VmVuZG9yID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2ZnLnN0cmljdFZlbmRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlKTtcblxuICB2YXIgZGVidWcgPSB0aGlzLmNvbmZpZy5kZWJ1ZyA9ICh0eXBlb2YgY2ZnLmRlYnVnID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2ZnLmRlYnVnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogREVCVUdfTk9PUCk7XG5cbiAgaWYgKGNmZy5hZ2VudEZvcndhcmQgPT09IHRydWUgJiYgIXRoaXMuY29uZmlnLmFsbG93QWdlbnRGd2QpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzZXQgYSB2YWxpZCBhZ2VudCBwYXRoIHRvIGFsbG93IGFnZW50IGZvcndhcmRpbmcnKTtcblxuICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzID0gW107XG4gIHRoaXMuX2NoYW5uZWxzID0ge307XG4gIHRoaXMuX2ZvcndhcmRpbmcgPSB7fTtcbiAgdGhpcy5fZm9yd2FyZGluZ1VuaXggPSB7fTtcbiAgdGhpcy5fYWNjZXB0WDExID0gMDtcbiAgdGhpcy5fYWdlbnRGd2RFbmFibGVkID0gZmFsc2U7XG4gIHRoaXMuX2N1ckNoYW4gPSAtMTtcbiAgdGhpcy5fcmVtb3RlVmVyID0gdW5kZWZpbmVkO1xuICB2YXIgcHJpdmF0ZUtleTtcblxuICBpZiAodGhpcy5jb25maWcucHJpdmF0ZUtleSkge1xuICAgIHByaXZhdGVLZXkgPSBwYXJzZUtleSh0aGlzLmNvbmZpZy5wcml2YXRlS2V5LCBjZmcucGFzc3BocmFzZSk7XG4gICAgaWYgKHByaXZhdGVLZXkgaW5zdGFuY2VvZiBFcnJvcilcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIHByaXZhdGVLZXk6ICcgKyBwcml2YXRlS2V5Lm1lc3NhZ2UpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByaXZhdGVLZXkpKVxuICAgICAgcHJpdmF0ZUtleSA9IHByaXZhdGVLZXlbMF07IC8vIE9wZW5TU0gncyBuZXdlciBmb3JtYXQgb25seSBzdG9yZXMgMSBrZXkgZm9yIG5vd1xuICAgIGlmIChwcml2YXRlS2V5LmdldFByaXZhdGVQRU0oKSA9PT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJpdmF0ZUtleSB2YWx1ZSBkb2VzIG5vdCBjb250YWluIGEgKHZhbGlkKSBwcml2YXRlIGtleScpO1xuICB9XG5cbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3NzaHN0cmVhbSA9IG5ldyBTU0gyU3RyZWFtKHtcbiAgICBhbGdvcml0aG1zOiBhbGdvcml0aG1zLFxuICAgIGRlYnVnOiAoZGVidWcgPT09IERFQlVHX05PT1AgPyB1bmRlZmluZWQgOiBkZWJ1ZylcbiAgfSk7XG4gIHZhciBzb2NrID0gdGhpcy5fc29jayA9IChjZmcuc29jayB8fCBuZXcgU29ja2V0KCkpO1xuXG4gIC8vIGRyYWluIHN0ZGVyciBpZiB3ZSBhcmUgY29ubmVjdGlvbiBob3BwaW5nIHVzaW5nIGFuIGV4ZWMgc3RyZWFtXG4gIGlmICh0aGlzLl9zb2NrLnN0ZGVyciAmJiB0eXBlb2YgdGhpcy5fc29jay5zdGRlcnIucmVzdW1lID09PSAnZnVuY3Rpb24nKVxuICAgIHRoaXMuX3NvY2suc3RkZXJyLnJlc3VtZSgpO1xuXG4gIC8vIGtlZXBhbGl2ZS1yZWxhdGVkXG4gIHZhciBrYWludGVydmFsID0gdGhpcy5jb25maWcua2VlcGFsaXZlSW50ZXJ2YWw7XG4gIHZhciBrYWNvdW50bWF4ID0gdGhpcy5jb25maWcua2VlcGFsaXZlQ291bnRNYXg7XG4gIHZhciBrYWNvdW50ID0gMDtcbiAgdmFyIGthdGltZXI7XG4gIGZ1bmN0aW9uIHNlbmRLQSgpIHtcbiAgICBpZiAoKytrYWNvdW50ID4ga2Fjb3VudG1heCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChrYXRpbWVyKTtcbiAgICAgIGlmIChzb2NrLnJlYWRhYmxlKSB7XG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0tlZXBhbGl2ZSB0aW1lb3V0Jyk7XG4gICAgICAgIGVyci5sZXZlbCA9ICdjbGllbnQtdGltZW91dCc7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzb2NrLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNvY2sud3JpdGFibGUpIHtcbiAgICAgIC8vIGFwcGVuZCBkdW1teSBjYWxsYmFjayB0byBrZWVwIGNvcnJlY3QgY2FsbGJhY2sgb3JkZXJcbiAgICAgIGNhbGxiYWNrcy5wdXNoKHJlc2V0S0EpO1xuICAgICAgc3RyZWFtLnBpbmcoKTtcbiAgICB9IGVsc2VcbiAgICAgIGNsZWFySW50ZXJ2YWwoa2F0aW1lcik7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRLQSgpIHtcbiAgICBpZiAoa2FpbnRlcnZhbCA+IDApIHtcbiAgICAgIGthY291bnQgPSAwO1xuICAgICAgY2xlYXJJbnRlcnZhbChrYXRpbWVyKTtcbiAgICAgIGlmIChzb2NrLndyaXRhYmxlKVxuICAgICAgICBrYXRpbWVyID0gc2V0SW50ZXJ2YWwoc2VuZEtBLCBrYWludGVydmFsKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5fcmVzZXRLQSA9IHJlc2V0S0E7XG5cbiAgc3RyZWFtLm9uKCdVU0VSQVVUSF9CQU5ORVInLCBmdW5jdGlvbihtc2cpIHtcbiAgICBzZWxmLmVtaXQoJ2Jhbm5lcicsIG1zZyk7XG4gIH0pO1xuXG4gIHNvY2sub24oJ2Nvbm5lY3QnLCBmdW5jdGlvbigpIHtcbiAgICBkZWJ1ZygnREVCVUc6IENsaWVudDogQ29ubmVjdGVkJyk7XG4gICAgc2VsZi5lbWl0KCdjb25uZWN0Jyk7XG4gICAgaWYgKCFjZmcuc29jaylcbiAgICAgIHN0cmVhbS5waXBlKHNvY2spLnBpcGUoc3RyZWFtKTtcbiAgfSkub24oJ3RpbWVvdXQnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLmVtaXQoJ3RpbWVvdXQnKTtcbiAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgY2xlYXJUaW1lb3V0KHNlbGYuX3JlYWR5VGltZW91dCk7XG4gICAgZXJyLmxldmVsID0gJ2NsaWVudC1zb2NrZXQnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9KS5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgc3RyZWFtLnVucGlwZShzb2NrKTtcbiAgICBjbGVhclRpbWVvdXQoc2VsZi5fcmVhZHlUaW1lb3V0KTtcbiAgICBjbGVhckludGVydmFsKGthdGltZXIpO1xuICAgIHNlbGYuZW1pdCgnZW5kJyk7XG4gIH0pLm9uKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgIHN0cmVhbS51bnBpcGUoc29jayk7XG4gICAgY2xlYXJUaW1lb3V0KHNlbGYuX3JlYWR5VGltZW91dCk7XG4gICAgY2xlYXJJbnRlcnZhbChrYXRpbWVyKTtcbiAgICBzZWxmLmVtaXQoJ2Nsb3NlJyk7XG5cbiAgICAvLyBub3RpZnkgb3V0c3RhbmRpbmcgY2hhbm5lbCByZXF1ZXN0cyBvZiBkaXNjb25uZWN0aW9uIC4uLlxuICAgIHZhciBjYWxsYmFja3NfID0gY2FsbGJhY2tzO1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ05vIHJlc3BvbnNlIGZyb20gc2VydmVyJyk7XG4gICAgY2FsbGJhY2tzID0gc2VsZi5fY2FsbGJhY2tzID0gW107XG4gICAgZm9yIChpID0gMDsgaSA8IGNhbGxiYWNrc18ubGVuZ3RoOyArK2kpXG4gICAgICBjYWxsYmFja3NfW2ldKGVycik7XG5cbiAgICAvLyBzaW11bGF0ZSBlcnJvciBmb3IgYW55IGNoYW5uZWxzIHdhaXRpbmcgdG8gYmUgb3BlbmVkLiB0aGlzIGlzIHNhZmVcbiAgICAvLyBhZ2FpbnN0IHN1Y2Nlc3NmdWxseSBvcGVuZWQgY2hhbm5lbHMgYmVjYXVzZSB0aGUgc3VjY2VzcyBhbmQgZmFpbHVyZVxuICAgIC8vIGV2ZW50IGhhbmRsZXJzIGFyZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgd2hlbiBhIHN1Y2Nlc3MvZmFpbHVyZSByZXNwb25zZVxuICAgIC8vIGlzIHJlY2VpdmVkXG4gICAgdmFyIGNoYW5uZWxzID0gc2VsZi5fY2hhbm5lbHM7XG4gICAgdmFyIGNoYW5Ob3MgPSBPYmplY3Qua2V5cyhjaGFubmVscyk7XG4gICAgc2VsZi5fY2hhbm5lbHMgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgY2hhbk5vcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGV2MSA9IHN0cmVhbS5lbWl0KCdDSEFOTkVMX09QRU5fRkFJTFVSRTonICsgY2hhbk5vc1tpXSwgZXJyKTtcbiAgICAgIC8vIGVtaXR0aW5nIENIQU5ORUxfQ0xPU0Ugc2hvdWxkIGJlIHNhZmUgdG9vIGFuZCBzaG91bGQgaGVscCBmb3IgYW55XG4gICAgICAvLyBzcGVjaWFsIGNoYW5uZWxzIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBrZWVwIHRoZSBwcm9jZXNzIGFsaXZlLCBzdWNoXG4gICAgICAvLyBhcyBhZ2VudCBmb3J3YXJkaW5nIGNoYW5uZWxzIHdoaWNoIGhhdmUgb3BlbiB1bml4IHNvY2tldHMgLi4uXG4gICAgICB2YXIgZXYyID0gc3RyZWFtLmVtaXQoJ0NIQU5ORUxfQ0xPU0U6JyArIGNoYW5Ob3NbaV0pO1xuICAgICAgdmFyIGVhcmx5Q2I7XG4gICAgICBpZiAoIWV2MSAmJiAhZXYyICYmIChlYXJseUNiID0gY2hhbm5lbHNbY2hhbk5vc1tpXV0pXG4gICAgICAgICAgJiYgdHlwZW9mIGVhcmx5Q2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZWFybHlDYihlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHN0cmVhbS5vbignZHJhaW4nLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLmVtaXQoJ2RyYWluJyk7XG4gIH0pLm9uY2UoJ2hlYWRlcicsIGZ1bmN0aW9uKGhlYWRlcikge1xuICAgIHNlbGYuX3JlbW90ZVZlciA9IGhlYWRlci52ZXJzaW9ucy5zb2Z0d2FyZTtcbiAgICBpZiAoaGVhZGVyLmdyZWV0aW5nKVxuICAgICAgc2VsZi5lbWl0KCdncmVldGluZycsIGhlYWRlci5ncmVldGluZyk7XG4gIH0pLm9uKCdjb250aW51ZScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnY29udGludWUnKTtcbiAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgaWYgKGVyci5sZXZlbCA9PT0gdW5kZWZpbmVkKVxuICAgICAgZXJyLmxldmVsID0gJ3Byb3RvY29sJztcbiAgICBlbHNlIGlmIChlcnIubGV2ZWwgPT09ICdoYW5kc2hha2UnKVxuICAgICAgY2xlYXJUaW1lb3V0KHNlbGYuX3JlYWR5VGltZW91dCk7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gIH0pLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICBzb2NrLnJlc3VtZSgpO1xuICB9KTtcblxuICBpZiAodHlwZW9mIGNmZy5ob3N0VmVyaWZpZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoSEFTSEVTLmluZGV4T2YoY2ZnLmhvc3RIYXNoKSA9PT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaG9zdCBoYXNoIGFsZ29yaXRobTogJyArIGNmZy5ob3N0SGFzaCk7XG4gICAgdmFyIGhhc2hDYiA9IGNmZy5ob3N0VmVyaWZpZXI7XG4gICAgdmFyIGhhc2hlciA9IGNyeXB0by5jcmVhdGVIYXNoKGNmZy5ob3N0SGFzaCk7XG4gICAgc3RyZWFtLm9uY2UoJ2ZpbmdlcnByaW50JywgZnVuY3Rpb24oa2V5LCB2ZXJpZnkpIHtcbiAgICAgIGhhc2hlci51cGRhdGUoa2V5KTtcbiAgICAgIHZhciByZXQgPSBoYXNoQ2IoaGFzaGVyLmRpZ2VzdCgnaGV4JyksIHZlcmlmeSk7XG4gICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHZlcmlmeShyZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gYmVnaW4gYXV0aGVudGljYXRpb24gaGFuZGxpbmcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBjdXJBdXRoO1xuICB2YXIgY3VyUGFydGlhbCA9IG51bGw7XG4gIHZhciBjdXJBdXRoc0xlZnQgPSBudWxsO1xuICB2YXIgYWdlbnRLZXlzO1xuICB2YXIgYWdlbnRLZXlQb3MgPSAwO1xuICB2YXIgYXV0aHNBbGxvd2VkID0gWydub25lJ107XG4gIGlmICh0aGlzLmNvbmZpZy5wYXNzd29yZCAhPT0gdW5kZWZpbmVkKVxuICAgIGF1dGhzQWxsb3dlZC5wdXNoKCdwYXNzd29yZCcpO1xuICBpZiAocHJpdmF0ZUtleSAhPT0gdW5kZWZpbmVkKVxuICAgIGF1dGhzQWxsb3dlZC5wdXNoKCdwdWJsaWNrZXknKTtcbiAgaWYgKHRoaXMuY29uZmlnLmFnZW50ICE9PSB1bmRlZmluZWQpXG4gICAgYXV0aHNBbGxvd2VkLnB1c2goJ2FnZW50Jyk7XG4gIGlmICh0aGlzLmNvbmZpZy50cnlLZXlib2FyZClcbiAgICBhdXRoc0FsbG93ZWQucHVzaCgna2V5Ym9hcmQtaW50ZXJhY3RpdmUnKTtcbiAgaWYgKHByaXZhdGVLZXkgIT09IHVuZGVmaW5lZFxuICAgICAgJiYgdGhpcy5jb25maWcubG9jYWxIb3N0bmFtZSAhPT0gdW5kZWZpbmVkXG4gICAgICAmJiB0aGlzLmNvbmZpZy5sb2NhbFVzZXJuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBhdXRoc0FsbG93ZWQucHVzaCgnaG9zdGJhc2VkJyk7XG4gIH1cblxuICBpZiAoYXV0aEhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBhdXRoUG9zID0gMDtcbiAgICBhdXRoSGFuZGxlciA9IGZ1bmN0aW9uIGF1dGhIYW5kbGVyKGF1dGhzTGVmdCwgcGFydGlhbCwgY2IpIHtcbiAgICAgIGlmIChhdXRoUG9zID09PSBhdXRoc0FsbG93ZWQubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gYXV0aHNBbGxvd2VkW2F1dGhQb3MrK107XG4gICAgfTtcbiAgfVxuXG4gIHZhciBoYXNTZW50QXV0aCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkb05leHRBdXRoKGF1dGhOYW1lKSB7XG4gICAgaGFzU2VudEF1dGggPSB0cnVlO1xuICAgIGlmIChhdXRoTmFtZSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignVVNFUkFVVEhfRkFJTFVSRScsIG9uVVNFUkFVVEhfRkFJTFVSRSk7XG4gICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ1VTRVJBVVRIX1BLX09LJywgb25VU0VSQVVUSF9QS19PSyk7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdBbGwgY29uZmlndXJlZCBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGZhaWxlZCcpO1xuICAgICAgZXJyLmxldmVsID0gJ2NsaWVudC1hdXRoZW50aWNhdGlvbic7XG4gICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIGlmIChzdHJlYW0ud3JpdGFibGUpXG4gICAgICAgIHNlbGYuZW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhdXRoc0FsbG93ZWQuaW5kZXhPZihhdXRoTmFtZSkgPT09IC0xKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBtZXRob2Qgbm90IGFsbG93ZWQ6ICcgKyBhdXRoTmFtZSk7XG4gICAgY3VyQXV0aCA9IGF1dGhOYW1lO1xuICAgIHN3aXRjaCAoY3VyQXV0aCkge1xuICAgICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgICBzdHJlYW0uYXV0aFBhc3N3b3JkKHNlbGYuY29uZmlnLnVzZXJuYW1lLCBzZWxmLmNvbmZpZy5wYXNzd29yZCk7XG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3B1YmxpY2tleSc6XG4gICAgICAgIHN0cmVhbS5hdXRoUEsoc2VsZi5jb25maWcudXNlcm5hbWUsIHByaXZhdGVLZXkpO1xuICAgICAgICBzdHJlYW0ub25jZSgnVVNFUkFVVEhfUEtfT0snLCBvblVTRVJBVVRIX1BLX09LKTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaG9zdGJhc2VkJzpcbiAgICAgICAgZnVuY3Rpb24gaG9zdGJhc2VkQ2IoYnVmLCBjYikge1xuICAgICAgICAgIHZhciBzaWduYXR1cmUgPSBwcml2YXRlS2V5LnNpZ24oYnVmKTtcbiAgICAgICAgICBpZiAoc2lnbmF0dXJlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHNpZ25hdHVyZS5tZXNzYWdlID0gJ0Vycm9yIHdoaWxlIHNpZ25pbmcgZGF0YSB3aXRoIHByaXZhdGVLZXk6ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzaWduYXR1cmUubWVzc2FnZTtcbiAgICAgICAgICAgIHNpZ25hdHVyZS5sZXZlbCA9ICdjbGllbnQtYXV0aGVudGljYXRpb24nO1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIHNpZ25hdHVyZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ5TmV4dEF1dGgoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYihzaWduYXR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbS5hdXRoSG9zdGJhc2VkKHNlbGYuY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5sb2NhbEhvc3RuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5sb2NhbFVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0YmFzZWRDYik7XG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FnZW50JzpcbiAgICAgICAgYWdlbnRRdWVyeShzZWxmLmNvbmZpZy5hZ2VudCwgZnVuY3Rpb24oZXJyLCBrZXlzKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgZXJyLmxldmVsID0gJ2FnZW50JztcbiAgICAgICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgICAgYWdlbnRLZXlzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHRyeU5leHRBdXRoKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVidWcoJ0RFQlVHOiBBZ2VudDogTm8ga2V5cyBzdG9yZWQgaW4gYWdlbnQnKTtcbiAgICAgICAgICAgIGFnZW50S2V5cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiB0cnlOZXh0QXV0aCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFnZW50S2V5cyA9IGtleXM7XG4gICAgICAgICAgYWdlbnRLZXlQb3MgPSAwO1xuXG4gICAgICAgICAgc3RyZWFtLmF1dGhQSyhzZWxmLmNvbmZpZy51c2VybmFtZSwga2V5c1swXSk7XG4gICAgICAgICAgc3RyZWFtLm9uY2UoJ1VTRVJBVVRIX1BLX09LJywgb25VU0VSQVVUSF9QS19PSyk7XG4gICAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdrZXlib2FyZC1pbnRlcmFjdGl2ZSc6XG4gICAgICAgIHN0cmVhbS5hdXRoS2V5Ym9hcmQoc2VsZi5jb25maWcudXNlcm5hbWUpO1xuICAgICAgICBzdHJlYW0ub24oJ1VTRVJBVVRIX0lORk9fUkVRVUVTVCcsIG9uVVNFUkFVVEhfSU5GT19SRVFVRVNUKTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHN0cmVhbS5hdXRoTm9uZShzZWxmLmNvbmZpZy51c2VybmFtZSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdHJ5TmV4dEF1dGgoKSB7XG4gICAgaGFzU2VudEF1dGggPSBmYWxzZTtcbiAgICB2YXIgYXV0aCA9IGF1dGhIYW5kbGVyKGN1ckF1dGhzTGVmdCwgY3VyUGFydGlhbCwgZG9OZXh0QXV0aCk7XG4gICAgaWYgKGhhc1NlbnRBdXRoIHx8IGF1dGggPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybjtcbiAgICBkb05leHRBdXRoKGF1dGgpO1xuICB9XG4gIGZ1bmN0aW9uIHRyeU5leHRBZ2VudEtleSgpIHtcbiAgICBpZiAoY3VyQXV0aCA9PT0gJ2FnZW50Jykge1xuICAgICAgaWYgKGFnZW50S2V5UG9zID49IGFnZW50S2V5cy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICgrK2FnZW50S2V5UG9zID49IGFnZW50S2V5cy5sZW5ndGgpIHtcbiAgICAgICAgZGVidWcoJ0RFQlVHOiBBZ2VudDogTm8gbW9yZSBrZXlzIGxlZnQgdG8gdHJ5Jyk7XG4gICAgICAgIGRlYnVnKCdERUJVRzogQ2xpZW50OiBhZ2VudCBhdXRoIGZhaWxlZCcpO1xuICAgICAgICBhZ2VudEtleXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeU5leHRBdXRoKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnREVCVUc6IEFnZW50OiBUcnlpbmcga2V5ICMnICsgKGFnZW50S2V5UG9zICsgMSkpO1xuICAgICAgICBzdHJlYW0uYXV0aFBLKHNlbGYuY29uZmlnLnVzZXJuYW1lLCBhZ2VudEtleXNbYWdlbnRLZXlQb3NdKTtcbiAgICAgICAgc3RyZWFtLm9uY2UoJ1VTRVJBVVRIX1BLX09LJywgb25VU0VSQVVUSF9QS19PSyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIG9uVVNFUkFVVEhfSU5GT19SRVFVRVNUKG5hbWUsIGluc3RydWN0aW9ucywgbGFuZywgcHJvbXB0cykge1xuICAgIHZhciBucHJvbXB0cyA9IChBcnJheS5pc0FycmF5KHByb21wdHMpID8gcHJvbXB0cy5sZW5ndGggOiAwKTtcbiAgICBpZiAobnByb21wdHMgPT09IDApIHtcbiAgICAgIGRlYnVnKCdERUJVRzogQ2xpZW50OiBTZW5kaW5nIGF1dG9tYXRpYyBVU0VSQVVUSF9JTkZPX1JFU1BPTlNFJyk7XG4gICAgICByZXR1cm4gc3RyZWFtLmF1dGhJbmZvUmVzKCk7XG4gICAgfVxuICAgIC8vIHdlIHNlbnQgYSBrZXlib2FyZC1pbnRlcmFjdGl2ZSB1c2VyIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgYW5kIG5vdyB0aGVcbiAgICAvLyBzZXJ2ZXIgaXMgc2VuZGluZyB1cyB0aGUgcHJvbXB0cyB3ZSBuZWVkIHRvIHByZXNlbnQgdG8gdGhlIHVzZXJcbiAgICBzZWxmLmVtaXQoJ2tleWJvYXJkLWludGVyYWN0aXZlJyxcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgICBwcm9tcHRzLFxuICAgICAgICAgICAgICBmdW5jdGlvbihhbnN3ZXJzKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLmF1dGhJbmZvUmVzKGFuc3dlcnMpO1xuICAgICAgICAgICAgICB9XG4gICAgKTtcbiAgfVxuICBmdW5jdGlvbiBvblVTRVJBVVRIX1BLX09LKCkge1xuICAgIGlmIChjdXJBdXRoID09PSAnYWdlbnQnKSB7XG4gICAgICB2YXIgYWdlbnRLZXkgPSBhZ2VudEtleXNbYWdlbnRLZXlQb3NdO1xuICAgICAgdmFyIGtleUxlbiA9IHJlYWRVSW50MzJCRShhZ2VudEtleSwgMCk7XG4gICAgICB2YXIgcHViS2V5RnVsbFR5cGUgPSBhZ2VudEtleS50b1N0cmluZygnYXNjaWknLCA0LCA0ICsga2V5TGVuKTtcbiAgICAgIHZhciBwdWJLZXlUeXBlID0gcHViS2V5RnVsbFR5cGUuc2xpY2UoNCk7XG4gICAgICAvLyBDaGVjayB0aGF0IHdlIHN1cHBvcnQgdGhlIGtleSB0eXBlIGZpcnN0XG4gICAgICAvLyBUT0RPOiBtb3ZlIGtleSB0eXBlIGNoZWNraW5nIGxvZ2ljIHRvIHNzaDItc3RyZWFtc1xuICAgICAgc3dpdGNoIChwdWJLZXlGdWxsVHlwZSkge1xuICAgICAgICBjYXNlICdzc2gtcnNhJzpcbiAgICAgICAgY2FzZSAnc3NoLWRzcyc6XG4gICAgICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHAyNTYnOlxuICAgICAgICBjYXNlICdlY2RzYS1zaGEyLW5pc3RwMzg0JzpcbiAgICAgICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDUyMSc6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKEVERFNBX1NVUFBPUlRFRCAmJiBwdWJLZXlGdWxsVHlwZSA9PT0gJ3NzaC1lZDI1NTE5JylcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlYnVnKCdERUJVRzogQWdlbnQ6IFNraXBwaW5nIHVuc3VwcG9ydGVkIGtleSB0eXBlOiAnXG4gICAgICAgICAgICAgICAgKyBwdWJLZXlGdWxsVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIHRyeU5leHRBZ2VudEtleSgpO1xuICAgICAgfVxuICAgICAgc3RyZWFtLmF1dGhQSyhzZWxmLmNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRLZXksXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGJ1ZiwgY2IpIHtcbiAgICAgICAgYWdlbnRRdWVyeShzZWxmLmNvbmZpZy5hZ2VudCxcbiAgICAgICAgICAgICAgICAgICBhZ2VudEtleSxcbiAgICAgICAgICAgICAgICAgICBwdWJLZXlUeXBlLFxuICAgICAgICAgICAgICAgICAgIGJ1ZixcbiAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnIsIHNpZ25lZCkge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGVyci5sZXZlbCA9ICdhZ2VudCc7XG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHNpZ0Z1bGxUeXBlTGVuID0gcmVhZFVJbnQzMkJFKHNpZ25lZCwgMCk7XG4gICAgICAgICAgICBpZiAoNCArIHNpZ0Z1bGxUeXBlTGVuICsgNCA8IHNpZ25lZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdmFyIHNpZ0Z1bGxUeXBlID0gc2lnbmVkLnRvU3RyaW5nKCdhc2NpaScsIDQsIDQgKyBzaWdGdWxsVHlwZUxlbik7XG4gICAgICAgICAgICAgIGlmIChzaWdGdWxsVHlwZSAhPT0gcHViS2V5RnVsbFR5cGUpIHtcbiAgICAgICAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IoJ0FnZW50IGtleS9zaWduYXR1cmUgdHlwZSBtaXNtYXRjaCcpO1xuICAgICAgICAgICAgICAgIGVyci5sZXZlbCA9ICdhZ2VudCc7XG4gICAgICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc2tpcCBhbGdvTGVuICsgYWxnbyArIHNpZ0xlblxuICAgICAgICAgICAgICAgIHJldHVybiBjYihzaWduZWQuc2xpY2UoNCArIHNpZ0Z1bGxUeXBlTGVuICsgNCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5TmV4dEFnZW50S2V5KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjdXJBdXRoID09PSAncHVibGlja2V5Jykge1xuICAgICAgc3RyZWFtLmF1dGhQSyhzZWxmLmNvbmZpZy51c2VybmFtZSwgcHJpdmF0ZUtleSwgZnVuY3Rpb24oYnVmLCBjYikge1xuICAgICAgICB2YXIgc2lnbmF0dXJlID0gcHJpdmF0ZUtleS5zaWduKGJ1Zik7XG4gICAgICAgIGlmIChzaWduYXR1cmUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHNpZ25hdHVyZS5tZXNzYWdlID0gJ0Vycm9yIHdoaWxlIHNpZ25pbmcgZGF0YSB3aXRoIHByaXZhdGVLZXk6ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc2lnbmF0dXJlLm1lc3NhZ2U7XG4gICAgICAgICAgc2lnbmF0dXJlLmxldmVsID0gJ2NsaWVudC1hdXRoZW50aWNhdGlvbic7XG4gICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIHNpZ25hdHVyZSk7XG4gICAgICAgICAgcmV0dXJuIHRyeU5leHRBdXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2Ioc2lnbmF0dXJlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvblVTRVJBVVRIX0ZBSUxVUkUoYXV0aHNMZWZ0LCBwYXJ0aWFsKSB7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdVU0VSQVVUSF9QS19PSycsIG9uVVNFUkFVVEhfUEtfT0spO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignVVNFUkFVVEhfSU5GT19SRVFVRVNUJywgb25VU0VSQVVUSF9JTkZPX1JFUVVFU1QpO1xuICAgIGlmIChjdXJBdXRoID09PSAnYWdlbnQnKSB7XG4gICAgICBkZWJ1ZygnREVCVUc6IENsaWVudDogQWdlbnQga2V5ICMnICsgKGFnZW50S2V5UG9zICsgMSkgKyAnIGZhaWxlZCcpO1xuICAgICAgcmV0dXJuIHRyeU5leHRBZ2VudEtleSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZygnREVCVUc6IENsaWVudDogJyArIGN1ckF1dGggKyAnIGF1dGggZmFpbGVkJyk7XG4gICAgfVxuXG4gICAgY3VyUGFydGlhbCA9IHBhcnRpYWw7XG4gICAgY3VyQXV0aHNMZWZ0ID0gYXV0aHNMZWZ0O1xuICAgIHRyeU5leHRBdXRoKCk7XG4gIH1cbiAgc3RyZWFtLm9uY2UoJ1VTRVJBVVRIX1NVQ0NFU1MnLCBmdW5jdGlvbigpIHtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ1VTRVJBVVRIX0ZBSUxVUkUnLCBvblVTRVJBVVRIX0ZBSUxVUkUpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignVVNFUkFVVEhfSU5GT19SRVFVRVNUJywgb25VU0VSQVVUSF9JTkZPX1JFUVVFU1QpO1xuXG4gICAgLy8gc3RhcnQga2VlcGFsaXZlIG1lY2hhbmlzbVxuICAgIHJlc2V0S0EoKTtcblxuICAgIGNsZWFyVGltZW91dChzZWxmLl9yZWFkeVRpbWVvdXQpO1xuXG4gICAgc2VsZi5lbWl0KCdyZWFkeScpO1xuICB9KS5vbignVVNFUkFVVEhfRkFJTFVSRScsIG9uVVNFUkFVVEhfRkFJTFVSRSk7XG4gIC8vIGVuZCBhdXRoZW50aWNhdGlvbiBoYW5kbGluZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIGhhbmRsZSBpbml0aWFsIGhhbmRzaGFrZSBjb21wbGV0aW9uXG4gIHN0cmVhbS5vbmNlKCdyZWFkeScsIGZ1bmN0aW9uKCkge1xuICAgIHN0cmVhbS5zZXJ2aWNlKCdzc2gtdXNlcmF1dGgnKTtcbiAgICBzdHJlYW0ub25jZSgnU0VSVklDRV9BQ0NFUFQnLCBmdW5jdGlvbihzdmNOYW1lKSB7XG4gICAgICBpZiAoc3ZjTmFtZSA9PT0gJ3NzaC11c2VyYXV0aCcpXG4gICAgICAgIHRyeU5leHRBdXRoKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGhhbmRsZSBpbmNvbWluZyByZXF1ZXN0cyBmcm9tIHNlcnZlciwgdHlwaWNhbGx5IGEgZm9yd2FyZGVkIFRDUCBvciBYMTFcbiAgLy8gY29ubmVjdGlvblxuICBzdHJlYW0ub24oJ0NIQU5ORUxfT1BFTicsIGZ1bmN0aW9uKGluZm8pIHtcbiAgICBvbkNIQU5ORUxfT1BFTihzZWxmLCBpbmZvKTtcbiAgfSk7XG5cbiAgLy8gaGFuZGxlIHJlc3BvbnNlcyBmb3IgdGNwaXAtZm9yd2FyZCBhbmQgb3RoZXIgZ2xvYmFsIHJlcXVlc3RzXG4gIHN0cmVhbS5vbignUkVRVUVTVF9TVUNDRVNTJywgZnVuY3Rpb24oZGF0YSkge1xuICAgIGlmIChjYWxsYmFja3MubGVuZ3RoKVxuICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkoZmFsc2UsIGRhdGEpO1xuICB9KS5vbignUkVRVUVTVF9GQUlMVVJFJywgZnVuY3Rpb24oKSB7XG4gICAgaWYgKGNhbGxiYWNrcy5sZW5ndGgpXG4gICAgICBjYWxsYmFja3Muc2hpZnQoKSh0cnVlKTtcbiAgfSk7XG5cbiAgc3RyZWFtLm9uKCdHTE9CQUxfUkVRVUVTVCcsIGZ1bmN0aW9uKG5hbWUsIHdhbnRSZXBseSwgZGF0YSkge1xuICAgIC8vIGF1dG8tcmVqZWN0IGFsbCBnbG9iYWwgcmVxdWVzdHMsIHRoaXMgY2FuIGJlIGVzcGVjaWFsbHkgdXNlZnVsIGlmIHRoZVxuICAgIC8vIHNlcnZlciBpcyBzZW5kaW5nIHVzIGR1bW15IGtlZXBhbGl2ZSBnbG9iYWwgcmVxdWVzdHNcbiAgICBpZiAod2FudFJlcGx5KVxuICAgICAgc3RyZWFtLnJlcXVlc3RGYWlsdXJlKCk7XG4gIH0pO1xuXG4gIGlmICghY2ZnLnNvY2spIHtcbiAgICB2YXIgaG9zdCA9IHRoaXMuY29uZmlnLmhvc3Q7XG4gICAgdmFyIGZvcmNlSVB2NCA9IHRoaXMuY29uZmlnLmZvcmNlSVB2NDtcbiAgICB2YXIgZm9yY2VJUHY2ID0gdGhpcy5jb25maWcuZm9yY2VJUHY2O1xuXG4gICAgZGVidWcoJ0RFQlVHOiBDbGllbnQ6IFRyeWluZyAnXG4gICAgICAgICAgKyBob3N0XG4gICAgICAgICAgKyAnIG9uIHBvcnQgJ1xuICAgICAgICAgICsgdGhpcy5jb25maWcucG9ydFxuICAgICAgICAgICsgJyAuLi4nKTtcblxuICAgIGZ1bmN0aW9uIGRvQ29ubmVjdCgpIHtcbiAgICAgIHN0YXJ0VGltZW91dCgpO1xuICAgICAgc2VsZi5fc29jay5jb25uZWN0KHtcbiAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgcG9ydDogc2VsZi5jb25maWcucG9ydCxcbiAgICAgICAgbG9jYWxBZGRyZXNzOiBzZWxmLmNvbmZpZy5sb2NhbEFkZHJlc3MsXG4gICAgICAgIGxvY2FsUG9ydDogc2VsZi5jb25maWcubG9jYWxQb3J0XG4gICAgICB9KTtcbiAgICAgIHNlbGYuX3NvY2suc2V0Tm9EZWxheSh0cnVlKTtcbiAgICAgIHNlbGYuX3NvY2suc2V0TWF4TGlzdGVuZXJzKDApO1xuICAgICAgc2VsZi5fc29jay5zZXRUaW1lb3V0KHR5cGVvZiBjZmcudGltZW91dCA9PT0gJ251bWJlcicgPyBjZmcudGltZW91dCA6IDApO1xuICAgIH1cblxuICAgIGlmICgoIWZvcmNlSVB2NCAmJiAhZm9yY2VJUHY2KSB8fCAoZm9yY2VJUHY0ICYmIGZvcmNlSVB2NikpXG4gICAgICBkb0Nvbm5lY3QoKTtcbiAgICBlbHNlIHtcbiAgICAgIGRuc0xvb2t1cChob3N0LCAoZm9yY2VJUHY0ID8gNCA6IDYpLCBmdW5jdGlvbihlcnIsIGFkZHJlc3MsIGZhbWlseSkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdFcnJvciB3aGlsZSBsb29raW5nIHVwICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoZm9yY2VJUHY0ID8gJ0lQdjQnIDogJ0lQdjYnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICcgYWRkcmVzcyBmb3IgaG9zdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaG9zdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICc6ICcgKyBlcnIpO1xuICAgICAgICAgIGNsZWFyVGltZW91dChzZWxmLl9yZWFkeVRpbWVvdXQpO1xuICAgICAgICAgIGVycm9yLmxldmVsID0gJ2NsaWVudC1kbnMnO1xuICAgICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBob3N0ID0gYWRkcmVzcztcbiAgICAgICAgZG9Db25uZWN0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRUaW1lb3V0KCk7XG4gICAgc3RyZWFtLnBpcGUoc29jaykucGlwZShzdHJlYW0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRUaW1lb3V0KCkge1xuICAgIGlmIChzZWxmLmNvbmZpZy5yZWFkeVRpbWVvdXQgPiAwKSB7XG4gICAgICBzZWxmLl9yZWFkeVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgaGFuZHNoYWtlJyk7XG4gICAgICAgIGVyci5sZXZlbCA9ICdjbGllbnQtdGltZW91dCc7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzb2NrLmRlc3Ryb3koKTtcbiAgICAgIH0sIHNlbGYuY29uZmlnLnJlYWR5VGltZW91dCk7XG4gICAgfVxuICB9XG59O1xuXG5DbGllbnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc29ja1xuICAgICAgJiYgdGhpcy5fc29jay53cml0YWJsZVxuICAgICAgJiYgdGhpcy5fc3Noc3RyZWFtXG4gICAgICAmJiB0aGlzLl9zc2hzdHJlYW0ud3JpdGFibGUpXG4gICAgcmV0dXJuIHRoaXMuX3NzaHN0cmVhbS5kaXNjb25uZWN0KCk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9zb2NrICYmIHRoaXMuX3NvY2suZGVzdHJveSgpO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24oY21kLCBvcHRzLCBjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBleHRyYU9wdHMgPSB7IGFsbG93SGFsZk9wZW46IChvcHRzLmFsbG93SGFsZk9wZW4gIT09IGZhbHNlKSB9O1xuXG4gIHJldHVybiBvcGVuQ2hhbm5lbCh0aGlzLCAnc2Vzc2lvbicsIGV4dHJhT3B0cywgZnVuY3Rpb24oZXJyLCBjaGFuKSB7XG4gICAgaWYgKGVycilcbiAgICAgIHJldHVybiBjYihlcnIpO1xuXG4gICAgdmFyIHRvZG8gPSBbXTtcblxuICAgIGZ1bmN0aW9uIHJlcUNiKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBjaGFuLmNsb3NlKCk7XG4gICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgfVxuICAgICAgaWYgKHRvZG8ubGVuZ3RoKVxuICAgICAgICB0b2RvLnNoaWZ0KCkoKTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dBZ2VudEZ3ZCA9PT0gdHJ1ZVxuICAgICAgICB8fCAob3B0c1xuICAgICAgICAgICAgJiYgb3B0cy5hZ2VudEZvcndhcmQgPT09IHRydWVcbiAgICAgICAgICAgICYmIHNlbGYuY29uZmlnLmFnZW50ICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICB0b2RvLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlcUFnZW50RndkKGNoYW4sIHJlcUNiKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgb3B0cyAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzLmVudiA9PT0gJ29iamVjdCcgJiYgb3B0cy5lbnYgIT09IG51bGwpXG4gICAgICAgIHJlcUVudihjaGFuLCBvcHRzLmVudik7XG4gICAgICBpZiAoKHR5cGVvZiBvcHRzLnB0eSA9PT0gJ29iamVjdCcgJiYgb3B0cy5wdHkgIT09IG51bGwpXG4gICAgICAgICAgfHwgb3B0cy5wdHkgPT09IHRydWUpIHtcbiAgICAgICAgdG9kby5wdXNoKGZ1bmN0aW9uKCkgeyByZXFQdHkoY2hhbiwgb3B0cy5wdHksIHJlcUNiKTsgfSk7XG4gICAgICB9XG4gICAgICBpZiAoKHR5cGVvZiBvcHRzLngxMSA9PT0gJ29iamVjdCcgJiYgb3B0cy54MTEgIT09IG51bGwpXG4gICAgICAgICAgfHwgb3B0cy54MTEgPT09ICdudW1iZXInXG4gICAgICAgICAgfHwgb3B0cy54MTEgPT09IHRydWUpIHtcbiAgICAgICAgdG9kby5wdXNoKGZ1bmN0aW9uKCkgeyByZXFYMTEoY2hhbiwgb3B0cy54MTEsIHJlcUNiKTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdG9kby5wdXNoKGZ1bmN0aW9uKCkgeyByZXFFeGVjKGNoYW4sIGNtZCwgb3B0cywgY2IpOyB9KTtcbiAgICB0b2RvLnNoaWZ0KCkoKTtcbiAgfSk7XG59O1xuXG5DbGllbnQucHJvdG90eXBlLnNoZWxsID0gZnVuY3Rpb24od25kb3B0cywgb3B0cywgY2IpIHtcbiAgaWYgKCF0aGlzLl9zb2NrXG4gICAgICB8fCAhdGhpcy5fc29jay53cml0YWJsZVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbS53cml0YWJsZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBjb25uZWN0ZWQnKTtcblxuICAvLyBzdGFydCBhbiBpbnRlcmFjdGl2ZSB0ZXJtaW5hbC9zaGVsbCBzZXNzaW9uXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAodHlwZW9mIHduZG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IHduZG9wdHM7XG4gICAgd25kb3B0cyA9IG9wdHMgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAod25kb3B0cyAmJiAod25kb3B0cy54MTEgIT09IHVuZGVmaW5lZCB8fCB3bmRvcHRzLmVudiAhPT0gdW5kZWZpbmVkKSkge1xuICAgIG9wdHMgPSB3bmRvcHRzO1xuICAgIHduZG9wdHMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gb3BlbkNoYW5uZWwodGhpcywgJ3Nlc3Npb24nLCBmdW5jdGlvbihlcnIsIGNoYW4pIHtcbiAgICBpZiAoZXJyKVxuICAgICAgcmV0dXJuIGNiKGVycik7XG5cbiAgICB2YXIgdG9kbyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gcmVxQ2IoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNoYW4uY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICB9XG4gICAgICBpZiAodG9kby5sZW5ndGgpXG4gICAgICAgIHRvZG8uc2hpZnQoKSgpO1xuICAgIH1cblxuICAgIGlmIChzZWxmLmNvbmZpZy5hbGxvd0FnZW50RndkID09PSB0cnVlXG4gICAgICAgIHx8IChvcHRzXG4gICAgICAgICAgICAmJiBvcHRzLmFnZW50Rm9yd2FyZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgJiYgc2VsZi5jb25maWcuYWdlbnQgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHRvZG8ucHVzaChmdW5jdGlvbigpIHsgcmVxQWdlbnRGd2QoY2hhbiwgcmVxQ2IpOyB9KTtcbiAgICB9XG5cbiAgICBpZiAod25kb3B0cyAhPT0gZmFsc2UpXG4gICAgICB0b2RvLnB1c2goZnVuY3Rpb24oKSB7IHJlcVB0eShjaGFuLCB3bmRvcHRzLCByZXFDYik7IH0pO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiBvcHRzICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMuZW52ID09PSAnb2JqZWN0JyAmJiBvcHRzLmVudiAhPT0gbnVsbClcbiAgICAgICAgcmVxRW52KGNoYW4sIG9wdHMuZW52KTtcbiAgICAgIGlmICgodHlwZW9mIG9wdHMueDExID09PSAnb2JqZWN0JyAmJiBvcHRzLngxMSAhPT0gbnVsbClcbiAgICAgICAgICB8fCBvcHRzLngxMSA9PT0gJ251bWJlcidcbiAgICAgICAgICB8fCBvcHRzLngxMSA9PT0gdHJ1ZSkge1xuICAgICAgICB0b2RvLnB1c2goZnVuY3Rpb24oKSB7IHJlcVgxMShjaGFuLCBvcHRzLngxMSwgcmVxQ2IpOyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0b2RvLnB1c2goZnVuY3Rpb24oKSB7IHJlcVNoZWxsKGNoYW4sIGNiKTsgfSk7XG4gICAgdG9kby5zaGlmdCgpKCk7XG4gIH0pO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS5zdWJzeXMgPSBmdW5jdGlvbihuYW1lLCBjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG5cdHJldHVybiBvcGVuQ2hhbm5lbCh0aGlzLCAnc2Vzc2lvbicsIGZ1bmN0aW9uKGVyciwgY2hhbikge1xuXHRcdGlmIChlcnIpXG5cdFx0XHRyZXR1cm4gY2IoZXJyKTtcblxuXHRcdHJlcVN1YnN5c3RlbShjaGFuLCBuYW1lLCBmdW5jdGlvbihlcnIsIHN0cmVhbSkge1xuXHRcdFx0aWYgKGVycilcblx0XHRcdFx0cmV0dXJuIGNiKGVycik7XG5cblx0XHRcdGNiKHVuZGVmaW5lZCwgc3RyZWFtKTtcblx0XHR9KTtcblx0fSk7XG59O1xuXG5DbGllbnQucHJvdG90eXBlLnNmdHAgPSBmdW5jdGlvbihjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBzdGFydCBhbiBTRlRQIHNlc3Npb25cbiAgcmV0dXJuIG9wZW5DaGFubmVsKHRoaXMsICdzZXNzaW9uJywgZnVuY3Rpb24oZXJyLCBjaGFuKSB7XG4gICAgaWYgKGVycilcbiAgICAgIHJldHVybiBjYihlcnIpO1xuXG4gICAgcmVxU3Vic3lzdGVtKGNoYW4sICdzZnRwJywgZnVuY3Rpb24oZXJyLCBzdHJlYW0pIHtcbiAgICAgIGlmIChlcnIpXG4gICAgICAgIHJldHVybiBjYihlcnIpO1xuXG4gICAgICB2YXIgc2VydmVySWRlbnRSYXcgPSBzZWxmLl9zc2hzdHJlYW0uX3N0YXRlLmluY29taW5nLmlkZW50UmF3O1xuICAgICAgdmFyIGNmZyA9IHsgZGVidWc6IHNlbGYuY29uZmlnLmRlYnVnIH07XG4gICAgICB2YXIgc2Z0cCA9IG5ldyBTRlRQU3RyZWFtKGNmZywgc2VydmVySWRlbnRSYXcpO1xuXG4gICAgICBmdW5jdGlvbiBvbkVycm9yKGVycikge1xuICAgICAgICBzZnRwLnJlbW92ZUxpc3RlbmVyKCdyZWFkeScsIG9uUmVhZHkpO1xuICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2V4aXQnLCBvbkV4aXQpO1xuICAgICAgICBjYihlcnIpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBvblJlYWR5KCkge1xuICAgICAgICBzZnRwLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2V4aXQnLCBvbkV4aXQpO1xuICAgICAgICBjYih1bmRlZmluZWQsIG5ldyBTRlRQV3JhcHBlcihzZnRwKSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG9uRXhpdChjb2RlLCBzaWduYWwpIHtcbiAgICAgICAgc2Z0cC5yZW1vdmVMaXN0ZW5lcigncmVhZHknLCBvblJlYWR5KTtcbiAgICAgICAgc2Z0cC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgdmFyIG1zZztcbiAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG1zZyA9ICdSZWNlaXZlZCBleGl0IGNvZGUgJ1xuICAgICAgICAgICAgICAgICsgY29kZVxuICAgICAgICAgICAgICAgICsgJyB3aGlsZSBlc3RhYmxpc2hpbmcgU0ZUUCBzZXNzaW9uJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtc2cgPSAnUmVjZWl2ZWQgc2lnbmFsICdcbiAgICAgICAgICAgICAgICArIHNpZ25hbFxuICAgICAgICAgICAgICAgICsgJyB3aGlsZSBlc3RhYmxpc2hpbmcgU0ZUUCBzZXNzaW9uJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIGVyci5jb2RlID0gY29kZTtcbiAgICAgICAgZXJyLnNpZ25hbCA9IHNpZ25hbDtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH1cblxuICAgICAgc2Z0cC5vbmNlKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICAgICAgLm9uY2UoJ3JlYWR5Jywgb25SZWFkeSlcbiAgICAgICAgICAub25jZSgnY2xvc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHN0cmVhbS5lbmQoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgLy8gT3BlblNTSCBzZXJ2ZXIgc2VuZHMgYW4gZXhpdC1zdGF0dXMgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBzcGlubmluZyB1cFxuICAgICAgLy8gYW4gc2Z0cCBzZXJ2ZXIgY2hpbGQgcHJvY2Vzcywgc28gd2UgbGlzdGVuIGZvciB0aGF0IGhlcmUgaW4gb3JkZXIgdG9cbiAgICAgIC8vIHByb3Blcmx5IHJhaXNlIGFuIGVycm9yLlxuICAgICAgc3RyZWFtLm9uY2UoJ2V4aXQnLCBvbkV4aXQpO1xuXG4gICAgICBzZnRwLnBpcGUoc3RyZWFtKS5waXBlKHNmdHApO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUuZm9yd2FyZEluID0gZnVuY3Rpb24oYmluZEFkZHIsIGJpbmRQb3J0LCBjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG4gIC8vIHNlbmQgYSByZXF1ZXN0IGZvciB0aGUgc2VydmVyIHRvIHN0YXJ0IGZvcndhcmRpbmcgVENQIGNvbm5lY3Rpb25zIHRvIHVzXG4gIC8vIG9uIGEgcGFydGljdWxhciBhZGRyZXNzIGFuZCBwb3J0XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgd2FudFJlcGx5ID0gKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyk7XG5cbiAgaWYgKHdhbnRSZXBseSkge1xuICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKGhhZF9lcnIsIGRhdGEpIHtcbiAgICAgIGlmIChoYWRfZXJyKSB7XG4gICAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICA/IGhhZF9lcnJcbiAgICAgICAgICAgICAgICAgIDogbmV3IEVycm9yKCdVbmFibGUgdG8gYmluZCB0byAnICsgYmluZEFkZHIgKyAnOicgKyBiaW5kUG9ydCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVhbFBvcnQgPSBiaW5kUG9ydDtcbiAgICAgIGlmIChiaW5kUG9ydCA9PT0gMCAmJiBkYXRhICYmIGRhdGEubGVuZ3RoID49IDQpIHtcbiAgICAgICAgcmVhbFBvcnQgPSByZWFkVUludDMyQkUoZGF0YSwgMCk7XG4gICAgICAgIGlmICghKHNlbGYuX3NzaHN0cmVhbS5yZW1vdGVCdWdzICYgQlVHUy5EWU5fUlBPUlRfQlVHKSlcbiAgICAgICAgICBiaW5kUG9ydCA9IHJlYWxQb3J0O1xuICAgICAgfVxuXG4gICAgICBzZWxmLl9mb3J3YXJkaW5nW2JpbmRBZGRyICsgJzonICsgYmluZFBvcnRdID0gcmVhbFBvcnQ7XG5cbiAgICAgIGNiKHVuZGVmaW5lZCwgcmVhbFBvcnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX3NzaHN0cmVhbS50Y3BpcEZvcndhcmQoYmluZEFkZHIsIGJpbmRQb3J0LCB3YW50UmVwbHkpO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS51bmZvcndhcmRJbiA9IGZ1bmN0aW9uKGJpbmRBZGRyLCBiaW5kUG9ydCwgY2IpIHtcbiAgaWYgKCF0aGlzLl9zb2NrXG4gICAgICB8fCAhdGhpcy5fc29jay53cml0YWJsZVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbS53cml0YWJsZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBjb25uZWN0ZWQnKTtcblxuICAvLyBzZW5kIGEgcmVxdWVzdCB0byBzdG9wIGZvcndhcmRpbmcgdXMgbmV3IGNvbm5lY3Rpb25zIGZvciBhIHBhcnRpY3VsYXJcbiAgLy8gYWRkcmVzcyBhbmQgcG9ydFxuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHdhbnRSZXBseSA9ICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpO1xuXG4gIGlmICh3YW50UmVwbHkpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MucHVzaChmdW5jdGlvbihoYWRfZXJyKSB7XG4gICAgICBpZiAoaGFkX2Vycikge1xuICAgICAgICByZXR1cm4gY2IoaGFkX2VyciAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgPyBoYWRfZXJyXG4gICAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcignVW5hYmxlIHRvIHVuYmluZCBmcm9tICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYmluZEFkZHIgKyAnOicgKyBiaW5kUG9ydCkpO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgc2VsZi5fZm9yd2FyZGluZ1tiaW5kQWRkciArICc6JyArIGJpbmRQb3J0XTtcblxuICAgICAgY2IoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9zc2hzdHJlYW0uY2FuY2VsVGNwaXBGb3J3YXJkKGJpbmRBZGRyLCBiaW5kUG9ydCwgd2FudFJlcGx5KTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUuZm9yd2FyZE91dCA9IGZ1bmN0aW9uKHNyY0lQLCBzcmNQb3J0LCBkc3RJUCwgZHN0UG9ydCwgY2IpIHtcbiAgaWYgKCF0aGlzLl9zb2NrXG4gICAgICB8fCAhdGhpcy5fc29jay53cml0YWJsZVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbS53cml0YWJsZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBjb25uZWN0ZWQnKTtcblxuICAvLyBzZW5kIGEgcmVxdWVzdCB0byBmb3J3YXJkIGEgVENQIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlclxuXG4gIHZhciBjZmcgPSB7XG4gICAgc3JjSVA6IHNyY0lQLFxuICAgIHNyY1BvcnQ6IHNyY1BvcnQsXG4gICAgZHN0SVA6IGRzdElQLFxuICAgIGRzdFBvcnQ6IGRzdFBvcnRcbiAgfTtcblxuICByZXR1cm4gb3BlbkNoYW5uZWwodGhpcywgJ2RpcmVjdC10Y3BpcCcsIGNmZywgY2IpO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS5vcGVuc3NoX25vTW9yZVNlc3Npb25zID0gZnVuY3Rpb24oY2IpIHtcbiAgaWYgKCF0aGlzLl9zb2NrXG4gICAgICB8fCAhdGhpcy5fc29jay53cml0YWJsZVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbS53cml0YWJsZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBjb25uZWN0ZWQnKTtcblxuICB2YXIgd2FudFJlcGx5ID0gKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLmNvbmZpZy5zdHJpY3RWZW5kb3JcbiAgICAgIHx8ICh0aGlzLmNvbmZpZy5zdHJpY3RWZW5kb3IgJiYgUkVfT1BFTlNTSC50ZXN0KHRoaXMuX3JlbW90ZVZlcikpKSB7XG4gICAgaWYgKHdhbnRSZXBseSkge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oaGFkX2Vycikge1xuICAgICAgICBpZiAoaGFkX2Vycikge1xuICAgICAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgID8gaGFkX2VyclxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcignVW5hYmxlIHRvIGRpc2FibGUgZnV0dXJlIHNlc3Npb25zJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2IoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zc2hzdHJlYW0ub3BlbnNzaF9ub01vcmVTZXNzaW9ucyh3YW50UmVwbHkpO1xuICB9IGVsc2UgaWYgKHdhbnRSZXBseSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBjYihuZXcgRXJyb3IoJ3N0cmljdFZlbmRvciBlbmFibGVkIGFuZCBzZXJ2ZXIgaXMgbm90IE9wZW5TU0ggb3IgY29tcGF0aWJsZSB2ZXJzaW9uJykpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5DbGllbnQucHJvdG90eXBlLm9wZW5zc2hfZm9yd2FyZEluU3RyZWFtTG9jYWwgPSBmdW5jdGlvbihzb2NrZXRQYXRoLCBjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG4gIHZhciB3YW50UmVwbHkgPSAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICghdGhpcy5jb25maWcuc3RyaWN0VmVuZG9yXG4gICAgICB8fCAodGhpcy5jb25maWcuc3RyaWN0VmVuZG9yICYmIFJFX09QRU5TU0gudGVzdCh0aGlzLl9yZW1vdGVWZXIpKSkge1xuICAgIGlmICh3YW50UmVwbHkpIHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKGhhZF9lcnIpIHtcbiAgICAgICAgaWYgKGhhZF9lcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2IoaGFkX2VyciAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA/IGhhZF9lcnJcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgRXJyb3IoJ1VuYWJsZSB0byBiaW5kIHRvICcgKyBzb2NrZXRQYXRoKSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5fZm9yd2FyZGluZ1VuaXhbc29ja2V0UGF0aF0gPSB0cnVlO1xuICAgICAgICBjYigpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3NzaHN0cmVhbS5vcGVuc3NoX3N0cmVhbUxvY2FsRm9yd2FyZChzb2NrZXRQYXRoLCB3YW50UmVwbHkpO1xuICB9IGVsc2UgaWYgKHdhbnRSZXBseSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBjYihuZXcgRXJyb3IoJ3N0cmljdFZlbmRvciBlbmFibGVkIGFuZCBzZXJ2ZXIgaXMgbm90IE9wZW5TU0ggb3IgY29tcGF0aWJsZSB2ZXJzaW9uJykpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5DbGllbnQucHJvdG90eXBlLm9wZW5zc2hfdW5mb3J3YXJkSW5TdHJlYW1Mb2NhbCA9IGZ1bmN0aW9uKHNvY2tldFBhdGgsIGNiKSB7XG4gIGlmICghdGhpcy5fc29ja1xuICAgICAgfHwgIXRoaXMuX3NvY2sud3JpdGFibGVcbiAgICAgIHx8ICF0aGlzLl9zc2hzdHJlYW1cbiAgICAgIHx8ICF0aGlzLl9zc2hzdHJlYW0ud3JpdGFibGUpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgY29ubmVjdGVkJyk7XG5cbiAgdmFyIHdhbnRSZXBseSA9ICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKCF0aGlzLmNvbmZpZy5zdHJpY3RWZW5kb3JcbiAgICAgIHx8ICh0aGlzLmNvbmZpZy5zdHJpY3RWZW5kb3IgJiYgUkVfT1BFTlNTSC50ZXN0KHRoaXMuX3JlbW90ZVZlcikpKSB7XG4gICAgaWYgKHdhbnRSZXBseSkge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oaGFkX2Vycikge1xuICAgICAgICBpZiAoaGFkX2Vycikge1xuICAgICAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgID8gaGFkX2VyclxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcignVW5hYmxlIHRvIHVuYmluZCBvbiAnICsgc29ja2V0UGF0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBzZWxmLl9mb3J3YXJkaW5nVW5peFtzb2NrZXRQYXRoXTtcbiAgICAgICAgY2IoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zc2hzdHJlYW0ub3BlbnNzaF9jYW5jZWxTdHJlYW1Mb2NhbEZvcndhcmQoc29ja2V0UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRSZXBseSk7XG4gIH0gZWxzZSBpZiAod2FudFJlcGx5KSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIGNiKG5ldyBFcnJvcignc3RyaWN0VmVuZG9yIGVuYWJsZWQgYW5kIHNlcnZlciBpcyBub3QgT3BlblNTSCBvciBjb21wYXRpYmxlIHZlcnNpb24nKSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUub3BlbnNzaF9mb3J3YXJkT3V0U3RyZWFtTG9jYWwgPSBmdW5jdGlvbihzb2NrZXRQYXRoLCBjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG4gIGlmICghdGhpcy5jb25maWcuc3RyaWN0VmVuZG9yXG4gICAgICB8fCAodGhpcy5jb25maWcuc3RyaWN0VmVuZG9yICYmIFJFX09QRU5TU0gudGVzdCh0aGlzLl9yZW1vdGVWZXIpKSkge1xuICAgIHZhciBjZmcgPSB7IHNvY2tldFBhdGg6IHNvY2tldFBhdGggfTtcbiAgICByZXR1cm4gb3BlbkNoYW5uZWwodGhpcywgJ2RpcmVjdC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbScsIGNmZywgY2IpO1xuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBjYihuZXcgRXJyb3IoJ3N0cmljdFZlbmRvciBlbmFibGVkIGFuZCBzZXJ2ZXIgaXMgbm90IE9wZW5TU0ggb3IgY29tcGF0aWJsZSB2ZXJzaW9uJykpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBvcGVuQ2hhbm5lbChzZWxmLCB0eXBlLCBvcHRzLCBjYikge1xuICAvLyBhc2sgdGhlIHNlcnZlciB0byBvcGVuIGEgY2hhbm5lbCBmb3Igc29tZSBwdXJwb3NlXG4gIC8vIChlLmcuIHNlc3Npb24gKHNmdHAsIGV4ZWMsIHNoZWxsKSwgb3IgZm9yd2FyZGluZyBhIFRDUCBjb25uZWN0aW9uXG4gIHZhciBsb2NhbENoYW4gPSBuZXh0Q2hhbm5lbChzZWxmKTtcbiAgdmFyIGluaXRXaW5kb3cgPSBDaGFubmVsLk1BWF9XSU5ET1c7XG4gIHZhciBtYXhQYWNrZXQgPSBDaGFubmVsLlBBQ0tFVF9TSVpFO1xuICB2YXIgcmV0ID0gdHJ1ZTtcblxuICBpZiAobG9jYWxDaGFuID09PSBmYWxzZSlcbiAgICByZXR1cm4gY2IobmV3IEVycm9yKCdObyBmcmVlIGNoYW5uZWxzIGF2YWlsYWJsZScpKTtcblxuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgc2VsZi5fY2hhbm5lbHNbbG9jYWxDaGFuXSA9IGNiO1xuXG4gIHZhciBzc2hzdHJlYW0gPSBzZWxmLl9zc2hzdHJlYW07XG4gIHNzaHN0cmVhbS5vbmNlKCdDSEFOTkVMX09QRU5fQ09ORklSTUFUSU9OOicgKyBsb2NhbENoYW4sIG9uU3VjY2VzcylcbiAgICAgICAgICAgLm9uY2UoJ0NIQU5ORUxfT1BFTl9GQUlMVVJFOicgKyBsb2NhbENoYW4sIG9uRmFpbHVyZSlcbiAgICAgICAgICAgLm9uY2UoJ0NIQU5ORUxfQ0xPU0U6JyArIGxvY2FsQ2hhbiwgb25GYWlsdXJlKTtcblxuICBpZiAodHlwZSA9PT0gJ3Nlc3Npb24nKVxuICAgIHJldCA9IHNzaHN0cmVhbS5zZXNzaW9uKGxvY2FsQ2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0KTtcbiAgZWxzZSBpZiAodHlwZSA9PT0gJ2RpcmVjdC10Y3BpcCcpXG4gICAgcmV0ID0gc3Noc3RyZWFtLmRpcmVjdFRjcGlwKGxvY2FsQ2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0LCBvcHRzKTtcbiAgZWxzZSBpZiAodHlwZSA9PT0gJ2RpcmVjdC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbScpIHtcbiAgICByZXQgPSBzc2hzdHJlYW0ub3BlbnNzaF9kaXJlY3RTdHJlYW1Mb2NhbChsb2NhbENoYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFdpbmRvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQYWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cyk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xuXG4gIGZ1bmN0aW9uIG9uU3VjY2VzcyhpbmZvKSB7XG4gICAgc3Noc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdDSEFOTkVMX09QRU5fRkFJTFVSRTonICsgbG9jYWxDaGFuLCBvbkZhaWx1cmUpO1xuICAgIHNzaHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignQ0hBTk5FTF9DTE9TRTonICsgbG9jYWxDaGFuLCBvbkZhaWx1cmUpO1xuXG4gICAgdmFyIGNoYW5pbmZvID0ge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGluY29taW5nOiB7XG4gICAgICAgIGlkOiBsb2NhbENoYW4sXG4gICAgICAgIHdpbmRvdzogaW5pdFdpbmRvdyxcbiAgICAgICAgcGFja2V0U2l6ZTogbWF4UGFja2V0LFxuICAgICAgICBzdGF0ZTogJ29wZW4nXG4gICAgICB9LFxuICAgICAgb3V0Z29pbmc6IHtcbiAgICAgICAgaWQ6IGluZm8uc2VuZGVyLFxuICAgICAgICB3aW5kb3c6IGluZm8ud2luZG93LFxuICAgICAgICBwYWNrZXRTaXplOiBpbmZvLnBhY2tldFNpemUsXG4gICAgICAgIHN0YXRlOiAnb3BlbidcbiAgICAgIH1cbiAgICB9O1xuICAgIGNiKHVuZGVmaW5lZCwgbmV3IENoYW5uZWwoY2hhbmluZm8sIHNlbGYpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRmFpbHVyZShpbmZvKSB7XG4gICAgc3Noc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdDSEFOTkVMX09QRU5fQ09ORklSTUFUSU9OOicgKyBsb2NhbENoYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VjY2Vzcyk7XG4gICAgc3Noc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdDSEFOTkVMX09QRU5fRkFJTFVSRTonICsgbG9jYWxDaGFuLCBvbkZhaWx1cmUpO1xuICAgIHNzaHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignQ0hBTk5FTF9DTE9TRTonICsgbG9jYWxDaGFuLCBvbkZhaWx1cmUpO1xuXG4gICAgZGVsZXRlIHNlbGYuX2NoYW5uZWxzW2xvY2FsQ2hhbl07XG5cbiAgICB2YXIgZXJyO1xuICAgIGlmIChpbmZvIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgICBlcnIgPSBpbmZvO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBpbmZvID09PSAnb2JqZWN0JyAmJiBpbmZvICE9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoJyhTU0gpIENoYW5uZWwgb3BlbiBmYWlsdXJlOiAnICsgaW5mby5kZXNjcmlwdGlvbik7XG4gICAgICBlcnIucmVhc29uID0gaW5mby5yZWFzb247XG4gICAgICBlcnIubGFuZyA9IGluZm8ubGFuZztcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyID0gbmV3IEVycm9yKCcoU1NIKSBDaGFubmVsIG9wZW4gZmFpbHVyZTogJ1xuICAgICAgICAgICAgICAgICAgICAgICsgJ3NlcnZlciBjbG9zZWQgY2hhbm5lbCB1bmV4cGVjdGVkbHknKTtcbiAgICAgIGVyci5yZWFzb24gPSBlcnIubGFuZyA9ICcnO1xuICAgIH1cbiAgICBjYihlcnIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5leHRDaGFubmVsKHNlbGYpIHtcbiAgLy8gZ2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBjaGFubmVsIG51bWJlclxuXG4gIC8vIG9wdGltaXplZCBwYXRoXG4gIGlmIChzZWxmLl9jdXJDaGFuIDwgTUFYX0NIQU5ORUwpXG4gICAgcmV0dXJuICsrc2VsZi5fY3VyQ2hhbjtcblxuICAvLyBzbG93ZXIgbG9va3VwIHBhdGhcbiAgZm9yICh2YXIgaSA9IDAsIGNoYW5uZWxzID0gc2VsZi5fY2hhbm5lbHM7IGkgPCBNQVhfQ0hBTk5FTDsgKytpKVxuICAgIGlmICghY2hhbm5lbHNbaV0pXG4gICAgICByZXR1cm4gaTtcblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlcVgxMShjaGFuLCBzY3JlZW4sIGNiKSB7XG4gIC8vIGFza3Mgc2VydmVyIHRvIHN0YXJ0IHNlbmRpbmcgdXMgWDExIGNvbm5lY3Rpb25zXG4gIHZhciBjZmcgPSB7XG4gICAgc2luZ2xlOiBmYWxzZSxcbiAgICBwcm90b2NvbDogJ01JVC1NQUdJQy1DT09LSUUtMScsXG4gICAgY29va2llOiB1bmRlZmluZWQsXG4gICAgc2NyZWVuOiAwXG4gIH07XG5cbiAgaWYgKHR5cGVvZiBzY3JlZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IHNjcmVlbjtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2NyZWVuID09PSAnb2JqZWN0JyAmJiBzY3JlZW4gIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHNjcmVlbi5zaW5nbGUgPT09ICdib29sZWFuJylcbiAgICAgIGNmZy5zaW5nbGUgPSBzY3JlZW4uc2luZ2xlO1xuICAgIGlmICh0eXBlb2Ygc2NyZWVuLnNjcmVlbiA9PT0gJ251bWJlcicpXG4gICAgICBjZmcuc2NyZWVuID0gc2NyZWVuLnNjcmVlbjtcbiAgICBpZiAodHlwZW9mIHNjcmVlbi5wcm90b2NvbCA9PT0gJ3N0cmluZycpXG4gICAgICBjZmcucHJvdG9jb2wgPSBzY3JlZW4ucHJvdG9jb2w7XG4gICAgaWYgKHR5cGVvZiBzY3JlZW4uY29va2llID09PSAnc3RyaW5nJylcbiAgICAgIGNmZy5jb29raWUgPSBzY3JlZW4uY29va2llO1xuICAgIGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzY3JlZW4uY29va2llKSlcbiAgICAgIGNmZy5jb29raWUgPSBzY3JlZW4uY29va2llLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuICBpZiAoY2ZnLmNvb2tpZSA9PT0gdW5kZWZpbmVkKVxuICAgIGNmZy5jb29raWUgPSByYW5kb21Db29raWUoKTtcblxuICB2YXIgd2FudFJlcGx5ID0gKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyk7XG5cbiAgaWYgKGNoYW4ub3V0Z29pbmcuc3RhdGUgIT09ICdvcGVuJykge1xuICAgIHdhbnRSZXBseSAmJiBjYihuZXcgRXJyb3IoJ0NoYW5uZWwgaXMgbm90IG9wZW4nKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAod2FudFJlcGx5KSB7XG4gICAgY2hhbi5fY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oaGFkX2Vycikge1xuICAgICAgaWYgKGhhZF9lcnIpIHtcbiAgICAgICAgcmV0dXJuIGNiKGhhZF9lcnIgIT09IHRydWVcbiAgICAgICAgICAgICAgICAgID8gaGFkX2VyclxuICAgICAgICAgICAgICAgICAgOiBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXF1ZXN0IFgxMScpKTtcbiAgICAgIH1cblxuICAgICAgY2hhbi5faGFzWDExID0gdHJ1ZTtcbiAgICAgICsrY2hhbi5fY2xpZW50Ll9hY2NlcHRYMTE7XG4gICAgICBjaGFuLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChjaGFuLl9jbGllbnQuX2FjY2VwdFgxMSlcbiAgICAgICAgICAtLWNoYW4uX2NsaWVudC5fYWNjZXB0WDExO1xuICAgICAgfSk7XG5cbiAgICAgIGNiKCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY2hhbi5fY2xpZW50Ll9zc2hzdHJlYW0ueDExRm9yd2FyZChjaGFuLm91dGdvaW5nLmlkLCBjZmcsIHdhbnRSZXBseSk7XG59XG5cbmZ1bmN0aW9uIHJlcVB0eShjaGFuLCBvcHRzLCBjYikge1xuICB2YXIgcm93cyA9IDI0O1xuICB2YXIgY29scyA9IDgwO1xuICB2YXIgd2lkdGggPSA2NDA7XG4gIHZhciBoZWlnaHQgPSA0ODA7XG4gIHZhciB0ZXJtID0gJ3Z0MTAwJztcbiAgdmFyIG1vZGVzID0gbnVsbDtcblxuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpXG4gICAgY2IgPSBvcHRzO1xuICBlbHNlIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgb3B0cyAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygb3B0cy5yb3dzID09PSAnbnVtYmVyJylcbiAgICAgIHJvd3MgPSBvcHRzLnJvd3M7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbHMgPT09ICdudW1iZXInKVxuICAgICAgY29scyA9IG9wdHMuY29scztcbiAgICBpZiAodHlwZW9mIG9wdHMud2lkdGggPT09ICdudW1iZXInKVxuICAgICAgd2lkdGggPSBvcHRzLndpZHRoO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5oZWlnaHQgPT09ICdudW1iZXInKVxuICAgICAgaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gICAgaWYgKHR5cGVvZiBvcHRzLnRlcm0gPT09ICdzdHJpbmcnKVxuICAgICAgdGVybSA9IG9wdHMudGVybTtcbiAgICBpZiAodHlwZW9mIG9wdHMubW9kZXMgPT09ICdvYmplY3QnKVxuICAgICAgbW9kZXMgPSBvcHRzLm1vZGVzO1xuICB9XG5cbiAgdmFyIHdhbnRSZXBseSA9ICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpO1xuXG4gIGlmIChjaGFuLm91dGdvaW5nLnN0YXRlICE9PSAnb3BlbicpIHtcbiAgICB3YW50UmVwbHkgJiYgY2IobmV3IEVycm9yKCdDaGFubmVsIGlzIG5vdCBvcGVuJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHdhbnRSZXBseSkge1xuICAgIGNoYW4uX2NhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKGhhZF9lcnIpIHtcbiAgICAgIGlmIChoYWRfZXJyKSB7XG4gICAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICA/IGhhZF9lcnJcbiAgICAgICAgICAgICAgICAgIDogbmV3IEVycm9yKCdVbmFibGUgdG8gcmVxdWVzdCBhIHBzZXVkby10ZXJtaW5hbCcpKTtcbiAgICAgIH1cbiAgICAgIGNiKCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY2hhbi5fY2xpZW50Ll9zc2hzdHJlYW0ucHR5KGNoYW4ub3V0Z29pbmcuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRSZXBseSk7XG59XG5cbmZ1bmN0aW9uIHJlcUFnZW50RndkKGNoYW4sIGNiKSB7XG4gIHZhciB3YW50UmVwbHkgPSAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKTtcblxuICBpZiAoY2hhbi5vdXRnb2luZy5zdGF0ZSAhPT0gJ29wZW4nKSB7XG4gICAgd2FudFJlcGx5ICYmIGNiKG5ldyBFcnJvcignQ2hhbm5lbCBpcyBub3Qgb3BlbicpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChjaGFuLl9jbGllbnQuX2FnZW50RndkRW5hYmxlZCkge1xuICAgIHdhbnRSZXBseSAmJiBjYihmYWxzZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjaGFuLl9jbGllbnQuX2FnZW50RndkRW5hYmxlZCA9IHRydWU7XG5cbiAgY2hhbi5fY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oaGFkX2Vycikge1xuICAgIGlmIChoYWRfZXJyKSB7XG4gICAgICBjaGFuLl9jbGllbnQuX2FnZW50RndkRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgd2FudFJlcGx5ICYmIGNiKGhhZF9lcnIgIT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICA/IGhhZF9lcnJcbiAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlcXVlc3QgYWdlbnQgZm9yd2FyZGluZycpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YW50UmVwbHkgJiYgY2IoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNoYW4uX2NsaWVudC5fc3Noc3RyZWFtLm9wZW5zc2hfYWdlbnRGb3J3YXJkKGNoYW4ub3V0Z29pbmcuaWQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiByZXFTaGVsbChjaGFuLCBjYikge1xuICBpZiAoY2hhbi5vdXRnb2luZy5zdGF0ZSAhPT0gJ29wZW4nKSB7XG4gICAgY2IobmV3IEVycm9yKCdDaGFubmVsIGlzIG5vdCBvcGVuJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNoYW4uX2NhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKGhhZF9lcnIpIHtcbiAgICBpZiAoaGFkX2Vycikge1xuICAgICAgcmV0dXJuIGNiKGhhZF9lcnIgIT09IHRydWVcbiAgICAgICAgICAgICAgICA/IGhhZF9lcnJcbiAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcignVW5hYmxlIHRvIG9wZW4gc2hlbGwnKSk7XG4gICAgfVxuICAgIGNoYW4uc3VidHlwZSA9ICdzaGVsbCc7XG4gICAgY2IodW5kZWZpbmVkLCBjaGFuKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNoYW4uX2NsaWVudC5fc3Noc3RyZWFtLnNoZWxsKGNoYW4ub3V0Z29pbmcuaWQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiByZXFFeGVjKGNoYW4sIGNtZCwgb3B0cywgY2IpIHtcbiAgaWYgKGNoYW4ub3V0Z29pbmcuc3RhdGUgIT09ICdvcGVuJykge1xuICAgIGNiKG5ldyBFcnJvcignQ2hhbm5lbCBpcyBub3Qgb3BlbicpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjaGFuLl9jYWxsYmFja3MucHVzaChmdW5jdGlvbihoYWRfZXJyKSB7XG4gICAgaWYgKGhhZF9lcnIpIHtcbiAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBoYWRfZXJyXG4gICAgICAgICAgICAgICAgOiBuZXcgRXJyb3IoJ1VuYWJsZSB0byBleGVjJykpO1xuICAgIH1cbiAgICBjaGFuLnN1YnR5cGUgPSAnZXhlYyc7XG4gICAgY2hhbi5hbGxvd0hhbGZPcGVuID0gKG9wdHMuYWxsb3dIYWxmT3BlbiAhPT0gZmFsc2UpO1xuICAgIGNiKHVuZGVmaW5lZCwgY2hhbik7XG4gIH0pO1xuXG4gIHJldHVybiBjaGFuLl9jbGllbnQuX3NzaHN0cmVhbS5leGVjKGNoYW4ub3V0Z29pbmcuaWQsIGNtZCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHJlcUVudihjaGFuLCBlbnYpIHtcbiAgaWYgKGNoYW4ub3V0Z29pbmcuc3RhdGUgIT09ICdvcGVuJylcbiAgICByZXR1cm4gdHJ1ZTtcbiAgdmFyIHJldCA9IHRydWU7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZW52IHx8IHt9KTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgdmFsID0gZW52W2tleV07XG4gICAgcmV0ID0gY2hhbi5fY2xpZW50Ll9zc2hzdHJlYW0uZW52KGNoYW4ub3V0Z29pbmcuaWQsIGtleSwgdmFsLCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiByZXFTdWJzeXN0ZW0oY2hhbiwgbmFtZSwgY2IpIHtcbiAgaWYgKGNoYW4ub3V0Z29pbmcuc3RhdGUgIT09ICdvcGVuJykge1xuICAgIGNiKG5ldyBFcnJvcignQ2hhbm5lbCBpcyBub3Qgb3BlbicpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjaGFuLl9jYWxsYmFja3MucHVzaChmdW5jdGlvbihoYWRfZXJyKSB7XG4gICAgaWYgKGhhZF9lcnIpIHtcbiAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBoYWRfZXJyXG4gICAgICAgICAgICAgICAgOiBuZXcgRXJyb3IoJ1VuYWJsZSB0byBzdGFydCBzdWJzeXN0ZW06ICcgKyBuYW1lKSk7XG4gICAgfVxuICAgIGNoYW4uc3VidHlwZSA9ICdzdWJzeXN0ZW0nO1xuICAgIGNiKHVuZGVmaW5lZCwgY2hhbik7XG4gIH0pO1xuXG4gIHJldHVybiBjaGFuLl9jbGllbnQuX3NzaHN0cmVhbS5zdWJzeXN0ZW0oY2hhbi5vdXRnb2luZy5pZCwgbmFtZSwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIG9uQ0hBTk5FTF9PUEVOKHNlbGYsIGluZm8pIHtcbiAgLy8gdGhlIHNlcnZlciBpcyB0cnlpbmcgdG8gb3BlbiBhIGNoYW5uZWwgd2l0aCB1cywgdGhpcyBpcyB1c3VhbGx5IHdoZW5cbiAgLy8gd2UgYXNrZWQgdGhlIHNlcnZlciB0byBmb3J3YXJkIHVzIGNvbm5lY3Rpb25zIG9uIHNvbWUgcG9ydCBhbmQgbm93IHRoZXlcbiAgLy8gYXJlIGFza2luZyB1cyB0byBhY2NlcHQvZGVueSBhbiBpbmNvbWluZyBjb25uZWN0aW9uIG9uIHRoZWlyIHNpZGVcblxuICB2YXIgbG9jYWxDaGFuID0gZmFsc2U7XG4gIHZhciByZWFzb247XG5cbiAgZnVuY3Rpb24gYWNjZXB0KCkge1xuICAgIHZhciBjaGFuaW5mbyA9IHtcbiAgICAgIHR5cGU6IGluZm8udHlwZSxcbiAgICAgIGluY29taW5nOiB7XG4gICAgICAgIGlkOiBsb2NhbENoYW4sXG4gICAgICAgIHdpbmRvdzogQ2hhbm5lbC5NQVhfV0lORE9XLFxuICAgICAgICBwYWNrZXRTaXplOiBDaGFubmVsLlBBQ0tFVF9TSVpFLFxuICAgICAgICBzdGF0ZTogJ29wZW4nXG4gICAgICB9LFxuICAgICAgb3V0Z29pbmc6IHtcbiAgICAgICAgaWQ6IGluZm8uc2VuZGVyLFxuICAgICAgICB3aW5kb3c6IGluZm8ud2luZG93LFxuICAgICAgICBwYWNrZXRTaXplOiBpbmZvLnBhY2tldFNpemUsXG4gICAgICAgIHN0YXRlOiAnb3BlbidcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBzdHJlYW0gPSBuZXcgQ2hhbm5lbChjaGFuaW5mbywgc2VsZik7XG5cbiAgICBzZWxmLl9zc2hzdHJlYW0uY2hhbm5lbE9wZW5Db25maXJtKGluZm8uc2VuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxDaGFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbC5NQVhfV0lORE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbC5QQUNLRVRfU0laRSk7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuICBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgaWYgKHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobG9jYWxDaGFuID09PSBmYWxzZSlcbiAgICAgICAgcmVhc29uID0gY29uc3RzLkNIQU5ORUxfT1BFTl9GQUlMVVJFLlJFU09VUkNFX1NIT1JUQUdFO1xuICAgICAgZWxzZVxuICAgICAgICByZWFzb24gPSBjb25zdHMuQ0hBTk5FTF9PUEVOX0ZBSUxVUkUuQ09OTkVDVF9GQUlMRUQ7XG4gICAgfVxuXG4gICAgc2VsZi5fc3Noc3RyZWFtLmNoYW5uZWxPcGVuRmFpbChpbmZvLnNlbmRlciwgcmVhc29uLCAnJywgJycpO1xuICB9XG5cbiAgaWYgKGluZm8udHlwZSA9PT0gJ2ZvcndhcmRlZC10Y3BpcCdcbiAgICAgIHx8IGluZm8udHlwZSA9PT0gJ3gxMSdcbiAgICAgIHx8IGluZm8udHlwZSA9PT0gJ2F1dGgtYWdlbnRAb3BlbnNzaC5jb20nXG4gICAgICB8fCBpbmZvLnR5cGUgPT09ICdmb3J3YXJkZWQtc3RyZWFtbG9jYWxAb3BlbnNzaC5jb20nKSB7XG5cbiAgICAvLyBjaGVjayBmb3IgY29uZGl0aW9ucyBmb3IgYXV0b21hdGljIHJlamVjdGlvblxuICAgIHZhciByZWplY3RDb25uID0gKFxuICAgICAoaW5mby50eXBlID09PSAnZm9yd2FyZGVkLXRjcGlwJ1xuICAgICAgJiYgc2VsZi5fZm9yd2FyZGluZ1tpbmZvLmRhdGEuZGVzdElQXG4gICAgICAgICAgICAgICAgICAgICAgICAgKyAnOidcbiAgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8uZGF0YS5kZXN0UG9ydF0gPT09IHVuZGVmaW5lZClcbiAgICAgfHwgKGluZm8udHlwZSA9PT0gJ2ZvcndhcmRlZC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbSdcbiAgICAgICAgICYmIHNlbGYuX2ZvcndhcmRpbmdVbml4W2luZm8uZGF0YS5zb2NrZXRQYXRoXSA9PT0gdW5kZWZpbmVkKVxuICAgICB8fCAoaW5mby50eXBlID09PSAneDExJyAmJiBzZWxmLl9hY2NlcHRYMTEgPT09IDApXG4gICAgIHx8IChpbmZvLnR5cGUgPT09ICdhdXRoLWFnZW50QG9wZW5zc2guY29tJ1xuICAgICAgICAgJiYgIXNlbGYuX2FnZW50RndkRW5hYmxlZClcbiAgICApO1xuXG4gICAgaWYgKCFyZWplY3RDb25uKSB7XG4gICAgICBsb2NhbENoYW4gPSBuZXh0Q2hhbm5lbChzZWxmKTtcblxuICAgICAgaWYgKGxvY2FsQ2hhbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2VsZi5jb25maWcuZGVidWcoJ0RFQlVHOiBDbGllbnQ6IEF1dG9tYXRpYyByZWplY3Rpb24gb2YgaW5jb21pbmcgY2hhbm5lbCBvcGVuOiBubyBjaGFubmVscyBhdmFpbGFibGUnKTtcbiAgICAgICAgcmVqZWN0Q29ubiA9IHRydWU7XG4gICAgICB9IGVsc2VcbiAgICAgICAgc2VsZi5fY2hhbm5lbHNbbG9jYWxDaGFuXSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYXNvbiA9IGNvbnN0cy5DSEFOTkVMX09QRU5fRkFJTFVSRS5BRE1JTklTVFJBVElWRUxZX1BST0hJQklURUQ7XG4gICAgICBzZWxmLmNvbmZpZy5kZWJ1ZygnREVCVUc6IENsaWVudDogQXV0b21hdGljIHJlamVjdGlvbiBvZiBpbmNvbWluZyBjaGFubmVsIG9wZW46IHVuZXhwZWN0ZWQgY2hhbm5lbCBvcGVuIGZvcjogJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmZvLnR5cGUpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGF1dG9tYXRpYyByZWplY3Rpb24gYWZ0ZXIgc29tZSB0aW1lb3V0P1xuXG4gICAgaWYgKHJlamVjdENvbm4pXG4gICAgICByZWplY3QoKTtcblxuICAgIGlmIChsb2NhbENoYW4gIT09IGZhbHNlKSB7XG4gICAgICBpZiAoaW5mby50eXBlID09PSAnZm9yd2FyZGVkLXRjcGlwJykge1xuICAgICAgICBpZiAoaW5mby5kYXRhLmRlc3RQb3J0ID09PSAwKSB7XG4gICAgICAgICAgaW5mby5kYXRhLmRlc3RQb3J0ID0gc2VsZi5fZm9yd2FyZGluZ1tpbmZvLmRhdGEuZGVzdElQXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICc6J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmZvLmRhdGEuZGVzdFBvcnRdO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZW1pdCgndGNwIGNvbm5lY3Rpb24nLCBpbmZvLmRhdGEsIGFjY2VwdCwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBlID09PSAneDExJykge1xuICAgICAgICBzZWxmLmVtaXQoJ3gxMScsIGluZm8uZGF0YSwgYWNjZXB0LCByZWplY3QpO1xuICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUgPT09ICdmb3J3YXJkZWQtc3RyZWFtbG9jYWxAb3BlbnNzaC5jb20nKSB7XG4gICAgICAgIHNlbGYuZW1pdCgndW5peCBjb25uZWN0aW9uJywgaW5mby5kYXRhLCBhY2NlcHQsIHJlamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZ2VudFF1ZXJ5KHNlbGYuY29uZmlnLmFnZW50LCBhY2NlcHQsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGF1dG9tYXRpY2FsbHkgcmVqZWN0IGFueSB1bnN1cHBvcnRlZCBjaGFubmVsIG9wZW4gcmVxdWVzdHNcbiAgICBzZWxmLmNvbmZpZy5kZWJ1ZygnREVCVUc6IENsaWVudDogQXV0b21hdGljIHJlamVjdGlvbiBvZiBpbmNvbWluZyBjaGFubmVsIG9wZW46IHVuc3VwcG9ydGVkIHR5cGU6ICdcbiAgICAgICAgICAgICAgICAgICAgICArIGluZm8udHlwZSk7XG4gICAgcmVhc29uID0gY29uc3RzLkNIQU5ORUxfT1BFTl9GQUlMVVJFLlVOS05PV05fQ0hBTk5FTF9UWVBFO1xuICAgIHJlamVjdCgpO1xuICB9XG59XG5cbnZhciByYW5kb21Db29raWUgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2YgY3J5cHRvLnJhbmRvbUZpbGxTeW5jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJhbmRvbUNvb2tpZSgpIHtcbiAgICAgIGNyeXB0by5yYW5kb21GaWxsU3luYyhidWZmZXIsIDAsIDE2KTtcbiAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoJ2hleCcpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJhbmRvbUNvb2tpZSgpIHtcbiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB9O1xuICB9XG59KSgpO1xuXG5DbGllbnQuQ2xpZW50ID0gQ2xpZW50O1xuQ2xpZW50LlNlcnZlciA9IHJlcXVpcmUoJy4vc2VydmVyJyk7XG4vLyBwYXNzIHNvbWUgdXNlZnVsIHV0aWxpdGllcyBvbiB0byBlbmQgdXNlciAoZS5nLiBwYXJzZUtleSgpKVxuQ2xpZW50LnV0aWxzID0gc3NoMl9zdHJlYW1zLnV0aWxzO1xuLy8gZXhwb3NlIHVzZWZ1bCBTRlRQU3RyZWFtIGNvbnN0YW50cyBmb3Igc2Z0cCBzZXJ2ZXIgdXNhZ2VcbkNsaWVudC5TRlRQX1NUQVRVU19DT0RFID0gU0ZUUFN0cmVhbS5TVEFUVVNfQ09ERTtcbkNsaWVudC5TRlRQX09QRU5fTU9ERSA9IFNGVFBTdHJlYW0uT1BFTl9NT0RFO1xuLy8gZXhwb3NlIGh0dHAocykuQWdlbnQgaW1wbGVtZW50YXRpb25zIHRvIGFsbG93IGVhc3kgdHVubmVsaW5nIG9mIEhUVFAoUylcbi8vIHJlcXVlc3RzXG5DbGllbnQuSFRUUEFnZW50ID0gSFRUUEFnZW50cy5TU0hUVFBBZ2VudDtcbkNsaWVudC5IVFRQU0FnZW50ID0gSFRUUEFnZW50cy5TU0hUVFBTQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2xpZW50OyAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXNzZXJ0XCIpOyIsIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxudmFyIHNhZmVyID0ge31cblxudmFyIGtleVxuXG5mb3IgKGtleSBpbiBidWZmZXIpIHtcbiAgaWYgKCFidWZmZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgY29udGludWVcbiAgaWYgKGtleSA9PT0gJ1Nsb3dCdWZmZXInIHx8IGtleSA9PT0gJ0J1ZmZlcicpIGNvbnRpbnVlXG4gIHNhZmVyW2tleV0gPSBidWZmZXJba2V5XVxufVxuXG52YXIgU2FmZXIgPSBzYWZlci5CdWZmZXIgPSB7fVxuZm9yIChrZXkgaW4gQnVmZmVyKSB7XG4gIGlmICghQnVmZmVyLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlXG4gIGlmIChrZXkgPT09ICdhbGxvY1Vuc2FmZScgfHwga2V5ID09PSAnYWxsb2NVbnNhZmVTbG93JykgY29udGludWVcbiAgU2FmZXJba2V5XSA9IEJ1ZmZlcltrZXldXG59XG5cbnNhZmVyLkJ1ZmZlci5wcm90b3R5cGUgPSBCdWZmZXIucHJvdG90eXBlXG5cbmlmICghU2FmZXIuZnJvbSB8fCBTYWZlci5mcm9tID09PSBVaW50OEFycmF5LmZyb20pIHtcbiAgU2FmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiB2YWx1ZSlcbiAgICB9XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cbn1cblxuaWYgKCFTYWZlci5hbGxvYykge1xuICBTYWZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICAgIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc2l6ZSlcbiAgICB9XG4gICAgaWYgKHNpemUgPCAwIHx8IHNpemUgPj0gMiAqICgxIDw8IDMwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gICAgfVxuICAgIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgICBpZiAoIWZpbGwgfHwgZmlsbC5sZW5ndGggPT09IDApIHtcbiAgICAgIGJ1Zi5maWxsKDApXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZlxuICB9XG59XG5cbmlmICghc2FmZXIua1N0cmluZ01heExlbmd0aCkge1xuICB0cnkge1xuICAgIHNhZmVyLmtTdHJpbmdNYXhMZW5ndGggPSBwcm9jZXNzLmJpbmRpbmcoJ2J1ZmZlcicpLmtTdHJpbmdNYXhMZW5ndGhcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIHdlIGNhbid0IGRldGVybWluZSBrU3RyaW5nTWF4TGVuZ3RoIGluIGVudmlyb25tZW50cyB3aGVyZSBwcm9jZXNzLmJpbmRpbmdcbiAgICAvLyBpcyB1bnN1cHBvcnRlZCwgc28gbGV0J3Mgbm90IHNldCBpdFxuICB9XG59XG5cbmlmICghc2FmZXIuY29uc3RhbnRzKSB7XG4gIHNhZmVyLmNvbnN0YW50cyA9IHtcbiAgICBNQVhfTEVOR1RIOiBzYWZlci5rTWF4TGVuZ3RoXG4gIH1cbiAgaWYgKHNhZmVyLmtTdHJpbmdNYXhMZW5ndGgpIHtcbiAgICBzYWZlci5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEggPSBzYWZlci5rU3RyaW5nTWF4TGVuZ3RoXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlclxuIiwiLy8gVE9ETzpcbi8vICAgICogdXRpbGl6ZSBgY3J5cHRvLmNyZWF0ZShQcml2YXRlfFB1YmxpYylLZXkoKWAgYW5kIGBrZXlPYmplY3QuZXhwb3J0KClgXG4vLyAgICAqIGhhbmRsZSBtdWx0aS1saW5lIGhlYWRlciB2YWx1ZXMgKE9wZW5TU0gpP1xuLy8gICAgKiBtb3JlIHRob3JvdWdoIHZhbGlkYXRpb24/XG5cbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBjcnlwdG9TaWduID0gY3J5cHRvLnNpZ247XG52YXIgY3J5cHRvVmVyaWZ5ID0gY3J5cHRvLnZlcmlmeTtcbnZhciBjcmVhdGVTaWduID0gY3J5cHRvLmNyZWF0ZVNpZ247XG52YXIgY3JlYXRlVmVyaWZ5ID0gY3J5cHRvLmNyZWF0ZVZlcmlmeTtcbnZhciBjcmVhdGVEZWNpcGhlcml2ID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXY7XG52YXIgY3JlYXRlSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoO1xudmFyIGNyZWF0ZUhtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYztcbnZhciBzdXBwb3J0ZWRPcGVuU1NMQ2lwaGVycyA9IGNyeXB0by5nZXRDaXBoZXJzKCk7XG5cbnZhciB1dGlscztcbnZhciBCZXIgPSByZXF1aXJlKCdhc24xJykuQmVyO1xudmFyIGJjcnlwdF9wYmtkZiA9IHJlcXVpcmUoJ2JjcnlwdC1wYmtkZicpLnBia2RmO1xuXG52YXIgYnVmZmVySGVscGVycyA9IHJlcXVpcmUoJy4vYnVmZmVyLWhlbHBlcnMnKTtcbnZhciByZWFkVUludDMyQkUgPSBidWZmZXJIZWxwZXJzLnJlYWRVSW50MzJCRTtcbnZhciB3cml0ZVVJbnQzMkJFID0gYnVmZmVySGVscGVycy53cml0ZVVJbnQzMkJFO1xudmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG52YXIgU1VQUE9SVEVEX0NJUEhFUiA9IGNvbnN0YW50cy5BTEdPUklUSE1TLlNVUFBPUlRFRF9DSVBIRVI7XG52YXIgQ0lQSEVSX0lORk8gPSBjb25zdGFudHMuQ0lQSEVSX0lORk87XG52YXIgU1NIX1RPX09QRU5TU0wgPSBjb25zdGFudHMuU1NIX1RPX09QRU5TU0w7XG52YXIgRUREU0FfU1VQUE9SVEVEID0gY29uc3RhbnRzLkVERFNBX1NVUFBPUlRFRDtcblxudmFyIFNZTV9IQVNIX0FMR08gPSBTeW1ib2woJ0hhc2ggQWxnb3JpdGhtJyk7XG52YXIgU1lNX1BSSVZfUEVNID0gU3ltYm9sKCdQcml2YXRlIGtleSBQRU0nKTtcbnZhciBTWU1fUFVCX1BFTSA9IFN5bWJvbCgnUHVibGljIGtleSBQRU0nKTtcbnZhciBTWU1fUFVCX1NTSCA9IFN5bWJvbCgnUHVibGljIGtleSBTU0gnKTtcbnZhciBTWU1fREVDUllQVEVEID0gU3ltYm9sKCdEZWNyeXB0ZWQgS2V5Jyk7XG5cbi8vIENyZWF0ZSBPcGVuU1NMIGNpcGhlciBuYW1lIC0+IFNTSCBjaXBoZXIgbmFtZSBjb252ZXJzaW9uIHRhYmxlXG52YXIgQ0lQSEVSX0lORk9fT1BFTlNTTCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoQ0lQSEVSX0lORk8pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgY2lwaGVyTmFtZSA9IFNTSF9UT19PUEVOU1NMW2tleXNbaV1dO1xuICAgIGlmICghY2lwaGVyTmFtZSB8fCBDSVBIRVJfSU5GT19PUEVOU1NMW2NpcGhlck5hbWVdKVxuICAgICAgY29udGludWU7XG4gICAgQ0lQSEVSX0lORk9fT1BFTlNTTFtjaXBoZXJOYW1lXSA9IENJUEhFUl9JTkZPW2tleXNbaV1dO1xuICB9XG59KSgpO1xuXG52YXIgdHJpbVN0YXJ0ID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodHlwZW9mIFN0cmluZy5wcm90b3R5cGUudHJpbVN0YXJ0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1TdGFydChzdHIpIHtcbiAgICAgIHJldHVybiBzdHIudHJpbVN0YXJ0KCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiB0cmltU3RhcnQoc3RyKSB7XG4gICAgdmFyIHN0YXJ0ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgICAgc3dpdGNoIChzdHIuY2hhckNvZGVBdChpKSkge1xuICAgICAgICBjYXNlIDMyOiAvLyAnICdcbiAgICAgICAgY2FzZSA5OiAvLyAnXFx0J1xuICAgICAgICBjYXNlIDEzOiAvLyAnXFxyJ1xuICAgICAgICBjYXNlIDEwOiAvLyAnXFxuJ1xuICAgICAgICBjYXNlIDEyOiAvLyAnXFxmJ1xuICAgICAgICAgICsrc3RhcnQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHN0YXJ0ID09PSAwKVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICByZXR1cm4gc3RyLnNsaWNlKHN0YXJ0KTtcbiAgfTtcbn0pKCk7XG5cbmZ1bmN0aW9uIG1ha2VQRU0odHlwZSwgZGF0YSkge1xuICBkYXRhID0gZGF0YS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIHJldHVybiAnLS0tLS1CRUdJTiAnICsgdHlwZSArICcgS0VZLS0tLS1cXG4nXG4gICAgICAgICArIGRhdGEucmVwbGFjZSgvLns2NH0vZywgJyQmXFxuJylcbiAgICAgICAgICsgKGRhdGEubGVuZ3RoICUgNjQgPyAnXFxuJyA6ICcnKVxuICAgICAgICAgKyAnLS0tLS1FTkQgJyArIHR5cGUgKyAnIEtFWS0tLS0tJztcbn1cblxuZnVuY3Rpb24gY29tYmluZUJ1ZmZlcnMoYnVmMSwgYnVmMikge1xuICB2YXIgcmVzdWx0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJ1ZjEubGVuZ3RoICsgYnVmMi5sZW5ndGgpO1xuICBidWYxLmNvcHkocmVzdWx0LCAwKTtcbiAgYnVmMi5jb3B5KHJlc3VsdCwgYnVmMS5sZW5ndGgpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBza2lwRmllbGRzKGJ1ZiwgbmZpZWxkcykge1xuICB2YXIgYnVmTGVuID0gYnVmLmxlbmd0aDtcbiAgdmFyIHBvcyA9IChidWYuX3BvcyB8fCAwKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZmllbGRzOyArK2kpIHtcbiAgICB2YXIgbGVmdCA9IChidWZMZW4gLSBwb3MpO1xuICAgIGlmIChwb3MgPj0gYnVmTGVuIHx8IGxlZnQgPCA0KVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBsZW4gPSByZWFkVUludDMyQkUoYnVmLCBwb3MpO1xuICAgIGlmIChsZWZ0IDwgNCArIGxlbilcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBwb3MgKz0gNCArIGxlbjtcbiAgfVxuICBidWYuX3BvcyA9IHBvcztcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdlbk9wZW5TU0xSU0FQdWIobiwgZSkge1xuICB2YXIgYXNuV3JpdGVyID0gbmV3IEJlci5Xcml0ZXIoKTtcbiAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAvLyBhbGdvcml0aG1cbiAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlT0lEKCcxLjIuODQwLjExMzU0OS4xLjEuMScpOyAvLyByc2FFbmNyeXB0aW9uXG4gICAgICAvLyBhbGdvcml0aG0gcGFyYW1ldGVycyAoUlNBIGhhcyBub25lKVxuICAgICAgYXNuV3JpdGVyLndyaXRlTnVsbCgpO1xuICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuXG4gICAgLy8gc3ViamVjdFB1YmxpY0tleVxuICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKEJlci5CaXRTdHJpbmcpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnl0ZSgweDAwKTtcbiAgICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihuLCBCZXIuSW50ZWdlcik7XG4gICAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihlLCBCZXIuSW50ZWdlcik7XG4gICAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gIHJldHVybiBtYWtlUEVNKCdQVUJMSUMnLCBhc25Xcml0ZXIuYnVmZmVyKTtcbn1cblxuZnVuY3Rpb24gZ2VuT3BlblNTSFJTQVB1YihuLCBlKSB7XG4gIHZhciBwdWJsaWNLZXkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDcgLy8gXCJzc2gtcnNhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBuLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIGUubGVuZ3RoKTtcblxuICB3cml0ZVVJbnQzMkJFKHB1YmxpY0tleSwgNywgMCk7XG4gIHB1YmxpY0tleS53cml0ZSgnc3NoLXJzYScsIDQsIDcsICdhc2NpaScpO1xuXG4gIHZhciBpID0gNCArIDc7XG4gIHdyaXRlVUludDMyQkUocHVibGljS2V5LCBlLmxlbmd0aCwgaSk7XG4gIGUuY29weShwdWJsaWNLZXksIGkgKz0gNCk7XG5cbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIG4ubGVuZ3RoLCBpICs9IGUubGVuZ3RoKTtcbiAgbi5jb3B5KHB1YmxpY0tleSwgaSArIDQpO1xuXG4gIHJldHVybiBwdWJsaWNLZXk7XG59XG5cbnZhciBnZW5PcGVuU1NMUlNBUHJpdiA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZ2VuUlNBQVNOMUJ1ZihuLCBlLCBkLCBwLCBxLCBkbXAxLCBkbXExLCBpcW1wKSB7XG4gICAgdmFyIGFzbldyaXRlciA9IG5ldyBCZXIuV3JpdGVyKCk7XG4gICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUludCgweDAwLCBCZXIuSW50ZWdlcik7XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIobiwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKGUsIEJlci5JbnRlZ2VyKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihkLCBCZXIuSW50ZWdlcik7XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIocCwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHEsIEJlci5JbnRlZ2VyKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihkbXAxLCBCZXIuSW50ZWdlcik7XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIoZG1xMSwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKGlxbXAsIEJlci5JbnRlZ2VyKTtcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgICByZXR1cm4gYXNuV3JpdGVyLmJ1ZmZlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpZ0ludEZyb21CdWZmZXIoYnVmKSB7XG4gICAgcmV0dXJuIEJpZ0ludCgnMHgnICsgYnVmLnRvU3RyaW5nKCdoZXgnKSk7XG4gIH1cblxuICBmdW5jdGlvbiBiaWdJbnRUb0J1ZmZlcihibikge1xuICAgIHZhciBoZXggPSBibi50b1N0cmluZygxNik7XG4gICAgaWYgKChoZXgubGVuZ3RoICYgMSkgIT09IDApIHtcbiAgICAgIGhleCA9ICcwJyArIGhleDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNpZ2JpdCA9IGhleC5jaGFyQ29kZUF0KDApO1xuICAgICAgLy8gQkVSL0RFUiBpbnRlZ2VycyByZXF1aXJlIGxlYWRpbmcgemVybyBieXRlIHRvIGRlbm90ZSBhIHBvc2l0aXZlIHZhbHVlXG4gICAgICAvLyB3aGVuIGZpcnN0IGJ5dGUgPj0gMHg4MFxuICAgICAgaWYgKHNpZ2JpdCA9PT0gNTYgfHwgKHNpZ2JpdCA+PSA5NyAmJiBzaWdiaXQgPD0gMTAyKSlcbiAgICAgICAgaGV4ID0gJzAwJyArIGhleDtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpO1xuICB9XG5cbiAgLy8gRmVhdHVyZSBkZXRlY3QgbmF0aXZlIEJpZ0ludCBhdmFpbGFiaWxpdHkgYW5kIHVzZSBpdCB3aGVuIHBvc3NpYmxlXG4gIHRyeSB7XG4gICAgdmFyIGNvZGUgPSBbXG4gICAgICAncmV0dXJuIGZ1bmN0aW9uIGdlbk9wZW5TU0xSU0FQcml2KG4sIGUsIGQsIGlxbXAsIHAsIHEpIHsnLFxuICAgICAgJyAgdmFyIGJuX2QgPSBiaWdJbnRGcm9tQnVmZmVyKGQpOycsXG4gICAgICAnICB2YXIgZG1wMSA9IGJpZ0ludFRvQnVmZmVyKGJuX2QgJSAoYmlnSW50RnJvbUJ1ZmZlcihwKSAtIDFuKSk7JyxcbiAgICAgICcgIHZhciBkbXExID0gYmlnSW50VG9CdWZmZXIoYm5fZCAlIChiaWdJbnRGcm9tQnVmZmVyKHEpIC0gMW4pKTsnLFxuICAgICAgJyAgcmV0dXJuIG1ha2VQRU0oXFwnUlNBIFBSSVZBVEVcXCcsICdcbiAgICAgICAgKyAnZ2VuUlNBQVNOMUJ1ZihuLCBlLCBkLCBwLCBxLCBkbXAxLCBkbXExLCBpcW1wKSk7JyxcbiAgICAgICd9OydcbiAgICBdLmpvaW4oJ1xcbicpO1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oXG4gICAgICAnYmlnSW50RnJvbUJ1ZmZlciwgYmlnSW50VG9CdWZmZXIsIG1ha2VQRU0sIGdlblJTQUFTTjFCdWYnLFxuICAgICAgY29kZVxuICAgICkoYmlnSW50RnJvbUJ1ZmZlciwgYmlnSW50VG9CdWZmZXIsIG1ha2VQRU0sIGdlblJTQUFTTjFCdWYpO1xuICB9IGNhdGNoIChleCkge1xuICAgIHJldHVybiAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgQmlnSW50ZWdlciA9IHJlcXVpcmUoJy4vanNibi5qcycpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdlbk9wZW5TU0xSU0FQcml2KG4sIGUsIGQsIGlxbXAsIHAsIHEpIHtcbiAgICAgICAgdmFyIHBiaSA9IG5ldyBCaWdJbnRlZ2VyKHAsIDI1Nik7XG4gICAgICAgIHZhciBxYmkgPSBuZXcgQmlnSW50ZWdlcihxLCAyNTYpO1xuICAgICAgICB2YXIgZGJpID0gbmV3IEJpZ0ludGVnZXIoZCwgMjU2KTtcbiAgICAgICAgdmFyIGRtcDFiaSA9IGRiaS5tb2QocGJpLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKSk7XG4gICAgICAgIHZhciBkbXExYmkgPSBkYmkubW9kKHFiaS5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSkpO1xuICAgICAgICB2YXIgZG1wMSA9IEJ1ZmZlci5mcm9tKGRtcDFiaS50b0J5dGVBcnJheSgpKTtcbiAgICAgICAgdmFyIGRtcTEgPSBCdWZmZXIuZnJvbShkbXExYmkudG9CeXRlQXJyYXkoKSk7XG4gICAgICAgIHJldHVybiBtYWtlUEVNKCdSU0EgUFJJVkFURScsXG4gICAgICAgICAgICAgICAgICAgICAgIGdlblJTQUFTTjFCdWYobiwgZSwgZCwgcCwgcSwgZG1wMSwgZG1xMSwgaXFtcCkpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICB9XG59KSgpO1xuXG5mdW5jdGlvbiBnZW5PcGVuU1NMRFNBUHViKHAsIHEsIGcsIHkpIHtcbiAgdmFyIGFzbldyaXRlciA9IG5ldyBCZXIuV3JpdGVyKCk7XG4gIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgLy8gYWxnb3JpdGhtXG4gICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAgIGFzbldyaXRlci53cml0ZU9JRCgnMS4yLjg0MC4xMDA0MC40LjEnKTsgLy8gaWQtZHNhXG4gICAgICAvLyBhbGdvcml0aG0gcGFyYW1ldGVyc1xuICAgICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHAsIEJlci5JbnRlZ2VyKTtcbiAgICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHEsIEJlci5JbnRlZ2VyKTtcbiAgICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKGcsIEJlci5JbnRlZ2VyKTtcbiAgICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuXG4gICAgLy8gc3ViamVjdFB1YmxpY0tleVxuICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKEJlci5CaXRTdHJpbmcpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnl0ZSgweDAwKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcih5LCBCZXIuSW50ZWdlcik7XG4gICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICByZXR1cm4gbWFrZVBFTSgnUFVCTElDJywgYXNuV3JpdGVyLmJ1ZmZlcik7XG59XG5cbmZ1bmN0aW9uIGdlbk9wZW5TU0hEU0FQdWIocCwgcSwgZywgeSkge1xuICB2YXIgcHVibGljS2V5ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyA3IC8vIHNzaC1kc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBwLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIHEubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgZy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyB5Lmxlbmd0aCk7XG5cbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIDcsIDApO1xuICBwdWJsaWNLZXkud3JpdGUoJ3NzaC1kc3MnLCA0LCA3LCAnYXNjaWknKTtcblxuICB2YXIgaSA9IDQgKyA3O1xuICB3cml0ZVVJbnQzMkJFKHB1YmxpY0tleSwgcC5sZW5ndGgsIGkpO1xuICBwLmNvcHkocHVibGljS2V5LCBpICs9IDQpO1xuXG4gIHdyaXRlVUludDMyQkUocHVibGljS2V5LCBxLmxlbmd0aCwgaSArPSBwLmxlbmd0aCk7XG4gIHEuY29weShwdWJsaWNLZXksIGkgKz0gNCk7XG5cbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIGcubGVuZ3RoLCBpICs9IHEubGVuZ3RoKTtcbiAgZy5jb3B5KHB1YmxpY0tleSwgaSArPSA0KTtcblxuICB3cml0ZVVJbnQzMkJFKHB1YmxpY0tleSwgeS5sZW5ndGgsIGkgKz0gZy5sZW5ndGgpO1xuICB5LmNvcHkocHVibGljS2V5LCBpICsgNCk7XG5cbiAgcmV0dXJuIHB1YmxpY0tleTtcbn1cblxuZnVuY3Rpb24gZ2VuT3BlblNTTERTQVByaXYocCwgcSwgZywgeSwgeCkge1xuICB2YXIgYXNuV3JpdGVyID0gbmV3IEJlci5Xcml0ZXIoKTtcbiAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICBhc25Xcml0ZXIud3JpdGVJbnQoMHgwMCwgQmVyLkludGVnZXIpO1xuICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihwLCBCZXIuSW50ZWdlcik7XG4gICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHEsIEJlci5JbnRlZ2VyKTtcbiAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIoZywgQmVyLkludGVnZXIpO1xuICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcih5LCBCZXIuSW50ZWdlcik7XG4gICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHgsIEJlci5JbnRlZ2VyKTtcbiAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gIHJldHVybiBtYWtlUEVNKCdEU0EgUFJJVkFURScsIGFzbldyaXRlci5idWZmZXIpO1xufVxuXG5mdW5jdGlvbiBnZW5PcGVuU1NMRWRQdWIocHViKSB7XG4gIHZhciBhc25Xcml0ZXIgPSBuZXcgQmVyLldyaXRlcigpO1xuICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgIC8vIGFsZ29yaXRobVxuICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgICBhc25Xcml0ZXIud3JpdGVPSUQoJzEuMy4xMDEuMTEyJyk7IC8vIGlkLUVkMjU1MTlcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcblxuICAgIC8vIFB1YmxpY0tleVxuICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKEJlci5CaXRTdHJpbmcpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnl0ZSgweDAwKTtcbiAgICAgIC8vIFhYWDogaGFjayB0byB3cml0ZSBhIHJhdyBidWZmZXIgd2l0aG91dCBhIHRhZyAtLSB5dWNrXG4gICAgICBhc25Xcml0ZXIuX2Vuc3VyZShwdWIubGVuZ3RoKTtcbiAgICAgIHB1Yi5jb3B5KGFzbldyaXRlci5fYnVmLCBhc25Xcml0ZXIuX29mZnNldCwgMCwgcHViLmxlbmd0aCk7XG4gICAgICBhc25Xcml0ZXIuX29mZnNldCArPSBwdWIubGVuZ3RoO1xuICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgcmV0dXJuIG1ha2VQRU0oJ1BVQkxJQycsIGFzbldyaXRlci5idWZmZXIpO1xufVxuXG5mdW5jdGlvbiBnZW5PcGVuU1NIRWRQdWIocHViKSB7XG4gIHZhciBwdWJsaWNLZXkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDExIC8vIHNzaC1lZDI1NTE5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgcHViLmxlbmd0aCk7XG5cbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIDExLCAwKTtcbiAgcHVibGljS2V5LndyaXRlKCdzc2gtZWQyNTUxOScsIDQsIDExLCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKHB1YmxpY0tleSwgcHViLmxlbmd0aCwgMTUpO1xuICBwdWIuY29weShwdWJsaWNLZXksIDE5KTtcblxuICByZXR1cm4gcHVibGljS2V5O1xufVxuXG5mdW5jdGlvbiBnZW5PcGVuU1NMRWRQcml2KHByaXYpIHtcbiAgdmFyIGFzbldyaXRlciA9IG5ldyBCZXIuV3JpdGVyKCk7XG4gIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgLy8gdmVyc2lvblxuICAgIGFzbldyaXRlci53cml0ZUludCgweDAwLCBCZXIuSW50ZWdlcik7XG5cbiAgICAvLyBhbGdvcml0aG1cbiAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlT0lEKCcxLjMuMTAxLjExMicpOyAvLyBpZC1FZDI1NTE5XG4gICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG5cbiAgICAvLyBQcml2YXRlS2V5XG4gICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoQmVyLk9jdGV0U3RyaW5nKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihwcml2LCBCZXIuT2N0ZXRTdHJpbmcpO1xuICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgcmV0dXJuIG1ha2VQRU0oJ1BSSVZBVEUnLCBhc25Xcml0ZXIuYnVmZmVyKTtcbn1cblxuZnVuY3Rpb24gZ2VuT3BlblNTTEVDRFNBUHViKG9pZCwgUSkge1xuICB2YXIgYXNuV3JpdGVyID0gbmV3IEJlci5Xcml0ZXIoKTtcbiAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAvLyBhbGdvcml0aG1cbiAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlT0lEKCcxLjIuODQwLjEwMDQ1LjIuMScpOyAvLyBpZC1lY1B1YmxpY0tleVxuICAgICAgLy8gYWxnb3JpdGhtIHBhcmFtZXRlcnMgKG5hbWVkQ3VydmUpXG4gICAgICBhc25Xcml0ZXIud3JpdGVPSUQob2lkKTtcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcblxuICAgIC8vIHN1YmplY3RQdWJsaWNLZXlcbiAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZShCZXIuQml0U3RyaW5nKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ5dGUoMHgwMCk7XG4gICAgICAvLyBYWFg6IGhhY2sgdG8gd3JpdGUgYSByYXcgYnVmZmVyIHdpdGhvdXQgYSB0YWcgLS0geXVja1xuICAgICAgYXNuV3JpdGVyLl9lbnN1cmUoUS5sZW5ndGgpO1xuICAgICAgUS5jb3B5KGFzbldyaXRlci5fYnVmLCBhc25Xcml0ZXIuX29mZnNldCwgMCwgUS5sZW5ndGgpO1xuICAgICAgYXNuV3JpdGVyLl9vZmZzZXQgKz0gUS5sZW5ndGg7XG4gICAgICAvLyBlbmQgaGFja1xuICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgcmV0dXJuIG1ha2VQRU0oJ1BVQkxJQycsIGFzbldyaXRlci5idWZmZXIpO1xufVxuXG5mdW5jdGlvbiBnZW5PcGVuU1NIRUNEU0FQdWIob2lkLCBRKSB7XG4gIHZhciBjdXJ2ZU5hbWU7XG4gIHN3aXRjaCAob2lkKSB7XG4gICAgY2FzZSAnMS4yLjg0MC4xMDA0NS4zLjEuNyc6XG4gICAgICAvLyBwcmltZTI1NnYxL3NlY3AyNTZyMVxuICAgICAgY3VydmVOYW1lID0gJ25pc3RwMjU2JztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJzEuMy4xMzIuMC4zNCc6XG4gICAgICAvLyBzZWNwMzg0cjFcbiAgICAgIGN1cnZlTmFtZSA9ICduaXN0cDM4NCc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICcxLjMuMTMyLjAuMzUnOlxuICAgICAgLy8gc2VjcDUyMXIxXG4gICAgICBjdXJ2ZU5hbWUgPSAnbmlzdHA1MjEnO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwdWJsaWNLZXkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDE5IC8vIGVjZHNhLXNoYTItPGN1cnZlIG5hbWU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgOCAvLyA8Y3VydmUgbmFtZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBRLmxlbmd0aCk7XG5cbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIDE5LCAwKTtcbiAgcHVibGljS2V5LndyaXRlKCdlY2RzYS1zaGEyLScgKyBjdXJ2ZU5hbWUsIDQsIDE5LCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKHB1YmxpY0tleSwgOCwgMjMpO1xuICBwdWJsaWNLZXkud3JpdGUoY3VydmVOYW1lLCAyNywgOCwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIFEubGVuZ3RoLCAzNSk7XG4gIFEuY29weShwdWJsaWNLZXksIDM5KTtcblxuICByZXR1cm4gcHVibGljS2V5O1xufVxuXG5mdW5jdGlvbiBnZW5PcGVuU1NMRUNEU0FQcml2KG9pZCwgcHViLCBwcml2KSB7XG4gIHZhciBhc25Xcml0ZXIgPSBuZXcgQmVyLldyaXRlcigpO1xuICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgIC8vIHZlcnNpb25cbiAgICBhc25Xcml0ZXIud3JpdGVJbnQoMHgwMSwgQmVyLkludGVnZXIpO1xuICAgIC8vIHByaXZhdGVLZXlcbiAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIocHJpdiwgQmVyLk9jdGV0U3RyaW5nKTtcbiAgICAvLyBwYXJhbWV0ZXJzIChvcHRpb25hbClcbiAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgweEEwKTtcbiAgICAgIGFzbldyaXRlci53cml0ZU9JRChvaWQpO1xuICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICAgIC8vIHB1YmxpY0tleSAob3B0aW9uYWwpXG4gICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoMHhBMSk7XG4gICAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZShCZXIuQml0U3RyaW5nKTtcbiAgICAgICAgYXNuV3JpdGVyLndyaXRlQnl0ZSgweDAwKTtcbiAgICAgICAgLy8gWFhYOiBoYWNrIHRvIHdyaXRlIGEgcmF3IGJ1ZmZlciB3aXRob3V0IGEgdGFnIC0tIHl1Y2tcbiAgICAgICAgYXNuV3JpdGVyLl9lbnN1cmUocHViLmxlbmd0aCk7XG4gICAgICAgIHB1Yi5jb3B5KGFzbldyaXRlci5fYnVmLCBhc25Xcml0ZXIuX29mZnNldCwgMCwgcHViLmxlbmd0aCk7XG4gICAgICAgIGFzbldyaXRlci5fb2Zmc2V0ICs9IHB1Yi5sZW5ndGg7XG4gICAgICAgIC8vIGVuZCBoYWNrXG4gICAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gIHJldHVybiBtYWtlUEVNKCdFQyBQUklWQVRFJywgYXNuV3JpdGVyLmJ1ZmZlcik7XG59XG5cbmZ1bmN0aW9uIGdlbk9wZW5TU0xFQ0RTQVB1YkZyb21Qcml2KGN1cnZlTmFtZSwgcHJpdikge1xuICB2YXIgdGVtcEVDREggPSBjcnlwdG8uY3JlYXRlRUNESChjdXJ2ZU5hbWUpO1xuICB0ZW1wRUNESC5zZXRQcml2YXRlS2V5KHByaXYpO1xuICByZXR1cm4gdGVtcEVDREguZ2V0UHVibGljS2V5KCk7XG59XG5cbnZhciBiYXNlS2V5U2lnbiA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHR5cGVvZiBjcnlwdG9TaWduID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHNpZ24oZGF0YSkge1xuICAgICAgdmFyIHBlbSA9IHRoaXNbU1lNX1BSSVZfUEVNXTtcbiAgICAgIGlmIChwZW0gPT09IG51bGwpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ05vIHByaXZhdGUga2V5IGF2YWlsYWJsZScpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNyeXB0b1NpZ24odGhpc1tTWU1fSEFTSF9BTEdPXSwgZGF0YSwgcGVtKTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIHJldHVybiBleDtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGZ1bmN0aW9uIHRyeVNpZ24oc2lnbmF0dXJlLCBwcml2S2V5KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc2lnbmF0dXJlLnNpZ24ocHJpdktleSk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICByZXR1cm4gZXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHNpZ24oZGF0YSkge1xuICAgICAgdmFyIHBlbSA9IHRoaXNbU1lNX1BSSVZfUEVNXTtcbiAgICAgIGlmIChwZW0gPT09IG51bGwpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ05vIHByaXZhdGUga2V5IGF2YWlsYWJsZScpO1xuICAgICAgdmFyIHNpZ25hdHVyZSA9IGNyZWF0ZVNpZ24odGhpc1tTWU1fSEFTSF9BTEdPXSk7XG4gICAgICBzaWduYXR1cmUudXBkYXRlKGRhdGEpO1xuICAgICAgcmV0dXJuIHRyeVNpZ24oc2lnbmF0dXJlLCBwZW0pO1xuICAgIH07XG4gIH1cbn0pKCk7XG5cbnZhciBiYXNlS2V5VmVyaWZ5ID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodHlwZW9mIGNyeXB0b1ZlcmlmeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiB2ZXJpZnkoZGF0YSwgc2lnbmF0dXJlKSB7XG4gICAgICB2YXIgcGVtID0gdGhpc1tTWU1fUFVCX1BFTV07XG4gICAgICBpZiAocGVtID09PSBudWxsKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdObyBwdWJsaWMga2V5IGF2YWlsYWJsZScpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNyeXB0b1ZlcmlmeSh0aGlzW1NZTV9IQVNIX0FMR09dLCBkYXRhLCBwZW0sIHNpZ25hdHVyZSk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICByZXR1cm4gZXg7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBmdW5jdGlvbiB0cnlWZXJpZnkodmVyaWZpZXIsIHB1YktleSwgc2lnbmF0dXJlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdmVyaWZpZXIudmVyaWZ5KHB1YktleSwgc2lnbmF0dXJlKTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIHJldHVybiBleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KGRhdGEsIHNpZ25hdHVyZSkge1xuICAgICAgdmFyIHBlbSA9IHRoaXNbU1lNX1BVQl9QRU1dO1xuICAgICAgaWYgKHBlbSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTm8gcHVibGljIGtleSBhdmFpbGFibGUnKTtcbiAgICAgIHZhciB2ZXJpZmllciA9IGNyZWF0ZVZlcmlmeSh0aGlzW1NZTV9IQVNIX0FMR09dKTtcbiAgICAgIHZlcmlmaWVyLnVwZGF0ZShkYXRhKTtcbiAgICAgIHJldHVybiB0cnlWZXJpZnkodmVyaWZpZXIsIHBlbSwgc2lnbmF0dXJlKTtcbiAgICB9O1xuICB9XG59KSgpO1xuXG52YXIgQmFzZUtleSA9IHtcbiAgc2lnbjogYmFzZUtleVNpZ24sXG4gIHZlcmlmeTogYmFzZUtleVZlcmlmeSxcbiAgZ2V0UHJpdmF0ZVBFTTogZnVuY3Rpb24gZ2V0UHJpdmF0ZVBFTSgpIHtcbiAgICByZXR1cm4gdGhpc1tTWU1fUFJJVl9QRU1dO1xuICB9LFxuICBnZXRQdWJsaWNQRU06IGZ1bmN0aW9uIGdldFB1YmxpY1BFTSgpIHtcbiAgICByZXR1cm4gdGhpc1tTWU1fUFVCX1BFTV07XG4gIH0sXG4gIGdldFB1YmxpY1NTSDogZnVuY3Rpb24gZ2V0UHVibGljU1NIKCkge1xuICAgIHJldHVybiB0aGlzW1NZTV9QVUJfU1NIXTtcbiAgfSxcbn07XG5cblxuXG5mdW5jdGlvbiBPcGVuU1NIX1ByaXZhdGUodHlwZSwgY29tbWVudCwgcHJpdlBFTSwgcHViUEVNLCBwdWJTU0gsIGFsZ28sIGRlY3J5cHRlZCkge1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLmNvbW1lbnQgPSBjb21tZW50O1xuICB0aGlzW1NZTV9QUklWX1BFTV0gPSBwcml2UEVNO1xuICB0aGlzW1NZTV9QVUJfUEVNXSA9IHB1YlBFTTtcbiAgdGhpc1tTWU1fUFVCX1NTSF0gPSBwdWJTU0g7XG4gIHRoaXNbU1lNX0hBU0hfQUxHT10gPSBhbGdvO1xuICB0aGlzW1NZTV9ERUNSWVBURURdID0gZGVjcnlwdGVkO1xufVxuT3BlblNTSF9Qcml2YXRlLnByb3RvdHlwZSA9IEJhc2VLZXk7XG4oZnVuY3Rpb24oKSB7XG4gIHZhciByZWdleHAgPSAvXi0tLS0tQkVHSU4gT1BFTlNTSCBQUklWQVRFIEtFWS0tLS0tKD86XFxyXFxufFxcbikoW1xcc1xcU10rKSg/OlxcclxcbnxcXG4pLS0tLS1FTkQgT1BFTlNTSCBQUklWQVRFIEtFWS0tLS0tJC87XG4gIE9wZW5TU0hfUHJpdmF0ZS5wYXJzZSA9IGZ1bmN0aW9uKHN0ciwgcGFzc3BocmFzZSkge1xuICAgIHZhciBtID0gcmVnZXhwLmV4ZWMoc3RyKTtcbiAgICBpZiAobSA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHZhciByZXQ7XG4gICAgdmFyIGRhdGEgPSBCdWZmZXIuZnJvbShtWzFdLCAnYmFzZTY0Jyk7XG4gICAgaWYgKGRhdGEubGVuZ3RoIDwgMzEpIC8vIG1hZ2ljICgrIG1hZ2ljIG51bGwgdGVybS4pICsgbWluaW11bSBmaWVsZCBsZW5ndGhzXG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgIHZhciBtYWdpYyA9IGRhdGEudG9TdHJpbmcoJ2FzY2lpJywgMCwgMTUpO1xuICAgIGlmIChtYWdpYyAhPT0gJ29wZW5zc2gta2V5LXYxXFwwJylcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIE9wZW5TU0gga2V5IG1hZ2ljOiAnICsgbWFnaWMpO1xuXG4gICAgLy8gYXZvaWQgY3ljbGljIHJlcXVpcmUgYnkgcmVxdWlyaW5nIG9uIGZpcnN0IHVzZVxuICAgIGlmICghdXRpbHMpXG4gICAgICB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuICAgIHZhciBjaXBoZXJOYW1lID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCAxNSwgJ2FzY2lpJyk7XG4gICAgaWYgKGNpcGhlck5hbWUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICBpZiAoY2lwaGVyTmFtZSAhPT0gJ25vbmUnICYmIFNVUFBPUlRFRF9DSVBIRVIuaW5kZXhPZihjaXBoZXJOYW1lKSA9PT0gLTEpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjaXBoZXIgZm9yIE9wZW5TU0gga2V5OiAnICsgY2lwaGVyTmFtZSk7XG5cbiAgICB2YXIga2RmTmFtZSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zLCAnYXNjaWknKTtcbiAgICBpZiAoa2RmTmFtZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgIGlmIChrZGZOYW1lICE9PSAnbm9uZScpIHtcbiAgICAgIGlmIChjaXBoZXJOYW1lID09PSAnbm9uZScpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICBpZiAoa2RmTmFtZSAhPT0gJ2JjcnlwdCcpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGtkZiBuYW1lIGZvciBPcGVuU1NIIGtleTogJyArIGtkZk5hbWUpO1xuICAgICAgaWYgKCFwYXNzcGhyYXNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0VuY3J5cHRlZCBwcml2YXRlIE9wZW5TU0gga2V5IGRldGVjdGVkLCBidXQgbm8gcGFzc3BocmFzZSBnaXZlbidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNpcGhlck5hbWUgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICB9XG5cbiAgICB2YXIgZW5jSW5mbztcbiAgICB2YXIgY2lwaGVyS2V5O1xuICAgIHZhciBjaXBoZXJJVjtcbiAgICBpZiAoY2lwaGVyTmFtZSAhPT0gJ25vbmUnKVxuICAgICAgZW5jSW5mbyA9IENJUEhFUl9JTkZPW2NpcGhlck5hbWVdO1xuICAgIHZhciBrZGZPcHRpb25zID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgIGlmIChrZGZPcHRpb25zID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgaWYgKGtkZk9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBzd2l0Y2ggKGtkZk5hbWUpIHtcbiAgICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgY2FzZSAnYmNyeXB0JzpcbiAgICAgICAgICAvKlxuICAgICAgICAgICAgc3RyaW5nIHNhbHRcbiAgICAgICAgICAgIHVpbnQzMiByb3VuZHNcbiAgICAgICAgICAqL1xuICAgICAgICAgIHZhciBzYWx0ID0gdXRpbHMucmVhZFN0cmluZyhrZGZPcHRpb25zLCAwKTtcbiAgICAgICAgICBpZiAoc2FsdCA9PT0gZmFsc2UgfHwga2RmT3B0aW9ucy5fcG9zICsgNCA+IGtkZk9wdGlvbnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICB2YXIgcm91bmRzID0gcmVhZFVJbnQzMkJFKGtkZk9wdGlvbnMsIGtkZk9wdGlvbnMuX3Bvcyk7XG4gICAgICAgICAgdmFyIGdlbiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShlbmNJbmZvLmtleUxlbiArIGVuY0luZm8uaXZMZW4pO1xuICAgICAgICAgIHZhciByID0gYmNyeXB0X3Bia2RmKHBhc3NwaHJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3BocmFzZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWx0Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZHMpO1xuICAgICAgICAgIGlmIChyICE9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIGluZm9ybWF0aW9uIHRvIGRlY3J5cHQga2V5Jyk7XG4gICAgICAgICAgY2lwaGVyS2V5ID0gZ2VuLnNsaWNlKDAsIGVuY0luZm8ua2V5TGVuKTtcbiAgICAgICAgICBjaXBoZXJJViA9IGdlbi5zbGljZShlbmNJbmZvLmtleUxlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChrZGZOYW1lICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuXG4gICAgdmFyIGtleUNvdW50ID0gdXRpbHMucmVhZEludChkYXRhLCBkYXRhLl9wb3MpO1xuICAgIGlmIChrZXlDb3VudCA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgIGRhdGEuX3BvcyArPSA0O1xuXG4gICAgaWYgKGtleUNvdW50ID4gMCkge1xuICAgICAgLy8gVE9ETzogcGxhY2Ugc2Vuc2libGUgbGltaXQgb24gbWF4IGBrZXlDb3VudGBcblxuICAgICAgLy8gUmVhZCBwdWJsaWMga2V5cyBmaXJzdFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlDb3VudDsgKytpKSB7XG4gICAgICAgIHZhciBwdWJEYXRhID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICBpZiAocHViRGF0YSA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgdmFyIHR5cGUgPSB1dGlscy5yZWFkU3RyaW5nKHB1YkRhdGEsIDAsICdhc2NpaScpO1xuICAgICAgICBpZiAodHlwZSA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByaXZCbG9iID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgaWYgKHByaXZCbG9iID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcblxuICAgICAgaWYgKGNpcGhlcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGVuY3J5cHRlZCBwcml2YXRlIGtleShzKVxuICAgICAgICBpZiAocHJpdkJsb2IubGVuZ3RoIDwgZW5jSW5mby5ibG9ja0xlblxuICAgICAgICAgICAgfHwgKHByaXZCbG9iLmxlbmd0aCAlIGVuY0luZm8uYmxvY2tMZW4pICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBvcHRpb25zID0geyBhdXRoVGFnTGVuZ3RoOiBlbmNJbmZvLmF1dGhMZW4gfTtcbiAgICAgICAgICB2YXIgZGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlcml2KFNTSF9UT19PUEVOU1NMW2NpcGhlck5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVySVYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoZW5jSW5mby5hdXRoTGVuID4gMCkge1xuICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoIC0gZGF0YS5fcG9zIDwgZW5jSW5mby5hdXRoTGVuKVxuICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyhcbiAgICAgICAgICAgICAgZGF0YS5zbGljZShkYXRhLl9wb3MsIGRhdGEuX3BvcyArPSBlbmNJbmZvLmF1dGhMZW4pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcml2QmxvYiA9IGNvbWJpbmVCdWZmZXJzKGRlY2lwaGVyLnVwZGF0ZShwcml2QmxvYiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpcGhlci5maW5hbCgpKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICByZXR1cm4gZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIE5vdGhpbmcgc2hvdWxkIHdlIGZvbGxvdyB0aGUgcHJpdmF0ZSBrZXkocyksIGV4Y2VwdCBhIHBvc3NpYmxlXG4gICAgICAvLyBhdXRoZW50aWNhdGlvbiB0YWcgZm9yIHJlbGV2YW50IGNpcGhlcnNcbiAgICAgIGlmIChkYXRhLl9wb3MgIT09IGRhdGEubGVuZ3RoKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuXG4gICAgICByZXQgPSBwYXJzZU9wZW5TU0hQcml2S2V5cyhwcml2QmxvYiwga2V5Q291bnQsIGNpcGhlcktleSAhPT0gdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0ID0gW107XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGFyc2VPcGVuU1NIUHJpdktleXMoZGF0YSwgbmtleXMsIGRlY3J5cHRlZCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgLypcbiAgICAgIHVpbnQzMlx0Y2hlY2tpbnRcbiAgICAgIHVpbnQzMlx0Y2hlY2tpbnRcbiAgICAgIHN0cmluZ1x0cHJpdmF0ZWtleTFcbiAgICAgIHN0cmluZ1x0Y29tbWVudDFcbiAgICAgIHN0cmluZ1x0cHJpdmF0ZWtleTJcbiAgICAgIHN0cmluZ1x0Y29tbWVudDJcbiAgICAgIC4uLlxuICAgICAgc3RyaW5nXHRwcml2YXRla2V5TlxuICAgICAgc3RyaW5nXHRjb21tZW50TlxuICAgICAgY2hhclx0MVxuICAgICAgY2hhclx0MlxuICAgICAgY2hhclx0M1xuICAgICAgLi4uXG4gICAgICBjaGFyXHRwYWRsZW4gJSAyNTVcbiAgICAqL1xuICAgIGlmIChkYXRhLmxlbmd0aCA8IDgpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgIHZhciBjaGVjazEgPSByZWFkVUludDMyQkUoZGF0YSwgMCk7XG4gICAgdmFyIGNoZWNrMiA9IHJlYWRVSW50MzJCRShkYXRhLCA0KTtcbiAgICBpZiAoY2hlY2sxICE9PSBjaGVjazIpIHtcbiAgICAgIGlmIChkZWNyeXB0ZWQpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ09wZW5TU0gga2V5IGludGVncml0eSBjaGVjayBmYWlsZWQgLS0gYmFkIHBhc3NwaHJhc2U/Jyk7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdPcGVuU1NIIGtleSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkJyk7XG4gICAgfVxuICAgIGRhdGEuX3BvcyA9IDg7XG4gICAgdmFyIGk7XG4gICAgdmFyIG9pZDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmtleXM7ICsraSkge1xuICAgICAgdmFyIGFsZ28gPSB1bmRlZmluZWQ7XG4gICAgICB2YXIgcHJpdlBFTSA9IHVuZGVmaW5lZDtcbiAgICAgIHZhciBwdWJQRU0gPSB1bmRlZmluZWQ7XG4gICAgICB2YXIgcHViU1NIID0gdW5kZWZpbmVkO1xuICAgICAgLy8gVGhlIE9wZW5TU0ggZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGtleSBmb3JtYXQgYWN0dWFsbHkgbGllcywgdGhlIGVudGlyZXR5XG4gICAgICAvLyBvZiB0aGUgcHJpdmF0ZSBrZXkgY29udGVudCBpcyBub3QgY29udGFpbmVkIHdpdGggYSBzdHJpbmcgZmllbGQsIGl0J3NcbiAgICAgIC8vIGFjdHVhbGx5IHRoZSBsaXRlcmFsIGNvbnRlbnRzIG9mIHRoZSBwcml2YXRlIGtleSwgc28gdG8gYmUgYWJsZSB0byBmaW5kXG4gICAgICAvLyB0aGUgZW5kIG9mIHRoZSBrZXkgZGF0YSB5b3UgbmVlZCB0byBrbm93IHRoZSBsYXlvdXQvZm9ybWF0IG9mIGVhY2gga2V5XG4gICAgICAvLyB0eXBlIC4uLlxuICAgICAgdmFyIHR5cGUgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3BvcywgJ2FzY2lpJyk7XG4gICAgICBpZiAodHlwZSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdzc2gtcnNhJzpcbiAgICAgICAgICAvKlxuICAgICAgICAgICAgc3RyaW5nICBuIC0tIHB1YmxpY1xuICAgICAgICAgICAgc3RyaW5nICBlIC0tIHB1YmxpY1xuICAgICAgICAgICAgc3RyaW5nICBkIC0tIHByaXZhdGVcbiAgICAgICAgICAgIHN0cmluZyAgaXFtcCAtLSBwcml2YXRlXG4gICAgICAgICAgICBzdHJpbmcgIHAgLS0gcHJpdmF0ZVxuICAgICAgICAgICAgc3RyaW5nICBxIC0tIHByaXZhdGVcbiAgICAgICAgICAqL1xuICAgICAgICAgIHZhciBuID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmIChuID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgdmFyIGUgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgICAgaWYgKGUgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICB2YXIgZCA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgICBpZiAoZCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgICAgIHZhciBpcW1wID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmIChpcW1wID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgdmFyIHAgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgICAgaWYgKHAgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICB2YXIgcSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgICBpZiAocSA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuXG4gICAgICAgICAgcHViUEVNID0gZ2VuT3BlblNTTFJTQVB1YihuLCBlKTtcbiAgICAgICAgICBwdWJTU0ggPSBnZW5PcGVuU1NIUlNBUHViKG4sIGUpO1xuICAgICAgICAgIHByaXZQRU0gPSBnZW5PcGVuU1NMUlNBUHJpdihuLCBlLCBkLCBpcW1wLCBwLCBxKTtcbiAgICAgICAgICBhbGdvID0gJ3NoYTEnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzc2gtZHNzJzpcbiAgICAgICAgICAvKlxuICAgICAgICAgICAgc3RyaW5nICBwIC0tIHB1YmxpY1xuICAgICAgICAgICAgc3RyaW5nICBxIC0tIHB1YmxpY1xuICAgICAgICAgICAgc3RyaW5nICBnIC0tIHB1YmxpY1xuICAgICAgICAgICAgc3RyaW5nICB5IC0tIHB1YmxpY1xuICAgICAgICAgICAgc3RyaW5nICB4IC0tIHByaXZhdGVcbiAgICAgICAgICAqL1xuICAgICAgICAgIHZhciBwID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmIChwID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgdmFyIHEgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgICAgaWYgKHEgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICB2YXIgZyA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgICBpZiAoZyA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgICAgIHZhciB5ID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmICh5ID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgdmFyIHggPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgICAgaWYgKHggPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcblxuICAgICAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xEU0FQdWIocCwgcSwgZywgeSk7XG4gICAgICAgICAgcHViU1NIID0gZ2VuT3BlblNTSERTQVB1YihwLCBxLCBnLCB5KTtcbiAgICAgICAgICBwcml2UEVNID0gZ2VuT3BlblNTTERTQVByaXYocCwgcSwgZywgeSwgeCk7XG4gICAgICAgICAgYWxnbyA9ICdzaGExJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3NoLWVkMjU1MTknOlxuICAgICAgICAgIGlmICghRUREU0FfU1VQUE9SVEVEKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgT3BlblNTSCBwcml2YXRlIGtleSB0eXBlOiAnICsgdHlwZSk7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgICogc3RyaW5nICBwdWJsaWMga2V5XG4gICAgICAgICAgICAqIHN0cmluZyAgcHJpdmF0ZSBrZXkgKyBwdWJsaWMga2V5XG4gICAgICAgICAgKi9cbiAgICAgICAgICB2YXIgZWRwdWIgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgICAgaWYgKGVkcHViID09PSBmYWxzZSB8fCBlZHB1Yi5sZW5ndGggIT09IDMyKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICB2YXIgZWRwcml2ID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmIChlZHByaXYgPT09IGZhbHNlIHx8IGVkcHJpdi5sZW5ndGggIT09IDY0KVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcblxuICAgICAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xFZFB1YihlZHB1Yik7XG4gICAgICAgICAgcHViU1NIID0gZ2VuT3BlblNTSEVkUHViKGVkcHViKTtcbiAgICAgICAgICBwcml2UEVNID0gZ2VuT3BlblNTTEVkUHJpdihlZHByaXYuc2xpY2UoMCwgMzIpKTtcbiAgICAgICAgICBhbGdvID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDI1Nic6XG4gICAgICAgICAgYWxnbyA9ICdzaGEyNTYnO1xuICAgICAgICAgIG9pZCA9ICcxLjIuODQwLjEwMDQ1LjMuMS43JztcbiAgICAgICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDM4NCc6XG4gICAgICAgICAgaWYgKGFsZ28gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWxnbyA9ICdzaGEzODQnO1xuICAgICAgICAgICAgb2lkID0gJzEuMy4xMzIuMC4zNCc7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlY2RzYS1zaGEyLW5pc3RwNTIxJzpcbiAgICAgICAgICBpZiAoYWxnbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbGdvID0gJ3NoYTUxMic7XG4gICAgICAgICAgICBvaWQgPSAnMS4zLjEzMi4wLjM1JztcbiAgICAgICAgICB9XG4gICAgICAgICAgLypcbiAgICAgICAgICAgIHN0cmluZyAgY3VydmUgbmFtZVxuICAgICAgICAgICAgc3RyaW5nICBRIC0tIHB1YmxpY1xuICAgICAgICAgICAgc3RyaW5nICBkIC0tIHByaXZhdGVcbiAgICAgICAgICAqL1xuICAgICAgICAgIC8vIFRPRE86IHZhbGlkYXRlIGN1cnZlIG5hbWUgYWdhaW5zdCB0eXBlXG4gICAgICAgICAgaWYgKCFza2lwRmllbGRzKGRhdGEsIDEpKSAvLyBTa2lwIGN1cnZlIG5hbWVcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgdmFyIGVjcHViID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmIChlY3B1YiA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgICAgIHZhciBlY3ByaXYgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgICAgaWYgKGVjcHJpdiA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuXG4gICAgICAgICAgcHViUEVNID0gZ2VuT3BlblNTTEVDRFNBUHViKG9pZCwgZWNwdWIpO1xuICAgICAgICAgIHB1YlNTSCA9IGdlbk9wZW5TU0hFQ0RTQVB1YihvaWQsIGVjcHViKTtcbiAgICAgICAgICBwcml2UEVNID0gZ2VuT3BlblNTTEVDRFNBUHJpdihvaWQsIGVjcHViLCBlY3ByaXYpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIE9wZW5TU0ggcHJpdmF0ZSBrZXkgdHlwZTogJyArIHR5cGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJpdkNvbW1lbnQgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3BvcywgJ3V0ZjgnKTtcbiAgICAgIGlmIChwcml2Q29tbWVudCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG5cbiAgICAgIGtleXMucHVzaChcbiAgICAgICAgbmV3IE9wZW5TU0hfUHJpdmF0ZSh0eXBlLCBwcml2Q29tbWVudCwgcHJpdlBFTSwgcHViUEVNLCBwdWJTU0gsIGFsZ28sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdGVkKVxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGNudCA9IDA7XG4gICAgZm9yIChpID0gZGF0YS5fcG9zOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGRhdGFbaV0gIT09ICgrK2NudCAlIDI1NSkpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXM7XG4gIH1cbn0pKCk7XG5cblxuXG5mdW5jdGlvbiBPcGVuU1NIX09sZF9Qcml2YXRlKHR5cGUsIGNvbW1lbnQsIHByaXZQRU0sIHB1YlBFTSwgcHViU1NILCBhbGdvLCBkZWNyeXB0ZWQpIHtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5jb21tZW50ID0gY29tbWVudDtcbiAgdGhpc1tTWU1fUFJJVl9QRU1dID0gcHJpdlBFTTtcbiAgdGhpc1tTWU1fUFVCX1BFTV0gPSBwdWJQRU07XG4gIHRoaXNbU1lNX1BVQl9TU0hdID0gcHViU1NIO1xuICB0aGlzW1NZTV9IQVNIX0FMR09dID0gYWxnbztcbiAgdGhpc1tTWU1fREVDUllQVEVEXSA9IGRlY3J5cHRlZDtcbn1cbk9wZW5TU0hfT2xkX1ByaXZhdGUucHJvdG90eXBlID0gQmFzZUtleTtcbihmdW5jdGlvbigpIHtcbiAgdmFyIHJlZ2V4cCA9IC9eLS0tLS1CRUdJTiAoUlNBfERTQXxFQykgUFJJVkFURSBLRVktLS0tLSg/OlxcclxcbnxcXG4pKCg/OlteOl0rOlxccypbXFxTXS4qKD86XFxyXFxufFxcbikpKikoW1xcc1xcU10rKSg/OlxcclxcbnxcXG4pLS0tLS1FTkQgKFJTQXxEU0F8RUMpIFBSSVZBVEUgS0VZLS0tLS0kLztcbiAgT3BlblNTSF9PbGRfUHJpdmF0ZS5wYXJzZSA9IGZ1bmN0aW9uKHN0ciwgcGFzc3BocmFzZSkge1xuICAgIHZhciBtID0gcmVnZXhwLmV4ZWMoc3RyKTtcbiAgICBpZiAobSA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHZhciBwcml2QmxvYiA9IEJ1ZmZlci5mcm9tKG1bM10sICdiYXNlNjQnKTtcbiAgICB2YXIgaGVhZGVycyA9IG1bMl07XG4gICAgdmFyIGRlY3J5cHRlZCA9IGZhbHNlO1xuICAgIGlmIChoZWFkZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGVuY3J5cHRlZCBrZXlcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNwbGl0KC9cXHJcXG58XFxuL2cpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBoZWFkZXIgPSBoZWFkZXJzW2ldO1xuICAgICAgICB2YXIgc2VwSWR4ID0gaGVhZGVyLmluZGV4T2YoJzonKTtcbiAgICAgICAgaWYgKGhlYWRlci5zbGljZSgwLCBzZXBJZHgpID09PSAnREVLLUluZm8nKSB7XG4gICAgICAgICAgdmFyIHZhbCA9IGhlYWRlci5zbGljZShzZXBJZHggKyAyKTtcbiAgICAgICAgICBzZXBJZHggPSB2YWwuaW5kZXhPZignLCcpO1xuICAgICAgICAgIGlmIChzZXBJZHggPT09IC0xKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgdmFyIGNpcGhlck5hbWUgPSB2YWwuc2xpY2UoMCwgc2VwSWR4KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChzdXBwb3J0ZWRPcGVuU1NMQ2lwaGVycy5pbmRleE9mKGNpcGhlck5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0NpcGhlciAoJ1xuICAgICAgICAgICAgICArIGNpcGhlck5hbWVcbiAgICAgICAgICAgICAgKyAnKSBub3Qgc3VwcG9ydGVkIGZvciBlbmNyeXB0ZWQgT3BlblNTSCBwcml2YXRlIGtleSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBlbmNJbmZvID0gQ0lQSEVSX0lORk9fT1BFTlNTTFtjaXBoZXJOYW1lXTtcbiAgICAgICAgICBpZiAoIWVuY0luZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdDaXBoZXIgKCdcbiAgICAgICAgICAgICAgKyBjaXBoZXJOYW1lXG4gICAgICAgICAgICAgICsgJykgbm90IHN1cHBvcnRlZCBmb3IgZW5jcnlwdGVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgY2lwaGVySVYgPSBCdWZmZXIuZnJvbSh2YWwuc2xpY2Uoc2VwSWR4ICsgMSksICdoZXgnKTtcbiAgICAgICAgICBpZiAoY2lwaGVySVYubGVuZ3RoICE9PSBlbmNJbmZvLml2TGVuKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIGVuY3J5cHRlZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgaWYgKCFwYXNzcGhyYXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRW5jcnlwdGVkIE9wZW5TU0ggcHJpdmF0ZSBrZXkgZGV0ZWN0ZWQsIGJ1dCBubyBwYXNzcGhyYXNlIGdpdmVuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGl2U2xpY2UgPSBjaXBoZXJJVi5zbGljZSgwLCA4KTtcbiAgICAgICAgICB2YXIgY2lwaGVyS2V5ID0gY3JlYXRlSGFzaCgnbWQ1JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKHBhc3NwaHJhc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShpdlNsaWNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICAgICAgICB3aGlsZSAoY2lwaGVyS2V5Lmxlbmd0aCA8IGVuY0luZm8ua2V5TGVuKSB7XG4gICAgICAgICAgICBjaXBoZXJLZXkgPSBjb21iaW5lQnVmZmVycyhcbiAgICAgICAgICAgICAgY2lwaGVyS2V5LFxuICAgICAgICAgICAgICBjcmVhdGVIYXNoKCdtZDUnKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoY2lwaGVyS2V5KVxuICAgICAgICAgICAgICAgIC51cGRhdGUocGFzc3BocmFzZSlcbiAgICAgICAgICAgICAgICAudXBkYXRlKGl2U2xpY2UpXG4gICAgICAgICAgICAgICAgLmRpZ2VzdCgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2lwaGVyS2V5Lmxlbmd0aCA+IGVuY0luZm8ua2V5TGVuKVxuICAgICAgICAgICAgY2lwaGVyS2V5ID0gY2lwaGVyS2V5LnNsaWNlKDAsIGVuY0luZm8ua2V5TGVuKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGRlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJpdihjaXBoZXJOYW1lLCBjaXBoZXJLZXksIGNpcGhlcklWKTtcbiAgICAgICAgICAgIGRlY2lwaGVyLnNldEF1dG9QYWRkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHByaXZCbG9iID0gY29tYmluZUJ1ZmZlcnMoZGVjaXBoZXIudXBkYXRlKHByaXZCbG9iKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXBoZXIuZmluYWwoKSk7XG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHR5cGU7XG4gICAgdmFyIHByaXZQRU07XG4gICAgdmFyIHB1YlBFTTtcbiAgICB2YXIgcHViU1NIO1xuICAgIHZhciBhbGdvO1xuICAgIHZhciByZWFkZXI7XG4gICAgdmFyIGVyck1zZyA9ICdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleSc7XG4gICAgaWYgKGRlY3J5cHRlZClcbiAgICAgIGVyck1zZyArPSAnLiBCYWQgcGFzc3BocmFzZT8nO1xuICAgIHN3aXRjaCAobVsxXSkge1xuICAgICAgY2FzZSAnUlNBJzpcbiAgICAgICAgdHlwZSA9ICdzc2gtcnNhJztcbiAgICAgICAgcHJpdlBFTSA9IG1ha2VQRU0oJ1JTQSBQUklWQVRFJywgcHJpdkJsb2IpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlYWRlciA9IG5ldyBCZXIuUmVhZGVyKHByaXZCbG9iKTtcbiAgICAgICAgICByZWFkZXIucmVhZFNlcXVlbmNlKCk7XG4gICAgICAgICAgcmVhZGVyLnJlYWRJbnQoKTsgLy8gc2tpcCB2ZXJzaW9uXG4gICAgICAgICAgdmFyIG4gPSByZWFkZXIucmVhZFN0cmluZyhCZXIuSW50ZWdlciwgdHJ1ZSk7XG4gICAgICAgICAgaWYgKG4gPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgICAgdmFyIGUgPSByZWFkZXIucmVhZFN0cmluZyhCZXIuSW50ZWdlciwgdHJ1ZSk7XG4gICAgICAgICAgaWYgKGUgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgICAgcHViUEVNID0gZ2VuT3BlblNTTFJTQVB1YihuLCBlKTtcbiAgICAgICAgICBwdWJTU0ggPSBnZW5PcGVuU1NIUlNBUHViKG4sIGUpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgfVxuICAgICAgICBhbGdvID0gJ3NoYTEnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0RTQSc6XG4gICAgICAgIHR5cGUgPSAnc3NoLWRzcyc7XG4gICAgICAgIHByaXZQRU0gPSBtYWtlUEVNKCdEU0EgUFJJVkFURScsIHByaXZCbG9iKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZWFkZXIgPSBuZXcgQmVyLlJlYWRlcihwcml2QmxvYik7XG4gICAgICAgICAgcmVhZGVyLnJlYWRTZXF1ZW5jZSgpO1xuICAgICAgICAgIHJlYWRlci5yZWFkSW50KCk7IC8vIHNraXAgdmVyc2lvblxuICAgICAgICAgIHZhciBwID0gcmVhZGVyLnJlYWRTdHJpbmcoQmVyLkludGVnZXIsIHRydWUpO1xuICAgICAgICAgIGlmIChwID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgIHZhciBxID0gcmVhZGVyLnJlYWRTdHJpbmcoQmVyLkludGVnZXIsIHRydWUpO1xuICAgICAgICAgIGlmIChxID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgIHZhciBnID0gcmVhZGVyLnJlYWRTdHJpbmcoQmVyLkludGVnZXIsIHRydWUpO1xuICAgICAgICAgIGlmIChnID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgIHZhciB5ID0gcmVhZGVyLnJlYWRTdHJpbmcoQmVyLkludGVnZXIsIHRydWUpO1xuICAgICAgICAgIGlmICh5ID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xEU0FQdWIocCwgcSwgZywgeSk7XG4gICAgICAgICAgcHViU1NIID0gZ2VuT3BlblNTSERTQVB1YihwLCBxLCBnLCB5KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgYWxnbyA9ICdzaGExJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFQyc6XG4gICAgICAgIHZhciBlY1NTTE5hbWU7XG4gICAgICAgIHZhciBlY1ByaXY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVhZGVyID0gbmV3IEJlci5SZWFkZXIocHJpdkJsb2IpO1xuICAgICAgICAgIHJlYWRlci5yZWFkU2VxdWVuY2UoKTtcbiAgICAgICAgICByZWFkZXIucmVhZEludCgpOyAvLyBza2lwIHZlcnNpb25cbiAgICAgICAgICBlY1ByaXYgPSByZWFkZXIucmVhZFN0cmluZyhCZXIuT2N0ZXRTdHJpbmcsIHRydWUpO1xuICAgICAgICAgIHJlYWRlci5yZWFkQnl0ZSgpOyAvLyBTa2lwIFwiY29tcGxleFwiIGNvbnRleHQgdHlwZSBieXRlXG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkTGVuZ3RoKCk7IC8vIFNraXAgY29udGV4dCBsZW5ndGhcbiAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZWFkZXIuX29mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgIHZhciBvaWQgPSByZWFkZXIucmVhZE9JRCgpO1xuICAgICAgICAgICAgaWYgKG9pZCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgc3dpdGNoIChvaWQpIHtcbiAgICAgICAgICAgICAgY2FzZSAnMS4yLjg0MC4xMDA0NS4zLjEuNyc6XG4gICAgICAgICAgICAgICAgLy8gcHJpbWUyNTZ2MS9zZWNwMjU2cjFcbiAgICAgICAgICAgICAgICBlY1NTTE5hbWUgPSAncHJpbWUyNTZ2MSc7XG4gICAgICAgICAgICAgICAgdHlwZSA9ICdlY2RzYS1zaGEyLW5pc3RwMjU2JztcbiAgICAgICAgICAgICAgICBhbGdvID0gJ3NoYTI1Nic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJzEuMy4xMzIuMC4zNCc6XG4gICAgICAgICAgICAgICAgLy8gc2VjcDM4NHIxXG4gICAgICAgICAgICAgICAgZWNTU0xOYW1lID0gJ3NlY3AzODRyMSc7XG4gICAgICAgICAgICAgICAgdHlwZSA9ICdlY2RzYS1zaGEyLW5pc3RwMzg0JztcbiAgICAgICAgICAgICAgICBhbGdvID0gJ3NoYTM4NCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJzEuMy4xMzIuMC4zNSc6XG4gICAgICAgICAgICAgICAgLy8gc2VjcDUyMXIxXG4gICAgICAgICAgICAgICAgZWNTU0xOYW1lID0gJ3NlY3A1MjFyMSc7XG4gICAgICAgICAgICAgICAgdHlwZSA9ICdlY2RzYS1zaGEyLW5pc3RwNTIxJztcbiAgICAgICAgICAgICAgICBhbGdvID0gJ3NoYTUxMic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcHJpdmF0ZSBrZXkgRUMgT0lEOiAnICsgb2lkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgcHJpdlBFTSA9IG1ha2VQRU0oJ0VDIFBSSVZBVEUnLCBwcml2QmxvYik7XG4gICAgICAgIHZhciBwdWJCbG9iID0gZ2VuT3BlblNTTEVDRFNBUHViRnJvbVByaXYoZWNTU0xOYW1lLCBlY1ByaXYpO1xuICAgICAgICBwdWJQRU0gPSBnZW5PcGVuU1NMRUNEU0FQdWIob2lkLCBwdWJCbG9iKTtcbiAgICAgICAgcHViU1NIID0gZ2VuT3BlblNTSEVDRFNBUHViKG9pZCwgcHViQmxvYik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3BlblNTSF9PbGRfUHJpdmF0ZSh0eXBlLCAnJywgcHJpdlBFTSwgcHViUEVNLCBwdWJTU0gsIGFsZ28sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY3J5cHRlZCk7XG4gIH07XG59KSgpO1xuXG5cblxuZnVuY3Rpb24gUFBLX1ByaXZhdGUodHlwZSwgY29tbWVudCwgcHJpdlBFTSwgcHViUEVNLCBwdWJTU0gsIGFsZ28sIGRlY3J5cHRlZCkge1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLmNvbW1lbnQgPSBjb21tZW50O1xuICB0aGlzW1NZTV9QUklWX1BFTV0gPSBwcml2UEVNO1xuICB0aGlzW1NZTV9QVUJfUEVNXSA9IHB1YlBFTTtcbiAgdGhpc1tTWU1fUFVCX1NTSF0gPSBwdWJTU0g7XG4gIHRoaXNbU1lNX0hBU0hfQUxHT10gPSBhbGdvO1xuICB0aGlzW1NZTV9ERUNSWVBURURdID0gZGVjcnlwdGVkO1xufVxuUFBLX1ByaXZhdGUucHJvdG90eXBlID0gQmFzZUtleTtcbihmdW5jdGlvbigpIHtcbiAgdmFyIEVNUFRZX1BBU1NQSFJBU0UgPSBCdWZmZXIuYWxsb2MoMCk7XG4gIHZhciBQUEtfSVYgPSBCdWZmZXIuZnJvbShbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0pO1xuICB2YXIgUFBLX1BQMSA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAwXSk7XG4gIHZhciBQUEtfUFAyID0gQnVmZmVyLmZyb20oWzAsIDAsIDAsIDFdKTtcbiAgdmFyIHJlZ2V4cCA9IC9eUHVUVFktVXNlci1LZXktRmlsZS0yOiAoc3NoLSg/OnJzYXxkc3MpKVxccj9cXG5FbmNyeXB0aW9uOiAoYWVzMjU2LWNiY3xub25lKVxccj9cXG5Db21tZW50OiAoW15cXHJcXG5dKilcXHI/XFxuUHVibGljLUxpbmVzOiBcXGQrXFxyP1xcbihbXFxzXFxTXSs/KVxccj9cXG5Qcml2YXRlLUxpbmVzOiBcXGQrXFxyP1xcbihbXFxzXFxTXSs/KVxccj9cXG5Qcml2YXRlLU1BQzogKFteXFxyXFxuXSspLztcbiAgUFBLX1ByaXZhdGUucGFyc2UgPSBmdW5jdGlvbihzdHIsIHBhc3NwaHJhc2UpIHtcbiAgICB2YXIgbSA9IHJlZ2V4cC5leGVjKHN0cik7XG4gICAgaWYgKG0gPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyBtWzFdID0ga2V5IHR5cGVcbiAgICAvLyBtWzJdID0gZW5jcnlwdGlvbiB0eXBlXG4gICAgLy8gbVszXSA9IGNvbW1lbnRcbiAgICAvLyBtWzRdID0gYmFzZTY0LWVuY29kZWQgcHVibGljIGtleSBkYXRhOlxuICAgIC8vICAgICAgICAgZm9yIFwic3NoLXJzYVwiOlxuICAgIC8vICAgICAgICAgIHN0cmluZyBcInNzaC1yc2FcIlxuICAgIC8vICAgICAgICAgIG1waW50ICBlICAgIChwdWJsaWMgZXhwb25lbnQpXG4gICAgLy8gICAgICAgICAgbXBpbnQgIG4gICAgKG1vZHVsdXMpXG4gICAgLy8gICAgICAgICBmb3IgXCJzc2gtZHNzXCI6XG4gICAgLy8gICAgICAgICAgc3RyaW5nIFwic3NoLWRzc1wiXG4gICAgLy8gICAgICAgICAgbXBpbnQgcCAgICAgKG1vZHVsdXMpXG4gICAgLy8gICAgICAgICAgbXBpbnQgcSAgICAgKHByaW1lKVxuICAgIC8vICAgICAgICAgIG1waW50IGcgICAgIChiYXNlIG51bWJlcilcbiAgICAvLyAgICAgICAgICBtcGludCB5ICAgICAocHVibGljIGtleSBwYXJhbWV0ZXI6IGdeeCBtb2QgcClcbiAgICAvLyBtWzVdID0gYmFzZTY0LWVuY29kZWQgcHJpdmF0ZSBrZXkgZGF0YTpcbiAgICAvLyAgICAgICAgIGZvciBcInNzaC1yc2FcIjpcbiAgICAvLyAgICAgICAgICBtcGludCAgZCAgICAocHJpdmF0ZSBleHBvbmVudClcbiAgICAvLyAgICAgICAgICBtcGludCAgcCAgICAocHJpbWUgMSlcbiAgICAvLyAgICAgICAgICBtcGludCAgcSAgICAocHJpbWUgMilcbiAgICAvLyAgICAgICAgICBtcGludCAgaXFtcCAoW2ludmVyc2Ugb2YgcV0gbW9kIHApXG4gICAgLy8gICAgICAgICBmb3IgXCJzc2gtZHNzXCI6XG4gICAgLy8gICAgICAgICAgbXBpbnQgeCAgICAgKHByaXZhdGUga2V5IHBhcmFtZXRlcilcbiAgICAvLyBtWzZdID0gU0hBMSBITUFDIG92ZXI6XG4gICAgLy8gICAgICAgICAgc3RyaW5nICBuYW1lIG9mIGFsZ29yaXRobSAoXCJzc2gtZHNzXCIsIFwic3NoLXJzYVwiKVxuICAgIC8vICAgICAgICAgIHN0cmluZyAgZW5jcnlwdGlvbiB0eXBlXG4gICAgLy8gICAgICAgICAgc3RyaW5nICBjb21tZW50XG4gICAgLy8gICAgICAgICAgc3RyaW5nICBwdWJsaWMga2V5IGRhdGFcbiAgICAvLyAgICAgICAgICBzdHJpbmcgIHByaXZhdGUtcGxhaW50ZXh0IChpbmNsdWRpbmcgdGhlIGZpbmFsIHBhZGRpbmcpXG4gICAgdmFyIGNpcGhlck5hbWUgPSBtWzJdO1xuICAgIHZhciBlbmNyeXB0ZWQgPSAoY2lwaGVyTmFtZSAhPT0gJ25vbmUnKTtcbiAgICBpZiAoZW5jcnlwdGVkICYmICFwYXNzcGhyYXNlKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAnRW5jcnlwdGVkIFBQSyBwcml2YXRlIGtleSBkZXRlY3RlZCwgYnV0IG5vIHBhc3NwaHJhc2UgZ2l2ZW4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcml2QmxvYiA9IEJ1ZmZlci5mcm9tKG1bNV0sICdiYXNlNjQnKTtcblxuICAgIGlmIChlbmNyeXB0ZWQpIHtcbiAgICAgIHZhciBlbmNJbmZvID0gQ0lQSEVSX0lORk9bY2lwaGVyTmFtZV07XG4gICAgICB2YXIgY2lwaGVyS2V5ID0gY29tYmluZUJ1ZmZlcnMoXG4gICAgICAgIGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoUFBLX1BQMSkudXBkYXRlKHBhc3NwaHJhc2UpLmRpZ2VzdCgpLFxuICAgICAgICBjcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKFBQS19QUDIpLnVwZGF0ZShwYXNzcGhyYXNlKS5kaWdlc3QoKVxuICAgICAgKTtcbiAgICAgIGlmIChjaXBoZXJLZXkubGVuZ3RoID4gZW5jSW5mby5rZXlMZW4pXG4gICAgICAgIGNpcGhlcktleSA9IGNpcGhlcktleS5zbGljZSgwLCBlbmNJbmZvLmtleUxlbik7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlcml2KFNTSF9UT19PUEVOU1NMW2NpcGhlck5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEtfSVYpO1xuICAgICAgICBkZWNpcGhlci5zZXRBdXRvUGFkZGluZyhmYWxzZSk7XG4gICAgICAgIHByaXZCbG9iID0gY29tYmluZUJ1ZmZlcnMoZGVjaXBoZXIudXBkYXRlKHByaXZCbG9iKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpcGhlci5maW5hbCgpKTtcbiAgICAgICAgZGVjcnlwdGVkID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIHJldHVybiBleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9IG1bMV07XG4gICAgdmFyIGNvbW1lbnQgPSBtWzNdO1xuICAgIHZhciBwdWJCbG9iID0gQnVmZmVyLmZyb20obVs0XSwgJ2Jhc2U2NCcpO1xuXG4gICAgdmFyIG1hYyA9IG1bNl07XG4gICAgdmFyIHR5cGVMZW4gPSB0eXBlLmxlbmd0aDtcbiAgICB2YXIgY2lwaGVyTmFtZUxlbiA9IGNpcGhlck5hbWUubGVuZ3RoO1xuICAgIHZhciBjb21tZW50TGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY29tbWVudCk7XG4gICAgdmFyIHB1YkxlbiA9IHB1YkJsb2IubGVuZ3RoO1xuICAgIHZhciBwcml2TGVuID0gcHJpdkJsb2IubGVuZ3RoO1xuICAgIHZhciBtYWNEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyB0eXBlTGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgY2lwaGVyTmFtZUxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIGNvbW1lbnRMZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBwdWJMZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBwcml2TGVuKTtcbiAgICB2YXIgcCA9IDA7XG5cbiAgICB3cml0ZVVJbnQzMkJFKG1hY0RhdGEsIHR5cGVMZW4sIHApO1xuICAgIG1hY0RhdGEud3JpdGUodHlwZSwgcCArPSA0LCB0eXBlTGVuLCAnYXNjaWknKTtcbiAgICB3cml0ZVVJbnQzMkJFKG1hY0RhdGEsIGNpcGhlck5hbWVMZW4sIHAgKz0gdHlwZUxlbik7XG4gICAgbWFjRGF0YS53cml0ZShjaXBoZXJOYW1lLCBwICs9IDQsIGNpcGhlck5hbWVMZW4sICdhc2NpaScpO1xuICAgIHdyaXRlVUludDMyQkUobWFjRGF0YSwgY29tbWVudExlbiwgcCArPSBjaXBoZXJOYW1lTGVuKTtcbiAgICBtYWNEYXRhLndyaXRlKGNvbW1lbnQsIHAgKz0gNCwgY29tbWVudExlbiwgJ3V0ZjgnKTtcbiAgICB3cml0ZVVJbnQzMkJFKG1hY0RhdGEsIHB1YkxlbiwgcCArPSBjb21tZW50TGVuKTtcbiAgICBwdWJCbG9iLmNvcHkobWFjRGF0YSwgcCArPSA0KTtcbiAgICB3cml0ZVVJbnQzMkJFKG1hY0RhdGEsIHByaXZMZW4sIHAgKz0gcHViTGVuKTtcbiAgICBwcml2QmxvYi5jb3B5KG1hY0RhdGEsIHAgKyA0KTtcblxuICAgIGlmICghcGFzc3BocmFzZSlcbiAgICAgIHBhc3NwaHJhc2UgPSBFTVBUWV9QQVNTUEhSQVNFO1xuXG4gICAgdmFyIGNhbGNNQUMgPSBjcmVhdGVIbWFjKCdzaGExJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSGFzaCgnc2hhMScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZSgncHV0dHktcHJpdmF0ZS1rZXktZmlsZS1tYWMta2V5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKHBhc3NwaHJhc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRpZ2VzdCgpKVxuICAgICAgICAgICAgICAgICAgICAudXBkYXRlKG1hY0RhdGEpXG4gICAgICAgICAgICAgICAgICAgIC5kaWdlc3QoJ2hleCcpO1xuXG4gICAgaWYgKGNhbGNNQUMgIT09IG1hYykge1xuICAgICAgaWYgKGVuY3J5cHRlZCkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAgICdQUEsgcHJpdmF0ZSBrZXkgaW50ZWdyaXR5IGNoZWNrIGZhaWxlZCAtLSBiYWQgcGFzc3BocmFzZT8nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdQUEsgcHJpdmF0ZSBrZXkgaW50ZWdyaXR5IGNoZWNrIGZhaWxlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF2b2lkIGN5Y2xpYyByZXF1aXJlIGJ5IHJlcXVpcmluZyBvbiBmaXJzdCB1c2VcbiAgICBpZiAoIXV0aWxzKVxuICAgICAgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbiAgICB2YXIgcHViUEVNO1xuICAgIHZhciBwdWJTU0g7XG4gICAgdmFyIHByaXZQRU07XG4gICAgcHViQmxvYi5fcG9zID0gMDtcbiAgICBza2lwRmllbGRzKHB1YkJsb2IsIDEpOyAvLyBza2lwIChkdXBsaWNhdGUpIGtleSB0eXBlXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzc2gtcnNhJzpcbiAgICAgICAgdmFyIGUgPSB1dGlscy5yZWFkU3RyaW5nKHB1YkJsb2IsIHB1YkJsb2IuX3Bvcyk7XG4gICAgICAgIGlmIChlID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUFBLIHB1YmxpYyBrZXknKTtcbiAgICAgICAgdmFyIG4gPSB1dGlscy5yZWFkU3RyaW5nKHB1YkJsb2IsIHB1YkJsb2IuX3Bvcyk7XG4gICAgICAgIGlmIChuID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUFBLIHB1YmxpYyBrZXknKTtcbiAgICAgICAgdmFyIGQgPSB1dGlscy5yZWFkU3RyaW5nKHByaXZCbG9iLCAwKTtcbiAgICAgICAgaWYgKGQgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBQUEsgcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgdmFyIHAgPSB1dGlscy5yZWFkU3RyaW5nKHByaXZCbG9iLCBwcml2QmxvYi5fcG9zKTtcbiAgICAgICAgaWYgKHAgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBQUEsgcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgdmFyIHEgPSB1dGlscy5yZWFkU3RyaW5nKHByaXZCbG9iLCBwcml2QmxvYi5fcG9zKTtcbiAgICAgICAgaWYgKHEgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBQUEsgcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgdmFyIGlxbXAgPSB1dGlscy5yZWFkU3RyaW5nKHByaXZCbG9iLCBwcml2QmxvYi5fcG9zKTtcbiAgICAgICAgaWYgKGlxbXAgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBQUEsgcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgcHViUEVNID0gZ2VuT3BlblNTTFJTQVB1YihuLCBlKTtcbiAgICAgICAgcHViU1NIID0gZ2VuT3BlblNTSFJTQVB1YihuLCBlKTtcbiAgICAgICAgcHJpdlBFTSA9IGdlbk9wZW5TU0xSU0FQcml2KG4sIGUsIGQsIGlxbXAsIHAsIHEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NzaC1kc3MnOlxuICAgICAgICB2YXIgcCA9IHV0aWxzLnJlYWRTdHJpbmcocHViQmxvYiwgcHViQmxvYi5fcG9zKTtcbiAgICAgICAgaWYgKHAgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBQUEsgcHVibGljIGtleScpO1xuICAgICAgICB2YXIgcSA9IHV0aWxzLnJlYWRTdHJpbmcocHViQmxvYiwgcHViQmxvYi5fcG9zKTtcbiAgICAgICAgaWYgKHEgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBQUEsgcHVibGljIGtleScpO1xuICAgICAgICB2YXIgZyA9IHV0aWxzLnJlYWRTdHJpbmcocHViQmxvYiwgcHViQmxvYi5fcG9zKTtcbiAgICAgICAgaWYgKGcgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBQUEsgcHVibGljIGtleScpO1xuICAgICAgICB2YXIgeSA9IHV0aWxzLnJlYWRTdHJpbmcocHViQmxvYiwgcHViQmxvYi5fcG9zKTtcbiAgICAgICAgaWYgKHkgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBQUEsgcHVibGljIGtleScpO1xuICAgICAgICB2YXIgeCA9IHV0aWxzLnJlYWRTdHJpbmcocHJpdkJsb2IsIDApO1xuICAgICAgICBpZiAoeCA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIFBQSyBwcml2YXRlIGtleScpO1xuXG4gICAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xEU0FQdWIocCwgcSwgZywgeSk7XG4gICAgICAgIHB1YlNTSCA9IGdlbk9wZW5TU0hEU0FQdWIocCwgcSwgZywgeSk7XG4gICAgICAgIHByaXZQRU0gPSBnZW5PcGVuU1NMRFNBUHJpdihwLCBxLCBnLCB5LCB4KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQUEtfUHJpdmF0ZSh0eXBlLCBjb21tZW50LCBwcml2UEVNLCBwdWJQRU0sIHB1YlNTSCwgJ3NoYTEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdGVkKTtcbiAgfTtcbn0pKCk7XG5cblxuZnVuY3Rpb24gcGFyc2VERVIoZGF0YSwgYmFzZVR5cGUsIGNvbW1lbnQsIGZ1bGxUeXBlKSB7XG4gIC8vIGF2b2lkIGN5Y2xpYyByZXF1aXJlIGJ5IHJlcXVpcmluZyBvbiBmaXJzdCB1c2VcbiAgaWYgKCF1dGlscylcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuICB2YXIgYWxnbztcbiAgdmFyIHB1YlBFTSA9IG51bGw7XG4gIHZhciBwdWJTU0ggPSBudWxsO1xuICBzd2l0Y2ggKGJhc2VUeXBlKSB7XG4gICAgY2FzZSAnc3NoLXJzYSc6XG4gICAgICB2YXIgZSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgIGlmIChlID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHVibGljIGtleScpO1xuICAgICAgdmFyIG4gPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICBpZiAobiA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHB1YmxpYyBrZXknKTtcbiAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xSU0FQdWIobiwgZSk7XG4gICAgICBwdWJTU0ggPSBnZW5PcGVuU1NIUlNBUHViKG4sIGUpO1xuICAgICAgYWxnbyA9ICdzaGExJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NzaC1kc3MnOlxuICAgICAgdmFyIHAgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICBpZiAocCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHB1YmxpYyBrZXknKTtcbiAgICAgIHZhciBxID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgaWYgKHEgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwdWJsaWMga2V5Jyk7XG4gICAgICB2YXIgZyA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgIGlmIChnID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHVibGljIGtleScpO1xuICAgICAgdmFyIHkgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICBpZiAoeSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHB1YmxpYyBrZXknKTtcbiAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xEU0FQdWIocCwgcSwgZywgeSk7XG4gICAgICBwdWJTU0ggPSBnZW5PcGVuU1NIRFNBUHViKHAsIHEsIGcsIHkpO1xuICAgICAgYWxnbyA9ICdzaGExJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NzaC1lZDI1NTE5JzpcbiAgICAgIHZhciBlZHB1YiA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgIGlmIChlZHB1YiA9PT0gZmFsc2UgfHwgZWRwdWIubGVuZ3RoICE9PSAzMilcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHVibGljIGtleScpO1xuICAgICAgcHViUEVNID0gZ2VuT3BlblNTTEVkUHViKGVkcHViKTtcbiAgICAgIHB1YlNTSCA9IGdlbk9wZW5TU0hFZFB1YihlZHB1Yik7XG4gICAgICBhbGdvID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHAyNTYnOlxuICAgICAgYWxnbyA9ICdzaGEyNTYnO1xuICAgICAgb2lkID0gJzEuMi44NDAuMTAwNDUuMy4xLjcnO1xuICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHAzODQnOlxuICAgICAgaWYgKGFsZ28gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbGdvID0gJ3NoYTM4NCc7XG4gICAgICAgIG9pZCA9ICcxLjMuMTMyLjAuMzQnO1xuICAgICAgfVxuICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHA1MjEnOlxuICAgICAgaWYgKGFsZ28gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbGdvID0gJ3NoYTUxMic7XG4gICAgICAgIG9pZCA9ICcxLjMuMTMyLjAuMzUnO1xuICAgICAgfVxuICAgICAgLy8gVE9ETzogdmFsaWRhdGUgY3VydmUgbmFtZSBhZ2FpbnN0IHR5cGVcbiAgICAgIGlmICghc2tpcEZpZWxkcyhkYXRhLCAxKSkgLy8gU2tpcCBjdXJ2ZSBuYW1lXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHB1YmxpYyBrZXknKTtcbiAgICAgIHZhciBlY3B1YiA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgIGlmIChlY3B1YiA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHB1YmxpYyBrZXknKTtcbiAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xFQ0RTQVB1YihvaWQsIGVjcHViKTtcbiAgICAgIHB1YlNTSCA9IGdlbk9wZW5TU0hFQ0RTQVB1YihvaWQsIGVjcHViKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBPcGVuU1NIIHB1YmxpYyBrZXkgdHlwZTogJyArIGJhc2VUeXBlKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgT3BlblNTSF9QdWJsaWMoZnVsbFR5cGUsIGNvbW1lbnQsIHB1YlBFTSwgcHViU1NILCBhbGdvKTtcbn1cbmZ1bmN0aW9uIE9wZW5TU0hfUHVibGljKHR5cGUsIGNvbW1lbnQsIHB1YlBFTSwgcHViU1NILCBhbGdvKSB7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7XG4gIHRoaXNbU1lNX1BSSVZfUEVNXSA9IG51bGw7XG4gIHRoaXNbU1lNX1BVQl9QRU1dID0gcHViUEVNO1xuICB0aGlzW1NZTV9QVUJfU1NIXSA9IHB1YlNTSDtcbiAgdGhpc1tTWU1fSEFTSF9BTEdPXSA9IGFsZ287XG4gIHRoaXNbU1lNX0RFQ1JZUFRFRF0gPSBmYWxzZTtcbn1cbk9wZW5TU0hfUHVibGljLnByb3RvdHlwZSA9IEJhc2VLZXk7XG4oZnVuY3Rpb24oKSB7XG4gIHZhciByZWdleHA7XG4gIGlmIChFRERTQV9TVVBQT1JURUQpXG4gICAgcmVnZXhwID0gL14oKCg/OnNzaC0oPzpyc2F8ZHNzfGVkMjU1MTkpKXxlY2RzYS1zaGEyLW5pc3RwKD86MjU2fDM4NHw1MjEpKSg/Oi1jZXJ0LXYwWzAxXUBvcGVuc3NoLmNvbSk/KSAoW0EtWjAtOWEtelxcLys9XSspKD86JHxcXHMrKFtcXFNdLiopPykkLztcbiAgZWxzZVxuICAgIHJlZ2V4cCA9IC9eKCgoPzpzc2gtKD86cnNhfGRzcykpfGVjZHNhLXNoYTItbmlzdHAoPzoyNTZ8Mzg0fDUyMSkpKD86LWNlcnQtdjBbMDFdQG9wZW5zc2guY29tKT8pIChbQS1aMC05YS16XFwvKz1dKykoPzokfFxccysoW1xcU10uKik/KSQvO1xuICBPcGVuU1NIX1B1YmxpYy5wYXJzZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBtID0gcmVnZXhwLmV4ZWMoc3RyKTtcbiAgICBpZiAobSA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIC8vIG1bMV0gPSBmdWxsIHR5cGVcbiAgICAvLyBtWzJdID0gYmFzZSB0eXBlXG4gICAgLy8gbVszXSA9IGJhc2U2NC1lbmNvZGVkIHB1YmxpYyBrZXlcbiAgICAvLyBtWzRdID0gY29tbWVudFxuXG4gICAgLy8gYXZvaWQgY3ljbGljIHJlcXVpcmUgYnkgcmVxdWlyaW5nIG9uIGZpcnN0IHVzZVxuICAgIGlmICghdXRpbHMpXG4gICAgICB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuICAgIHZhciBmdWxsVHlwZSA9IG1bMV07XG4gICAgdmFyIGJhc2VUeXBlID0gbVsyXTtcbiAgICB2YXIgZGF0YSA9IEJ1ZmZlci5mcm9tKG1bM10sICdiYXNlNjQnKTtcbiAgICB2YXIgY29tbWVudCA9IChtWzRdIHx8ICcnKTtcblxuICAgIHZhciB0eXBlID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MsICdhc2NpaScpO1xuICAgIGlmICh0eXBlID09PSBmYWxzZSB8fCB0eXBlLmluZGV4T2YoYmFzZVR5cGUpICE9PSAwKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHVibGljIGtleScpO1xuXG4gICAgcmV0dXJuIHBhcnNlREVSKGRhdGEsIGJhc2VUeXBlLCBjb21tZW50LCBmdWxsVHlwZSk7XG4gIH07XG59KSgpO1xuXG5cblxuZnVuY3Rpb24gUkZDNDcxNl9QdWJsaWModHlwZSwgY29tbWVudCwgcHViUEVNLCBwdWJTU0gsIGFsZ28pIHtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5jb21tZW50ID0gY29tbWVudDtcbiAgdGhpc1tTWU1fUFJJVl9QRU1dID0gbnVsbDtcbiAgdGhpc1tTWU1fUFVCX1BFTV0gPSBwdWJQRU07XG4gIHRoaXNbU1lNX1BVQl9TU0hdID0gcHViU1NIO1xuICB0aGlzW1NZTV9IQVNIX0FMR09dID0gYWxnbztcbiAgdGhpc1tTWU1fREVDUllQVEVEXSA9IGZhbHNlO1xufVxuUkZDNDcxNl9QdWJsaWMucHJvdG90eXBlID0gQmFzZUtleTtcbihmdW5jdGlvbigpIHtcbiAgdmFyIHJlZ2V4cCA9IC9eLS0tLSBCRUdJTiBTU0gyIFBVQkxJQyBLRVkgLS0tLSg/OlxcclxcbnxcXG4pKCg/Oig/OltcXHgyMS1cXHg3RV0rPyk6KD86KD86Lio/XFxcXFxccj9cXG4pKi4qKSg/OlxcclxcbnxcXG4pKSopKCg/OltBLVowLTlhLXpcXC8rPV0rKD86XFxyXFxufFxcbikpKyktLS0tIEVORCBTU0gyIFBVQkxJQyBLRVkgLS0tLSQvO1xuICB2YXIgUkVfSEVBREVSID0gL14oW1xceDIxLVxceDdFXSs/KTooKD86Lio/XFxcXFxccj9cXG4pKi4qKSQvZ207XG4gIHZhciBSRV9IRUFERVJfRU5EUyA9IC9cXFxcXFxyP1xcbi9nO1xuICBSRkM0NzE2X1B1YmxpYy5wYXJzZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBtID0gcmVnZXhwLmV4ZWMoc3RyKTtcbiAgICBpZiAobSA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIC8vIG1bMV0gPSBoZWFkZXIocylcbiAgICAvLyBtWzJdID0gYmFzZTY0LWVuY29kZWQgcHVibGljIGtleVxuXG4gICAgdmFyIGhlYWRlcnMgPSBtWzFdO1xuICAgIHZhciBkYXRhID0gQnVmZmVyLmZyb20obVsyXSwgJ2Jhc2U2NCcpO1xuICAgIHZhciBjb21tZW50ID0gJyc7XG5cbiAgICBpZiAoaGVhZGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3aGlsZSAobSA9IFJFX0hFQURFUi5leGVjKGhlYWRlcnMpKSB7XG4gICAgICAgIGlmIChtWzFdLnRvTG93ZXJDYXNlKCkgPT09ICdjb21tZW50Jykge1xuICAgICAgICAgIGNvbW1lbnQgPSB0cmltU3RhcnQobVsyXS5yZXBsYWNlKFJFX0hFQURFUl9FTkRTLCAnJykpO1xuICAgICAgICAgIGlmIChjb21tZW50Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgJiYgY29tbWVudC5jaGFyQ29kZUF0KDApID09PSAzNC8qJ1wiJyovXG4gICAgICAgICAgICAgICYmIGNvbW1lbnQuY2hhckNvZGVBdChjb21tZW50Lmxlbmd0aCAtIDEpID09PSAzNC8qJ1wiJyovKSB7XG4gICAgICAgICAgICBjb21tZW50ID0gY29tbWVudC5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXZvaWQgY3ljbGljIHJlcXVpcmUgYnkgcmVxdWlyaW5nIG9uIGZpcnN0IHVzZVxuICAgIGlmICghdXRpbHMpXG4gICAgICB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuICAgIHZhciB0eXBlID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCAwLCAnYXNjaWknKTtcbiAgICBpZiAodHlwZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUkZDNDcxNiBwdWJsaWMga2V5Jyk7XG5cbiAgICB2YXIgcHViUEVNID0gbnVsbDtcbiAgICB2YXIgcHViU1NIID0gbnVsbDtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3NzaC1yc2EnOlxuICAgICAgICB2YXIgZSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgaWYgKGUgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBSRkM0NzE2IHB1YmxpYyBrZXknKTtcbiAgICAgICAgdmFyIG4gPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgIGlmIChuID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUkZDNDcxNiBwdWJsaWMga2V5Jyk7XG4gICAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xSU0FQdWIobiwgZSk7XG4gICAgICAgIHB1YlNTSCA9IGdlbk9wZW5TU0hSU0FQdWIobiwgZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3NoLWRzcyc6XG4gICAgICAgIHZhciBwID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICBpZiAocCA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIFJGQzQ3MTYgcHVibGljIGtleScpO1xuICAgICAgICB2YXIgcSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgaWYgKHEgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBSRkM0NzE2IHB1YmxpYyBrZXknKTtcbiAgICAgICAgdmFyIGcgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgIGlmIChnID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUkZDNDcxNiBwdWJsaWMga2V5Jyk7XG4gICAgICAgIHZhciB5ID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICBpZiAoeSA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIFJGQzQ3MTYgcHVibGljIGtleScpO1xuICAgICAgICBwdWJQRU0gPSBnZW5PcGVuU1NMRFNBUHViKHAsIHEsIGcsIHkpO1xuICAgICAgICBwdWJTU0ggPSBnZW5PcGVuU1NIRFNBUHViKHAsIHEsIGcsIHkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBSRkM0NzE2IHB1YmxpYyBrZXknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJGQzQ3MTZfUHVibGljKHR5cGUsIGNvbW1lbnQsIHB1YlBFTSwgcHViU1NILCAnc2hhMScpO1xuICB9O1xufSkoKTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZURFUktleTogZnVuY3Rpb24gcGFyc2VERVJLZXkoZGF0YSwgdHlwZSkge1xuICAgIHJldHVybiBwYXJzZURFUihkYXRhLCB0eXBlLCAnJywgdHlwZSk7XG4gIH0sXG4gIHBhcnNlS2V5OiBmdW5jdGlvbiBwYXJzZUtleShkYXRhLCBwYXNzcGhyYXNlKSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSlcbiAgICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCd1dGY4JykudHJpbSgpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJylcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0tleSBkYXRhIG11c3QgYmUgYSBCdWZmZXIgb3Igc3RyaW5nJyk7XG4gICAgZWxzZVxuICAgICAgZGF0YSA9IGRhdGEudHJpbSgpO1xuXG4gICAgLy8gaW50ZW50aW9uYWwgIT1cbiAgICBpZiAocGFzc3BocmFzZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgcGFzc3BocmFzZSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHBhc3NwaHJhc2UgPSBCdWZmZXIuZnJvbShwYXNzcGhyYXNlKTtcbiAgICAgIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIocGFzc3BocmFzZSkpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Bhc3NwaHJhc2UgbXVzdCBiZSBhIHN0cmluZyBvciBCdWZmZXIgd2hlbiBzdXBwbGllZCcpO1xuICAgIH1cblxuICAgIHZhciByZXQ7XG5cbiAgICAvLyBQcml2YXRlIGtleXNcbiAgICBpZiAoKHJldCA9IE9wZW5TU0hfUHJpdmF0ZS5wYXJzZShkYXRhLCBwYXNzcGhyYXNlKSkgIT09IG51bGwpXG4gICAgICByZXR1cm4gcmV0O1xuICAgIGlmICgocmV0ID0gT3BlblNTSF9PbGRfUHJpdmF0ZS5wYXJzZShkYXRhLCBwYXNzcGhyYXNlKSkgIT09IG51bGwpXG4gICAgICByZXR1cm4gcmV0O1xuICAgIGlmICgocmV0ID0gUFBLX1ByaXZhdGUucGFyc2UoZGF0YSwgcGFzc3BocmFzZSkpICE9PSBudWxsKVxuICAgICAgcmV0dXJuIHJldDtcblxuICAgIC8vIFB1YmxpYyBrZXlzXG4gICAgaWYgKChyZXQgPSBPcGVuU1NIX1B1YmxpYy5wYXJzZShkYXRhKSkgIT09IG51bGwpXG4gICAgICByZXR1cm4gcmV0O1xuICAgIGlmICgocmV0ID0gUkZDNDcxNl9QdWJsaWMucGFyc2UoZGF0YSkpICE9PSBudWxsKVxuICAgICAgcmV0dXJuIHJldDtcblxuICAgIHJldHVybiBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGtleSBmb3JtYXQnKTtcbiAgfVxufVxuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xudmFyIER1cGxleFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLkR1cGxleDtcbnZhciBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlJlYWRhYmxlO1xudmFyIFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuV3JpdGFibGU7XG5cbnZhciBTVERFUlIgPSByZXF1aXJlKCdAb2x6aWUtMTIvc3NoMi1zdHJlYW1zJykuY29uc3RhbnRzLkNIQU5ORUxfRVhURU5ERURfREFUQVRZUEUuU1RERVJSO1xuXG52YXIgUEFDS0VUX1NJWkUgPSAzMiAqIDEwMjQ7XG52YXIgTUFYX1dJTkRPVyA9IDIgKiAxMDI0ICogMTAyNDtcbnZhciBXSU5ET1dfVEhSRVNIT0xEID0gTUFYX1dJTkRPVyAvIDI7XG52YXIgQ1VTVE9NX0VWRU5UUyA9IFtcbiAgJ0NIQU5ORUxfRU9GJyxcbiAgJ0NIQU5ORUxfQ0xPU0UnLFxuICAnQ0hBTk5FTF9EQVRBJyxcbiAgJ0NIQU5ORUxfRVhURU5ERURfREFUQScsXG4gICdDSEFOTkVMX1dJTkRPV19BREpVU1QnLFxuICAnQ0hBTk5FTF9TVUNDRVNTJyxcbiAgJ0NIQU5ORUxfRkFJTFVSRScsXG4gICdDSEFOTkVMX1JFUVVFU1QnXG5dO1xudmFyIENVU1RPTV9FVkVOVFNfTEVOID0gQ1VTVE9NX0VWRU5UUy5sZW5ndGg7XG5cbmZ1bmN0aW9uIENoYW5uZWwoaW5mbywgY2xpZW50LCBvcHRzKSB7XG4gIHZhciBzdHJlYW1PcHRzID0ge1xuICAgIGhpZ2hXYXRlck1hcms6IE1BWF9XSU5ET1csXG4gICAgYWxsb3dIYWxmT3BlbjogKCFvcHRzIHx8IChvcHRzICYmIG9wdHMuYWxsb3dIYWxmT3BlbiAhPT0gZmFsc2UpKVxuICB9O1xuXG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHN0cmVhbU9wdHMuYWxsb3dIYWxmT3BlbjtcblxuICBEdXBsZXhTdHJlYW0uY2FsbCh0aGlzLCBzdHJlYW1PcHRzKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBzZXJ2ZXIgPSBvcHRzICYmIG9wdHMuc2VydmVyO1xuXG4gIHRoaXMuc2VydmVyID0gc2VydmVyO1xuICB0aGlzLnR5cGUgPSBpbmZvLnR5cGU7XG4gIHRoaXMuc3VidHlwZSA9IHVuZGVmaW5lZDtcbiAgLypcbiAgICBpbmNvbWluZyBhbmQgb3V0Z29pbmcgY29udGFpbiB0aGVzZSBwcm9wZXJ0aWVzOlxuICAgIHtcbiAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICB3aW5kb3c6IHVuZGVmaW5lZCxcbiAgICAgIHBhY2tldFNpemU6IHVuZGVmaW5lZCxcbiAgICAgIHN0YXRlOiAnY2xvc2VkJ1xuICAgIH1cbiAgKi9cbiAgdmFyIGluY29taW5nID0gdGhpcy5pbmNvbWluZyA9IGluZm8uaW5jb21pbmc7XG4gIHZhciBpbmNvbWluZ0lkID0gaW5jb21pbmcuaWQ7XG4gIHZhciBvdXRnb2luZyA9IHRoaXMub3V0Z29pbmcgPSBpbmZvLm91dGdvaW5nO1xuICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzID0gW107XG4gIHZhciBleGl0Q29kZTtcbiAgdmFyIGV4aXRTaWduYWw7XG4gIHZhciBleGl0RHVtcDtcbiAgdmFyIGV4aXREZXNjO1xuICB2YXIgZXhpdExhbmc7XG5cbiAgdGhpcy5fY2xpZW50ID0gY2xpZW50O1xuICB0aGlzLl9oYXNYMTEgPSBmYWxzZTtcblxuICB2YXIgY2hhbm5lbHMgPSBjbGllbnQuX2NoYW5uZWxzO1xuICB2YXIgc3Noc3RyZWFtID0gY2xpZW50Ll9zc2hzdHJlYW07XG5cbiAgZnVuY3Rpb24gb25kcmFpbigpIHtcbiAgICBpZiAoc2VsZi5fd2FpdENsaWVudERyYWluKSB7XG4gICAgICBzZWxmLl93YWl0Q2xpZW50RHJhaW4gPSBmYWxzZTtcbiAgICAgIGlmICghc2VsZi5fd2FpdFdpbmRvdykge1xuICAgICAgICBpZiAoc2VsZi5fY2h1bmspXG4gICAgICAgICAgc2VsZi5fd3JpdGUoc2VsZi5fY2h1bmssIG51bGwsIHNlbGYuX2NodW5rY2IpO1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9jaHVua2NiKVxuICAgICAgICAgIHNlbGYuX2NodW5rY2IoKTtcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5fY2h1bmtFcnIpXG4gICAgICAgICAgc2VsZi5zdGRlcnIuX3dyaXRlKHNlbGYuX2NodW5rRXJyLCBudWxsLCBzZWxmLl9jaHVua2NiRXJyKTtcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5fY2h1bmtjYkVycilcbiAgICAgICAgICBzZWxmLl9jaHVua2NiRXJyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNsaWVudC5fc29jay5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICBzc2hzdHJlYW0ub25jZSgnQ0hBTk5FTF9FT0Y6JyArIGluY29taW5nSWQsIGZ1bmN0aW9uKCkge1xuICAgIGlmIChpbmNvbWluZy5zdGF0ZSAhPT0gJ29wZW4nKVxuICAgICAgcmV0dXJuO1xuICAgIGluY29taW5nLnN0YXRlID0gJ2VvZic7XG5cbiAgICBpZiAoc2VsZi5yZWFkYWJsZSlcbiAgICAgIHNlbGYucHVzaChudWxsKTtcbiAgICBpZiAoIXNlcnZlciAmJiBzZWxmLnN0ZGVyci5yZWFkYWJsZSlcbiAgICAgIHNlbGYuc3RkZXJyLnB1c2gobnVsbCk7XG4gIH0pLm9uY2UoJ0NIQU5ORUxfQ0xPU0U6JyArIGluY29taW5nSWQsIGZ1bmN0aW9uKCkge1xuICAgIGlmIChpbmNvbWluZy5zdGF0ZSA9PT0gJ2Nsb3NlZCcpXG4gICAgICByZXR1cm47XG4gICAgaW5jb21pbmcuc3RhdGUgPSAnY2xvc2VkJztcblxuICAgIGlmIChzZWxmLnJlYWRhYmxlKVxuICAgICAgc2VsZi5wdXNoKG51bGwpO1xuICAgIGlmIChzZXJ2ZXIgJiYgc2VsZi5zdGRlcnIud3JpdGFibGUpXG4gICAgICBzZWxmLnN0ZGVyci5lbmQoKTtcbiAgICBlbHNlIGlmICghc2VydmVyICYmIHNlbGYuc3RkZXJyLnJlYWRhYmxlKVxuICAgICAgc2VsZi5zdGRlcnIucHVzaChudWxsKTtcblxuICAgIGlmIChvdXRnb2luZy5zdGF0ZSA9PT0gJ29wZW4nIHx8IG91dGdvaW5nLnN0YXRlID09PSAnZW9mJylcbiAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICBpZiAob3V0Z29pbmcuc3RhdGUgPT09ICdjbG9zaW5nJylcbiAgICAgIG91dGdvaW5nLnN0YXRlID0gJ2Nsb3NlZCc7XG5cbiAgICBkZWxldGUgY2hhbm5lbHNbaW5jb21pbmdJZF07XG5cbiAgICB2YXIgc3RhdGUgPSBzZWxmLl93cml0YWJsZVN0YXRlO1xuICAgIGNsaWVudC5fc29jay5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBpZiAoIXN0YXRlLmVuZGluZyAmJiAhc3RhdGUuZmluaXNoZWQpXG4gICAgICBzZWxmLmVuZCgpO1xuXG4gICAgLy8gVGFrZSBjYXJlIG9mIGFueSBvdXRzdGFuZGluZyBjaGFubmVsIHJlcXVlc3RzXG4gICAgc2VsZi5fY2FsbGJhY2tzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyArK2kpXG4gICAgICBjYWxsYmFja3NbaV0odHJ1ZSk7XG4gICAgY2FsbGJhY2tzID0gc2VsZi5fY2FsbGJhY2tzO1xuXG4gICAgaWYgKCFzZXJ2ZXIpIHtcbiAgICAgIC8vIGFsaWduIG1vcmUgd2l0aCBub2RlIGNoaWxkIHByb2Nlc3Nlcywgd2hlcmUgdGhlIGNsb3NlIGV2ZW50IGdldHMgdGhlXG4gICAgICAvLyBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgZXhpdCBldmVudFxuICAgICAgaWYgKCFzZWxmLnJlYWRhYmxlKSB7XG4gICAgICAgIGlmIChleGl0Q29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHNlbGYuZW1pdCgnY2xvc2UnLCBleGl0Q29kZSwgZXhpdFNpZ25hbCwgZXhpdER1bXAsIGV4aXREZXNjLFxuICAgICAgICAgICAgICAgICAgICBleGl0TGFuZyk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHNlbGYuZW1pdCgnY2xvc2UnLCBleGl0Q29kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChleGl0Q29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScsIGV4aXRDb2RlLCBleGl0U2lnbmFsLCBleGl0RHVtcCwgZXhpdERlc2MsXG4gICAgICAgICAgICAgICAgICAgICAgZXhpdExhbmcpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScsIGV4aXRDb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc2VsZi5zdGRlcnIucmVhZGFibGUpXG4gICAgICAgIHNlbGYuc3RkZXJyLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2VsZi5zdGRlcnIub25jZSgnZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc2VsZi5zdGRlcnIuZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gU2VydmVyIG1vZGVcbiAgICAgIGlmICghc2VsZi5yZWFkYWJsZSlcbiAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHNlbGYub25jZSgnZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENVU1RPTV9FVkVOVFNfTEVOOyArK2kpXG4gICAgICBzc2hzdHJlYW0ucmVtb3ZlQWxsTGlzdGVuZXJzKENVU1RPTV9FVkVOVFNbaV0gKyAnOicgKyBpbmNvbWluZ0lkKTtcbiAgfSkub24oJ0NIQU5ORUxfREFUQTonICsgaW5jb21pbmdJZCwgZnVuY3Rpb24oZGF0YSkge1xuICAgIC8vIHRoZSByZW1vdGUgcGFydHkgc2hvdWxkIG5vdCBiZSBzZW5kaW5nIHVzIGRhdGEgaWYgdGhlcmUgaXMgbm8gd2luZG93XG4gICAgLy8gc3BhY2UgYXZhaWxhYmxlIC4uLlxuICAgIC8vIFRPRE86IHJhaXNlIGVycm9yIG9uIGRhdGEgd2l0aCBub3QgZW5vdWdoIHdpbmRvd1xuICAgIGlmIChpbmNvbWluZy53aW5kb3cgPT09IDApXG4gICAgICByZXR1cm47XG5cbiAgICBpbmNvbWluZy53aW5kb3cgLT0gZGF0YS5sZW5ndGg7XG5cbiAgICBpZiAoIXNlbGYucHVzaChkYXRhKSkge1xuICAgICAgc2VsZi5fd2FpdENoYW5EcmFpbiA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGluY29taW5nLndpbmRvdyA8PSBXSU5ET1dfVEhSRVNIT0xEKVxuICAgICAgd2luZG93QWRqdXN0KHNlbGYpO1xuICB9KS5vbignQ0hBTk5FTF9XSU5ET1dfQURKVVNUOicgKyBpbmNvbWluZ0lkLCBmdW5jdGlvbihhbXQpIHtcbiAgICAvLyB0aGUgc2VydmVyIGlzIGFsbG93aW5nIHVzIHRvIHNlbmQgYGFtdGAgbW9yZSBieXRlcyBvZiBkYXRhXG4gICAgb3V0Z29pbmcud2luZG93ICs9IGFtdDtcblxuICAgIGlmIChzZWxmLl93YWl0V2luZG93KSB7XG4gICAgICBzZWxmLl93YWl0V2luZG93ID0gZmFsc2U7XG4gICAgICBpZiAoIXNlbGYuX3dhaXRDbGllbnREcmFpbikge1xuICAgICAgICBpZiAoc2VsZi5fY2h1bmspXG4gICAgICAgICAgc2VsZi5fd3JpdGUoc2VsZi5fY2h1bmssIG51bGwsIHNlbGYuX2NodW5rY2IpO1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9jaHVua2NiKVxuICAgICAgICAgIHNlbGYuX2NodW5rY2IoKTtcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5fY2h1bmtFcnIpXG4gICAgICAgICAgc2VsZi5zdGRlcnIuX3dyaXRlKHNlbGYuX2NodW5rRXJyLCBudWxsLCBzZWxmLl9jaHVua2NiRXJyKTtcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5fY2h1bmtjYkVycilcbiAgICAgICAgICBzZWxmLl9jaHVua2NiRXJyKCk7XG4gICAgICB9XG4gICAgfVxuICB9KS5vbignQ0hBTk5FTF9TVUNDRVNTOicgKyBpbmNvbWluZ0lkLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICBzc2hzdHJlYW0uX2thbGFzdCA9IERhdGUubm93KCk7XG4gICAgICBzc2hzdHJlYW0uX2thY250ID0gMDtcbiAgICB9IGVsc2VcbiAgICAgIGNsaWVudC5fcmVzZXRLQSgpO1xuICAgIGlmIChjYWxsYmFja3MubGVuZ3RoKVxuICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkoZmFsc2UpO1xuICB9KS5vbignQ0hBTk5FTF9GQUlMVVJFOicgKyBpbmNvbWluZ0lkLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICBzc2hzdHJlYW0uX2thbGFzdCA9IERhdGUubm93KCk7XG4gICAgICBzc2hzdHJlYW0uX2thY250ID0gMDtcbiAgICB9IGVsc2VcbiAgICAgIGNsaWVudC5fcmVzZXRLQSgpO1xuICAgIGlmIChjYWxsYmFja3MubGVuZ3RoKVxuICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkodHJ1ZSk7XG4gIH0pLm9uKCdDSEFOTkVMX1JFUVVFU1Q6JyArIGluY29taW5nSWQsIGZ1bmN0aW9uKGluZm8pIHtcbiAgICBpZiAoIXNlcnZlcikge1xuICAgICAgaWYgKGluZm8ucmVxdWVzdCA9PT0gJ2V4aXQtc3RhdHVzJykge1xuICAgICAgICBzZWxmLmVtaXQoJ2V4aXQnLCBleGl0Q29kZSA9IGluZm8uY29kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoaW5mby5yZXF1ZXN0ID09PSAnZXhpdC1zaWduYWwnKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXhpdCcsXG4gICAgICAgICAgICAgICAgICBleGl0Q29kZSA9IG51bGwsXG4gICAgICAgICAgICAgICAgICBleGl0U2lnbmFsID0gJ1NJRycgKyBpbmZvLnNpZ25hbCxcbiAgICAgICAgICAgICAgICAgIGV4aXREdW1wID0gaW5mby5jb3JlZHVtcCxcbiAgICAgICAgICAgICAgICAgIGV4aXREZXNjID0gaW5mby5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgIGV4aXRMYW5nID0gaW5mby5sYW5nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGtlZXBhbGl2ZSByZXF1ZXN0PyBPcGVuU1NIIHdpbGwgc2VuZCBvbmUgYXMgYSBjaGFubmVsIHJlcXVlc3QgaWYgdGhlcmVcbiAgICAvLyBpcyBhIGNoYW5uZWwgb3BlblxuXG4gICAgaWYgKGluZm8ud2FudFJlcGx5KVxuICAgICAgc3Noc3RyZWFtLmNoYW5uZWxGYWlsdXJlKG91dGdvaW5nLmlkKTtcbiAgfSk7XG5cbiAgdGhpcy5zdGRpbiA9IHRoaXMuc3Rkb3V0ID0gdGhpcztcblxuICBpZiAoc2VydmVyKVxuICAgIHRoaXMuc3RkZXJyID0gbmV3IFNlcnZlclN0ZGVycih0aGlzKTtcbiAgZWxzZSB7XG4gICAgdGhpcy5zdGRlcnIgPSBuZXcgUmVhZGFibGVTdHJlYW0oc3RyZWFtT3B0cyk7XG4gICAgdGhpcy5zdGRlcnIuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gICAgICBpZiAoc2VsZi5fd2FpdENoYW5EcmFpbikge1xuICAgICAgICBzZWxmLl93YWl0Q2hhbkRyYWluID0gZmFsc2U7XG4gICAgICAgIGlmIChpbmNvbWluZy53aW5kb3cgPD0gV0lORE9XX1RIUkVTSE9MRClcbiAgICAgICAgICB3aW5kb3dBZGp1c3Qoc2VsZik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNzaHN0cmVhbS5vbignQ0hBTk5FTF9FWFRFTkRFRF9EQVRBOicgKyBpbmNvbWluZ0lkLFxuICAgICAgZnVuY3Rpb24odHlwZSwgZGF0YSkge1xuICAgICAgICAvLyB0aGUgcmVtb3RlIHBhcnR5IHNob3VsZCBub3QgYmUgc2VuZGluZyB1cyBkYXRhIGlmIHRoZXJlIGlzIG5vIHdpbmRvd1xuICAgICAgICAvLyBzcGFjZSBhdmFpbGFibGUgLi4uXG4gICAgICAgIC8vIFRPRE86IHJhaXNlIGVycm9yIG9uIGRhdGEgd2l0aCBub3QgZW5vdWdoIHdpbmRvd1xuICAgICAgICBpZiAoaW5jb21pbmcud2luZG93ID09PSAwKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpbmNvbWluZy53aW5kb3cgLT0gZGF0YS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKCFzZWxmLnN0ZGVyci5wdXNoKGRhdGEpKSB7XG4gICAgICAgICAgc2VsZi5fd2FpdENoYW5EcmFpbiA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluY29taW5nLndpbmRvdyA8PSBXSU5ET1dfVEhSRVNIT0xEKVxuICAgICAgICAgIHdpbmRvd0FkanVzdChzZWxmKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLy8gb3V0Z29pbmcgZGF0YVxuICB0aGlzLl93YWl0Q2xpZW50RHJhaW4gPSBmYWxzZTsgLy8gQ2xpZW50IHN0cmVhbS1sZXZlbCBiYWNrcHJlc3N1cmVcbiAgdGhpcy5fd2FpdFdpbmRvdyA9IGZhbHNlOyAvLyBTU0gtbGV2ZWwgYmFja3ByZXNzdXJlXG5cbiAgLy8gaW5jb21pbmcgZGF0YVxuICB0aGlzLl93YWl0Q2hhbkRyYWluID0gZmFsc2U7IC8vIENoYW5uZWwgUmVhZGFibGUgc2lkZSBiYWNrcHJlc3N1cmVcblxuICB0aGlzLl9jaHVuayA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fY2h1bmtjYiA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fY2h1bmtFcnIgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX2NodW5rY2JFcnIgPSB1bmRlZmluZWQ7XG5cbiAgZnVuY3Rpb24gb25GaW5pc2goKSB7XG4gICAgc2VsZi5lb2YoKTtcbiAgICBpZiAoc2VydmVyIHx8ICghc2VydmVyICYmICFzZWxmLmFsbG93SGFsZk9wZW4pKVxuICAgICAgc2VsZi5jbG9zZSgpO1xuICAgIHNlbGYud3JpdGFibGUgPSBmYWxzZTtcbiAgfVxuICB0aGlzLm9uKCdmaW5pc2gnLCBvbkZpbmlzaClcbiAgICAgIC5vbigncHJlZmluaXNoJywgb25GaW5pc2gpOyAvLyBmb3Igbm9kZSB2MC4xMStcbiAgZnVuY3Rpb24gb25FbmQoKSB7XG4gICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICB9XG4gIHRoaXMub24oJ2VuZCcsIG9uRW5kKVxuICAgICAgLm9uKCdjbG9zZScsIG9uRW5kKTtcbn1cbmluaGVyaXRzKENoYW5uZWwsIER1cGxleFN0cmVhbSk7XG5cbkNoYW5uZWwucHJvdG90eXBlLmVvZiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmV0ID0gdHJ1ZTtcbiAgdmFyIG91dGdvaW5nID0gdGhpcy5vdXRnb2luZztcblxuICBpZiAob3V0Z29pbmcuc3RhdGUgPT09ICdvcGVuJykge1xuICAgIG91dGdvaW5nLnN0YXRlID0gJ2VvZic7XG4gICAgcmV0ID0gdGhpcy5fY2xpZW50Ll9zc2hzdHJlYW0uY2hhbm5lbEVPRihvdXRnb2luZy5pZCk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuQ2hhbm5lbC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJldCA9IHRydWU7XG4gIHZhciBvdXRnb2luZyA9IHRoaXMub3V0Z29pbmc7XG5cbiAgaWYgKG91dGdvaW5nLnN0YXRlID09PSAnb3BlbicgfHwgb3V0Z29pbmcuc3RhdGUgPT09ICdlb2YnKSB7XG4gICAgb3V0Z29pbmcuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgcmV0ID0gdGhpcy5fY2xpZW50Ll9zc2hzdHJlYW0uY2hhbm5lbENsb3NlKG91dGdvaW5nLmlkKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5DaGFubmVsLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKHRoaXMuX3dhaXRDaGFuRHJhaW4pIHtcbiAgICB0aGlzLl93YWl0Q2hhbkRyYWluID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaW5jb21pbmcud2luZG93IDw9IFdJTkRPV19USFJFU0hPTEQpXG4gICAgICB3aW5kb3dBZGp1c3QodGhpcyk7XG4gIH1cbn07XG5cbkNoYW5uZWwucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uKGRhdGEsIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3Noc3RyZWFtID0gdGhpcy5fY2xpZW50Ll9zc2hzdHJlYW07XG4gIHZhciBvdXRnb2luZyA9IHRoaXMub3V0Z29pbmc7XG4gIHZhciBwYWNrZXRTaXplID0gb3V0Z29pbmcucGFja2V0U2l6ZTtcbiAgdmFyIGlkID0gb3V0Z29pbmcuaWQ7XG4gIHZhciB3aW5kb3cgPSBvdXRnb2luZy53aW5kb3c7XG4gIHZhciBsZW4gPSBkYXRhLmxlbmd0aDtcbiAgdmFyIHAgPSAwO1xuICB2YXIgcmV0O1xuICB2YXIgYnVmO1xuICB2YXIgc2xpY2VMZW47XG5cbiAgaWYgKG91dGdvaW5nLnN0YXRlICE9PSAnb3BlbicpXG4gICAgcmV0dXJuO1xuXG4gIHdoaWxlIChsZW4gLSBwID4gMCAmJiB3aW5kb3cgPiAwKSB7XG4gICAgc2xpY2VMZW4gPSBsZW4gLSBwO1xuICAgIGlmIChzbGljZUxlbiA+IHdpbmRvdylcbiAgICAgIHNsaWNlTGVuID0gd2luZG93O1xuICAgIGlmIChzbGljZUxlbiA+IHBhY2tldFNpemUpXG4gICAgICBzbGljZUxlbiA9IHBhY2tldFNpemU7XG5cbiAgICByZXQgPSBzc2hzdHJlYW0uY2hhbm5lbERhdGEoaWQsIGRhdGEuc2xpY2UocCwgcCArIHNsaWNlTGVuKSk7XG5cbiAgICBwICs9IHNsaWNlTGVuO1xuICAgIHdpbmRvdyAtPSBzbGljZUxlbjtcblxuICAgIGlmICghcmV0KSB7XG4gICAgICB0aGlzLl93YWl0Q2xpZW50RHJhaW4gPSB0cnVlO1xuICAgICAgdGhpcy5fY2h1bmsgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jaHVua2NiID0gY2I7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvdXRnb2luZy53aW5kb3cgPSB3aW5kb3c7XG5cbiAgaWYgKGxlbiAtIHAgPiAwKSB7XG4gICAgaWYgKHdpbmRvdyA9PT0gMClcbiAgICAgIHRoaXMuX3dhaXRXaW5kb3cgPSB0cnVlO1xuICAgIGlmIChwID4gMCkge1xuICAgICAgLy8gcGFydGlhbFxuICAgICAgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbiAtIHApO1xuICAgICAgZGF0YS5jb3B5KGJ1ZiwgMCwgcCk7XG4gICAgICB0aGlzLl9jaHVuayA9IGJ1ZjtcbiAgICB9IGVsc2VcbiAgICAgIHRoaXMuX2NodW5rID0gZGF0YTtcbiAgICB0aGlzLl9jaHVua2NiID0gY2I7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCF0aGlzLl93YWl0Q2xpZW50RHJhaW4pXG4gICAgY2IoKTtcbn07XG5cbkNoYW5uZWwucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbmQoKTtcbn07XG5cbi8vIHNlc3Npb24gdHlwZS1zcGVjaWZpYyBtZXRob2RzXG5DaGFubmVsLnByb3RvdHlwZS5zZXRXaW5kb3cgPSBmdW5jdGlvbihyb3dzLCBjb2xzLCBoZWlnaHQsIHdpZHRoKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICBpZiAodGhpcy50eXBlID09PSAnc2Vzc2lvbidcbiAgICAgICYmICh0aGlzLnN1YnR5cGUgPT09ICdzaGVsbCcgfHwgdGhpcy5zdWJ0eXBlID09PSAnZXhlYycpXG4gICAgICAmJiB0aGlzLndyaXRhYmxlXG4gICAgICAmJiB0aGlzLm91dGdvaW5nLnN0YXRlID09PSAnb3BlbicpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50Ll9zc2hzdHJlYW0ud2luZG93Q2hhbmdlKHRoaXMub3V0Z29pbmcuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29scyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbkNoYW5uZWwucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0aW9uKHNpZ25hbE5hbWUpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIGlmICh0aGlzLnR5cGUgPT09ICdzZXNzaW9uJ1xuICAgICAgJiYgdGhpcy53cml0YWJsZVxuICAgICAgJiYgdGhpcy5vdXRnb2luZy5zdGF0ZSA9PT0gJ29wZW4nKVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuX3NzaHN0cmVhbS5zaWduYWwodGhpcy5vdXRnb2luZy5pZCwgc2lnbmFsTmFtZSk7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuQ2hhbm5lbC5wcm90b3R5cGUuZXhpdCA9IGZ1bmN0aW9uKG5hbWUsIGNvcmVEdW1wZWQsIG1zZykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIGlmICh0aGlzLnR5cGUgPT09ICdzZXNzaW9uJ1xuICAgICAgJiYgdGhpcy53cml0YWJsZVxuICAgICAgJiYgdGhpcy5vdXRnb2luZy5zdGF0ZSA9PT0gJ29wZW4nKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnbnVtYmVyJylcbiAgICAgIHJldHVybiB0aGlzLl9jbGllbnQuX3NzaHN0cmVhbS5leGl0U3RhdHVzKHRoaXMub3V0Z29pbmcuaWQsIG5hbWUpO1xuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5fc3Noc3RyZWFtLmV4aXRTaWduYWwodGhpcy5vdXRnb2luZy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlRHVtcGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkNoYW5uZWwuTUFYX1dJTkRPVyA9IE1BWF9XSU5ET1c7XG5DaGFubmVsLlBBQ0tFVF9TSVpFID0gUEFDS0VUX1NJWkU7XG5cbmZ1bmN0aW9uIHdpbmRvd0FkanVzdChzZWxmKSB7XG4gIGlmIChzZWxmLm91dGdvaW5nLnN0YXRlID09PSAnY2xvc2VkJylcbiAgICByZXR1cm4gdHJ1ZTtcbiAgdmFyIGFtdCA9IE1BWF9XSU5ET1cgLSBzZWxmLmluY29taW5nLndpbmRvdztcbiAgaWYgKGFtdCA8PSAwKVxuICAgIHJldHVybiB0cnVlO1xuICBzZWxmLmluY29taW5nLndpbmRvdyArPSBhbXQ7XG4gIHJldHVybiBzZWxmLl9jbGllbnQuX3NzaHN0cmVhbS5jaGFubmVsV2luZG93QWRqdXN0KHNlbGYub3V0Z29pbmcuaWQsIGFtdCk7XG59XG5cbmZ1bmN0aW9uIFNlcnZlclN0ZGVycihjaGFubmVsKSB7XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgeyBoaWdoV2F0ZXJNYXJrOiBNQVhfV0lORE9XIH0pO1xuICB0aGlzLl9jaGFubmVsID0gY2hhbm5lbDtcbn1cbmluaGVyaXRzKFNlcnZlclN0ZGVyciwgV3JpdGFibGVTdHJlYW0pO1xuXG5TZXJ2ZXJTdGRlcnIucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uKGRhdGEsIGVuY29kaW5nLCBjYikge1xuICB2YXIgY2hhbm5lbCA9IHRoaXMuX2NoYW5uZWw7XG4gIHZhciBzc2hzdHJlYW0gPSBjaGFubmVsLl9jbGllbnQuX3NzaHN0cmVhbTtcbiAgdmFyIG91dGdvaW5nID0gY2hhbm5lbC5vdXRnb2luZztcbiAgdmFyIHBhY2tldFNpemUgPSBvdXRnb2luZy5wYWNrZXRTaXplO1xuICB2YXIgaWQgPSBvdXRnb2luZy5pZDtcbiAgdmFyIHdpbmRvdyA9IG91dGdvaW5nLndpbmRvdztcbiAgdmFyIGxlbiA9IGRhdGEubGVuZ3RoO1xuICB2YXIgcCA9IDA7XG4gIHZhciByZXQ7XG4gIHZhciBidWY7XG4gIHZhciBzbGljZUxlbjtcblxuICBpZiAoY2hhbm5lbC5vdXRnb2luZy5zdGF0ZSAhPT0gJ29wZW4nKVxuICAgIHJldHVybjtcblxuICB3aGlsZSAobGVuIC0gcCA+IDAgJiYgd2luZG93ID4gMCkge1xuICAgIHNsaWNlTGVuID0gbGVuIC0gcDtcbiAgICBpZiAoc2xpY2VMZW4gPiB3aW5kb3cpXG4gICAgICBzbGljZUxlbiA9IHdpbmRvdztcbiAgICBpZiAoc2xpY2VMZW4gPiBwYWNrZXRTaXplKVxuICAgICAgc2xpY2VMZW4gPSBwYWNrZXRTaXplO1xuXG4gICAgcmV0ID0gc3Noc3RyZWFtLmNoYW5uZWxFeHREYXRhKGlkLCBkYXRhLnNsaWNlKHAsIHAgKyBzbGljZUxlbiksIFNUREVSUik7XG5cbiAgICBwICs9IHNsaWNlTGVuO1xuICAgIHdpbmRvdyAtPSBzbGljZUxlbjtcblxuICAgIGlmICghcmV0KSB7XG4gICAgICBjaGFubmVsLl93YWl0Q2xpZW50RHJhaW4gPSB0cnVlO1xuICAgICAgY2hhbm5lbC5fY2h1bmtFcnIgPSB1bmRlZmluZWQ7XG4gICAgICBjaGFubmVsLl9jaHVua2NiRXJyID0gY2I7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvdXRnb2luZy53aW5kb3cgPSB3aW5kb3c7XG5cbiAgaWYgKGxlbiAtIHAgPiAwKSB7XG4gICAgaWYgKHdpbmRvdyA9PT0gMClcbiAgICAgIGNoYW5uZWwuX3dhaXRXaW5kb3cgPSB0cnVlO1xuICAgIGlmIChwID4gMCkge1xuICAgICAgLy8gcGFydGlhbFxuICAgICAgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbiAtIHApO1xuICAgICAgZGF0YS5jb3B5KGJ1ZiwgMCwgcCk7XG4gICAgICBjaGFubmVsLl9jaHVua0VyciA9IGJ1ZjtcbiAgICB9IGVsc2VcbiAgICAgIGNoYW5uZWwuX2NodW5rRXJyID0gZGF0YTtcbiAgICBjaGFubmVsLl9jaHVua2NiRXJyID0gY2I7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFjaGFubmVsLl93YWl0Q2xpZW50RHJhaW4pXG4gICAgY2IoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2hhbm5lbDtcbiIsImV4cG9ydCB7XG4gIElQcm90b2NvbCxcbiAgSUNsaWVudE9wdGlvbnMsXG4gIElDb25maWcsXG4gIElGdHBDb25maWcsXG4gIElTRnRwQ29uZmlnLFxuICBJRmlsZSxcbiAgSUZpbGVQZXJtaXNzaW9ucyxcbiAgSUZpbGVUeXBlLFxuICBJVHJhbnNmZXIsXG4gIElUcmFuc2ZlckRpcmVjdGlvbixcbiAgSVRyYW5zZmVyUHJvZ3Jlc3MsXG4gIElUcmFuc2ZlclByb2dyZXNzTGlzdGVuZXIsXG4gIElUcmFuc2ZlckluZm8sXG4gIElUcmFuc2Zlck9wdGlvbnMsXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7IENsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmV4cG9ydCB7IFN0cmF0ZWd5IH0gZnJvbSAnLi9zdHJhdGVnaWVzL3N0cmF0ZWd5JztcbmV4cG9ydCB7IEZ0cFN0cmF0ZWd5IH0gZnJvbSAnLi9zdHJhdGVnaWVzL2Z0cCc7XG5leHBvcnQgeyBTZnRwU3RyYXRlZ3kgfSBmcm9tICcuL3N0cmF0ZWdpZXMvc2Z0cCc7XG5cbmV4cG9ydCB7IGV4ZWNGdW5jdGlvbiB9IGZyb20gJy4vdXRpbHMvZnVuY3Rpb24nO1xuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IFdyaXRhYmxlLCBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSwgY3JlYXRlUmVhZFN0cmVhbSB9IGZyb20gJ2ZzJztcblxuaW1wb3J0IHtcbiAgSUNvbmZpZyxcbiAgSUNsaWVudE9wdGlvbnMsXG4gIElTdHJhdGVnaWVzTWFwLFxuICBJRmlsZSxcbiAgSUNsaWVudFdvcmtlckdyb3VwLFxuICBJVHJhbnNmZXJQcm9ncmVzc0xpc3RlbmVyLFxuICBJVHJhbnNmZXIsXG4gIElUYXNrSGFuZGxlcixcbiAgSU9wdGlvbnMsXG4gIElGdHBDb25maWcsXG4gIElGdHBPcHRpb25zLFxuICBJU0Z0cE9wdGlvbnMsXG4gIElTRnRwQ29uZmlnLFxuICBJVHJhbnNmZXJEaXJlY3Rpb24sXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdHJhdGVneSB9IGZyb20gJy4vc3RyYXRlZ2llcy9zdHJhdGVneSc7XG5pbXBvcnQgeyBUYXNrc01hbmFnZXIgfSBmcm9tICcuL3Rhc2tzJztcbmltcG9ydCB7IEZ0cFN0cmF0ZWd5IH0gZnJvbSAnLi9zdHJhdGVnaWVzL2Z0cCc7XG5pbXBvcnQgeyByZXBlYXQgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGdldFBhdGhGcm9tU3RyZWFtLCBnZXRGaWxlU2l6ZSB9IGZyb20gJy4vdXRpbHMvZmlsZSc7XG5pbXBvcnQgeyBTZnRwU3RyYXRlZ3kgfSBmcm9tICcuL3N0cmF0ZWdpZXMvc2Z0cCc7XG5cbnR5cGUgSUNsaWVudEV2ZW50cyA9XG4gIHwgJ2Nvbm5lY3QnXG4gIHwgJ2Rpc2Nvbm5lY3QnXG4gIHwgJ3RyYW5zZmVyLW5ldydcbiAgfCAndHJhbnNmZXItYWJvcnQnXG4gIHwgJ3RyYW5zZmVyLWZpbmlzaCdcbiAgfCAndHJhbnNmZXItcHJvZ3Jlc3MnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ2xpZW50IHtcbiAgb24oZXZlbnQ6ICdjb25uZWN0JywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzO1xuICBvbihldmVudDogJ2Rpc2Nvbm5lY3QnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXM7XG4gIG9uKGV2ZW50OiAndHJhbnNmZXItbmV3JywgbGlzdGVuZXI6IChlOiBJVHJhbnNmZXIpID0+IHZvaWQpOiB0aGlzO1xuICBvbihldmVudDogJ3RyYW5zZmVyLWFib3J0JywgbGlzdGVuZXI6ICguLi5pZHM6IG51bWJlcltdKSA9PiB2b2lkKTogdGhpcztcbiAgb24oZXZlbnQ6ICd0cmFuc2Zlci1maW5pc2gnLCBsaXN0ZW5lcjogKGU6IElUcmFuc2ZlcikgPT4gdm9pZCk6IHRoaXM7XG4gIG9uKGV2ZW50OiAndHJhbnNmZXItcHJvZ3Jlc3MnLCBsaXN0ZW5lcjogSVRyYW5zZmVyUHJvZ3Jlc3NMaXN0ZW5lcik6IHRoaXM7XG5cbiAgb25jZShldmVudDogJ2Nvbm5lY3QnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXM7XG4gIG9uY2UoZXZlbnQ6ICdkaXNjb25uZWN0JywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzO1xuICBvbmNlKGV2ZW50OiAndHJhbnNmZXItbmV3JywgbGlzdGVuZXI6IChlOiBJVHJhbnNmZXIpID0+IHZvaWQpOiB0aGlzO1xuICBvbmNlKGV2ZW50OiAndHJhbnNmZXItYWJvcnQnLCBsaXN0ZW5lcjogKC4uLmlkczogbnVtYmVyW10pID0+IHZvaWQpOiB0aGlzO1xuICBvbmNlKGV2ZW50OiAndHJhbnNmZXItZmluaXNoJywgbGlzdGVuZXI6IChlOiBJVHJhbnNmZXIpID0+IHZvaWQpOiB0aGlzO1xuICBvbmNlKGV2ZW50OiAndHJhbnNmZXItcHJvZ3Jlc3MnLCBsaXN0ZW5lcjogSVRyYW5zZmVyUHJvZ3Jlc3NMaXN0ZW5lcik6IHRoaXM7XG5cbiAgYWRkTGlzdGVuZXIoZXZlbnQ6IElDbGllbnRFdmVudHMsIGxpc3RlbmVyOiBGdW5jdGlvbik6IHRoaXM7XG4gIHJlbW92ZUxpc3RlbmVyKGV2ZW50OiBJQ2xpZW50RXZlbnRzLCBsaXN0ZW5lcjogRnVuY3Rpb24pOiB0aGlzO1xufVxuXG4vKipcbiAqIEhpZ2gtbGV2ZWwgQVBJLCB3aGljaCBoYW5kbGVzIHN0cmF0ZWdpZXMuXG4gKlxuICogSXQgYWxsb3dzIHRvIGNhbGwgbWV0aG9kcyBhc3luY2hyb25vdXNseS5cbiAqL1xuZXhwb3J0IGNsYXNzIENsaWVudCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHByb3RlY3RlZCBfY29uZmlnPzogSUNvbmZpZztcblxuICBwcm90ZWN0ZWQgX2Nvbm5lY3Rpb25PcHRpb25zPzogSU9wdGlvbnM7XG5cbiAgcHJvdGVjdGVkIG9wdGlvbnM6IElDbGllbnRPcHRpb25zO1xuXG4gIHByb3RlY3RlZCB3b3JrZXJzOiBTdHJhdGVneVtdID0gW107XG5cbiAgcHJvdGVjdGVkIHRhc2tzID0gbmV3IFRhc2tzTWFuYWdlcjxTdHJhdGVneT4oKTtcblxuICBwcm90ZWN0ZWQgdHJhbnNmZXJzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTsgLy8gdGFzayBpZCA9PiB3b3JrZXIgaW5kZXg7XG5cbiAgcHJvdGVjdGVkIHN0cmF0ZWd5OiB0eXBlb2YgU3RyYXRlZ3k7XG5cbiAgcHJvdGVjdGVkIHN0cmF0ZWdpZXM6IElTdHJhdGVnaWVzTWFwID0ge1xuICAgIGZ0cDogRnRwU3RyYXRlZ3ksXG4gICAgZnRwczogRnRwU3RyYXRlZ3ksXG4gICAgc2Z0cDogU2Z0cFN0cmF0ZWd5LFxuICB9O1xuXG4gIC8qKlxuICAgKiBQcmV2aW91c2x5IHNldCBjb25maWcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc2V0IGEgcG9vbCBvZiBjbGllbnRzLCB3aGljaCB3aWxsIGNyZWF0ZSBtdWx0aXBsZSBjaGFubmVscyBmb3IgZmFzdGVyIGNvbW11bmljYXRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogSUNsaWVudE9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5vcHRpb25zID0geyBwb29sOiAxLCAuLi5vcHRpb25zIH07XG5cbiAgICB0aGlzLnRhc2tzLmdldFdvcmtlckluc3RhbmNlID0gdGhpcy5nZXRXb3JrZXJJbnN0YW5jZTtcbiAgICB0aGlzLnRhc2tzLndvcmtlckZpbHRlciA9IHRoaXMud29ya2VyRmlsdGVyO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyUHJvdG9jb2wocHJvdG9jb2w6IHN0cmluZywgc3RyYXRlZ3k6IHR5cGVvZiBTdHJhdGVneSkge1xuICAgIHRoaXMuc3RyYXRlZ2llc1twcm90b2NvbF0gPSBzdHJhdGVneTtcbiAgfVxuXG4gIHB1YmxpYyB1bnJlZ2lzdGVyUHJvdG9jb2wocHJvdG9jb2w6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLnN0cmF0ZWdpZXNbcHJvdG9jb2xdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVdvcmtlcigpIHtcbiAgICBjb25zdCB7IHByb3RvY29sIH0gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuc3RyYXRlZ2llc1twcm90b2NvbF07XG5cbiAgICBpZiAoIXN0cmF0ZWd5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmF0ZWd5IGZvciBwcm90b2NvbCAke3Byb3RvY29sfSBub3QgZm91bmQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBzdHJhdGVneSh0aGlzLmNvbmZpZywgdGhpcy5fY29ubmVjdGlvbk9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFdvcmtlcnMoKSB7XG4gICAgdGhpcy53b3JrZXJzLmZvckVhY2godGhpcy5jbGVhcldvcmtlckV2ZW50cyk7XG4gICAgdGhpcy53b3JrZXJzID0gW107XG5cbiAgICBjb25zdCB7IHBvb2wgfSA9IHRoaXMub3B0aW9ucztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9vbDsgaSsrKSB7XG4gICAgICBjb25zdCB3b3JrZXIgPSB0aGlzLmNyZWF0ZVdvcmtlcigpO1xuXG4gICAgICB0aGlzLmhhbmRsZVdvcmtlckV2ZW50cyh3b3JrZXIpO1xuXG4gICAgICB0aGlzLndvcmtlcnMucHVzaCh3b3JrZXIpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0V29ya2VyR3JvdXBzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlV29ya2VyRXZlbnRzID0gKGluc3RhbmNlOiBTdHJhdGVneSkgPT4ge1xuICAgIGluc3RhbmNlLm9uKCdjb25uZWN0JywgdGhpcy5vbkNvbm5lY3QpO1xuICAgIGluc3RhbmNlLm9uKCdkaXNjb25uZWN0JywgdGhpcy5vbkRpc2Nvbm5lY3QpO1xuICAgIGluc3RhbmNlLm9uKCdwcm9ncmVzcycsIHRoaXMub25Qcm9ncmVzcyk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGNsZWFyV29ya2VyRXZlbnRzID0gKGluc3RhbmNlOiBTdHJhdGVneSkgPT4ge1xuICAgIGluc3RhbmNlLnJlbW92ZUxpc3RlbmVyKCdjb25uZWN0JywgdGhpcy5vbkNvbm5lY3QpO1xuICAgIGluc3RhbmNlLnJlbW92ZUxpc3RlbmVyKCdkaXNjb25uZWN0JywgdGhpcy5vbkRpc2Nvbm5lY3QpO1xuICAgIGluc3RhbmNlLnJlbW92ZUxpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMub25Qcm9ncmVzcyk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHNldFdvcmtlckdyb3VwcygpIHtcbiAgICBjb25zdCB7IHBvb2wsIHRyYW5zZmVyUG9vbCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IGdyb3VwczogSUNsaWVudFdvcmtlckdyb3VwW10gPSBbXTtcblxuICAgIGlmICghdHJhbnNmZXJQb29sIHx8IHBvb2wgPT09IDEpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKC4uLnJlcGVhdDxJQ2xpZW50V29ya2VyR3JvdXA+KCdhbGwnLCBwb29sKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwcy5wdXNoKCdtaXNjJywgLi4ucmVwZWF0PElDbGllbnRXb3JrZXJHcm91cD4oJ3RyYW5zZmVyJywgcG9vbCAtIDEpKTtcbiAgICB9XG5cbiAgICB0aGlzLnRhc2tzLnNldFdvcmtlcnMoLi4uZ3JvdXBzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRXb3JrZXJJbnN0YW5jZSA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Vyc1tpbmRleF07XG4gIH07XG5cbiAgcHJvdGVjdGVkIHdvcmtlckZpbHRlciA9ICh3b3JrZXIsIGdyb3VwOiBJQ2xpZW50V29ya2VyR3JvdXApID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgd29ya2VyLmdyb3VwID09PSAnYWxsJyB8fFxuICAgICAgKCFncm91cCAmJiB3b3JrZXIuZ3JvdXAgPT09ICdtaXNjJykgfHxcbiAgICAgIHdvcmtlci5ncm91cCA9PT0gZ3JvdXBcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb25uZWN0cyB0byBhIHNlcnZlci4gSWYgeW91J3JlIGFscmVhZHkgY29ubmVjdGVkLCBpdCBkaXNjb25uZWN0cy5cbiAgICpcbiAgICogSXQgc2F2ZXMgYGNvbmZpZ2AgYW5kIGBvcHRpb25zYCwgc28geW91IGNhbiBjYWxsIGl0IHdpdGhvdXQgcHJvdmlkaW5nIHRoZXNlIGFyZ3VtZW50cyBsYXRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KGNvbmZpZz86IElGdHBDb25maWcsIG9wdGlvbnM/OiBJRnRwT3B0aW9ucyk7XG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KGNvbmZpZz86IElTRnRwQ29uZmlnLCBvcHRpb25zPzogSVNGdHBPcHRpb25zKTtcbiAgcHVibGljIGFzeW5jIGNvbm5lY3QoY29uZmlnPzogSUNvbmZpZywgb3B0aW9ucz86IElPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcgJiYgIWNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25maWcgbXVzdCBiZSBwcm92aWRlZCEnKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3QoKTtcblxuICAgIGlmIChjb25maWcpIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICBpZiAob3B0aW9ucykgdGhpcy5fY29ubmVjdGlvbk9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgdGhpcy5zZXRXb3JrZXJzKCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLndvcmtlcnMubWFwKChyKSA9PiByLmNvbm5lY3QoKSkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRpc2Nvbm5lY3QoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy53b3JrZXJzLm1hcCgocikgPT4gci5kaXNjb25uZWN0KCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBYm9ydHMgZXZlcnkgcHJvY2Nlc2VkIGFuZCB3YWl0aW5nIHRhc2suXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYWJvcnQoKSB7XG4gICAgdGhpcy5lbWl0KCd0cmFuc2Zlci1hYm9ydCcsIC4uLnRoaXMudHJhbnNmZXJzLmtleXMoKSk7XG5cbiAgICB0aGlzLnRhc2tzLmRlbGV0ZUFsbFRhc2tzKCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLndvcmtlcnMubWFwKChyKSA9PiByLmFib3J0KCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBYm9ydHMgc3BlY2lmaWVkIGZpbGUgdHJhbnNmZXJzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFib3J0VHJhbnNmZXIoLi4udHJhbnNmZXJJZHM6IG51bWJlcltdKSB7XG4gICAgY29uc3Qgd29ya2VySW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBpbnN0YW5jZXM6IFN0cmF0ZWd5W10gPSBbXTtcblxuICAgIHRyYW5zZmVySWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICBjb25zdCB3b3JrZXJJbmRleCA9IHRoaXMudHJhbnNmZXJzLmdldChpZCk7XG5cbiAgICAgIGlmICh3b3JrZXJJbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGluc3RhbmNlcy5wdXNoKHRoaXMud29ya2Vyc1t3b3JrZXJJbmRleF0pO1xuICAgICAgfVxuXG4gICAgICB3b3JrZXJJbmRleGVzLnB1c2god29ya2VySW5kZXgpO1xuXG4gICAgICB0aGlzLmVtaXQoJ3RyYW5zZmVyLWFib3J0JywgaWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy50YXNrcy5kZWxldGVUYXNrcyguLi50cmFuc2Zlcklkcyk7XG4gICAgdGhpcy50YXNrcy5wYXVzZVdvcmtlcnMoLi4ud29ya2VySW5kZXhlcyk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChpbnN0YW5jZXMubWFwKChyKSA9PiByLmFib3J0KCkpKTtcblxuICAgIHRoaXMudGFza3MucmVzdW1lV29ya2VycyguLi53b3JrZXJJbmRleGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZHMgYSByZW1vdGUgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGRlc3QgY2FuIGJlIGVpdGhlciBgV3JpdGFibGVgIHN0cmVhbSBvciBwYXRoIG9mIGEgbG9jYWwgZmlsZS5cbiAgICogQHBhcmFtIHN0YXJ0QXQgY2FuIGJlIHNldCB0byByZXN1bWUgZG93bmxvYWQuXG4gICAqL1xuICBwdWJsaWMgZG93bmxvYWQoXG4gICAgZGVzdDogV3JpdGFibGUgfCBzdHJpbmcsXG4gICAgcmVtb3RlUGF0aDogc3RyaW5nLFxuICAgIHN0YXJ0QXQ/OiBudW1iZXIsXG4gICkge1xuICAgIGxldCBzdHJlYW06IFdyaXRhYmxlO1xuICAgIGxldCBsb2NhbFBhdGg6IHN0cmluZztcblxuICAgIGlmICh0eXBlb2YgZGVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKGRlc3QsIHtcbiAgICAgICAgZmxhZ3M6IHN0YXJ0QXQgPyAnYScgOiAndycsXG4gICAgICAgIHN0YXJ0OiBzdGFydEF0LFxuICAgICAgfSk7XG5cbiAgICAgIGxvY2FsUGF0aCA9IGRlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbSA9IGRlc3Q7XG4gICAgICBsb2NhbFBhdGggPSBnZXRQYXRoRnJvbVN0cmVhbShkZXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVUcmFuc2ZlcihcbiAgICAgIGFzeW5jICh7IGluc3RhbmNlLCB0YXNrSWQgfSkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbEJ5dGVzID0gYXdhaXQgaW5zdGFuY2Uuc2l6ZShyZW1vdGVQYXRoKTtcblxuICAgICAgICBhd2FpdCBpbnN0YW5jZS5kb3dubG9hZChzdHJlYW0sIHtcbiAgICAgICAgICBpZDogdGFza0lkLFxuICAgICAgICAgIHN0YXJ0QXQsXG4gICAgICAgICAgbG9jYWxQYXRoLFxuICAgICAgICAgIHJlbW90ZVBhdGgsXG4gICAgICAgICAgdG90YWxCeXRlcyxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgeyByZW1vdGVQYXRoLCBsb2NhbFBhdGggfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZHMgYSBsb2NhbCBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlIGNhbiBiZSBlaXRoZXIgYFJlYWRhYmxlYCBzdHJlYW0gb3IgcGF0aCBvZiBhIHJlbW90ZSBmaWxlLlxuICAgKi9cbiAgcHVibGljIHVwbG9hZChzb3VyY2U6IFJlYWRhYmxlIHwgc3RyaW5nLCByZW1vdGVQYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgc3RyZWFtOiBSZWFkYWJsZTtcbiAgICBsZXQgbG9jYWxQYXRoOiBzdHJpbmc7XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW0oc291cmNlKTtcbiAgICAgIGxvY2FsUGF0aCA9IHNvdXJjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtID0gc291cmNlO1xuICAgICAgbG9jYWxQYXRoID0gZ2V0UGF0aEZyb21TdHJlYW0oc291cmNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVUcmFuc2ZlcihcbiAgICAgIGFzeW5jICh7IGluc3RhbmNlLCB0YXNrSWQgfSkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbEJ5dGVzID0gYXdhaXQgZ2V0RmlsZVNpemUobG9jYWxQYXRoKTtcblxuICAgICAgICBhd2FpdCBpbnN0YW5jZS51cGxvYWQoc3RyZWFtLCB7XG4gICAgICAgICAgaWQ6IHRhc2tJZCxcbiAgICAgICAgICBsb2NhbFBhdGgsXG4gICAgICAgICAgcmVtb3RlUGF0aCxcbiAgICAgICAgICB0b3RhbEJ5dGVzLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB7IHJlbW90ZVBhdGgsIGxvY2FsUGF0aCB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgZmlsZXMgaW4gYSBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgbGlzdChwYXRoPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuaGFuZGxlPElGaWxlW10+KCh7IGluc3RhbmNlIH0pID0+IGluc3RhbmNlLmxpc3QocGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgc2l6ZSBvZiBhIGZpbGUuXG4gICAqL1xuICBwdWJsaWMgc2l6ZShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YXNrcy5oYW5kbGU8bnVtYmVyPigoeyBpbnN0YW5jZSB9KSA9PiBpbnN0YW5jZS5zaXplKHBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBmaWxlIG9yIGEgZm9sZGVyIGV4aXN0cy5cbiAgICovXG4gIHB1YmxpYyBleGlzdHMocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuaGFuZGxlPGJvb2xlYW4+KCh7IGluc3RhbmNlIH0pID0+IGluc3RhbmNlLmV4aXN0cyhwYXRoKSk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgYSBmaWxlIG9yIGEgZm9sZGVyLlxuICAgKiBDYW4gYmUgdXNlZCB0byByZW5hbWUuXG4gICAqL1xuICBwdWJsaWMgbW92ZShzb3VyY2U6IHN0cmluZywgZGVzdDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuaGFuZGxlKCh7IGluc3RhbmNlIH0pID0+IGluc3RhbmNlLm1vdmUoc291cmNlLCBkZXN0KSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsZShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YXNrcy5oYW5kbGUoKHsgaW5zdGFuY2UgfSkgPT4gaW5zdGFuY2UucmVtb3ZlRmlsZShwYXRoKSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRW1wdHlGb2xkZXIocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuaGFuZGxlKCh7IGluc3RhbmNlIH0pID0+XG4gICAgICBpbnN0YW5jZS5yZW1vdmVFbXB0eUZvbGRlcihwYXRoKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBmb2xkZXIgYW5kIGFsbCBvZiBpdHMgY29udGVudC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVGb2xkZXIocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuaGFuZGxlKCh7IGluc3RhbmNlIH0pID0+IGluc3RhbmNlLnJlbW92ZUZvbGRlcihwYXRoKSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRm9sZGVyKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRhc2tzLmhhbmRsZSgoeyBpbnN0YW5jZSB9KSA9PiBpbnN0YW5jZS5jcmVhdGVGb2xkZXIocGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1wdHkgZmlsZS4gU2ltaWxhciB0byBgdG91Y2hgIGluIFVuaXguXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlRW1wdHlGaWxlKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRhc2tzLmhhbmRsZSgoeyBpbnN0YW5jZSB9KSA9PiBpbnN0YW5jZS5jcmVhdGVFbXB0eUZpbGUocGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHB1YmxpYyBwd2QoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuaGFuZGxlPHN0cmluZz4oKHsgaW5zdGFuY2UgfSkgPT4gaW5zdGFuY2UucHdkKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcmF3IGNvbW1hbmQuIFN1cHBvcnQgbm90IGd1YXJhbnRlZWQuXG4gICAqL1xuICBwdWJsaWMgc2VuZChjb21tYW5kOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YXNrcy5oYW5kbGU8c3RyaW5nPigoeyBpbnN0YW5jZSB9KSA9PiBpbnN0YW5jZS5zZW5kKGNvbW1hbmQpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNvbm5lY3QgPSAoKSA9PiB7XG4gICAgdGhpcy5lbWl0KCdjb25uZWN0Jyk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIG9uRGlzY29ubmVjdCA9ICgpID0+IHtcbiAgICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3QnKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgb25Qcm9ncmVzcyA9IChkYXRhLCBwcm9ncmVzcykgPT4ge1xuICAgIHRoaXMuZW1pdCgndHJhbnNmZXItcHJvZ3Jlc3MnLCBkYXRhLCBwcm9ncmVzcyk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVRyYW5zZmVyKFxuICAgIGZuOiBJVGFza0hhbmRsZXI8U3RyYXRlZ3k+LFxuICAgIGRpcmVjdGlvbjogSVRyYW5zZmVyRGlyZWN0aW9uLFxuICApIHtcbiAgICBjb25zdCB0YXNrSWQgPSB0aGlzLnRhc2tzLmNyZWF0ZVRhc2tJZCgpO1xuICAgIGNvbnN0IHRyYW5zZmVyOiBJVHJhbnNmZXIgPSB7IGlkOiB0YXNrSWQsIC4uLmRpcmVjdGlvbiB9O1xuXG4gICAgdGhpcy50cmFuc2ZlcnMuc2V0KHRhc2tJZCwgbnVsbCk7XG4gICAgdGhpcy5lbWl0KCd0cmFuc2Zlci1uZXcnLCB0cmFuc2Zlcik7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy50YXNrcy5oYW5kbGUoXG4gICAgICAgIGFzeW5jIChlKSA9PiB7XG4gICAgICAgICAgdGhpcy50cmFuc2ZlcnMuc2V0KHRhc2tJZCwgZS53b3JrZXJJbmRleCk7XG5cbiAgICAgICAgICBhd2FpdCBmbihlKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3RyYW5zZmVyLXRyYW5zZmVyJyxcbiAgICAgICAgdGFza0lkLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50cmFuc2ZlcnMuZGVsZXRlKHRhc2tJZCk7XG4gICAgICB0aGlzLmVtaXQoJ3RyYW5zZmVyLWZpbmlzaCcsIHRyYW5zZmVyKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5cbmltcG9ydCB7XG4gIElUYXNrLFxuICBJVGFza0NoYW5nZSxcbiAgSVRhc2tXb3JrZXIsXG4gIElUYXNrc0dyb3VwRmlsdGVyLFxuICBJVGFza0hhbmRsZXJFdmVudCxcbiAgSVRhc2tIYW5kbGVyLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZXhlY0Z1bmN0aW9uIH0gZnJvbSAnLi91dGlscy9mdW5jdGlvbic7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUYXNrc01hbmFnZXIge1xuICBvbihldmVudDogJ2NoYW5nZScsIGxpc3RlbmVyOiAoZTogSVRhc2tDaGFuZ2UpID0+IHZvaWQpOiB0aGlzO1xufVxuXG5jb25zdCBERUZBVUxUX0dST1VQX0ZJTFRFUjogSVRhc2tzR3JvdXBGaWx0ZXIgPSAod29ya2VyLCBncm91cCkgPT5cbiAgd29ya2VyLmdyb3VwID09PSBncm91cDtcblxuLyoqXG4gKiBBbGxvd3MgdG8gY3JlYXRlIG11bHRpcGxlIGNoYW5uZWxzIHdpdGggZ2l2ZW4gZ3JvdXBzLlxuICovXG5leHBvcnQgY2xhc3MgVGFza3NNYW5hZ2VyPEsgPSBudW1iZXI+IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgcHJpdmF0ZSB3b3JrZXJzOiBJVGFza1dvcmtlcltdID0gW107XG5cbiAgcHJvdGVjdGVkIHF1ZXVlOiBJVGFza1tdID0gW107XG5cbiAgcHJvdGVjdGVkIHRhc2tDb3VudGVyID0gLTE7XG5cbiAgcHJvdGVjdGVkIHVuYXZhaWxhYmxlV29ya2VycyA9IDA7XG5cbiAgcHVibGljIHdvcmtlckZpbHRlcjogSVRhc2tzR3JvdXBGaWx0ZXI7XG5cbiAgcHVibGljIGdldFdvcmtlckluc3RhbmNlOiAoaW5kZXg6IG51bWJlciwgZ3JvdXA6IHN0cmluZykgPT4gSztcblxuICBwcm90ZWN0ZWQgZ2V0V29ya2VyKGdyb3VwOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy51bmF2YWlsYWJsZVdvcmtlcnMgPT09IHRoaXMud29ya2Vycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMud29ya2VyRmlsdGVyIHx8IERFRkFVTFRfR1JPVVBfRklMVEVSO1xuXG4gICAgcmV0dXJuIHRoaXMud29ya2Vycy5maW5kKChyKSA9PiAhci5idXN5ICYmICFyLnBhdXNlZCAmJiBmaWx0ZXIociwgZ3JvdXApKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRXb3JrZXJzKGluZGV4ZXM/OiBudW1iZXJbXSkge1xuICAgIGlmICghaW5kZXhlcz8ubGVuZ3RoKSByZXR1cm4gdGhpcy53b3JrZXJzO1xuICAgIHJldHVybiBpbmRleGVzLm1hcCgocikgPT4gdGhpcy53b3JrZXJzW3JdKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRXb3JrZXJzKC4uLndvcmtlcnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy53b3JrZXJzID0gd29ya2Vycy5tYXAoKGdyb3VwLCBpbmRleCkgPT4gKHtcbiAgICAgIGJ1c3k6IGZhbHNlLFxuICAgICAgZ3JvdXAsXG4gICAgICBpbmRleCxcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlPFQgPSB2b2lkPihcbiAgICBmbjogSVRhc2tIYW5kbGVyPEs+LFxuICAgIGdyb3VwPzogc3RyaW5nLFxuICAgIHRhc2tJZD86IG51bWJlcixcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgdGhpcy53b3JrZXJzQ2hlY2soKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0YXNrOiBJVGFzayA9IHtcbiAgICAgICAgaWQ6IHRhc2tJZCA/PyB0aGlzLmNyZWF0ZVRhc2tJZCgpLFxuICAgICAgICBmbixcbiAgICAgICAgZ3JvdXAsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IChlOiBJVGFza0NoYW5nZSkgPT4ge1xuICAgICAgICBpZiAoZS50YXNrSWQgPT09IHRhc2suaWQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICAgICAgICBpZiAoZS5lcnJvcikgcmV0dXJuIHJlamVjdChlLmVycm9yKTtcbiAgICAgICAgICByZXNvbHZlKGUuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMub24oJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJvY2Vzcyh0YXNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzID0gYXN5bmMgKHRhc2s6IElUYXNrLCB3b3JrZXI/OiBJVGFza1dvcmtlcikgPT4ge1xuICAgIHdvcmtlciA9IHdvcmtlciB8fCB0aGlzLmdldFdvcmtlcih0YXNrLmdyb3VwKTtcblxuICAgIGlmICh3b3JrZXIpIHtcbiAgICAgIHdvcmtlci5idXN5ID0gdHJ1ZTtcbiAgICAgIHRoaXMudW5hdmFpbGFibGVXb3JrZXJzKys7XG5cbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5nZXRXb3JrZXJJbnN0YW5jZVxuICAgICAgICA/IHRoaXMuZ2V0V29ya2VySW5zdGFuY2Uod29ya2VyLmluZGV4LCB0YXNrLmdyb3VwKVxuICAgICAgICA6IHdvcmtlci5pbmRleDtcblxuICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgZXhlY0Z1bmN0aW9uKHRhc2suZm4sIHtcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIHRhc2tJZDogdGFzay5pZCxcbiAgICAgICAgd29ya2VySW5kZXg6IHdvcmtlci5pbmRleCxcbiAgICAgIH0gYXMgSVRhc2tIYW5kbGVyRXZlbnQ8Sz4pO1xuXG4gICAgICB3b3JrZXIuYnVzeSA9IGZhbHNlO1xuICAgICAgdGhpcy51bmF2YWlsYWJsZVdvcmtlcnMtLTtcblxuICAgICAgdGhpcy5maW5pc2hUYXNrKHRhc2suaWQsIGRhdGEsIGVycm9yKTtcbiAgICAgIHRoaXMucHJvY2Vzc05leHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWV1ZS5wdXNoKHRhc2spO1xuICAgIH1cbiAgfTtcblxuICBwcm90ZWN0ZWQgYXN5bmMgcHJvY2Vzc05leHQoKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoKSB7XG4gICAgICBjb25zdCBxdWV1ZSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgdGhpcy5xdWV1ZSkge1xuICAgICAgICBjb25zdCB3b3JrZXIgPSB0aGlzLmdldFdvcmtlcih0YXNrLmdyb3VwKTtcblxuICAgICAgICBpZiAod29ya2VyKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzKHRhc2ssIHdvcmtlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVldWUucHVzaCh0YXNrKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnF1ZXVlID0gcXVldWU7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHdvcmtlcnNDaGVjaygpIHtcbiAgICBpZiAoIXRoaXMud29ya2Vycy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gd29ya2VycyBzZXQnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcGF1c2VXb3JrZXJzKC4uLmluZGV4ZXM6IG51bWJlcltdKSB7XG4gICAgdGhpcy51bmF2YWlsYWJsZVdvcmtlcnMgKz0gaW5kZXhlcy5sZW5ndGg7XG5cbiAgICB0aGlzLmdldFdvcmtlcnMoaW5kZXhlcykuZm9yRWFjaCgocikgPT4gKHIucGF1c2VkID0gdHJ1ZSkpO1xuICB9XG5cbiAgcHVibGljIHJlc3VtZVdvcmtlcnMoLi4uaW5kZXhlczogbnVtYmVyW10pIHtcbiAgICB0aGlzLnVuYXZhaWxhYmxlV29ya2VycyAtPSBpbmRleGVzLmxlbmd0aDtcblxuICAgIHRoaXMuZ2V0V29ya2VycyhpbmRleGVzKS5mb3JFYWNoKChyKSA9PiAoci5wYXVzZWQgPSBmYWxzZSkpO1xuICAgIHRoaXMucHJvY2Vzc05leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVUYXNrcyguLi5pZHM6IG51bWJlcltdKSB7XG4gICAgY29uc3QgcXVldWU6IElUYXNrW10gPSBbXTtcblxuICAgIHRoaXMucXVldWUuZm9yRWFjaCgodGFzaykgPT4ge1xuICAgICAgaWYgKGlkcy5pbmNsdWRlcyh0YXNrLmlkKSkge1xuICAgICAgICB0aGlzLmZpbmlzaFRhc2sodGFzay5pZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZS5wdXNoKHRhc2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5xdWV1ZSA9IHF1ZXVlO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUFsbFRhc2tzKCkge1xuICAgIHRoaXMucXVldWUuZm9yRWFjaCgocikgPT4gdGhpcy5maW5pc2hUYXNrKHIuaWQpKTtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlVGFza0lkKCkge1xuICAgIHJldHVybiArK3RoaXMudGFza0NvdW50ZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmluaXNoVGFzayhpZDogbnVtYmVyLCBkYXRhPzogYW55LCBlcnJvcj86IEVycm9yKSB7XG4gICAgdGhpcy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICB0YXNrSWQ6IGlkLFxuICAgICAgZGF0YSxcbiAgICAgIGVycm9yLFxuICAgICAgdHlwZTogJ2ZpbmlzaGVkJyxcbiAgICB9IGFzIElUYXNrQ2hhbmdlKTtcbiAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IHRsc18xID0gcmVxdWlyZShcInRsc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgRnRwQ29udGV4dF8xID0gcmVxdWlyZShcIi4vRnRwQ29udGV4dFwiKTtcbmNvbnN0IHBhcnNlTGlzdF8xID0gcmVxdWlyZShcIi4vcGFyc2VMaXN0XCIpO1xuY29uc3QgUHJvZ3Jlc3NUcmFja2VyXzEgPSByZXF1aXJlKFwiLi9Qcm9ncmVzc1RyYWNrZXJcIik7XG5jb25zdCBTdHJpbmdXcml0ZXJfMSA9IHJlcXVpcmUoXCIuL1N0cmluZ1dyaXRlclwiKTtcbmNvbnN0IHBhcnNlTGlzdE1MU0RfMSA9IHJlcXVpcmUoXCIuL3BhcnNlTGlzdE1MU0RcIik7XG5jb25zdCBuZXRVdGlsc18xID0gcmVxdWlyZShcIi4vbmV0VXRpbHNcIik7XG5jb25zdCB0cmFuc2Zlcl8xID0gcmVxdWlyZShcIi4vdHJhbnNmZXJcIik7XG5jb25zdCBwYXJzZUNvbnRyb2xSZXNwb25zZV8xID0gcmVxdWlyZShcIi4vcGFyc2VDb250cm9sUmVzcG9uc2VcIik7XG4vLyBVc2UgcHJvbWlzaWZ5IHRvIGtlZXAgdGhlIGxpYnJhcnkgY29tcGF0aWJsZSB3aXRoIE5vZGUgOC5cbmNvbnN0IGZzUmVhZERpciA9IHV0aWxfMS5wcm9taXNpZnkoZnNfMS5yZWFkZGlyKTtcbmNvbnN0IGZzTWtEaXIgPSB1dGlsXzEucHJvbWlzaWZ5KGZzXzEubWtkaXIpO1xuY29uc3QgZnNTdGF0ID0gdXRpbF8xLnByb21pc2lmeShmc18xLnN0YXQpO1xuY29uc3QgZnNPcGVuID0gdXRpbF8xLnByb21pc2lmeShmc18xLm9wZW4pO1xuY29uc3QgZnNDbG9zZSA9IHV0aWxfMS5wcm9taXNpZnkoZnNfMS5jbG9zZSk7XG5jb25zdCBmc1VubGluayA9IHV0aWxfMS5wcm9taXNpZnkoZnNfMS51bmxpbmspO1xuLyoqXG4gKiBIaWdoLWxldmVsIEFQSSB0byBpbnRlcmFjdCB3aXRoIGFuIEZUUCBzZXJ2ZXIuXG4gKi9cbmNsYXNzIENsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGUgYW4gRlRQIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aW1lb3V0ICBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcywgdXNlIDAgZm9yIG5vIHRpbWVvdXQuIE9wdGlvbmFsLCBkZWZhdWx0IGlzIDMwIHNlY29uZHMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodGltZW91dCA9IDMwMDAwKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNdWx0aXBsZSBjb21tYW5kcyB0byByZXRyaWV2ZSBhIGRpcmVjdG9yeSBsaXN0aW5nIGFyZSBwb3NzaWJsZS4gVGhpcyBpbnN0YW5jZVxuICAgICAgICAgKiB3aWxsIHRyeSBhbGwgb2YgdGhlbSBpbiB0aGUgb3JkZXIgcHJlc2VudGVkIHRoZSBmaXJzdCB0aW1lIGEgZGlyZWN0b3J5IGxpc3RpbmdcbiAgICAgICAgICogaXMgcmVxdWVzdGVkLiBBZnRlciB0aGF0LCBgYXZhaWxhYmxlTGlzdENvbW1hbmRzYCB3aWxsICBob2xkIG9ubHkgdGhlIGZpcnN0XG4gICAgICAgICAqIGVudHJ5IHRoYXQgd29ya2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdmFpbGFibGVMaXN0Q29tbWFuZHMgPSBbXCJNTFNEXCIsIFwiTElTVCAtYVwiLCBcIkxJU1RcIl07XG4gICAgICAgIHRoaXMuZnRwID0gbmV3IEZ0cENvbnRleHRfMS5GVFBDb250ZXh0KHRpbWVvdXQpO1xuICAgICAgICB0aGlzLnByZXBhcmVUcmFuc2ZlciA9IHRoaXMuX2VudGVyRmlyc3RDb21wYXRpYmxlTW9kZShbdHJhbnNmZXJfMS5lbnRlclBhc3NpdmVNb2RlSVB2NiwgdHJhbnNmZXJfMS5lbnRlclBhc3NpdmVNb2RlSVB2NF0pO1xuICAgICAgICB0aGlzLnBhcnNlTGlzdCA9IHBhcnNlTGlzdF8xLnBhcnNlTGlzdDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NUcmFja2VyID0gbmV3IFByb2dyZXNzVHJhY2tlcl8xLlByb2dyZXNzVHJhY2tlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGUgY2xpZW50IGFuZCBhbGwgb3BlbiBzb2NrZXQgY29ubmVjdGlvbnMuXG4gICAgICpcbiAgICAgKiBDbG9zZSB0aGUgY2xpZW50IGFuZCBhbGwgb3BlbiBzb2NrZXQgY29ubmVjdGlvbnMuIFRoZSBjbGllbnQgY2Fu4oCZdCBiZSB1c2VkIGFueW1vcmUgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCxcbiAgICAgKiB5b3UgaGF2ZSB0byBlaXRoZXIgcmVjb25uZWN0IHdpdGggYGFjY2Vzc2Agb3IgYGNvbm5lY3RgIG9yIGluc3RhbnRpYXRlIGEgbmV3IGluc3RhbmNlIHRvIGNvbnRpbnVlIGFueSB3b3JrLlxuICAgICAqIEEgY2xpZW50IGlzIGFsc28gY2xvc2VkIGF1dG9tYXRpY2FsbHkgaWYgYW55IHRpbWVvdXQgb3IgY29ubmVjdGlvbiBlcnJvciBvY2N1cnMuXG4gICAgICovXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuZnRwLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzVHJhY2tlci5zdG9wKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2xpZW50IGlzIGNsb3NlZCBhbmQgY2FuJ3QgYmUgdXNlZCBhbnltb3JlLlxuICAgICAqL1xuICAgIGdldCBjbG9zZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ0cC5jbG9zZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbm5lY3QgKG9yIHJlY29ubmVjdCkgdG8gYW4gRlRQIHNlcnZlci5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYW4gaW5zdGFuY2UgbWV0aG9kIGFuZCB0aHVzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgYSBgQ2xpZW50YFxuICAgICAqIGluc3RhbmNlLiBXaGVuZXZlciB5b3UgZG8sIHRoZSBjbGllbnQgaXMgcmVzZXQgd2l0aCBhIG5ldyBjb250cm9sIGNvbm5lY3Rpb24uIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXRcbiAgICAgKiB5b3UgY2FuIHJlb3BlbiBhIGBDbGllbnRgIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gY2xvc2VkIGR1ZSB0byBhbiBlcnJvciB3aGVuIHJlY29ubmVjdGluZyB3aXRoIHRoaXNcbiAgICAgKiBtZXRob2QuIEluIGZhY3QsIHJlY29ubmVjdGluZyBpcyB0aGUgb25seSB3YXkgdG8gY29udGludWUgdXNpbmcgYSBjbG9zZWQgYENsaWVudGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG9zdCAgSG9zdCB0aGUgY2xpZW50IHNob3VsZCBjb25uZWN0IHRvLiBPcHRpb25hbCwgZGVmYXVsdCBpcyBcImxvY2FsaG9zdFwiLlxuICAgICAqIEBwYXJhbSBwb3J0ICBQb3J0IHRoZSBjbGllbnQgc2hvdWxkIGNvbm5lY3QgdG8uIE9wdGlvbmFsLCBkZWZhdWx0IGlzIDIxLlxuICAgICAqL1xuICAgIGNvbm5lY3QoaG9zdCA9IFwibG9jYWxob3N0XCIsIHBvcnQgPSAyMSkge1xuICAgICAgICB0aGlzLmZ0cC5yZXNldCgpO1xuICAgICAgICB0aGlzLmZ0cC5zb2NrZXQuY29ubmVjdCh7XG4gICAgICAgICAgICBob3N0LFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIGZhbWlseTogdGhpcy5mdHAuaXBGYW1pbHlcbiAgICAgICAgfSwgKCkgPT4gdGhpcy5mdHAubG9nKGBDb25uZWN0ZWQgdG8gJHtuZXRVdGlsc18xLmRlc2NyaWJlQWRkcmVzcyh0aGlzLmZ0cC5zb2NrZXQpfSAoJHtuZXRVdGlsc18xLmRlc2NyaWJlVExTKHRoaXMuZnRwLnNvY2tldCl9KWApKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUNvbm5lY3RSZXNwb25zZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcyBgY29ubmVjdGAgYnV0IHVzaW5nIGltcGxpY2l0IFRMUy4gSW1wbGljaXQgVExTIGlzIG5vdCBhbiBGVFAgc3RhbmRhcmQgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIGJ5XG4gICAgICogZXhwbGljaXQgVExTLiBUaGVyZSBhcmUgc3RpbGwgRlRQIHNlcnZlcnMgdGhhdCBzdXBwb3J0IG9ubHkgaW1wbGljaXQgVExTLCB0aG91Z2guXG4gICAgICovXG4gICAgY29ubmVjdEltcGxpY2l0VExTKGhvc3QgPSBcImxvY2FsaG9zdFwiLCBwb3J0ID0gMjEsIHRsc09wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmZ0cC5yZXNldCgpO1xuICAgICAgICB0aGlzLmZ0cC5zb2NrZXQgPSB0bHNfMS5jb25uZWN0KHBvcnQsIGhvc3QsIHRsc09wdGlvbnMsICgpID0+IHRoaXMuZnRwLmxvZyhgQ29ubmVjdGVkIHRvICR7bmV0VXRpbHNfMS5kZXNjcmliZUFkZHJlc3ModGhpcy5mdHAuc29ja2V0KX0gKCR7bmV0VXRpbHNfMS5kZXNjcmliZVRMUyh0aGlzLmZ0cC5zb2NrZXQpfSlgKSk7XG4gICAgICAgIHRoaXMuZnRwLnRsc09wdGlvbnMgPSB0bHNPcHRpb25zO1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlQ29ubmVjdFJlc3BvbnNlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGZpcnN0IHJlcG9uc2UgYnkgYW4gRlRQIHNlcnZlciBhZnRlciB0aGUgc29ja2V0IGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQuXG4gICAgICovXG4gICAgX2hhbmRsZUNvbm5lY3RSZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnRwLmhhbmRsZSh1bmRlZmluZWQsIChyZXMsIHRhc2spID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGRlc3Ryb3llZCBieSB0aGUgRlRQQ29udGV4dCBhdCB0aGlzIHBvaW50LlxuICAgICAgICAgICAgICAgIHRhc2sucmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYXJzZUNvbnRyb2xSZXNwb25zZV8xLnBvc2l0aXZlQ29tcGxldGlvbihyZXMuY29kZSkpIHtcbiAgICAgICAgICAgICAgICB0YXNrLnJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlamVjdCBhbGwgb3RoZXIgY29kZXMsIGluY2x1ZGluZyAxMjAgXCJTZXJ2aWNlIHJlYWR5IGluIG5ubiBtaW51dGVzXCIuXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBzdGF5IGNvbm5lY3RlZCBidXQgZG9uJ3QgcmVwbGFjZSB0aGUgc29ja2V0IHlldCBieSB1c2luZyByZXNldCgpXG4gICAgICAgICAgICAgICAgLy8gc28gdGhlIHVzZXIgY2FuIGluc3BlY3QgcHJvcGVydGllcyBvZiB0aGlzIGluc3RhbmNlLlxuICAgICAgICAgICAgICAgIHRoaXMuZnRwLnNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgdGFzay5yZWplY3QobmV3IEZ0cENvbnRleHRfMS5GVFBFcnJvcihyZXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgYW4gRlRQIGNvbW1hbmQgYW5kIGhhbmRsZSB0aGUgZmlyc3QgcmVzcG9uc2UuXG4gICAgICovXG4gICAgc2VuZChjb21tYW5kLCBpZ25vcmVFcnJvckNvZGVzREVQUkVDQVRFRCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpZ25vcmVFcnJvckNvZGVzREVQUkVDQVRFRCkgeyAvLyBEZXByZWNhdGVkIHN0YXJ0aW5nIGZyb20gMy45LjBcbiAgICAgICAgICAgIHRoaXMuZnRwLmxvZyhcIkRlcHJlY2F0ZWQgY2FsbCB1c2luZyBzZW5kKGNvbW1hbmQsIGZsYWcpIHdpdGggYm9vbGVhbiBmbGFnIHRvIGlnbm9yZSBlcnJvcnMuIFVzZSBzZW5kSWdub3JpbmdFcnJvcihjb21tYW5kKS5cIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZW5kSWdub3JpbmdFcnJvcihjb21tYW5kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mdHAucmVxdWVzdChjb21tYW5kKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCBhbiBGVFAgY29tbWFuZCBhbmQgaWdub3JlIGFuIEZUUCBlcnJvciByZXNwb25zZS4gQW55IG90aGVyIGtpbmQgb2YgZXJyb3Igb3IgdGltZW91dCB3aWxsIHN0aWxsIHJlamVjdCB0aGUgUHJvbWlzZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21tYW5kXG4gICAgICovXG4gICAgc2VuZElnbm9yaW5nRXJyb3IoY29tbWFuZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mdHAuaGFuZGxlKGNvbW1hbmQsIChyZXMsIHRhc2spID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBGdHBDb250ZXh0XzEuRlRQRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0YXNrLnJlc29sdmUoeyBjb2RlOiByZXMuY29kZSwgbWVzc2FnZTogcmVzLm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHRhc2sucmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXNrLnJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZ3JhZGUgdGhlIGN1cnJlbnQgc29ja2V0IGNvbm5lY3Rpb24gdG8gVExTLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgIFRMUyBvcHRpb25zIGFzIGluIGB0bHMuY29ubmVjdChvcHRpb25zKWAsIG9wdGlvbmFsLlxuICAgICAqIEBwYXJhbSBjb21tYW5kICBTZXQgdGhlIGF1dGhlbnRpY2F0aW9uIGNvbW1hbmQuIE9wdGlvbmFsLCBkZWZhdWx0IGlzIFwiQVVUSCBUTFNcIi5cbiAgICAgKi9cbiAgICBhc3luYyB1c2VUTFMob3B0aW9ucyA9IHt9LCBjb21tYW5kID0gXCJBVVRIIFRMU1wiKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMuc2VuZChjb21tYW5kKTtcbiAgICAgICAgdGhpcy5mdHAuc29ja2V0ID0gYXdhaXQgbmV0VXRpbHNfMS51cGdyYWRlU29ja2V0KHRoaXMuZnRwLnNvY2tldCwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZnRwLnRsc09wdGlvbnMgPSBvcHRpb25zOyAvLyBLZWVwIHRoZSBUTFMgb3B0aW9ucyBmb3IgbGF0ZXIgZGF0YSBjb25uZWN0aW9ucyB0aGF0IHNob3VsZCB1c2UgdGhlIHNhbWUgb3B0aW9ucy5cbiAgICAgICAgdGhpcy5mdHAubG9nKGBDb250cm9sIHNvY2tldCBpcyB1c2luZzogJHtuZXRVdGlsc18xLmRlc2NyaWJlVExTKHRoaXMuZnRwLnNvY2tldCl9YCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvZ2luIGEgdXNlciB3aXRoIGEgcGFzc3dvcmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlciAgVXNlcm5hbWUgdG8gdXNlIGZvciBsb2dpbi4gT3B0aW9uYWwsIGRlZmF1bHQgaXMgXCJhbm9ueW1vdXNcIi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgIFBhc3N3b3JkIHRvIHVzZSBmb3IgbG9naW4uIE9wdGlvbmFsLCBkZWZhdWx0IGlzIFwiZ3Vlc3RcIi5cbiAgICAgKi9cbiAgICBsb2dpbih1c2VyID0gXCJhbm9ueW1vdXNcIiwgcGFzc3dvcmQgPSBcImd1ZXN0XCIpIHtcbiAgICAgICAgdGhpcy5mdHAubG9nKGBMb2dpbiBzZWN1cml0eTogJHtuZXRVdGlsc18xLmRlc2NyaWJlVExTKHRoaXMuZnRwLnNvY2tldCl9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZ0cC5oYW5kbGUoXCJVU0VSIFwiICsgdXNlciwgKHJlcywgdGFzaykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGFzay5yZWplY3QocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNlQ29udHJvbFJlc3BvbnNlXzEucG9zaXRpdmVDb21wbGV0aW9uKHJlcy5jb2RlKSkgeyAvLyBVc2VyIGxvZ2dlZCBpbiBwcm9jZWVkIE9SIENvbW1hbmQgc3VwZXJmbHVvdXNcbiAgICAgICAgICAgICAgICB0YXNrLnJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcy5jb2RlID09PSAzMzEpIHsgLy8gVXNlciBuYW1lIG9rYXksIG5lZWQgcGFzc3dvcmRcbiAgICAgICAgICAgICAgICB0aGlzLmZ0cC5zZW5kKFwiUEFTUyBcIiArIHBhc3N3b3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgeyAvLyBBbHNvIHJlcG9ydCBlcnJvciBvbiAzMzIgKE5lZWQgYWNjb3VudClcbiAgICAgICAgICAgICAgICB0YXNrLnJlamVjdChuZXcgRnRwQ29udGV4dF8xLkZUUEVycm9yKHJlcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB1c3VhbCBkZWZhdWx0IHNldHRpbmdzLlxuICAgICAqXG4gICAgICogU2V0dGluZ3MgdXNlZDpcbiAgICAgKiAqIEJpbmFyeSBtb2RlIChUWVBFIEkpXG4gICAgICogKiBGaWxlIHN0cnVjdHVyZSAoU1RSVSBGKVxuICAgICAqICogQWRkaXRpb25hbCBzZXR0aW5ncyBmb3IgRlRQUyAoUEJTWiAwLCBQUk9UIFApXG4gICAgICovXG4gICAgYXN5bmMgdXNlRGVmYXVsdFNldHRpbmdzKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNlbmQoXCJUWVBFIElcIik7IC8vIEJpbmFyeSBtb2RlXG4gICAgICAgIGF3YWl0IHRoaXMuc2VuZElnbm9yaW5nRXJyb3IoXCJTVFJVIEZcIik7IC8vIFVzZSBmaWxlIHN0cnVjdHVyZVxuICAgICAgICBhd2FpdCB0aGlzLnNlbmRJZ25vcmluZ0Vycm9yKFwiT1BUUyBVVEY4IE9OXCIpOyAvLyBTb21lIHNlcnZlcnMgZXhwZWN0IFVURi04IHRvIGJlIGVuYWJsZWQgZXhwbGljaXRseVxuICAgICAgICBhd2FpdCB0aGlzLnNlbmRJZ25vcmluZ0Vycm9yKFwiT1BUUyBNTFNUIHR5cGU7c2l6ZTttb2RpZnk7dW5pcXVlO3VuaXgubW9kZTt1bml4Lm93bmVyO3VuaXguZ3JvdXA7dW5peC5vd25lcm5hbWU7dW5peC5ncm91cG5hbWU7XCIpOyAvLyBNYWtlIHN1cmUgTUxTRCBsaXN0aW5ncyBpbmNsdWRlIGFsbCB3ZSBjYW4gcGFyc2VcbiAgICAgICAgaWYgKHRoaXMuZnRwLmhhc1RMUykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kSWdub3JpbmdFcnJvcihcIlBCU1ogMFwiKTsgLy8gU2V0IHRvIDAgZm9yIFRMU1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kSWdub3JpbmdFcnJvcihcIlBST1QgUFwiKTsgLy8gUHJvdGVjdCBjaGFubmVsIChhbHNvIGZvciBkYXRhIGNvbm5lY3Rpb25zKVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNhbGxzIGBjb25uZWN0YCwgYHVzZVRMU2AsIGBsb2dpbmAgYW5kIGB1c2VEZWZhdWx0U2V0dGluZ3NgLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhbiBpbnN0YW5jZSBtZXRob2QgYW5kIHRodXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGhlIGxpZmVjeWNsZSBvZiBhIGBDbGllbnRgXG4gICAgICogaW5zdGFuY2UuIFdoZW5ldmVyIHlvdSBkbywgdGhlIGNsaWVudCBpcyByZXNldCB3aXRoIGEgbmV3IGNvbnRyb2wgY29ubmVjdGlvbi4gVGhpcyBhbHNvIGltcGxpZXMgdGhhdFxuICAgICAqIHlvdSBjYW4gcmVvcGVuIGEgYENsaWVudGAgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBjbG9zZWQgZHVlIHRvIGFuIGVycm9yIHdoZW4gcmVjb25uZWN0aW5nIHdpdGggdGhpc1xuICAgICAqIG1ldGhvZC4gSW4gZmFjdCwgcmVjb25uZWN0aW5nIGlzIHRoZSBvbmx5IHdheSB0byBjb250aW51ZSB1c2luZyBhIGNsb3NlZCBgQ2xpZW50YC5cbiAgICAgKi9cbiAgICBhc3luYyBhY2Nlc3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHVzZUV4cGxpY2l0VExTID0gb3B0aW9ucy5zZWN1cmUgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IHVzZUltcGxpY2l0VExTID0gb3B0aW9ucy5zZWN1cmUgPT09IFwiaW1wbGljaXRcIjtcbiAgICAgICAgbGV0IHdlbGNvbWU7XG4gICAgICAgIGlmICh1c2VJbXBsaWNpdFRMUykge1xuICAgICAgICAgICAgd2VsY29tZSA9IGF3YWl0IHRoaXMuY29ubmVjdEltcGxpY2l0VExTKG9wdGlvbnMuaG9zdCwgb3B0aW9ucy5wb3J0LCBvcHRpb25zLnNlY3VyZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2VsY29tZSA9IGF3YWl0IHRoaXMuY29ubmVjdChvcHRpb25zLmhvc3QsIG9wdGlvbnMucG9ydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZUV4cGxpY2l0VExTKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVzZVRMUyhvcHRpb25zLnNlY3VyZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4ob3B0aW9ucy51c2VyLCBvcHRpb25zLnBhc3N3b3JkKTtcbiAgICAgICAgYXdhaXQgdGhpcy51c2VEZWZhdWx0U2V0dGluZ3MoKTtcbiAgICAgICAgcmV0dXJuIHdlbGNvbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICAgKi9cbiAgICBhc3luYyBwd2QoKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VuZChcIlBXRFwiKTtcbiAgICAgICAgLy8gVGhlIGRpcmVjdG9yeSBpcyBwYXJ0IG9mIHRoZSByZXR1cm4gbWVzc2FnZSwgZm9yIGV4YW1wbGU6XG4gICAgICAgIC8vIDI1NyBcIi90aGlzL3RoYXRcIiBpcyBjdXJyZW50IGRpcmVjdG9yeS5cbiAgICAgICAgY29uc3QgcGFyc2VkID0gcmVzLm1lc3NhZ2UubWF0Y2goL1wiKC4rKVwiLyk7XG4gICAgICAgIGlmIChwYXJzZWQgPT09IG51bGwgfHwgcGFyc2VkWzFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgcGFyc2UgcmVzcG9uc2UgdG8gY29tbWFuZCAnUFdEJzogJHtyZXMubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkWzFdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBkZXNjcmlwdGlvbiBvZiBzdXBwb3J0ZWQgZmVhdHVyZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIHNlbmRzIHRoZSBGRUFUIGNvbW1hbmQgYW5kIHBhcnNlcyB0aGUgcmVzdWx0IGludG8gYSBNYXAgd2hlcmUga2V5cyBjb3JyZXNwb25kIHRvIGF2YWlsYWJsZSBjb21tYW5kc1xuICAgICAqIGFuZCB2YWx1ZXMgaG9sZCBmdXJ0aGVyIGluZm9ybWF0aW9uLiBCZSBhd2FyZSB0aGF0IHlvdXIgRlRQIHNlcnZlcnMgbWlnaHQgbm90IHN1cHBvcnQgdGhpc1xuICAgICAqIGNvbW1hbmQgaW4gd2hpY2ggY2FzZSB0aGlzIG1ldGhvZCB3aWxsIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gYnV0IGp1c3QgcmV0dXJuIGFuIGVtcHR5IE1hcC5cbiAgICAgKi9cbiAgICBhc3luYyBmZWF0dXJlcygpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kSWdub3JpbmdFcnJvcihcIkZFQVRcIik7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gbmV3IE1hcCgpO1xuICAgICAgICAvLyBOb3Qgc3VwcG9ydGluZyBhbnkgc3BlY2lhbCBmZWF0dXJlcyB3aWxsIGJlIHJlcG9ydGVkIHdpdGggYSBzaW5nbGUgbGluZS5cbiAgICAgICAgaWYgKHJlcy5jb2RlIDwgNDAwICYmIHBhcnNlQ29udHJvbFJlc3BvbnNlXzEuaXNNdWx0aWxpbmUocmVzLm1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAvLyBUaGUgZmlyc3QgYW5kIGxhc3QgbGluZSB3cmFwIHRoZSBtdWx0aWxpbmUgcmVzcG9uc2UsIGlnbm9yZSB0aGVtLlxuICAgICAgICAgICAgcmVzLm1lc3NhZ2Uuc3BsaXQoXCJcXG5cIikuc2xpY2UoMSwgLTEpLmZvckVhY2gobGluZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQSB0eXBpY2FsIGxpbmVzIGxvb2tzIGxpa2U6IFwiIFJFU1QgU1RSRUFNXCIgb3IgXCIgTURUTVwiLlxuICAgICAgICAgICAgICAgIC8vIFNlcnZlcnMgbWlnaHQgbm90IHVzZSBhbiBpbmRlbnRhdGlvbiB0aG91Z2guXG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBsaW5lLnRyaW0oKS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICAgICAgZmVhdHVyZXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSB8fCBcIlwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmZWF0dXJlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICAgKi9cbiAgICBhc3luYyBjZChwYXRoKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkUGF0aCA9IGF3YWl0IHRoaXMucHJvdGVjdFdoaXRlc3BhY2UocGF0aCk7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbmQoXCJDV0QgXCIgKyB2YWxpZFBhdGgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTd2l0Y2ggdG8gdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgICAqL1xuICAgIGFzeW5jIGNkdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbmQoXCJDRFVQXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGxhc3QgbW9kaWZpZWQgdGltZSBvZiBhIGZpbGUuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSBldmVyeSBGVFAgc2VydmVyLCBpbiB3aGljaCBjYXNlXG4gICAgICogY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsYXN0TW9kKHBhdGgpIHtcbiAgICAgICAgY29uc3QgdmFsaWRQYXRoID0gYXdhaXQgdGhpcy5wcm90ZWN0V2hpdGVzcGFjZShwYXRoKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kKGBNRFRNICR7dmFsaWRQYXRofWApO1xuICAgICAgICBjb25zdCBkYXRlID0gcmVzLm1lc3NhZ2Uuc2xpY2UoNCk7XG4gICAgICAgIHJldHVybiBwYXJzZUxpc3RNTFNEXzEucGFyc2VNTFN4RGF0ZShkYXRlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzaXplIG9mIGEgZmlsZS5cbiAgICAgKi9cbiAgICBhc3luYyBzaXplKHBhdGgpIHtcbiAgICAgICAgY29uc3QgdmFsaWRQYXRoID0gYXdhaXQgdGhpcy5wcm90ZWN0V2hpdGVzcGFjZShwYXRoKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IGBTSVpFICR7dmFsaWRQYXRofWA7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VuZChjb21tYW5kKTtcbiAgICAgICAgLy8gVGhlIHNpemUgaXMgcGFydCBvZiB0aGUgcmVzcG9uc2UgbWVzc2FnZSwgZm9yIGV4YW1wbGU6IFwiMjEzIDU1NTU1NVwiLiBJdCdzXG4gICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYSBjb21tbWVudGFyeSBhcHBlbmRlZCBsaWtlIFwiMjEzIDU1NTUsIHNvbWUgY29tbWVudGFyeVwiLlxuICAgICAgICBjb25zdCBzaXplID0gcGFyc2VJbnQocmVzLm1lc3NhZ2Uuc2xpY2UoNCksIDEwKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihzaXplKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBwYXJzZSByZXNwb25zZSB0byBjb21tYW5kICcke2NvbW1hbmR9JyBhcyBhIG51bWVyaWNhbCB2YWx1ZTogJHtyZXMubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVuYW1lIGEgZmlsZS5cbiAgICAgKlxuICAgICAqIERlcGVuZGluZyBvbiB0aGUgRlRQIHNlcnZlciB0aGlzIG1pZ2h0IGFsc28gYmUgdXNlZCB0byBtb3ZlIGEgZmlsZSBmcm9tIG9uZVxuICAgICAqIGRpcmVjdG9yeSB0byBhbm90aGVyIGJ5IHByb3ZpZGluZyBmdWxsIHBhdGhzLlxuICAgICAqL1xuICAgIGFzeW5jIHJlbmFtZShzcmNQYXRoLCBkZXN0UGF0aCkge1xuICAgICAgICBjb25zdCB2YWxpZFNyYyA9IGF3YWl0IHRoaXMucHJvdGVjdFdoaXRlc3BhY2Uoc3JjUGF0aCk7XG4gICAgICAgIGNvbnN0IHZhbGlkRGVzdCA9IGF3YWl0IHRoaXMucHJvdGVjdFdoaXRlc3BhY2UoZGVzdFBhdGgpO1xuICAgICAgICBhd2FpdCB0aGlzLnNlbmQoXCJSTkZSIFwiICsgdmFsaWRTcmMpO1xuICAgICAgICByZXR1cm4gdGhpcy5zZW5kKFwiUk5UTyBcIiArIHZhbGlkRGVzdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIGZpbGUgZnJvbSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gaWdub3JlIEZUUCBlcnJvciByZXR1cm4gY29kZXMgd2hpY2ggd29uJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGUuZy5cbiAgICAgKiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGFzeW5jIHJlbW92ZShwYXRoLCBpZ25vcmVFcnJvckNvZGVzID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgdmFsaWRQYXRoID0gYXdhaXQgdGhpcy5wcm90ZWN0V2hpdGVzcGFjZShwYXRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZChgREVMRSAke3ZhbGlkUGF0aH1gLCBpZ25vcmVFcnJvckNvZGVzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVwb3J0IHRyYW5zZmVyIHByb2dyZXNzIGZvciBhbnkgdXBsb2FkIG9yIGRvd25sb2FkIHRvIGEgZ2l2ZW4gaGFuZGxlci5cbiAgICAgKlxuICAgICAqIFRoaXMgd2lsbCBhbHNvIHJlc2V0IHRoZSBvdmVyYWxsIHRyYW5zZmVyIGNvdW50ZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3IgbXVsdGlwbGUgdHJhbnNmZXJzLiBZb3UgY2FuXG4gICAgICogYWxzbyBjYWxsIHRoZSBmdW5jdGlvbiB3aXRob3V0IGEgaGFuZGxlciB0byBzdG9wIHJlcG9ydGluZyB0byBhbiBlYXJsaWVyIG9uZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyICBIYW5kbGVyIGZ1bmN0aW9uIHRvIGNhbGwgb24gdHJhbnNmZXIgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgdHJhY2tQcm9ncmVzcyhoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzVHJhY2tlci5ieXRlc092ZXJhbGwgPSAwO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1RyYWNrZXIucmVwb3J0VG8oaGFuZGxlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwbG9hZCBkYXRhIGZyb20gYSByZWFkYWJsZSBzdHJlYW0gb3IgYSBsb2NhbCBmaWxlIHRvIGEgcmVtb3RlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlICBSZWFkYWJsZSBzdHJlYW0gb3IgcGF0aCB0byBhIGxvY2FsIGZpbGUuXG4gICAgICogQHBhcmFtIHRvUmVtb3RlUGF0aCAgUGF0aCB0byBhIHJlbW90ZSBmaWxlIHRvIHdyaXRlIHRvLlxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZEZyb20oc291cmNlLCB0b1JlbW90ZVBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBsb2FkV2l0aENvbW1hbmQoc291cmNlLCB0b1JlbW90ZVBhdGgsIFwiU1RPUlwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBsb2FkIGRhdGEgZnJvbSBhIHJlYWRhYmxlIHN0cmVhbSBvciBhIGxvY2FsIGZpbGUgYnkgYXBwZW5kaW5nIGl0IHRvIGFuIGV4aXN0aW5nIGZpbGUuIElmIHRoZSBmaWxlIGRvZXNuJ3RcbiAgICAgKiBleGlzdCB0aGUgRlRQIHNlcnZlciBzaG91bGQgY3JlYXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZSAgUmVhZGFibGUgc3RyZWFtIG9yIHBhdGggdG8gYSBsb2NhbCBmaWxlLlxuICAgICAqIEBwYXJhbSB0b1JlbW90ZVBhdGggIFBhdGggdG8gYSByZW1vdGUgZmlsZSB0byB3cml0ZSB0by5cbiAgICAgKi9cbiAgICBhc3luYyBhcHBlbmRGcm9tKHNvdXJjZSwgdG9SZW1vdGVQYXRoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZFdpdGhDb21tYW5kKHNvdXJjZSwgdG9SZW1vdGVQYXRoLCBcIkFQUEVcIiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBhc3luYyBfdXBsb2FkV2l0aENvbW1hbmQoc291cmNlLCByZW1vdGVQYXRoLCBjb21tYW5kLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXBsb2FkTG9jYWxGaWxlKHNvdXJjZSwgcmVtb3RlUGF0aCwgY29tbWFuZCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZEZyb21TdHJlYW0oc291cmNlLCByZW1vdGVQYXRoLCBjb21tYW5kKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIF91cGxvYWRMb2NhbEZpbGUobG9jYWxQYXRoLCByZW1vdGVQYXRoLCBjb21tYW5kLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGZkID0gYXdhaXQgZnNPcGVuKGxvY2FsUGF0aCwgXCJyXCIpO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBmc18xLmNyZWF0ZVJlYWRTdHJlYW0oXCJcIiwge1xuICAgICAgICAgICAgZmQsXG4gICAgICAgICAgICBzdGFydDogb3B0aW9ucy5sb2NhbFN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBvcHRpb25zLmxvY2FsRW5kSW5jbHVzaXZlLFxuICAgICAgICAgICAgYXV0b0Nsb3NlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91cGxvYWRGcm9tU3RyZWFtKHNvdXJjZSwgcmVtb3RlUGF0aCwgY29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBpZ25vcmVFcnJvcigoKSA9PiBmc0Nsb3NlKGZkKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIF91cGxvYWRGcm9tU3RyZWFtKHNvdXJjZSwgcmVtb3RlUGF0aCwgY29tbWFuZCkge1xuICAgICAgICBjb25zdCBvbkVycm9yID0gKGVycikgPT4gdGhpcy5mdHAuY2xvc2VXaXRoRXJyb3IoZXJyKTtcbiAgICAgICAgc291cmNlLm9uY2UoXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkUGF0aCA9IGF3YWl0IHRoaXMucHJvdGVjdFdoaXRlc3BhY2UocmVtb3RlUGF0aCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVUcmFuc2Zlcih0aGlzLmZ0cCk7XG4gICAgICAgICAgICAvLyBLZWVwIHRoZSBrZXl3b3JkIGBhd2FpdGAgb3IgdGhlIGBmaW5hbGx5YCBjbGF1c2UgYmVsb3cgcnVucyB0b28gZWFybHlcbiAgICAgICAgICAgIC8vIGFuZCByZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lciBmb3IgdGhlIHNvdXJjZSBzdHJlYW0gdG9vIGVhcmx5LlxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRyYW5zZmVyXzEudXBsb2FkRnJvbShzb3VyY2UsIHtcbiAgICAgICAgICAgICAgICBmdHA6IHRoaXMuZnRwLFxuICAgICAgICAgICAgICAgIHRyYWNrZXI6IHRoaXMuX3Byb2dyZXNzVHJhY2tlcixcbiAgICAgICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgICAgIHJlbW90ZVBhdGg6IHZhbGlkUGF0aCxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInVwbG9hZFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIG9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERvd25sb2FkIGEgcmVtb3RlIGZpbGUgYW5kIHBpcGUgaXRzIGRhdGEgdG8gYSB3cml0YWJsZSBzdHJlYW0gb3IgdG8gYSBsb2NhbCBmaWxlLlxuICAgICAqXG4gICAgICogWW91IGNhbiBvcHRpb25hbGx5IGRlZmluZSBhdCB3aGljaCBwb3NpdGlvbiBvZiB0aGUgcmVtb3RlIGZpbGUgeW91J2QgbGlrZSB0byBzdGFydFxuICAgICAqIGRvd25sb2FkaW5nLiBJZiB0aGUgZGVzdGluYXRpb24geW91IHByb3ZpZGUgaXMgYSBmaWxlLCB0aGUgb2Zmc2V0IHdpbGwgYmUgYXBwbGllZFxuICAgICAqIHRvIGl0IGFzIHdlbGwuIEZvciBleGFtcGxlOiBUbyByZXN1bWUgYSBmYWlsZWQgZG93bmxvYWQsIHlvdSdkIHJlcXVlc3QgdGhlIHNpemUgb2ZcbiAgICAgKiB0aGUgbG9jYWwsIHBhcnRpYWxseSBkb3dubG9hZGVkIGZpbGUgYW5kIHVzZSB0aGF0IGFzIHRoZSBvZmZzZXQuIEFzc3VtaW5nIHRoZSBzaXplXG4gICAgICogaXMgMjMsIHlvdSdkIGRvd25sb2FkIHRoZSByZXN0IHVzaW5nIGBkb3dubG9hZFRvKFwibG9jYWwudHh0XCIsIFwicmVtb3RlLnR4dFwiLCAyMylgLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uICBTdHJlYW0gb3IgcGF0aCBmb3IgYSBsb2NhbCBmaWxlIHRvIHdyaXRlIHRvLlxuICAgICAqIEBwYXJhbSBmcm9tUmVtb3RlUGF0aCAgUGF0aCBvZiB0aGUgcmVtb3RlIGZpbGUgdG8gcmVhZCBmcm9tLlxuICAgICAqIEBwYXJhbSBzdGFydEF0ICBQb3NpdGlvbiB3aXRoaW4gdGhlIHJlbW90ZSBmaWxlIHRvIHN0YXJ0IGRvd25sb2FkaW5nIGF0LiBJZiB0aGUgZGVzdGluYXRpb24gaXMgYSBmaWxlLCB0aGlzIG9mZnNldCBpcyBhbHNvIGFwcGxpZWQgdG8gaXQuXG4gICAgICovXG4gICAgYXN5bmMgZG93bmxvYWRUbyhkZXN0aW5hdGlvbiwgZnJvbVJlbW90ZVBhdGgsIHN0YXJ0QXQgPSAwKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVzdGluYXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kb3dubG9hZFRvRmlsZShkZXN0aW5hdGlvbiwgZnJvbVJlbW90ZVBhdGgsIHN0YXJ0QXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kb3dubG9hZFRvU3RyZWFtKGRlc3RpbmF0aW9uLCBmcm9tUmVtb3RlUGF0aCwgc3RhcnRBdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBhc3luYyBfZG93bmxvYWRUb0ZpbGUobG9jYWxQYXRoLCByZW1vdGVQYXRoLCBzdGFydEF0KSB7XG4gICAgICAgIGNvbnN0IGFwcGVuZGluZ1RvTG9jYWxGaWxlID0gc3RhcnRBdCA+IDA7XG4gICAgICAgIGNvbnN0IGZpbGVTeXN0ZW1GbGFncyA9IGFwcGVuZGluZ1RvTG9jYWxGaWxlID8gXCJyK1wiIDogXCJ3XCI7XG4gICAgICAgIGNvbnN0IGZkID0gYXdhaXQgZnNPcGVuKGxvY2FsUGF0aCwgZmlsZVN5c3RlbUZsYWdzKTtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBmc18xLmNyZWF0ZVdyaXRlU3RyZWFtKFwiXCIsIHtcbiAgICAgICAgICAgIGZkLFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0QXQsXG4gICAgICAgICAgICBhdXRvQ2xvc2U6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Rvd25sb2FkVG9TdHJlYW0oZGVzdGluYXRpb24sIHJlbW90ZVBhdGgsIHN0YXJ0QXQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsRmlsZVN0YXRzID0gYXdhaXQgaWdub3JlRXJyb3IoKCkgPT4gZnNTdGF0KGxvY2FsUGF0aCkpO1xuICAgICAgICAgICAgY29uc3QgaGFzRG93bmxvYWRlZERhdGEgPSBsb2NhbEZpbGVTdGF0cyAmJiBsb2NhbEZpbGVTdGF0cy5zaXplID4gMDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFJlbW92ZUxvY2FsRmlsZSA9ICFhcHBlbmRpbmdUb0xvY2FsRmlsZSAmJiAhaGFzRG93bmxvYWRlZERhdGE7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlTG9jYWxGaWxlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaWdub3JlRXJyb3IoKCkgPT4gZnNVbmxpbmsobG9jYWxQYXRoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBpZ25vcmVFcnJvcigoKSA9PiBmc0Nsb3NlKGZkKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIF9kb3dubG9hZFRvU3RyZWFtKGRlc3RpbmF0aW9uLCByZW1vdGVQYXRoLCBzdGFydEF0KSB7XG4gICAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyKSA9PiB0aGlzLmZ0cC5jbG9zZVdpdGhFcnJvcihlcnIpO1xuICAgICAgICBkZXN0aW5hdGlvbi5vbmNlKFwiZXJyb3JcIiwgb25FcnJvcik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZFBhdGggPSBhd2FpdCB0aGlzLnByb3RlY3RXaGl0ZXNwYWNlKHJlbW90ZVBhdGgpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlVHJhbnNmZXIodGhpcy5mdHApO1xuICAgICAgICAgICAgLy8gS2VlcCB0aGUga2V5d29yZCBgYXdhaXRgIG9yIHRoZSBgZmluYWxseWAgY2xhdXNlIGJlbG93IHJ1bnMgdG9vIGVhcmx5XG4gICAgICAgICAgICAvLyBhbmQgcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXIgZm9yIHRoZSBzb3VyY2Ugc3RyZWFtIHRvbyBlYXJseS5cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0cmFuc2Zlcl8xLmRvd25sb2FkVG8oZGVzdGluYXRpb24sIHtcbiAgICAgICAgICAgICAgICBmdHA6IHRoaXMuZnRwLFxuICAgICAgICAgICAgICAgIHRyYWNrZXI6IHRoaXMuX3Byb2dyZXNzVHJhY2tlcixcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBzdGFydEF0ID4gMCA/IGBSRVNUICR7c3RhcnRBdH1gIDogYFJFVFIgJHt2YWxpZFBhdGh9YCxcbiAgICAgICAgICAgICAgICByZW1vdGVQYXRoOiB2YWxpZFBhdGgsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJkb3dubG9hZFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvcik7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5lbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMaXN0IGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgb3IgZnJvbSBgcGF0aGAgaWYgc3BlY2lmaWVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIFtwYXRoXSAgUGF0aCB0byByZW1vdGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gICAgICovXG4gICAgYXN5bmMgbGlzdChwYXRoID0gXCJcIikge1xuICAgICAgICBjb25zdCB2YWxpZFBhdGggPSBhd2FpdCB0aGlzLnByb3RlY3RXaGl0ZXNwYWNlKHBhdGgpO1xuICAgICAgICBsZXQgbGFzdEVycm9yO1xuICAgICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiB0aGlzLmF2YWlsYWJsZUxpc3RDb21tYW5kcykge1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IGAke2NhbmRpZGF0ZX0gJHt2YWxpZFBhdGh9YC50cmltKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVUcmFuc2Zlcih0aGlzLmZ0cCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZExpc3QgPSBhd2FpdCB0aGlzLl9yZXF1ZXN0TGlzdFdpdGhDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgICAgICAgICAgIC8vIFVzZSBzdWNjZXNzZnVsIGNhbmRpZGF0ZSBmb3IgYWxsIHN1YnNlcXVlbnQgcmVxdWVzdHMuXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVMaXN0Q29tbWFuZHMgPSBbY2FuZGlkYXRlXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkTGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRUcnlOZXh0ID0gZXJyIGluc3RhbmNlb2YgRnRwQ29udGV4dF8xLkZUUEVycm9yO1xuICAgICAgICAgICAgICAgIGlmICghc2hvdWxkVHJ5TmV4dCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBsYXN0RXJyb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBhc3luYyBfcmVxdWVzdExpc3RXaXRoQ29tbWFuZChjb21tYW5kKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBTdHJpbmdXcml0ZXJfMS5TdHJpbmdXcml0ZXIoKTtcbiAgICAgICAgYXdhaXQgdHJhbnNmZXJfMS5kb3dubG9hZFRvKGJ1ZmZlciwge1xuICAgICAgICAgICAgZnRwOiB0aGlzLmZ0cCxcbiAgICAgICAgICAgIHRyYWNrZXI6IHRoaXMuX3Byb2dyZXNzVHJhY2tlcixcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICByZW1vdGVQYXRoOiBcIlwiLFxuICAgICAgICAgICAgdHlwZTogXCJsaXN0XCJcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBidWZmZXIuZ2V0VGV4dCh0aGlzLmZ0cC5lbmNvZGluZyk7XG4gICAgICAgIHRoaXMuZnRwLmxvZyh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VMaXN0KHRleHQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSBkaXJlY3RvcnkgYW5kIGFsbCBvZiBpdHMgY29udGVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZW1vdGVEaXJQYXRoICBUaGUgcGF0aCBvZiB0aGUgcmVtb3RlIGRpcmVjdG9yeSB0byBkZWxldGUuXG4gICAgICogQGV4YW1wbGUgY2xpZW50LnJlbW92ZURpcihcImZvb1wiKSAvLyBSZW1vdmUgZGlyZWN0b3J5ICdmb28nIHVzaW5nIGEgcmVsYXRpdmUgcGF0aC5cbiAgICAgKiBAZXhhbXBsZSBjbGllbnQucmVtb3ZlRGlyKFwiZm9vL2JhclwiKSAvLyBSZW1vdmUgZGlyZWN0b3J5ICdiYXInIHVzaW5nIGEgcmVsYXRpdmUgcGF0aC5cbiAgICAgKiBAZXhhbXBsZSBjbGllbnQucmVtb3ZlRGlyKFwiL2Zvby9iYXJcIikgLy8gUmVtb3ZlIGRpcmVjdG9yeSAnYmFyJyB1c2luZyBhbiBhYnNvbHV0ZSBwYXRoLlxuICAgICAqIEBleGFtcGxlIGNsaWVudC5yZW1vdmVEaXIoXCIvXCIpIC8vIFJlbW92ZSBldmVyeXRoaW5nLlxuICAgICAqL1xuICAgIGFzeW5jIHJlbW92ZURpcihyZW1vdGVEaXJQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leGl0QXRDdXJyZW50RGlyZWN0b3J5KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2QocmVtb3RlRGlyUGF0aCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFyV29ya2luZ0RpcigpO1xuICAgICAgICAgICAgaWYgKHJlbW90ZURpclBhdGggIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jZHVwKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVFbXB0eURpcihyZW1vdGVEaXJQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbGwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aXRob3V0IHJlbW92aW5nXG4gICAgICogdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGl0c2VsZi5cbiAgICAgKi9cbiAgICBhc3luYyBjbGVhcldvcmtpbmdEaXIoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCB0aGlzLmxpc3QoKSkge1xuICAgICAgICAgICAgaWYgKGZpbGUuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNkKGZpbGUubmFtZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhcldvcmtpbmdEaXIoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNkdXAoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUVtcHR5RGlyKGZpbGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZShmaWxlLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwbG9hZCB0aGUgY29udGVudHMgb2YgYSBsb2NhbCBkaXJlY3RvcnkgdG8gdGhlIHJlbW90ZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICAgKlxuICAgICAqIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lcyBhbmQgcmV1c2UgZXhpc3RpbmcgZGlyZWN0b3JpZXMuXG4gICAgICogVW5yZWxhdGVkIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aWxsIHJlbWFpbiB1bnRvdWNoZWQuIFlvdSBjYW4gb3B0aW9uYWxseSBwcm92aWRlIGEgYHJlbW90ZURpclBhdGhgXG4gICAgICogdG8gcHV0IHRoZSBjb250ZW50cyBpbnNpZGUgYSBkaXJlY3Rvcnkgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGlmIG5lY2Vzc2FyeSBpbmNsdWRpbmcgYWxsXG4gICAgICogaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzLiBJZiB5b3UgZGlkIHByb3ZpZGUgYSByZW1vdGVEaXJQYXRoIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIHN0YXlcbiAgICAgKiB0aGUgc2FtZSBhcyBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb2NhbERpclBhdGggIExvY2FsIHBhdGgsIGUuZy4gXCJmb28vYmFyXCIgb3IgXCIuLi90ZXN0XCJcbiAgICAgKiBAcGFyYW0gW3JlbW90ZURpclBhdGhdICBSZW1vdGUgcGF0aCBvZiBhIGRpcmVjdG9yeSB0byB1cGxvYWQgdG8uIFdvcmtpbmcgZGlyZWN0b3J5IGlmIHVuZGVmaW5lZC5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRGcm9tRGlyKGxvY2FsRGlyUGF0aCwgcmVtb3RlRGlyUGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhpdEF0Q3VycmVudERpcmVjdG9yeShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVtb3RlRGlyUGF0aCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlRGlyKHJlbW90ZURpclBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VwbG9hZFRvV29ya2luZ0Rpcihsb2NhbERpclBhdGgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIF91cGxvYWRUb1dvcmtpbmdEaXIobG9jYWxEaXJQYXRoKSB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnNSZWFkRGlyKGxvY2FsRGlyUGF0aCk7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoXzEuam9pbihsb2NhbERpclBhdGgsIGZpbGUpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmc1N0YXQoZnVsbFBhdGgpO1xuICAgICAgICAgICAgaWYgKHN0YXRzLmlzRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRGcm9tKGZ1bGxQYXRoLCBmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9vcGVuRGlyKGZpbGUpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3VwbG9hZFRvV29ya2luZ0RpcihmdWxsUGF0aCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jZHVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRG93bmxvYWQgYWxsIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gYSBsb2NhbCBkaXJlY3RvcnkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9jYWxEaXJQYXRoICBUaGUgbG9jYWwgZGlyZWN0b3J5IHRvIGRvd25sb2FkIHRvLlxuICAgICAqIEBwYXJhbSByZW1vdGVEaXJQYXRoICBSZW1vdGUgZGlyZWN0b3J5IHRvIGRvd25sb2FkLiBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlmIG5vdCBzcGVjaWZpZWQuXG4gICAgICovXG4gICAgYXN5bmMgZG93bmxvYWRUb0Rpcihsb2NhbERpclBhdGgsIHJlbW90ZURpclBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4aXRBdEN1cnJlbnREaXJlY3RvcnkoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlbW90ZURpclBhdGgpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNkKHJlbW90ZURpclBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Rvd25sb2FkRnJvbVdvcmtpbmdEaXIobG9jYWxEaXJQYXRoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBhc3luYyBfZG93bmxvYWRGcm9tV29ya2luZ0Rpcihsb2NhbERpclBhdGgpIHtcbiAgICAgICAgYXdhaXQgZW5zdXJlTG9jYWxEaXJlY3RvcnkobG9jYWxEaXJQYXRoKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHRoaXMubGlzdCgpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFBhdGggPSBwYXRoXzEuam9pbihsb2NhbERpclBhdGgsIGZpbGUubmFtZSk7XG4gICAgICAgICAgICBpZiAoZmlsZS5pc0RpcmVjdG9yeSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2QoZmlsZS5uYW1lKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kb3dubG9hZEZyb21Xb3JraW5nRGlyKGxvY2FsUGF0aCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jZHVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWxlLmlzRmlsZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZG93bmxvYWRUbyhsb2NhbFBhdGgsIGZpbGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZSBzdXJlIGEgZ2l2ZW4gcmVtb3RlIHBhdGggZXhpc3RzLCBjcmVhdGluZyBhbGwgZGlyZWN0b3JpZXMgYXMgbmVjZXNzYXJ5LlxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxzbyBjaGFuZ2VzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBnaXZlbiBwYXRoLlxuICAgICAqL1xuICAgIGFzeW5jIGVuc3VyZURpcihyZW1vdGVEaXJQYXRoKSB7XG4gICAgICAgIC8vIElmIHRoZSByZW1vdGVEaXJQYXRoIHdhcyBhYnNvbHV0ZSBnbyB0byByb290IGRpcmVjdG9yeS5cbiAgICAgICAgaWYgKHJlbW90ZURpclBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2QoXCIvXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWVzID0gcmVtb3RlRGlyUGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKG5hbWUgPT4gbmFtZSAhPT0gXCJcIik7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fb3BlbkRpcihuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcnkgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IGFuZCBlbnRlciBpdC4gVGhpcyB3aWxsIG5vdCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGRpcmVjdG9yeVxuICAgICAqIGNvdWxkbid0IGJlIGNyZWF0ZWQgaWYgZm9yIGV4YW1wbGUgaXQgYWxyZWFkeSBleGlzdHMuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIF9vcGVuRGlyKGRpck5hbWUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZW5kSWdub3JpbmdFcnJvcihcIk1LRCBcIiArIGRpck5hbWUpO1xuICAgICAgICBhd2FpdCB0aGlzLmNkKGRpck5hbWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZW1wdHkgZGlyZWN0b3J5LCB3aWxsIGZhaWwgaWYgbm90IGVtcHR5LlxuICAgICAqL1xuICAgIGFzeW5jIHJlbW92ZUVtcHR5RGlyKHBhdGgpIHtcbiAgICAgICAgY29uc3QgdmFsaWRQYXRoID0gYXdhaXQgdGhpcy5wcm90ZWN0V2hpdGVzcGFjZShwYXRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZChgUk1EICR7dmFsaWRQYXRofWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGVFAgc2VydmVycyBjYW4ndCBoYW5kbGUgZmlsZW5hbWVzIHRoYXQgaGF2ZSBsZWFkaW5nIHdoaXRlc3BhY2UuIFRoaXMgbWV0aG9kIHRyYW5zZm9ybXNcbiAgICAgKiBhIGdpdmVuIHBhdGggdG8gZml4IHRoYXQgaXNzdWUgZm9yIG1vc3QgY2FzZXMuXG4gICAgICovXG4gICAgYXN5bmMgcHJvdGVjdFdoaXRlc3BhY2UocGF0aCkge1xuICAgICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChcIiBcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBsZWFkaW5nIHdoaXRlc3BhY2UgYnkgcHJlcGVuZGluZyB0aGUgYWJzb2x1dGUgcGF0aDpcbiAgICAgICAgLy8gXCIgdGVzdC50eHRcIiB3aGlsZSBiZWluZyBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgYmVjb21lcyBcIi8gdGVzdC50eHRcIi5cbiAgICAgICAgY29uc3QgcHdkID0gYXdhaXQgdGhpcy5wd2QoKTtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVQYXRoUHJlZml4ID0gcHdkLmVuZHNXaXRoKFwiL1wiKSA/IHB3ZCA6IHB3ZCArIFwiL1wiO1xuICAgICAgICByZXR1cm4gYWJzb2x1dGVQYXRoUHJlZml4ICsgcGF0aDtcbiAgICB9XG4gICAgYXN5bmMgX2V4aXRBdEN1cnJlbnREaXJlY3RvcnkoZnVuYykge1xuICAgICAgICBjb25zdCB1c2VyRGlyID0gYXdhaXQgdGhpcy5wd2QoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmdW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaWdub3JlRXJyb3IoKCkgPT4gdGhpcy5jZCh1c2VyRGlyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ5IGFsbCBhdmFpbGFibGUgdHJhbnNmZXIgc3RyYXRlZ2llcyBhbmQgcGljayB0aGUgZmlyc3Qgb25lIHRoYXQgd29ya3MuIFVwZGF0ZSBgY2xpZW50YCB0b1xuICAgICAqIHVzZSB0aGUgd29ya2luZyBzdHJhdGVneSBmb3IgYWxsIHN1Y2Nlc3NpdmUgdHJhbnNmZXIgcmVxdWVzdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyYXRlZ2llc1xuICAgICAqIEByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHRyeSB0aGUgcHJvdmlkZWQgc3RyYXRlZ2llcy5cbiAgICAgKi9cbiAgICBfZW50ZXJGaXJzdENvbXBhdGlibGVNb2RlKHN0cmF0ZWdpZXMpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIChmdHApID0+IHtcbiAgICAgICAgICAgIGZ0cC5sb2coXCJUcnlpbmcgdG8gZmluZCBvcHRpbWFsIHRyYW5zZmVyIHN0cmF0ZWd5Li4uXCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdHJhdGVneSBvZiBzdHJhdGVnaWVzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3RyYXRlZ3koZnRwKTtcbiAgICAgICAgICAgICAgICAgICAgZnRwLmxvZyhcIk9wdGltYWwgdHJhbnNmZXIgc3RyYXRlZ3kgZm91bmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVUcmFuc2ZlciA9IHN0cmF0ZWd5OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZWNlaXZpbmcgYW4gRlRQRXJyb3IgbWVhbnMgdGhhdCB0aGUgbGFzdCB0cmFuc2ZlciBzdHJhdGVneSBmYWlsZWQgYW5kIHdlIHNob3VsZFxuICAgICAgICAgICAgICAgICAgICAvLyB0cnkgdGhlIG5leHQgb25lLiBBbnkgb3RoZXIgZXhjZXB0aW9uIHNob3VsZCBzdG9wIHRoZSBldmFsdWF0aW9uIG9mIHN0cmF0ZWdpZXMgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgZWxzZSB3ZW50IHdyb25nLlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBGdHBDb250ZXh0XzEuRlRQRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb25lIG9mIHRoZSBhdmFpbGFibGUgdHJhbnNmZXIgc3RyYXRlZ2llcyB3b3JrLlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogREVQUkVDQVRFRCwgdXNlIGB1cGxvYWRGcm9tYC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZChzb3VyY2UsIHRvUmVtb3RlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZnRwLmxvZyhcIldhcm5pbmc6IHVwbG9hZCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHVzZSB1cGxvYWRGcm9tKCkuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRGcm9tKHNvdXJjZSwgdG9SZW1vdGVQYXRoLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogREVQUkVDQVRFRCwgdXNlIGBhcHBlbmRGcm9tYC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGFzeW5jIGFwcGVuZChzb3VyY2UsIHRvUmVtb3RlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZnRwLmxvZyhcIldhcm5pbmc6IGFwcGVuZCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHVzZSBhcHBlbmRGcm9tKCkuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRGcm9tKHNvdXJjZSwgdG9SZW1vdGVQYXRoLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogREVQUkVDQVRFRCwgdXNlIGBkb3dubG9hZFRvYC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGFzeW5jIGRvd25sb2FkKGRlc3RpbmF0aW9uLCBmcm9tUmVtb3RlUGF0aCwgc3RhcnRBdCA9IDApIHtcbiAgICAgICAgdGhpcy5mdHAubG9nKFwiV2FybmluZzogZG93bmxvYWQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCB1c2UgZG93bmxvYWRUbygpLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG93bmxvYWRUbyhkZXN0aW5hdGlvbiwgZnJvbVJlbW90ZVBhdGgsIHN0YXJ0QXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBERVBSRUNBVEVELCB1c2UgYHVwbG9hZEZyb21EaXJgLlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkRGlyKGxvY2FsRGlyUGF0aCwgcmVtb3RlRGlyUGF0aCkge1xuICAgICAgICB0aGlzLmZ0cC5sb2coXCJXYXJuaW5nOiB1cGxvYWREaXIoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCB1c2UgdXBsb2FkRnJvbURpcigpLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkRnJvbURpcihsb2NhbERpclBhdGgsIHJlbW90ZURpclBhdGgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBERVBSRUNBVEVELCB1c2UgYGRvd25sb2FkVG9EaXJgLlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgYXN5bmMgZG93bmxvYWREaXIobG9jYWxEaXJQYXRoKSB7XG4gICAgICAgIHRoaXMuZnRwLmxvZyhcIldhcm5pbmc6IGRvd25sb2FkRGlyKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgdXNlIGRvd25sb2FkVG9EaXIoKS5cIik7XG4gICAgICAgIHJldHVybiB0aGlzLmRvd25sb2FkVG9EaXIobG9jYWxEaXJQYXRoKTtcbiAgICB9XG59XG5leHBvcnRzLkNsaWVudCA9IENsaWVudDtcbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUxvY2FsRGlyZWN0b3J5KHBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBmc1N0YXQocGF0aCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgYXdhaXQgZnNNa0RpcihwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBpZ25vcmVFcnJvcihmdW5jKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZ1bmMoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBJZ25vcmVcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtTGlzdCA9IGV4cG9ydHMucGFyc2VMaW5lID0gZXhwb3J0cy50ZXN0TGluZSA9IHZvaWQgMDtcbmNvbnN0IEZpbGVJbmZvXzEgPSByZXF1aXJlKFwiLi9GaWxlSW5mb1wiKTtcbi8qKlxuICogVGhpcyBwYXJzZXIgaXMgYmFzZWQgb24gdGhlIEZUUCBjbGllbnQgbGlicmFyeSBzb3VyY2UgY29kZSBpbiBBcGFjaGUgQ29tbW9ucyBOZXQgcHJvdmlkZWRcbiAqIHVuZGVyIHRoZSBBcGFjaGUgMi4wIGxpY2Vuc2UuIEl0IGhhcyBiZWVuIHNpbXBsaWZpZWQgYW5kIHJld3JpdHRlbiB0byBiZXR0ZXIgZml0IHRoZSBKYXZhc2NyaXB0IGxhbmd1YWdlLlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvY29tbW9ucy1uZXQvYmxvYi9tYXN0ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvbmV0L2Z0cC9wYXJzZXIvTlRGVFBFbnRyeVBhcnNlci5qYXZhXG4gKi9cbmNvbnN0IFJFX0xJTkUgPSBuZXcgUmVnRXhwKFwiKFxcXFxTKylcXFxccysoXFxcXFMrKVxcXFxzK1wiIC8vIE1NLWRkLXl5IHdoaXRlc3BhY2UgaGg6bW1hfGtrOm1tIHN3YWxsb3cgdHJhaWxpbmcgc3BhY2VzXG4gICAgKyBcIig/Oig8RElSPil8KFswLTldKykpXFxcXHMrXCIgLy8gPERJUj4gb3IgZGRkZGQgc3dhbGxvdyB0cmFpbGluZyBzcGFjZXNcbiAgICArIFwiKFxcXFxTLiopXCIgLy8gRmlyc3Qgbm9uLXNwYWNlIGZvbGxvd2VkIGJ5IHJlc3Qgb2YgbGluZSAobmFtZSlcbik7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhIGdpdmVuIGxpbmUgbWlnaHQgYmUgYSBET1Mtc3R5bGUgbGlzdGluZy5cbiAqXG4gKiAtIEV4YW1wbGU6IGAxMi0wNS05NiAgMDU6MDNQTSAgICAgICA8RElSPiAgICAgICAgICBteURpcmBcbiAqL1xuZnVuY3Rpb24gdGVzdExpbmUobGluZSkge1xuICAgIHJldHVybiAvXlxcZHsyfS8udGVzdChsaW5lKSAmJiBSRV9MSU5FLnRlc3QobGluZSk7XG59XG5leHBvcnRzLnRlc3RMaW5lID0gdGVzdExpbmU7XG4vKipcbiAqIFBhcnNlIGEgc2luZ2xlIGxpbmUgb2YgYSBET1Mtc3R5bGUgZGlyZWN0b3J5IGxpc3RpbmcuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTGluZShsaW5lKSB7XG4gICAgY29uc3QgZ3JvdXBzID0gbGluZS5tYXRjaChSRV9MSU5FKTtcbiAgICBpZiAoZ3JvdXBzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBncm91cHNbNV07XG4gICAgaWYgKG5hbWUgPT09IFwiLlwiIHx8IG5hbWUgPT09IFwiLi5cIikgeyAvLyBJZ25vcmUgcGFyZW50IGRpcmVjdG9yeSBsaW5rc1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmaWxlID0gbmV3IEZpbGVJbmZvXzEuRmlsZUluZm8obmFtZSk7XG4gICAgY29uc3QgZmlsZVR5cGUgPSBncm91cHNbM107XG4gICAgaWYgKGZpbGVUeXBlID09PSBcIjxESVI+XCIpIHtcbiAgICAgICAgZmlsZS50eXBlID0gRmlsZUluZm9fMS5GaWxlVHlwZS5EaXJlY3Rvcnk7XG4gICAgICAgIGZpbGUuc2l6ZSA9IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaWxlLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLkZpbGU7XG4gICAgICAgIGZpbGUuc2l6ZSA9IHBhcnNlSW50KGdyb3Vwc1s0XSwgMTApO1xuICAgIH1cbiAgICBmaWxlLnJhd01vZGlmaWVkQXQgPSBncm91cHNbMV0gKyBcIiBcIiArIGdyb3Vwc1syXTtcbiAgICByZXR1cm4gZmlsZTtcbn1cbmV4cG9ydHMucGFyc2VMaW5lID0gcGFyc2VMaW5lO1xuZnVuY3Rpb24gdHJhbnNmb3JtTGlzdChmaWxlcykge1xuICAgIHJldHVybiBmaWxlcztcbn1cbmV4cG9ydHMudHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybUxpc3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtTGlzdCA9IGV4cG9ydHMucGFyc2VMaW5lID0gZXhwb3J0cy50ZXN0TGluZSA9IHZvaWQgMDtcbmNvbnN0IEZpbGVJbmZvXzEgPSByZXF1aXJlKFwiLi9GaWxlSW5mb1wiKTtcbmNvbnN0IEpBX01PTlRIID0gXCJcXHU2NzA4XCI7XG5jb25zdCBKQV9EQVkgPSBcIlxcdTY1ZTVcIjtcbmNvbnN0IEpBX1lFQVIgPSBcIlxcdTVlNzRcIjtcbi8qKlxuICogVGhpcyBwYXJzZXIgaXMgYmFzZWQgb24gdGhlIEZUUCBjbGllbnQgbGlicmFyeSBzb3VyY2UgY29kZSBpbiBBcGFjaGUgQ29tbW9ucyBOZXQgcHJvdmlkZWRcbiAqIHVuZGVyIHRoZSBBcGFjaGUgMi4wIGxpY2Vuc2UuIEl0IGhhcyBiZWVuIHNpbXBsaWZpZWQgYW5kIHJld3JpdHRlbiB0byBiZXR0ZXIgZml0IHRoZSBKYXZhc2NyaXB0IGxhbmd1YWdlLlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvY29tbW9ucy1uZXQvYmxvYi9tYXN0ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvbmV0L2Z0cC9wYXJzZXIvVW5peEZUUEVudHJ5UGFyc2VyLmphdmFcbiAqXG4gKiBCZWxvdyBpcyB0aGUgcmVndWxhciBleHByZXNzaW9uIHVzZWQgYnkgdGhpcyBwYXJzZXIuXG4gKlxuICogUGVybWlzc2lvbnM6XG4gKiAgICByICAgdGhlIGZpbGUgaXMgcmVhZGFibGVcbiAqICAgIHcgICB0aGUgZmlsZSBpcyB3cml0YWJsZVxuICogICAgeCAgIHRoZSBmaWxlIGlzIGV4ZWN1dGFibGVcbiAqICAgIC0gICB0aGUgaW5kaWNhdGVkIHBlcm1pc3Npb24gaXMgbm90IGdyYW50ZWRcbiAqICAgIEwgICBtYW5kYXRvcnkgbG9ja2luZyBvY2N1cnMgZHVyaW5nIGFjY2VzcyAodGhlIHNldC1ncm91cC1JRCBiaXQgaXNcbiAqICAgICAgICBvbiBhbmQgdGhlIGdyb3VwIGV4ZWN1dGlvbiBiaXQgaXMgb2ZmKVxuICogICAgcyAgIHRoZSBzZXQtdXNlci1JRCBvciBzZXQtZ3JvdXAtSUQgYml0IGlzIG9uLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmdcbiAqICAgICAgICB1c2VyIG9yIGdyb3VwIGV4ZWN1dGlvbiBiaXQgaXMgYWxzbyBvblxuICogICAgUyAgIHVuZGVmaW5lZCBiaXQtc3RhdGUgKHRoZSBzZXQtdXNlci1JRCBiaXQgaXMgb24gYW5kIHRoZSB1c2VyXG4gKiAgICAgICAgZXhlY3V0aW9uIGJpdCBpcyBvZmYpXG4gKiAgICB0ICAgdGhlIDEwMDAgKG9jdGFsKSBiaXQsIG9yIHN0aWNreSBiaXQsIGlzIG9uIFtzZWUgY2htb2QoMSldLCBhbmRcbiAqICAgICAgICBleGVjdXRpb24gaXMgb25cbiAqICAgIFQgICB0aGUgMTAwMCBiaXQgaXMgdHVybmVkIG9uLCBhbmQgZXhlY3V0aW9uIGlzIG9mZiAodW5kZWZpbmVkIGJpdC1cbiAqICAgICAgICBzdGF0ZSlcbiAqICAgIGUgICB6L09TIGV4dGVybmFsIGxpbmsgYml0XG4gKiAgICBGaW5hbCBsZXR0ZXIgbWF5IGJlIGFwcGVuZGVkOlxuICogICAgKyAgIGZpbGUgaGFzIGV4dGVuZGVkIHNlY3VyaXR5IGF0dHJpYnV0ZXMgKGUuZy4gQUNMKVxuICogICAgTm90ZTogbG9jYWwgbGlzdGluZ3Mgb24gTWFjT1NYIGFsc28gdXNlICdAJ1xuICogICAgdGhpcyBpcyBub3QgYWxsb3dlZCBmb3IgaGVyZSBhcyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgc2hvd24gYnkgRlRQIHNlcnZlcnNcbiAqICAgIHtAY29kZSBAfSAgIGZpbGUgaGFzIGV4dGVuZGVkIGF0dHJpYnV0ZXNcbiAqL1xuY29uc3QgUkVfTElORSA9IG5ldyBSZWdFeHAoXCIoW2JjZGVsZm1wU3MtXSlcIiAvLyBmaWxlIHR5cGVcbiAgICArIFwiKCgocnwtKSh3fC0pKFt4c1N0VEwtXSkpKChyfC0pKHd8LSkoW3hzU3RUTC1dKSkoKHJ8LSkod3wtKShbeHNTdFRMLV0pKSlcXFxcKz9cIiAvLyBwZXJtaXNzaW9uc1xuICAgICsgXCJcXFxccypcIiAvLyBzZXBhcmF0b3IgVE9ETyB3aHkgYWxsb3cgaXQgdG8gYmUgb21pdHRlZD8/XG4gICAgKyBcIihcXFxcZCspXCIgLy8gbGluayBjb3VudFxuICAgICsgXCJcXFxccytcIiAvLyBzZXBhcmF0b3JcbiAgICArIFwiKD86KFxcXFxTKyg/OlxcXFxzXFxcXFMrKSo/KVxcXFxzKyk/XCIgLy8gb3duZXIgbmFtZSAob3B0aW9uYWwgc3BhY2VzKVxuICAgICsgXCIoPzooXFxcXFMrKD86XFxcXHNcXFxcUyspKilcXFxccyspP1wiIC8vIGdyb3VwIG5hbWUgKG9wdGlvbmFsIHNwYWNlcylcbiAgICArIFwiKFxcXFxkKyg/OixcXFxccypcXFxcZCspPylcIiAvLyBzaXplIG9yIG4sbVxuICAgICsgXCJcXFxccytcIiAvLyBzZXBhcmF0b3JcbiAgICAvKipcbiAgICAgKiBudW1lcmljIG9yIHN0YW5kYXJkIGZvcm1hdCBkYXRlOlxuICAgICAqICAgeXl5eS1tbS1kZCAoZXhwZWN0aW5nIGhoOm1tIHRvIGZvbGxvdylcbiAgICAgKiAgIE1NTSBbZF1kXG4gICAgICogICBbZF1kIE1NTVxuICAgICAqICAgTi5CLiB1c2Ugbm9uLXNwYWNlIGZvciBNTU0gdG8gYWxsb3cgZm9yIGxhbmd1YWdlcyBzdWNoIGFzIEdlcm1hbiB3aGljaCB1c2VcbiAgICAgKiAgIGRpYWNyaXRpY3MgKGUuZy4gdW1sYXV0KSBpbiBzb21lIGFiYnJldmlhdGlvbnMuXG4gICAgICogICBKYXBhbmVzZSB1c2VzIG51bWVyaWMgZGF5IGFuZCBtb250aCB3aXRoIHN1ZmZpeGVzIHRvIGRpc3Rpbmd1aXNoIHRoZW1cbiAgICAgKiAgIFtkXWRYWCBbZF1kWlpcbiAgICAgKi9cbiAgICArIFwiKFwiICtcbiAgICBcIig/OlxcXFxkK1stL11cXFxcZCtbLS9dXFxcXGQrKVwiICsgLy8geXl5eS1tbS1kZFxuICAgIFwifCg/OlxcXFxTezN9XFxcXHMrXFxcXGR7MSwyfSlcIiArIC8vIE1NTSBbZF1kXG4gICAgXCJ8KD86XFxcXGR7MSwyfVxcXFxzK1xcXFxTezN9KVwiICsgLy8gW2RdZCBNTU1cbiAgICBcInwoPzpcXFxcZHsxLDJ9XCIgKyBKQV9NT05USCArIFwiXFxcXHMrXFxcXGR7MSwyfVwiICsgSkFfREFZICsgXCIpXCIgK1xuICAgIFwiKVwiXG4gICAgKyBcIlxcXFxzK1wiIC8vIHNlcGFyYXRvclxuICAgIC8qKlxuICAgICAqIHllYXIgKGZvciBub24tcmVjZW50IHN0YW5kYXJkIGZvcm1hdCkgLSB5eXl5XG4gICAgICogb3IgdGltZSAoZm9yIG51bWVyaWMgb3IgcmVjZW50IHN0YW5kYXJkIGZvcm1hdCkgW2hdaDptbVxuICAgICAqIG9yIEphcGFuZXNlIHllYXIgLSB5eXl5WFhcbiAgICAgKi9cbiAgICArIFwiKCg/OlxcXFxkKyg/OjpcXFxcZCspPyl8KD86XFxcXGR7NH1cIiArIEpBX1lFQVIgKyBcIikpXCIgLy8gKDIwKVxuICAgICsgXCJcXFxcc1wiIC8vIHNlcGFyYXRvclxuICAgICsgXCIoLiopXCIpOyAvLyB0aGUgcmVzdCAoMjEpXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhIGdpdmVuIGxpbmUgbWlnaHQgYmUgYSBVbml4LXN0eWxlIGxpc3RpbmcuXG4gKlxuICogLSBFeGFtcGxlOiBgLXJ3LXItLXItLSsgICAxIHBhdHJpY2sgIHN0YWZmICAgMTA1NyBEZWMgMTEgMTQ6MzUgdGVzdC50eHRgXG4gKi9cbmZ1bmN0aW9uIHRlc3RMaW5lKGxpbmUpIHtcbiAgICByZXR1cm4gUkVfTElORS50ZXN0KGxpbmUpO1xufVxuZXhwb3J0cy50ZXN0TGluZSA9IHRlc3RMaW5lO1xuLyoqXG4gKiBQYXJzZSBhIHNpbmdsZSBsaW5lIG9mIGEgVW5peC1zdHlsZSBkaXJlY3RvcnkgbGlzdGluZy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VMaW5lKGxpbmUpIHtcbiAgICBjb25zdCBncm91cHMgPSBsaW5lLm1hdGNoKFJFX0xJTkUpO1xuICAgIGlmIChncm91cHMgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IGdyb3Vwc1syMV07XG4gICAgaWYgKG5hbWUgPT09IFwiLlwiIHx8IG5hbWUgPT09IFwiLi5cIikgeyAvLyBJZ25vcmUgcGFyZW50IGRpcmVjdG9yeSBsaW5rc1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmaWxlID0gbmV3IEZpbGVJbmZvXzEuRmlsZUluZm8obmFtZSk7XG4gICAgZmlsZS5zaXplID0gcGFyc2VJbnQoZ3JvdXBzWzE4XSwgMTApO1xuICAgIGZpbGUudXNlciA9IGdyb3Vwc1sxNl07XG4gICAgZmlsZS5ncm91cCA9IGdyb3Vwc1sxN107XG4gICAgZmlsZS5oYXJkTGlua0NvdW50ID0gcGFyc2VJbnQoZ3JvdXBzWzE1XSwgMTApO1xuICAgIGZpbGUucmF3TW9kaWZpZWRBdCA9IGdyb3Vwc1sxOV0gKyBcIiBcIiArIGdyb3Vwc1syMF07XG4gICAgZmlsZS5wZXJtaXNzaW9ucyA9IHtcbiAgICAgICAgdXNlcjogcGFyc2VNb2RlKGdyb3Vwc1s0XSwgZ3JvdXBzWzVdLCBncm91cHNbNl0pLFxuICAgICAgICBncm91cDogcGFyc2VNb2RlKGdyb3Vwc1s4XSwgZ3JvdXBzWzldLCBncm91cHNbMTBdKSxcbiAgICAgICAgd29ybGQ6IHBhcnNlTW9kZShncm91cHNbMTJdLCBncm91cHNbMTNdLCBncm91cHNbMTRdKSxcbiAgICB9O1xuICAgIC8vIFNldCBmaWxlIHR5cGVcbiAgICBzd2l0Y2ggKGdyb3Vwc1sxXS5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgIGZpbGUudHlwZSA9IEZpbGVJbmZvXzEuRmlsZVR5cGUuRGlyZWN0b3J5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJlXCI6IC8vIE5FVC0zOSA9PiB6L09TIGV4dGVybmFsIGxpbmtcbiAgICAgICAgICAgIGZpbGUudHlwZSA9IEZpbGVJbmZvXzEuRmlsZVR5cGUuU3ltYm9saWNMaW5rO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJsXCI6XG4gICAgICAgICAgICBmaWxlLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLlN5bWJvbGljTGluaztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYlwiOlxuICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgZmlsZS50eXBlID0gRmlsZUluZm9fMS5GaWxlVHlwZS5GaWxlOyAvLyBUT0RPIGNoYW5nZSB0aGlzIGlmIERFVklDRV9UWVBFIGltcGxlbWVudGVkXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgIGZpbGUudHlwZSA9IEZpbGVJbmZvXzEuRmlsZVR5cGUuRmlsZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gQSAnd2hpdGVvdXQnIGZpbGUgaXMgYW4gQVJUSUZJQ0lBTCBlbnRyeSBpbiBhbnkgb2Ygc2V2ZXJhbCB0eXBlcyBvZlxuICAgICAgICAgICAgLy8gJ3RyYW5zbHVjZW50JyBmaWxlc3lzdGVtcywgb2Ygd2hpY2ggYSAndW5pb24nIGZpbGVzeXN0ZW0gaXMgb25lLlxuICAgICAgICAgICAgZmlsZS50eXBlID0gRmlsZUluZm9fMS5GaWxlVHlwZS5Vbmtub3duO1xuICAgIH1cbiAgICAvLyBTZXBhcmF0ZSBvdXQgdGhlIGxpbmsgbmFtZSBmb3Igc3ltYm9saWMgbGlua3NcbiAgICBpZiAoZmlsZS5pc1N5bWJvbGljTGluaykge1xuICAgICAgICBjb25zdCBlbmQgPSBuYW1lLmluZGV4T2YoXCIgLT4gXCIpO1xuICAgICAgICBpZiAoZW5kICE9PSAtMSkge1xuICAgICAgICAgICAgZmlsZS5uYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgZW5kKTtcbiAgICAgICAgICAgIGZpbGUubGluayA9IG5hbWUuc3Vic3RyaW5nKGVuZCArIDQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWxlO1xufVxuZXhwb3J0cy5wYXJzZUxpbmUgPSBwYXJzZUxpbmU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1MaXN0KGZpbGVzKSB7XG4gICAgcmV0dXJuIGZpbGVzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1MaXN0ID0gdHJhbnNmb3JtTGlzdDtcbmZ1bmN0aW9uIHBhcnNlTW9kZShyLCB3LCB4KSB7XG4gICAgbGV0IHZhbHVlID0gMDtcbiAgICBpZiAociAhPT0gXCItXCIpIHtcbiAgICAgICAgdmFsdWUgKz0gRmlsZUluZm9fMS5GaWxlSW5mby5Vbml4UGVybWlzc2lvbi5SZWFkO1xuICAgIH1cbiAgICBpZiAodyAhPT0gXCItXCIpIHtcbiAgICAgICAgdmFsdWUgKz0gRmlsZUluZm9fMS5GaWxlSW5mby5Vbml4UGVybWlzc2lvbi5Xcml0ZTtcbiAgICB9XG4gICAgY29uc3QgZXhlY1Rva2VuID0geC5jaGFyQXQoMCk7XG4gICAgaWYgKGV4ZWNUb2tlbiAhPT0gXCItXCIgJiYgZXhlY1Rva2VuLnRvVXBwZXJDYXNlKCkgIT09IGV4ZWNUb2tlbikge1xuICAgICAgICB2YWx1ZSArPSBGaWxlSW5mb18xLkZpbGVJbmZvLlVuaXhQZXJtaXNzaW9uLkV4ZWN1dGU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm9ncmVzc1RyYWNrZXIgPSB2b2lkIDA7XG4vKipcbiAqIFRyYWNrcyBwcm9ncmVzcyBvZiBvbmUgc29ja2V0IGRhdGEgdHJhbnNmZXIgYXQgYSB0aW1lLlxuICovXG5jbGFzcyBQcm9ncmVzc1RyYWNrZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJ5dGVzT3ZlcmFsbCA9IDA7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWxNcyA9IDUwMDtcbiAgICAgICAgdGhpcy5vblN0b3AgPSBub29wO1xuICAgICAgICB0aGlzLm9uSGFuZGxlID0gbm9vcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYSBuZXcgaGFuZGxlciBmb3IgcHJvZ3Jlc3MgaW5mby4gVXNlIGB1bmRlZmluZWRgIHRvIGRpc2FibGUgcmVwb3J0aW5nLlxuICAgICAqL1xuICAgIHJlcG9ydFRvKG9uSGFuZGxlID0gbm9vcCkge1xuICAgICAgICB0aGlzLm9uSGFuZGxlID0gb25IYW5kbGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IHRyYWNraW5nIHRyYW5zZmVyIHByb2dyZXNzIG9mIGEgc29ja2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvY2tldCAgVGhlIHNvY2tldCB0byBvYnNlcnZlLlxuICAgICAqIEBwYXJhbSBuYW1lICBBIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcHJvZ3Jlc3MgdHJhY2tpbmcsIGUuZy4gYSBmaWxlbmFtZS5cbiAgICAgKiBAcGFyYW0gdHlwZSAgVGhlIHR5cGUgb2YgdGhlIHRyYW5zZmVyLCB0eXBpY2FsbHkgXCJ1cGxvYWRcIiBvciBcImRvd25sb2FkXCIuXG4gICAgICovXG4gICAgc3RhcnQoc29ja2V0LCBuYW1lLCB0eXBlKSB7XG4gICAgICAgIGxldCBsYXN0Qnl0ZXMgPSAwO1xuICAgICAgICB0aGlzLm9uU3RvcCA9IHBvbGwodGhpcy5pbnRlcnZhbE1zLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBieXRlcyA9IHNvY2tldC5ieXRlc1JlYWQgKyBzb2NrZXQuYnl0ZXNXcml0dGVuO1xuICAgICAgICAgICAgdGhpcy5ieXRlc092ZXJhbGwgKz0gYnl0ZXMgLSBsYXN0Qnl0ZXM7XG4gICAgICAgICAgICBsYXN0Qnl0ZXMgPSBieXRlcztcbiAgICAgICAgICAgIHRoaXMub25IYW5kbGUoe1xuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBieXRlcyxcbiAgICAgICAgICAgICAgICBieXRlc092ZXJhbGw6IHRoaXMuYnl0ZXNPdmVyYWxsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0b3AgdHJhY2tpbmcgdHJhbnNmZXIgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgc3RvcCgpIHtcbiAgICAgICAgdGhpcy5vblN0b3AoZmFsc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIHRoZSBwcm9ncmVzcyBoYW5kbGVyIG9uZSBtb3JlIHRpbWUsIHRoZW4gc3RvcCB0cmFja2luZy5cbiAgICAgKi9cbiAgICB1cGRhdGVBbmRTdG9wKCkge1xuICAgICAgICB0aGlzLm9uU3RvcCh0cnVlKTtcbiAgICB9XG59XG5leHBvcnRzLlByb2dyZXNzVHJhY2tlciA9IFByb2dyZXNzVHJhY2tlcjtcbi8qKlxuICogU3RhcnRzIGNhbGxpbmcgYSBjYWxsYmFjayBmdW5jdGlvbiBhdCBhIHJlZ3VsYXIgaW50ZXJ2YWwuIFRoZSBmaXJzdCBjYWxsIHdpbGwgZ28gb3V0XG4gKiBpbW1lZGlhdGVseS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmdW5jdGlvbiB0byBzdG9wIHRoZSBwb2xsaW5nLlxuICovXG5mdW5jdGlvbiBwb2xsKGludGVydmFsTXMsIHVwZGF0ZUZ1bmMpIHtcbiAgICBjb25zdCBpZCA9IHNldEludGVydmFsKHVwZGF0ZUZ1bmMsIGludGVydmFsTXMpO1xuICAgIGNvbnN0IHN0b3BGdW5jID0gKHN0b3BXaXRoVXBkYXRlKSA9PiB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICBpZiAoc3RvcFdpdGhVcGRhdGUpIHtcbiAgICAgICAgICAgIHVwZGF0ZUZ1bmMoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IHJlcGVhdGVkIGNhbGxzIHRvIHN0b3AgY2FsbGluZyBoYW5kbGVyLlxuICAgICAgICB1cGRhdGVGdW5jID0gbm9vcDtcbiAgICB9O1xuICAgIHVwZGF0ZUZ1bmMoKTtcbiAgICByZXR1cm4gc3RvcEZ1bmM7XG59XG5mdW5jdGlvbiBub29wKCkgeyB9XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3RyaW5nV3JpdGVyID0gdm9pZCAwO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY2xhc3MgU3RyaW5nV3JpdGVyIGV4dGVuZHMgc3RyZWFtXzEuV3JpdGFibGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmJ1ZiA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICB9XG4gICAgX3dyaXRlKGNodW5rLCBfLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2h1bmsgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWYsIGNodW5rXSk7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIlN0cmluZ1dyaXRlciBleHBlY3RzIGNodW5rcyBvZiB0eXBlICdCdWZmZXInLlwiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0VGV4dChlbmNvZGluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5idWYudG9TdHJpbmcoZW5jb2RpbmcpO1xuICAgIH1cbn1cbmV4cG9ydHMuU3RyaW5nV3JpdGVyID0gU3RyaW5nV3JpdGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLCJpbXBvcnQge1xuICBJVHJhbnNmZXJPcHRpb25zLFxuICBJVHJhbnNmZXJQcm9ncmVzc0xpc3RlbmVyLFxuICBJVHJhbnNmZXJJbmZvLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNmZXIge1xuICBwdWJsaWMgc3RhcnRUaW1lOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIGJ5dGVzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGluZm86IElUcmFuc2ZlckluZm8sXG4gICAgcHVibGljIG9wdGlvbnM6IElUcmFuc2Zlck9wdGlvbnMsXG4gICAgcHVibGljIG9uUHJvZ3Jlc3M6IElUcmFuc2ZlclByb2dyZXNzTGlzdGVuZXIsXG4gICkge1xuICAgIHRoaXMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmJ5dGVzID0gaW5mbz8uc3RhcnRBdCA/PyAwO1xuICB9XG5cbiAgcHVibGljIGdldCBlbGFwc2VkKCkge1xuICAgIHJldHVybiAoRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lKSAvIDEwMDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNwZWVkKCkge1xuICAgIGNvbnN0IGVsYXBzZWQgPSB0aGlzLmVsYXBzZWQ7XG5cbiAgICBpZiAoZWxhcHNlZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5ieXRlcyAvIGVsYXBzZWQpO1xuICB9XG5cbiAgcHVibGljIGdldCBldGEoKSB7XG4gICAgY29uc3Qgc3BlZWQgPSB0aGlzLnNwZWVkO1xuXG4gICAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByYXRlID0gdGhpcy5pbmZvLnRvdGFsQnl0ZXMgLyB0aGlzLnNwZWVkO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQocmF0ZSAtIHRoaXMuZWxhcHNlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBlcmNlbnQoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoKHRoaXMuYnl0ZXMgLyB0aGlzLmluZm8udG90YWxCeXRlcykgKiAxMDApO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVByb2dyZXNzID0gKGJ5dGVzOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLmJ5dGVzID0gYnl0ZXM7XG5cbiAgICBjb25zdCB7IGlkLCBsb2NhbFBhdGgsIHJlbW90ZVBhdGgsIHRvdGFsQnl0ZXMgfSA9IHRoaXMuaW5mbztcblxuICAgIGlmICghdGhpcy5vcHRpb25zPy5xdWlldCkge1xuICAgICAgdGhpcy5vblByb2dyZXNzKFxuICAgICAgICB7IGlkLCBsb2NhbFBhdGgsIHJlbW90ZVBhdGggfSxcbiAgICAgICAge1xuICAgICAgICAgIGJ5dGVzLFxuICAgICAgICAgIHRvdGFsQnl0ZXMsXG4gICAgICAgICAgc3BlZWQ6IHRoaXMuc3BlZWQsXG4gICAgICAgICAgZXRhOiB0aGlzLmV0YSxcbiAgICAgICAgICBwZXJjZW50OiB0aGlzLnBlcmNlbnQsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfTtcbn1cbiIsImV4cG9ydCBjb25zdCByZXBlYXQgPSA8VD4odmFsdWU6IFQsIGNvdW50OiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIEFycmF5KGNvdW50KS5maWxsKHZhbHVlKTtcbn07XG4iLCJpbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IFJlYWRhYmxlLCBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5cbmV4cG9ydCBjb25zdCBnZXRQYXRoRnJvbVN0cmVhbSA9IChzdHJlYW06IFJlYWRhYmxlIHwgV3JpdGFibGUpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gKHN0cmVhbSBhcyBhbnkpLnBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZVNpemUgPSBhc3luYyAocGF0aDogc3RyaW5nKSA9PiB7XG4gIGlmICghcGF0aCkgcmV0dXJuIC0xO1xuXG4gIGNvbnN0IHsgc2l6ZSB9ID0gYXdhaXQgZnMuc3RhdChwYXRoKTtcbiAgcmV0dXJuIHNpemU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZG5zXCIpOyIsIi8vIFRPRE86IHN1cHBvcnQgRVhURU5ERUQgcmVxdWVzdCBwYWNrZXRzXG5cbnZhciBUcmFuc2Zvcm1TdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm07XG52YXIgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5SZWFkYWJsZTtcbnZhciBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLldyaXRhYmxlO1xudmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJ2ZzJykuY29uc3RhbnRzIHx8IHByb2Nlc3MuYmluZGluZygnY29uc3RhbnRzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBpbmhlcml0cyA9IHV0aWwuaW5oZXJpdHM7XG52YXIgaXNEYXRlID0gdXRpbC5pc0RhdGU7XG52YXIgbGlzdGVuZXJDb3VudCA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50O1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcblxudmFyIHJlYWRTdHJpbmcgPSByZXF1aXJlKCcuL3V0aWxzJykucmVhZFN0cmluZztcbnZhciByZWFkSW50ID0gcmVxdWlyZSgnLi91dGlscycpLnJlYWRJbnQ7XG52YXIgcmVhZFVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLnJlYWRVSW50MzJCRTtcbnZhciB3cml0ZVVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLndyaXRlVUludDMyQkU7XG5cbnZhciBBVFRSID0ge1xuICBTSVpFOiAweDAwMDAwMDAxLFxuICBVSURHSUQ6IDB4MDAwMDAwMDIsXG4gIFBFUk1JU1NJT05TOiAweDAwMDAwMDA0LFxuICBBQ01PRFRJTUU6IDB4MDAwMDAwMDgsXG4gIEVYVEVOREVEOiAweDgwMDAwMDAwXG59O1xuXG52YXIgU1RBVFVTX0NPREUgPSB7XG4gIE9LOiAwLFxuICBFT0Y6IDEsXG4gIE5PX1NVQ0hfRklMRTogMixcbiAgUEVSTUlTU0lPTl9ERU5JRUQ6IDMsXG4gIEZBSUxVUkU6IDQsXG4gIEJBRF9NRVNTQUdFOiA1LFxuICBOT19DT05ORUNUSU9OOiA2LFxuICBDT05ORUNUSU9OX0xPU1Q6IDcsXG4gIE9QX1VOU1VQUE9SVEVEOiA4XG59O1xuT2JqZWN0LmtleXMoU1RBVFVTX0NPREUpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gIFNUQVRVU19DT0RFW1NUQVRVU19DT0RFW2tleV1dID0ga2V5O1xufSk7XG52YXIgU1RBVFVTX0NPREVfU1RSID0ge1xuICAwOiAnTm8gZXJyb3InLFxuICAxOiAnRW5kIG9mIGZpbGUnLFxuICAyOiAnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScsXG4gIDM6ICdQZXJtaXNzaW9uIGRlbmllZCcsXG4gIDQ6ICdGYWlsdXJlJyxcbiAgNTogJ0JhZCBtZXNzYWdlJyxcbiAgNjogJ05vIGNvbm5lY3Rpb24nLFxuICA3OiAnQ29ubmVjdGlvbiBsb3N0JyxcbiAgODogJ09wZXJhdGlvbiB1bnN1cHBvcnRlZCdcbn07XG5TRlRQU3RyZWFtLlNUQVRVU19DT0RFID0gU1RBVFVTX0NPREU7XG5cbnZhciBSRVFVRVNUID0ge1xuICBJTklUOiAxLFxuICBPUEVOOiAzLFxuICBDTE9TRTogNCxcbiAgUkVBRDogNSxcbiAgV1JJVEU6IDYsXG4gIExTVEFUOiA3LFxuICBGU1RBVDogOCxcbiAgU0VUU1RBVDogOSxcbiAgRlNFVFNUQVQ6IDEwLFxuICBPUEVORElSOiAxMSxcbiAgUkVBRERJUjogMTIsXG4gIFJFTU9WRTogMTMsXG4gIE1LRElSOiAxNCxcbiAgUk1ESVI6IDE1LFxuICBSRUFMUEFUSDogMTYsXG4gIFNUQVQ6IDE3LFxuICBSRU5BTUU6IDE4LFxuICBSRUFETElOSzogMTksXG4gIFNZTUxJTks6IDIwLFxuICBFWFRFTkRFRDogMjAwXG59O1xuT2JqZWN0LmtleXMoUkVRVUVTVCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgUkVRVUVTVFtSRVFVRVNUW2tleV1dID0ga2V5O1xufSk7XG5cbnZhciBSRVNQT05TRSA9IHtcbiAgVkVSU0lPTjogMixcbiAgU1RBVFVTOiAxMDEsXG4gIEhBTkRMRTogMTAyLFxuICBEQVRBOiAxMDMsXG4gIE5BTUU6IDEwNCxcbiAgQVRUUlM6IDEwNSxcbiAgRVhURU5ERUQ6IDIwMVxufTtcbk9iamVjdC5rZXlzKFJFU1BPTlNFKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICBSRVNQT05TRVtSRVNQT05TRVtrZXldXSA9IGtleTtcbn0pO1xuXG52YXIgT1BFTl9NT0RFID0ge1xuICBSRUFEOiAweDAwMDAwMDAxLFxuICBXUklURTogMHgwMDAwMDAwMixcbiAgQVBQRU5EOiAweDAwMDAwMDA0LFxuICBDUkVBVDogMHgwMDAwMDAwOCxcbiAgVFJVTkM6IDB4MDAwMDAwMTAsXG4gIEVYQ0w6IDB4MDAwMDAwMjBcbn07XG5TRlRQU3RyZWFtLk9QRU5fTU9ERSA9IE9QRU5fTU9ERTtcblxudmFyIE1BWF9QS1RfTEVOID0gMzQwMDA7XG52YXIgTUFYX1JFUUlEID0gTWF0aC5wb3coMiwgMzIpIC0gMTtcbnZhciBDTElFTlRfVkVSU0lPTl9CVUZGRVIgPSBCdWZmZXIuZnJvbShbMCwgMCwgMCwgNSAvKiBsZW5ndGggKi8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVFU1QuSU5JVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMyAvKiB2ZXJzaW9uICovXSk7XG52YXIgU0VSVkVSX1ZFUlNJT05fQlVGRkVSID0gQnVmZmVyLmZyb20oWzAsIDAsIDAsIDUgLyogbGVuZ3RoICovLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNQT05TRS5WRVJTSU9OLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAzIC8qIHZlcnNpb24gKi9dKTtcbi8qXG4gIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtc2Vjc2gtZmlsZXhmZXItMDI6XG5cbiAgICAgVGhlIG1heGltdW0gc2l6ZSBvZiBhIHBhY2tldCBpcyBpbiBwcmFjdGljZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbGllbnRcbiAgICAgKHRoZSBtYXhpbXVtIHNpemUgb2YgcmVhZCBvciB3cml0ZSByZXF1ZXN0cyB0aGF0IGl0IHNlbmRzLCBwbHVzIGEgZmV3XG4gICAgIGJ5dGVzIG9mIHBhY2tldCBvdmVyaGVhZCkuICBBbGwgc2VydmVycyBTSE9VTEQgc3VwcG9ydCBwYWNrZXRzIG9mIGF0XG4gICAgIGxlYXN0IDM0MDAwIGJ5dGVzICh3aGVyZSB0aGUgcGFja2V0IHNpemUgcmVmZXJzIHRvIHRoZSBmdWxsIGxlbmd0aCxcbiAgICAgaW5jbHVkaW5nIHRoZSBoZWFkZXIgYWJvdmUpLiAgVGhpcyBzaG91bGQgYWxsb3cgZm9yIHJlYWRzIGFuZCB3cml0ZXNcbiAgICAgb2YgYXQgbW9zdCAzMjc2OCBieXRlcy5cblxuICBPcGVuU1NIIGNhcHMgdGhpcyB0byAyNTZrYiBpbnN0ZWFkIG9mIHRoZSB+MzRrYiBhcyBtZW50aW9uZWQgaW4gdGhlIHNmdHB2M1xuICBzcGVjLlxuKi9cbnZhciBSRV9PUEVOU1NIID0gL15TU0gtMi4wLSg/Ok9wZW5TU0h8ZHJvcGJlYXIpLztcbnZhciBPUEVOU1NIX01BWF9EQVRBX0xFTiA9ICgyNTYgKiAxMDI0KSAtICgyICogMTAyNCkvKmFjY291bnQgZm9yIGhlYWRlciBkYXRhKi87XG5cbmZ1bmN0aW9uIERFQlVHX05PT1AobXNnKSB7fVxuXG5mdW5jdGlvbiBTRlRQU3RyZWFtKGNmZywgcmVtb3RlSWRlbnRSYXcpIHtcbiAgaWYgKHR5cGVvZiBjZmcgPT09ICdzdHJpbmcnICYmICFyZW1vdGVJZGVudFJhdykge1xuICAgIHJlbW90ZUlkZW50UmF3ID0gY2ZnO1xuICAgIGNmZyA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodHlwZW9mIGNmZyAhPT0gJ29iamVjdCcgfHwgIWNmZylcbiAgICBjZmcgPSB7fTtcblxuICBUcmFuc2Zvcm1TdHJlYW0uY2FsbCh0aGlzLCB7XG4gICAgaGlnaFdhdGVyTWFyazogKHR5cGVvZiBjZmcuaGlnaFdhdGVyTWFyayA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgPyBjZmcuaGlnaFdhdGVyTWFya1xuICAgICAgICAgICAgICAgICAgICA6IDMyICogMTAyNClcbiAgfSk7XG5cbiAgdGhpcy5kZWJ1ZyA9ICh0eXBlb2YgY2ZnLmRlYnVnID09PSAnZnVuY3Rpb24nID8gY2ZnLmRlYnVnIDogREVCVUdfTk9PUCk7XG4gIHRoaXMuc2VydmVyID0gKGNmZy5zZXJ2ZXIgPyB0cnVlIDogZmFsc2UpO1xuICB0aGlzLl9pc09wZW5TU0ggPSAocmVtb3RlSWRlbnRSYXcgJiYgUkVfT1BFTlNTSC50ZXN0KHJlbW90ZUlkZW50UmF3KSk7XG4gIHRoaXMuX25lZWRDb250aW51ZSA9IGZhbHNlO1xuICB0aGlzLl9zdGF0ZSA9IHtcbiAgICAvLyBjb21tb25cbiAgICBzdGF0dXM6ICdwYWNrZXRfaGVhZGVyJyxcbiAgICB3cml0ZVJlcWlkOiAtMSxcbiAgICBwa3RMZWZ0OiB1bmRlZmluZWQsXG4gICAgcGt0SGRyQnVmOiBCdWZmZXIuYWxsb2NVbnNhZmUoOSksIC8vIHJvb20gZm9yIHBrdExlbiArIHBrdFR5cGUgKyByZXEgaWRcbiAgICBwa3RCdWY6IHVuZGVmaW5lZCxcbiAgICBwa3RUeXBlOiB1bmRlZmluZWQsXG4gICAgdmVyc2lvbjogdW5kZWZpbmVkLFxuICAgIGV4dGVuc2lvbnM6IHt9LFxuXG4gICAgLy8gY2xpZW50XG4gICAgbWF4RGF0YUxlbjogKHRoaXMuX2lzT3BlblNTSCA/IE9QRU5TU0hfTUFYX0RBVEFfTEVOIDogMzI3NjgpLFxuICAgIHJlcXVlc3RzOiB7fVxuICB9O1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICB9KS5vbignZmluaXNoJywgb25GaW5pc2gpXG4gICAgLm9uKCdwcmVmaW5pc2gnLCBvbkZpbmlzaCk7XG4gIGZ1bmN0aW9uIG9uRmluaXNoKCkge1xuICAgIHNlbGYud3JpdGFibGUgPSBmYWxzZTtcbiAgICBzZWxmLl9jbGVhbnVwKGZhbHNlKTtcbiAgfVxuXG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhpcy5wdXNoKENMSUVOVF9WRVJTSU9OX0JVRkZFUik7XG59XG5pbmhlcml0cyhTRlRQU3RyZWFtLCBUcmFuc2Zvcm1TdHJlYW0pO1xuXG5TRlRQU3RyZWFtLnByb3RvdHlwZS5fX3JlYWQgPSBUcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlLl9yZWFkO1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gIGlmICh0aGlzLl9uZWVkQ29udGludWUpIHtcbiAgICB0aGlzLl9uZWVkQ29udGludWUgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ2NvbnRpbnVlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX19yZWFkKG4pO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLl9fcHVzaCA9IFRyYW5zZm9ybVN0cmVhbS5wcm90b3R5cGUucHVzaDtcblNGVFBTdHJlYW0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCF0aGlzLnJlYWRhYmxlKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGNodW5rID09PSBudWxsKVxuICAgIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgdmFyIHJldCA9IHRoaXMuX19wdXNoKGNodW5rLCBlbmNvZGluZyk7XG4gIHRoaXMuX25lZWRDb250aW51ZSA9IChyZXQgPT09IGZhbHNlKTtcbiAgcmV0dXJuIHJldDtcbn07XG5cblNGVFBTdHJlYW0ucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgc3RhdGUucGt0QnVmID0gdW5kZWZpbmVkOyAvLyBnaXZlIEdDIHNvbWV0aGluZyB0byBkb1xuXG4gIHZhciByZXF1ZXN0cyA9IHN0YXRlLnJlcXVlc3RzO1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHJlcXVlc3RzKTtcbiAgdmFyIGxlbiA9IGtleXMubGVuZ3RoO1xuICBpZiAobGVuKSB7XG4gICAgaWYgKHRoaXMucmVhZGFibGUpIHtcbiAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1NGVFAgc2Vzc2lvbiBlbmRlZCBlYXJseScpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGNiOyBpIDwgbGVuOyArK2kpXG4gICAgICAgIChjYiA9IHJlcXVlc3RzW2tleXNbaV1dLmNiKSAmJiBjYihlcnIpO1xuICAgIH1cbiAgICBzdGF0ZS5yZXF1ZXN0cyA9IHt9O1xuICB9XG5cbiAgaWYgKHRoaXMucmVhZGFibGUpXG4gICAgdGhpcy5wdXNoKG51bGwpO1xuICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSB7XG4gICAgLy8gVWdoIVxuICAgIHRoaXMucmVzdW1lKCk7XG4gIH1cbiAgaWYgKGNhbGxiYWNrICE9PSBmYWxzZSkge1xuICAgIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBQYXJzZXI6IE1hbGZvcm1lZCBwYWNrZXQnKTtcbiAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhuZXcgRXJyb3IoJ01hbGZvcm1lZCBwYWNrZXQnKSk7XG4gIH1cbn07XG5cblNGVFBTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuICB2YXIgc2VydmVyID0gdGhpcy5zZXJ2ZXI7XG4gIHZhciBzdGF0dXMgPSBzdGF0ZS5zdGF0dXM7XG4gIHZhciBwa3RUeXBlID0gc3RhdGUucGt0VHlwZTtcbiAgdmFyIHBrdEJ1ZiA9IHN0YXRlLnBrdEJ1ZjtcbiAgdmFyIHBrdExlZnQgPSBzdGF0ZS5wa3RMZWZ0O1xuICB2YXIgdmVyc2lvbiA9IHN0YXRlLnZlcnNpb247XG4gIHZhciBwa3RIZHJCdWYgPSBzdGF0ZS5wa3RIZHJCdWY7XG4gIHZhciByZXF1ZXN0cyA9IHN0YXRlLnJlcXVlc3RzO1xuICB2YXIgZGVidWcgPSB0aGlzLmRlYnVnO1xuICB2YXIgY2h1bmtMZW4gPSBjaHVuay5sZW5ndGg7XG4gIHZhciBjaHVua1BvcyA9IDA7XG4gIHZhciBidWZmZXI7XG4gIHZhciBjaHVua0xlZnQ7XG4gIHZhciBpZDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChzdGF0dXMgPT09ICdkaXNjYXJkJykge1xuICAgICAgY2h1bmtMZWZ0ID0gKGNodW5rTGVuIC0gY2h1bmtQb3MpO1xuICAgICAgaWYgKHBrdExlZnQgPD0gY2h1bmtMZWZ0KSB7XG4gICAgICAgIGNodW5rUG9zICs9IHBrdExlZnQ7XG4gICAgICAgIHBrdExlZnQgPSAwO1xuICAgICAgICBzdGF0dXMgPSAncGFja2V0X2hlYWRlcic7XG4gICAgICAgIGJ1ZmZlciA9IHBrdEJ1ZiA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBrdExlZnQgLT0gY2h1bmtMZWZ0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBrdEJ1ZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaHVua0xlZnQgPSAoY2h1bmtMZW4gLSBjaHVua1Bvcyk7XG4gICAgICBpZiAocGt0TGVmdCA8PSBjaHVua0xlZnQpIHtcbiAgICAgICAgY2h1bmsuY29weShwa3RCdWYsXG4gICAgICAgICAgICAgICAgICAgcGt0QnVmLmxlbmd0aCAtIHBrdExlZnQsXG4gICAgICAgICAgICAgICAgICAgY2h1bmtQb3MsXG4gICAgICAgICAgICAgICAgICAgY2h1bmtQb3MgKyBwa3RMZWZ0KTtcbiAgICAgICAgY2h1bmtQb3MgKz0gcGt0TGVmdDtcbiAgICAgICAgcGt0TGVmdCA9IDA7XG4gICAgICAgIGJ1ZmZlciA9IHBrdEJ1ZjtcbiAgICAgICAgcGt0QnVmID0gdW5kZWZpbmVkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNodW5rLmNvcHkocGt0QnVmLCBwa3RCdWYubGVuZ3RoIC0gcGt0TGVmdCwgY2h1bmtQb3MpO1xuICAgICAgICBwa3RMZWZ0IC09IGNodW5rTGVmdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0dXMgPT09ICdwYWNrZXRfaGVhZGVyJykge1xuICAgICAgaWYgKCFidWZmZXIpIHtcbiAgICAgICAgcGt0TGVmdCA9IDU7XG4gICAgICAgIHBrdEJ1ZiA9IHBrdEhkckJ1ZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGhlcmUgd2UgcmVhZCB0aGUgcmlnaHQtbW9zdCA1IGJ5dGVzIGZyb20gYnVmZmVyIChwa3RIZHJCdWYpXG4gICAgICAgIHBrdExlZnQgPSByZWFkVUludDMyQkUoYnVmZmVyLCA0KSAtIDE7IC8vIGFjY291bnQgZm9yIHR5cGUgYnl0ZVxuICAgICAgICBwa3RUeXBlID0gYnVmZmVyWzhdO1xuXG4gICAgICAgIGlmIChzZXJ2ZXIpIHtcbiAgICAgICAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkICYmIHBrdFR5cGUgIT09IFJFUVVFU1QuSU5JVCkge1xuICAgICAgICAgICAgZGVidWcoJ0RFQlVHW1NGVFBdOiBQYXJzZXI6IFVuZXhwZWN0ZWQgcGFja2V0IGJlZm9yZSBpbml0Jyk7XG4gICAgICAgICAgICB0aGlzLl9jbGVhbnVwKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgcGFja2V0IGJlZm9yZSBpbml0JykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmIHBrdFR5cGUgPT09IFJFUVVFU1QuSU5JVCkge1xuICAgICAgICAgICAgZGVidWcoJ0RFQlVHW1NGVFBdOiBQYXJzZXI6IFVuZXhwZWN0ZWQgZHVwbGljYXRlIGluaXQnKTtcbiAgICAgICAgICAgIHN0YXR1cyA9ICdiYWRfcGt0JztcbiAgICAgICAgICB9IGVsc2UgaWYgKHBrdExlZnQgPiBNQVhfUEtUX0xFTikge1xuICAgICAgICAgICAgdmFyIG1zZyA9ICdQYWNrZXQgbGVuZ3RoICgnXG4gICAgICAgICAgICAgICAgICAgICAgKyBwa3RMZWZ0XG4gICAgICAgICAgICAgICAgICAgICAgKyAnKSBleGNlZWRzIG1heCBsZW5ndGggKCdcbiAgICAgICAgICAgICAgICAgICAgICArIE1BWF9QS1RfTEVOXG4gICAgICAgICAgICAgICAgICAgICAgKyAnKSc7XG4gICAgICAgICAgICBkZWJ1ZygnREVCVUdbU0ZUUF06IFBhcnNlcjogJyArIG1zZyk7XG4gICAgICAgICAgICB0aGlzLl9jbGVhbnVwKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IobXNnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwa3RUeXBlID09PSBSRVFVRVNULkVYVEVOREVEKSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAnYmFkX3BrdCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChSRVFVRVNUW3BrdFR5cGVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlYnVnKCdERUJVR1tTRlRQXTogUGFyc2VyOiBVbnN1cHBvcnRlZCBwYWNrZXQgdHlwZTogJyArIHBrdFR5cGUpO1xuICAgICAgICAgICAgc3RhdHVzID0gJ2Rpc2NhcmQnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQgJiYgcGt0VHlwZSAhPT0gUkVTUE9OU0UuVkVSU0lPTikge1xuICAgICAgICAgIGRlYnVnKCdERUJVR1tTRlRQXTogUGFyc2VyOiBVbmV4cGVjdGVkIHBhY2tldCBiZWZvcmUgdmVyc2lvbicpO1xuICAgICAgICAgIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgcGFja2V0IGJlZm9yZSB2ZXJzaW9uJykpO1xuICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiBwa3RUeXBlID09PSBSRVNQT05TRS5WRVJTSU9OKSB7XG4gICAgICAgICAgZGVidWcoJ0RFQlVHW1NGVFBdOiBQYXJzZXI6IFVuZXhwZWN0ZWQgZHVwbGljYXRlIHZlcnNpb24nKTtcbiAgICAgICAgICBzdGF0dXMgPSAnYmFkX3BrdCc7XG4gICAgICAgIH0gZWxzZSBpZiAoUkVTUE9OU0VbcGt0VHlwZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0YXR1cyA9ICdkaXNjYXJkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdiYWRfcGt0Jykge1xuICAgICAgICAgIC8vIENvcHkgb3JpZ2luYWwgcGFja2V0IGluZm8gdG8gbGVmdCBvZiBwa3RIZHJCdWZcbiAgICAgICAgICB3cml0ZVVJbnQzMkJFKHBrdEhkckJ1ZiwgcGt0TGVmdCArIDEsIDApO1xuICAgICAgICAgIHBrdEhkckJ1Zls0XSA9IHBrdFR5cGU7XG5cbiAgICAgICAgICBwa3RMZWZ0ID0gNDtcbiAgICAgICAgICBwa3RCdWYgPSBwa3RIZHJCdWY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGt0QnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBrdExlZnQpO1xuICAgICAgICAgIHN0YXR1cyA9ICdwYXlsb2FkJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAncGF5bG9hZCcpIHtcbiAgICAgIGlmIChwa3RUeXBlID09PSBSRVNQT05TRS5WRVJTSU9OIHx8IHBrdFR5cGUgPT09IFJFUVVFU1QuSU5JVCkge1xuICAgICAgICAvKlxuICAgICAgICAgIHVpbnQzMiB2ZXJzaW9uXG4gICAgICAgICAgPGV4dGVuc2lvbiBkYXRhPlxuICAgICAgICAqL1xuICAgICAgICB2ZXJzaW9uID0gc3RhdGUudmVyc2lvbiA9IHJlYWRJbnQoYnVmZmVyLCAwLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgIGlmICh2ZXJzaW9uID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh2ZXJzaW9uIDwgMykge1xuICAgICAgICAgIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ0luY29tcGF0aWJsZSBTRlRQIHZlcnNpb246ICcgKyB2ZXJzaW9uKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VydmVyKVxuICAgICAgICAgIHRoaXMucHVzaChTRVJWRVJfVkVSU0lPTl9CVUZGRVIpO1xuXG4gICAgICAgIHZhciBidWZsZW4gPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICB2YXIgZXh0bmFtZTtcbiAgICAgICAgdmFyIGV4dGRhdGE7XG4gICAgICAgIGJ1ZmZlci5fcG9zID0gNDtcbiAgICAgICAgd2hpbGUgKGJ1ZmZlci5fcG9zIDwgYnVmbGVuKSB7XG4gICAgICAgICAgZXh0bmFtZSA9IHJlYWRTdHJpbmcoYnVmZmVyLCBidWZmZXIuX3BvcywgJ2FzY2lpJywgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgIGlmIChleHRuYW1lID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBleHRkYXRhID0gcmVhZFN0cmluZyhidWZmZXIsIGJ1ZmZlci5fcG9zLCAnYXNjaWknLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKGV4dGRhdGEgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGlmIChzdGF0ZS5leHRlbnNpb25zW2V4dG5hbWVdKVxuICAgICAgICAgICAgc3RhdGUuZXh0ZW5zaW9uc1tleHRuYW1lXS5wdXNoKGV4dGRhdGEpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN0YXRlLmV4dGVuc2lvbnNbZXh0bmFtZV0gPSBbIGV4dGRhdGEgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdCgncmVhZHknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgQWxsIG90aGVyIHBhY2tldHMgKGNsaWVudCBhbmQgc2VydmVyKSBiZWdpbiB3aXRoIGEgKGNsaWVudCkgcmVxdWVzdFxuICAgICAgICAgIGlkOlxuICAgICAgICAgIHVpbnQzMiAgICAgaWRcbiAgICAgICAgKi9cbiAgICAgICAgaWQgPSByZWFkSW50KGJ1ZmZlciwgMCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICBpZiAoaWQgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgZmlsZW5hbWU7XG4gICAgICAgIHZhciBhdHRycztcbiAgICAgICAgdmFyIGhhbmRsZTtcbiAgICAgICAgdmFyIGRhdGE7XG5cbiAgICAgICAgaWYgKCFzZXJ2ZXIpIHtcbiAgICAgICAgICB2YXIgcmVxID0gcmVxdWVzdHNbaWRdO1xuICAgICAgICAgIHZhciBjYiA9IHJlcSAmJiByZXEuY2I7XG4gICAgICAgICAgZGVidWcoJ0RFQlVHW1NGVFBdOiBQYXJzZXI6IFJlc3BvbnNlOiAnICsgUkVTUE9OU0VbcGt0VHlwZV0pO1xuICAgICAgICAgIGlmIChyZXEgJiYgY2IpIHtcbiAgICAgICAgICAgIGlmIChwa3RUeXBlID09PSBSRVNQT05TRS5TVEFUVVMpIHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICB1aW50MzIgICAgIGVycm9yL3N0YXR1cyBjb2RlXG4gICAgICAgICAgICAgICAgc3RyaW5nICAgICBlcnJvciBtZXNzYWdlIChJU08tMTA2NDYgVVRGLTgpXG4gICAgICAgICAgICAgICAgc3RyaW5nICAgICBsYW5ndWFnZSB0YWdcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgdmFyIGNvZGUgPSByZWFkSW50KGJ1ZmZlciwgNCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gU1RBVFVTX0NPREUuT0spIHtcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdlIGJvcnJvdyBPcGVuU1NIIGJlaGF2aW9yIGhlcmUsIHNwZWNpZmljYWxseSB3ZSBtYWtlIHRoZVxuICAgICAgICAgICAgICAgIC8vIG1lc3NhZ2UgYW5kIGxhbmd1YWdlIGZpZWxkcyBvcHRpb25hbCwgZGVzcGl0ZSB0aGVcbiAgICAgICAgICAgICAgICAvLyBzcGVjaWZpY2F0aW9uIHJlcXVpcmluZyB0aGVtIChldmVuIGlmIHRoZXkgYXJlIGVtcHR5KS4gVGhpc1xuICAgICAgICAgICAgICAgIC8vIGhlbHBzIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggYnVnZ3kgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9cbiAgICAgICAgICAgICAgICAvLyBub3QgZnVsbHkgY29uZm9ybSB0byB0aGUgU0ZUUCh2Mykgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICAgICAgICB2YXIgbXNnO1xuICAgICAgICAgICAgICAgIHZhciBsYW5nID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPj0gMTIpIHtcbiAgICAgICAgICAgICAgICAgIG1zZyA9IHJlYWRTdHJpbmcoYnVmZmVyLCA4LCAndXRmOCcsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtc2cgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICBpZiAoKGJ1ZmZlci5fcG9zICsgNCkgPCBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmcgPSByZWFkU3RyaW5nKGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLl9wb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc2NpaScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhbmcgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IDIgfHwgY29kZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgLy8gZG9udCBzcGl0IGFuIGVycm9yIGZvciB0aGVzZSB0d29cbiAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKG1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBTVEFUVVNfQ09ERV9TVFJbY29kZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJ1Vua25vd24gc3RhdHVzJyk7XG4gICAgICAgICAgICAgICAgICAgIGVyci5jb2RlID0gY29kZTtcbiAgICAgICAgICAgICAgICAgICAgZXJyLmxhbmcgPSBsYW5nO1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVTUE9OU0UuSEFORExFKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgc3RyaW5nICAgICBoYW5kbGVcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgaGFuZGxlID0gcmVhZFN0cmluZyhidWZmZXIsIDQsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICBjYih1bmRlZmluZWQsIGhhbmRsZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBrdFR5cGUgPT09IFJFU1BPTlNFLkRBVEEpIHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBzdHJpbmcgICAgIGRhdGFcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgaWYgKHJlcS5idWZmZXIpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFscmVhZHkgcHJlLWFsbG9jYXRlZCBzcGFjZSB0byBzdG9yZSB0aGUgZGF0YVxuICAgICAgICAgICAgICAgIHZhciBkYXRhTGVuID0gcmVhZEludChidWZmZXIsIDQsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YUxlbiA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdmFyIHJlcUJ1ZkxlbiA9IHJlcS5idWZmZXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhTGVuID4gcmVxQnVmTGVuKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSByZXNwb25zZSBkYXRhIHRvIGZpdCBleHBlY3RlZCBzaXplXG4gICAgICAgICAgICAgICAgICB3cml0ZVVJbnQzMkJFKGJ1ZmZlciwgcmVxQnVmTGVuLCA0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YSA9IHJlYWRTdHJpbmcoYnVmZmVyLCA0LCByZXEuYnVmZmVyLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNiKHVuZGVmaW5lZCwgZGF0YSwgZGF0YUxlbik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHJlYWRTdHJpbmcoYnVmZmVyLCA0LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNiKHVuZGVmaW5lZCwgZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVTUE9OU0UuTkFNRSkge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIHVpbnQzMiAgICAgY291bnRcbiAgICAgICAgICAgICAgICByZXBlYXRzIGNvdW50IHRpbWVzOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICAgICBmaWxlbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICAgICBsb25nbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgQVRUUlMgICAgICBhdHRyc1xuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICB2YXIgbmFtZXNMZW4gPSByZWFkSW50KGJ1ZmZlciwgNCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAobmFtZXNMZW4gPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgdmFyIG5hbWVzID0gW10sXG4gICAgICAgICAgICAgICAgICBsb25nbmFtZTtcbiAgICAgICAgICAgICAgYnVmZmVyLl9wb3MgPSA4O1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzTGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIFVURi04IGZvciBmaWxlbmFtZXMgZGVzcGl0ZSB0aGUgU0ZUUHYzXG4gICAgICAgICAgICAgICAgLy8gc3BlYyBub3Qgc3BlY2lmeWluZyBhbiBlbmNvZGluZyBiZWNhdXNlIHRoZSBzcGVjcyBmb3IgbmV3ZXJcbiAgICAgICAgICAgICAgICAvLyB2ZXJzaW9ucyBvZiB0aGUgcHJvdG9jb2wgYWxsIGV4cGxpY2l0bHkgc3BlY2lmeSBVVEYtOCBmb3JcbiAgICAgICAgICAgICAgICAvLyBmaWxlbmFtZXNcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHJlYWRTdHJpbmcoYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuX3BvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3V0ZjgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVuYW1lID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAvLyBgbG9uZ25hbWVgIG9ubHkgZXhpc3RzIGluIFNGVFB2MyBhbmQgc2luY2UgaXQgdHlwaWNhbGx5IHdpbGxcbiAgICAgICAgICAgICAgICAvLyBjb250YWluIHRoZSBmaWxlbmFtZSwgd2UgYXNzdW1lIGl0IGlzIGFsc28gVVRGLThcbiAgICAgICAgICAgICAgICBsb25nbmFtZSA9IHJlYWRTdHJpbmcoYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuX3BvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3V0ZjgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGxvbmduYW1lID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBhdHRycyA9IHJlYWRBdHRycyhidWZmZXIsIGJ1ZmZlci5fcG9zLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJzID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgIGxvbmduYW1lOiBsb25nbmFtZSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiBhdHRyc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNiKHVuZGVmaW5lZCwgbmFtZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwa3RUeXBlID09PSBSRVNQT05TRS5BVFRSUykge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIEFUVFJTICAgICAgYXR0cnNcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgYXR0cnMgPSByZWFkQXR0cnMoYnVmZmVyLCA0LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChhdHRycyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICBjYih1bmRlZmluZWQsIGF0dHJzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVTUE9OU0UuRVhURU5ERUQpIHtcbiAgICAgICAgICAgICAgaWYgKHJlcS5leHRlbmRlZCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocmVxLmV4dGVuZGVkKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlICdzdGF0dmZzQG9wZW5zc2guY29tJzpcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZzdGF0dmZzQG9wZW5zc2guY29tJzpcbiAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICB1aW50NjQgICAgZl9ic2l6ZSAgIC8vIGZpbGUgc3lzdGVtIGJsb2NrIHNpemVcbiAgICAgICAgICAgICAgICAgICAgICB1aW50NjQgICAgZl9mcnNpemUgIC8vIGZ1bmRhbWVudGFsIGZzIGJsb2NrIHNpemVcbiAgICAgICAgICAgICAgICAgICAgICB1aW50NjQgICAgZl9ibG9ja3MgIC8vIG51bWJlciBvZiBibG9ja3MgKHVuaXQgZl9mcnNpemUpXG4gICAgICAgICAgICAgICAgICAgICAgdWludDY0ICAgIGZfYmZyZWUgICAvLyBmcmVlIGJsb2NrcyBpbiBmaWxlIHN5c3RlbVxuICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NCAgICBmX2JhdmFpbCAgLy8gZnJlZSBibG9ja3MgZm9yIG5vbi1yb290XG4gICAgICAgICAgICAgICAgICAgICAgdWludDY0ICAgIGZfZmlsZXMgICAvLyB0b3RhbCBmaWxlIGlub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NCAgICBmX2ZmcmVlICAgLy8gZnJlZSBmaWxlIGlub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NCAgICBmX2ZhdmFpbCAgLy8gZnJlZSBmaWxlIGlub2RlcyBmb3IgdG8gbm9uLXJvb3RcbiAgICAgICAgICAgICAgICAgICAgICB1aW50NjQgICAgZl9mc2lkICAgIC8vIGZpbGUgc3lzdGVtIGlkXG4gICAgICAgICAgICAgICAgICAgICAgdWludDY0ICAgIGZfZmxhZyAgICAvLyBiaXQgbWFzayBvZiBmX2ZsYWcgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgdWludDY0ICAgIGZfbmFtZW1heCAvLyBtYXhpbXVtIGZpbGVuYW1lIGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgZl9ic2l6ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIGZfZnJzaXplOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgZl9ibG9ja3M6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBmX2JmcmVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgZl9iYXZhaWw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBmX2ZpbGVzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgZl9mZnJlZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIGZfZmF2YWlsOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgZl9zaWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBmX2ZsYWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBmX25hbWVtYXg6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzdGF0cy5mX2JzaXplID0gcmVhZFVJbnQ2NEJFKGJ1ZmZlciwgNCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZl9ic2l6ZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBzdGF0cy5mX2Zyc2l6ZSA9IHJlYWRVSW50NjRCRShidWZmZXIsIDEyLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5mX2Zyc2l6ZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBzdGF0cy5mX2Jsb2NrcyA9IHJlYWRVSW50NjRCRShidWZmZXIsIDIwLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5mX2Jsb2NrcyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBzdGF0cy5mX2JmcmVlID0gcmVhZFVJbnQ2NEJFKGJ1ZmZlciwgMjgsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLmZfYmZyZWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHMuZl9iYXZhaWwgPSByZWFkVUludDY0QkUoYnVmZmVyLCAzNiwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZl9iYXZhaWwgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHMuZl9maWxlcyA9IHJlYWRVSW50NjRCRShidWZmZXIsIDQ0LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5mX2ZpbGVzID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZfZmZyZWUgPSByZWFkVUludDY0QkUoYnVmZmVyLCA1MiwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZl9mZnJlZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBzdGF0cy5mX2ZhdmFpbCA9IHJlYWRVSW50NjRCRShidWZmZXIsIDYwLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5mX2ZhdmFpbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBzdGF0cy5mX3NpZCA9IHJlYWRVSW50NjRCRShidWZmZXIsIDY4LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5mX3NpZCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBzdGF0cy5mX2ZsYWcgPSByZWFkVUludDY0QkUoYnVmZmVyLCA3NiwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZl9mbGFnID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZfbmFtZW1heCA9IHJlYWRVSW50NjRCRShidWZmZXIsIDg0LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5mX25hbWVtYXggPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY2IodW5kZWZpbmVkLCBzdGF0cyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gWFhYOiBhdCBsZWFzdCBwcm92aWRlIHRoZSByYXcgYnVmZmVyIGRhdGEgdG8gdGhlIGNhbGxiYWNrIGluXG4gICAgICAgICAgICAgIC8vIGNhc2Ugb2YgdW5leHBlY3RlZCBleHRlbmRlZCByZXNwb25zZT9cbiAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcSlcbiAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0c1tpZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc2VydmVyXG4gICAgICAgICAgdmFyIGV2TmFtZSA9IFJFUVVFU1RbcGt0VHlwZV07XG4gICAgICAgICAgdmFyIG9mZnNldDtcbiAgICAgICAgICB2YXIgcGF0aDtcblxuICAgICAgICAgIGRlYnVnKCdERUJVR1tTRlRQXTogUGFyc2VyOiBSZXF1ZXN0OiAnICsgZXZOYW1lKTtcbiAgICAgICAgICBpZiAobGlzdGVuZXJDb3VudCh0aGlzLCBldk5hbWUpKSB7XG4gICAgICAgICAgICBpZiAocGt0VHlwZSA9PT0gUkVRVUVTVC5PUEVOKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgc3RyaW5nICAgICAgICBmaWxlbmFtZVxuICAgICAgICAgICAgICAgIHVpbnQzMiAgICAgICAgcGZsYWdzXG4gICAgICAgICAgICAgICAgQVRUUlMgICAgICAgICBhdHRyc1xuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBmaWxlbmFtZSA9IHJlYWRTdHJpbmcoYnVmZmVyLCA0LCAndXRmOCcsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGZpbGVuYW1lID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIHZhciBwZmxhZ3MgPSByZWFkSW50KGJ1ZmZlciwgYnVmZmVyLl9wb3MsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKHBmbGFncyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICBhdHRycyA9IHJlYWRBdHRycyhidWZmZXIsIGJ1ZmZlci5fcG9zICsgNCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoYXR0cnMgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KGV2TmFtZSwgaWQsIGZpbGVuYW1lLCBwZmxhZ3MsIGF0dHJzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVRVUVTVC5DTE9TRVxuICAgICAgICAgICAgICAgICAgICAgICB8fCBwa3RUeXBlID09PSBSRVFVRVNULkZTVEFUXG4gICAgICAgICAgICAgICAgICAgICAgIHx8IHBrdFR5cGUgPT09IFJFUVVFU1QuUkVBRERJUikge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIHN0cmluZyAgICAgaGFuZGxlXG4gICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGhhbmRsZSA9IHJlYWRTdHJpbmcoYnVmZmVyLCA0LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChoYW5kbGUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KGV2TmFtZSwgaWQsIGhhbmRsZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBrdFR5cGUgPT09IFJFUVVFU1QuUkVBRCkge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIHN0cmluZyAgICAgaGFuZGxlXG4gICAgICAgICAgICAgICAgdWludDY0ICAgICBvZmZzZXRcbiAgICAgICAgICAgICAgICB1aW50MzIgICAgIGxlblxuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBoYW5kbGUgPSByZWFkU3RyaW5nKGJ1ZmZlciwgNCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoaGFuZGxlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIG9mZnNldCA9IHJlYWRVSW50NjRCRShidWZmZXIsIGJ1ZmZlci5fcG9zLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgdmFyIGxlbiA9IHJlYWRJbnQoYnVmZmVyLCBidWZmZXIuX3BvcywgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAobGVuID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIHRoaXMuZW1pdChldk5hbWUsIGlkLCBoYW5kbGUsIG9mZnNldCwgbGVuKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVRVUVTVC5XUklURSkge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIHN0cmluZyAgICAgaGFuZGxlXG4gICAgICAgICAgICAgICAgdWludDY0ICAgICBvZmZzZXRcbiAgICAgICAgICAgICAgICBzdHJpbmcgICAgIGRhdGFcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgaGFuZGxlID0gcmVhZFN0cmluZyhidWZmZXIsIDQsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICBvZmZzZXQgPSByZWFkVUludDY0QkUoYnVmZmVyLCBidWZmZXIuX3BvcywgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIGRhdGEgPSByZWFkU3RyaW5nKGJ1ZmZlciwgYnVmZmVyLl9wb3MsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KGV2TmFtZSwgaWQsIGhhbmRsZSwgb2Zmc2V0LCBkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVRVUVTVC5MU1RBVFxuICAgICAgICAgICAgICAgICAgICAgICB8fCBwa3RUeXBlID09PSBSRVFVRVNULlNUQVRcbiAgICAgICAgICAgICAgICAgICAgICAgfHwgcGt0VHlwZSA9PT0gUkVRVUVTVC5PUEVORElSXG4gICAgICAgICAgICAgICAgICAgICAgIHx8IHBrdFR5cGUgPT09IFJFUVVFU1QuUkVNT1ZFXG4gICAgICAgICAgICAgICAgICAgICAgIHx8IHBrdFR5cGUgPT09IFJFUVVFU1QuUk1ESVJcbiAgICAgICAgICAgICAgICAgICAgICAgfHwgcGt0VHlwZSA9PT0gUkVRVUVTVC5SRUFMUEFUSFxuICAgICAgICAgICAgICAgICAgICAgICB8fCBwa3RUeXBlID09PSBSRVFVRVNULlJFQURMSU5LKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgc3RyaW5nICAgICBwYXRoXG4gICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIHBhdGggPSByZWFkU3RyaW5nKGJ1ZmZlciwgNCwgJ3V0ZjgnLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChwYXRoID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIHRoaXMuZW1pdChldk5hbWUsIGlkLCBwYXRoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVRVUVTVC5TRVRTVEFUXG4gICAgICAgICAgICAgICAgICAgICAgIHx8IHBrdFR5cGUgPT09IFJFUVVFU1QuTUtESVIpIHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBzdHJpbmcgICAgIHBhdGhcbiAgICAgICAgICAgICAgICBBVFRSUyAgICAgIGF0dHJzXG4gICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIHBhdGggPSByZWFkU3RyaW5nKGJ1ZmZlciwgNCwgJ3V0ZjgnLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChwYXRoID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIGF0dHJzID0gcmVhZEF0dHJzKGJ1ZmZlciwgYnVmZmVyLl9wb3MsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGF0dHJzID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIHRoaXMuZW1pdChldk5hbWUsIGlkLCBwYXRoLCBhdHRycyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBrdFR5cGUgPT09IFJFUVVFU1QuRlNFVFNUQVQpIHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBzdHJpbmcgICAgIGhhbmRsZVxuICAgICAgICAgICAgICAgIEFUVFJTICAgICAgYXR0cnNcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgaGFuZGxlID0gcmVhZFN0cmluZyhidWZmZXIsIDQsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICBhdHRycyA9IHJlYWRBdHRycyhidWZmZXIsIGJ1ZmZlci5fcG9zLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChhdHRycyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB0aGlzLmVtaXQoZXZOYW1lLCBpZCwgaGFuZGxlLCBhdHRycyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBrdFR5cGUgPT09IFJFUVVFU1QuUkVOQU1FXG4gICAgICAgICAgICAgICAgICAgICAgIHx8IHBrdFR5cGUgPT09IFJFUVVFU1QuU1lNTElOSykge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIFJFTkFNRTpcbiAgICAgICAgICAgICAgICAgIHN0cmluZyAgICAgb2xkcGF0aFxuICAgICAgICAgICAgICAgICAgc3RyaW5nICAgICBuZXdwYXRoXG4gICAgICAgICAgICAgICAgU1lNTElOSzpcbiAgICAgICAgICAgICAgICAgIHN0cmluZyAgICAgbGlua3BhdGhcbiAgICAgICAgICAgICAgICAgIHN0cmluZyAgICAgdGFyZ2V0cGF0aFxuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICB2YXIgc3RyMTtcbiAgICAgICAgICAgICAgdmFyIHN0cjI7XG4gICAgICAgICAgICAgIHN0cjEgPSByZWFkU3RyaW5nKGJ1ZmZlciwgNCwgJ3V0ZjgnLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChzdHIxID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIHN0cjIgPSByZWFkU3RyaW5nKGJ1ZmZlciwgYnVmZmVyLl9wb3MsICd1dGY4JywgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoc3RyMiA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICBpZiAocGt0VHlwZSA9PT0gUkVRVUVTVC5TWU1MSU5LICYmIHRoaXMuX2lzT3BlblNTSCkge1xuICAgICAgICAgICAgICAgIC8vIE9wZW5TU0ggaGFzIGxpbmtwYXRoIGFuZCB0YXJnZXRwYXRoIHBvc2l0aW9ucyBzd2l0Y2hlZFxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChldk5hbWUsIGlkLCBzdHIyLCBzdHIxKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KGV2TmFtZSwgaWQsIHN0cjEsIHN0cjIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHJlamVjdCByZXF1ZXN0IGlmIG5vIGhhbmRsZXIgZm9yIHJlcXVlc3QgdHlwZVxuICAgICAgICAgICAgdGhpcy5zdGF0dXMoaWQsIFNUQVRVU19DT0RFLk9QX1VOU1VQUE9SVEVEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcHJlcGFyZSBmb3IgbmV4dCBwYWNrZXRcbiAgICAgIHN0YXR1cyA9ICdwYWNrZXRfaGVhZGVyJztcbiAgICAgIGJ1ZmZlciA9IHBrdEJ1ZiA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gJ2JhZF9wa3QnKSB7XG4gICAgICBpZiAoc2VydmVyICYmIGJ1ZmZlcls0XSAhPT0gUkVRVUVTVC5JTklUKSB7XG4gICAgICAgIHZhciBlcnJDb2RlID0gKGJ1ZmZlcls0XSA9PT0gUkVRVUVTVC5FWFRFTkRFRFxuICAgICAgICAgICAgICAgICAgICAgICA/IFNUQVRVU19DT0RFLk9QX1VOU1VQUE9SVEVEXG4gICAgICAgICAgICAgICAgICAgICAgIDogU1RBVFVTX0NPREUuRkFJTFVSRSk7XG5cbiAgICAgICAgLy8gbm8gcmVxdWVzdCBpZCBmb3IgaW5pdC92ZXJzaW9uIHBhY2tldHMsIHNvIHdlIGhhdmUgbm8gd2F5IHRvIHNlbmQgYVxuICAgICAgICAvLyBzdGF0dXMgcmVzcG9uc2UsIHNvIHdlIGp1c3QgY2xvc2UgdXAgc2hvcCAuLi5cbiAgICAgICAgaWYgKGJ1ZmZlcls0XSA9PT0gUkVRVUVTVC5JTklUIHx8IGJ1ZmZlcls0XSA9PT0gUkVTUE9OU0UuVkVSU0lPTilcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY2xlYW51cChjYWxsYmFjayk7XG5cbiAgICAgICAgaWQgPSByZWFkSW50KGJ1ZmZlciwgNSwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICBpZiAoaWQgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zdGF0dXMoaWQsIGVyckNvZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBieSB0aGlzIHBvaW50IHdlIGhhdmUgYWxyZWFkeSByZWFkIHRoZSB0eXBlIGJ5dGUgYW5kIHRoZSBpZCBieXRlcywgc29cbiAgICAgIC8vIHdlIHN1YnRyYWN0IHRob3NlIGZyb20gdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwXG4gICAgICBwa3RMZWZ0ID0gcmVhZFVJbnQzMkJFKGJ1ZmZlciwgMCkgLSA1O1xuXG4gICAgICBzdGF0dXMgPSAnZGlzY2FyZCc7XG4gICAgfVxuXG4gICAgaWYgKGNodW5rUG9zID49IGNodW5rTGVuKVxuICAgICAgYnJlYWs7XG4gIH1cblxuICBzdGF0ZS5zdGF0dXMgPSBzdGF0dXM7XG4gIHN0YXRlLnBrdFR5cGUgPSBwa3RUeXBlO1xuICBzdGF0ZS5wa3RCdWYgPSBwa3RCdWY7XG4gIHN0YXRlLnBrdExlZnQgPSBwa3RMZWZ0O1xuICBzdGF0ZS52ZXJzaW9uID0gdmVyc2lvbjtcblxuICBjYWxsYmFjaygpO1xufTtcblxuLy8gY2xpZW50XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5jcmVhdGVSZWFkU3RyZWFtID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9ucykge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgcmV0dXJuIG5ldyBSZWFkU3RyZWFtKHRoaXMsIHBhdGgsIG9wdGlvbnMpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmNyZWF0ZVdyaXRlU3RyZWFtID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9ucykge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgcmV0dXJuIG5ldyBXcml0ZVN0cmVhbSh0aGlzLCBwYXRoLCBvcHRpb25zKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24ocGF0aCwgZmxhZ3NfLCBhdHRycywgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIGlmICh0eXBlb2YgYXR0cnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGF0dHJzO1xuICAgIGF0dHJzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIGZsYWdzID0gKHR5cGVvZiBmbGFnc18gPT09ICdudW1iZXInID8gZmxhZ3NfIDogc3RyaW5nVG9GbGFncyhmbGFnc18pKTtcbiAgaWYgKGZsYWdzID09PSBudWxsKVxuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBmbGFncyBzdHJpbmc6ICcgKyBmbGFnc18pO1xuXG4gIHZhciBhdHRyRmxhZ3MgPSAwO1xuICB2YXIgYXR0ckJ5dGVzID0gMDtcbiAgaWYgKHR5cGVvZiBhdHRycyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGF0dHJzID09PSAnbnVtYmVyJykge1xuICAgIGF0dHJzID0geyBtb2RlOiBhdHRycyB9O1xuICB9XG4gIGlmICh0eXBlb2YgYXR0cnMgPT09ICdvYmplY3QnICYmIGF0dHJzICE9PSBudWxsKSB7XG4gICAgYXR0cnMgPSBhdHRyc1RvQnl0ZXMoYXR0cnMpO1xuICAgIGF0dHJGbGFncyA9IGF0dHJzLmZsYWdzO1xuICAgIGF0dHJCeXRlcyA9IGF0dHJzLm5ieXRlcztcbiAgICBhdHRycyA9IGF0dHJzLmJ5dGVzO1xuICB9XG5cbiAgLypcbiAgICB1aW50MzIgICAgICAgIGlkXG4gICAgc3RyaW5nICAgICAgICBmaWxlbmFtZVxuICAgIHVpbnQzMiAgICAgICAgcGZsYWdzXG4gICAgQVRUUlMgICAgICAgICBhdHRyc1xuICAqL1xuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHBhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIHBhdGhsZW4gKyA0ICsgNCArIGF0dHJCeXRlcyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5PUEVOO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHJlcWlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcGF0aGxlbiwgcCk7XG4gIGJ1Zi53cml0ZShwYXRoLCBwICs9IDQsIHBhdGhsZW4sICd1dGY4Jyk7XG4gIHdyaXRlVUludDMyQkUoYnVmLCBmbGFncywgcCArPSBwYXRobGVuKTtcbiAgd3JpdGVVSW50MzJCRShidWYsIGF0dHJGbGFncywgcCArPSA0KTtcbiAgaWYgKGF0dHJzICYmIGF0dHJGbGFncykge1xuICAgIHAgKz0gNDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXR0cnMubGVuZ3RoOyBpIDwgbGVuOyArK2kpXG4gICAgICBmb3IgKHZhciBqID0gMCwgbGVuMiA9IGF0dHJzW2ldLmxlbmd0aDsgaiA8IGxlbjI7ICsrailcbiAgICAgICAgYnVmW3ArK10gPSBhdHRyc1tpXVtqXTtcbiAgfVxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBPUEVOJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKGhhbmRsZSwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuICBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhbmRsZSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGUgaXMgbm90IGEgQnVmZmVyJyk7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgLypcbiAgICB1aW50MzIgICAgIGlkXG4gICAgc3RyaW5nICAgICBoYW5kbGVcbiAgKi9cbiAgdmFyIGhhbmRsZWxlbiA9IGhhbmRsZS5sZW5ndGg7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgaGFuZGxlbGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULkNMT1NFO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHJlcWlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaGFuZGxlbGVuLCBwKTtcbiAgaGFuZGxlLmNvcHkoYnVmLCBwICs9IDQpO1xuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHsgY2I6IGNiIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIENMT1NFJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5yZWFkRGF0YSA9IGZ1bmN0aW9uKGhhbmRsZSwgYnVmLCBvZmYsIGxlbiwgcG9zaXRpb24sIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcbiAgZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihoYW5kbGUpKVxuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlIGlzIG5vdCBhIEJ1ZmZlcicpO1xuICBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbm90IGEgQnVmZmVyJyk7XG4gIGVsc2UgaWYgKG9mZiA+PSBidWYubGVuZ3RoKVxuICAgIHRocm93IG5ldyBFcnJvcignb2Zmc2V0IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgZWxzZSBpZiAob2ZmICsgbGVuID4gYnVmLmxlbmd0aClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBleHRlbmRzIGJleW9uZCBidWZmZXInKTtcbiAgZWxzZSBpZiAocG9zaXRpb24gPT09IG51bGwpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdudWxsIHBvc2l0aW9uIGN1cnJlbnRseSB1bnN1cHBvcnRlZCcpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgaGFuZGxlXG4gICAgdWludDY0ICAgICBvZmZzZXRcbiAgICB1aW50MzIgICAgIGxlblxuICAqL1xuICB2YXIgaGFuZGxlbGVuID0gaGFuZGxlLmxlbmd0aDtcbiAgdmFyIHAgPSA5O1xuICB2YXIgcG9zID0gcG9zaXRpb247XG4gIHZhciBvdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIGhhbmRsZWxlbiArIDggKyA0KTtcblxuICB3cml0ZVVJbnQzMkJFKG91dCwgb3V0Lmxlbmd0aCAtIDQsIDApO1xuICBvdXRbNF0gPSBSRVFVRVNULlJFQUQ7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKG91dCwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUob3V0LCBoYW5kbGVsZW4sIHApO1xuICBoYW5kbGUuY29weShvdXQsIHAgKz0gNCk7XG4gIHAgKz0gaGFuZGxlbGVuO1xuICBmb3IgKHZhciBpID0gNzsgaSA+PSAwOyAtLWkpIHtcbiAgICBvdXRbcCArIGldID0gcG9zICYgMHhGRjtcbiAgICBwb3MgLz0gMjU2O1xuICB9XG4gIHdyaXRlVUludDMyQkUob3V0LCBsZW4sIHAgKz0gOCk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0ge1xuICAgIGNiOiBmdW5jdGlvbihlcnIsIGRhdGEsIG5iKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmIChjYi5fd2FudEVPRkVycm9yIHx8IGVyci5jb2RlICE9PSBTVEFUVVNfQ09ERS5FT0YpXG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICB9IGVsc2UgaWYgKG5iID4gbGVuKSB7XG4gICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ1JlY2VpdmVkIG1vcmUgZGF0YSB0aGFuIHJlcXVlc3RlZCcpKTtcbiAgICAgIH1cbiAgICAgIGNiKHVuZGVmaW5lZCwgbmIgfHwgMCwgZGF0YSwgcG9zaXRpb24pO1xuICAgIH0sXG4gICAgYnVmZmVyOiBidWYuc2xpY2Uob2ZmLCBvZmYgKyBsZW4pXG4gIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIFJFQUQnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChvdXQpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLndyaXRlRGF0YSA9IGZ1bmN0aW9uKGhhbmRsZSwgYnVmLCBvZmYsIGxlbiwgcG9zaXRpb24sIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcbiAgZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihoYW5kbGUpKVxuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlIGlzIG5vdCBhIEJ1ZmZlcicpO1xuICBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbm90IGEgQnVmZmVyJyk7XG4gIGVsc2UgaWYgKG9mZiA+IGJ1Zi5sZW5ndGgpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdvZmZzZXQgaXMgb3V0IG9mIGJvdW5kcycpO1xuICBlbHNlIGlmIChvZmYgKyBsZW4gPiBidWYubGVuZ3RoKVxuICAgIHRocm93IG5ldyBFcnJvcignbGVuZ3RoIGV4dGVuZHMgYmV5b25kIGJ1ZmZlcicpO1xuICBlbHNlIGlmIChwb3NpdGlvbiA9PT0gbnVsbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ251bGwgcG9zaXRpb24gY3VycmVudGx5IHVuc3VwcG9ydGVkJyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICBpZiAoIWxlbikge1xuICAgIGNiICYmIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7IGNiKHVuZGVmaW5lZCwgMCk7IH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBvdmVyZmxvdyA9IChsZW4gPiBzdGF0ZS5tYXhEYXRhTGVuXG4gICAgICAgICAgICAgICAgICA/IGxlbiAtIHN0YXRlLm1heERhdGFMZW5cbiAgICAgICAgICAgICAgICAgIDogMCk7XG4gIHZhciBvcmlnUG9zaXRpb24gPSBwb3NpdGlvbjtcblxuICBpZiAob3ZlcmZsb3cpXG4gICAgbGVuID0gc3RhdGUubWF4RGF0YUxlbjtcblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIGhhbmRsZVxuICAgIHVpbnQ2NCAgICAgb2Zmc2V0XG4gICAgc3RyaW5nICAgICBkYXRhXG4gICovXG4gIHZhciBoYW5kbGVsZW4gPSBoYW5kbGUubGVuZ3RoO1xuICB2YXIgcCA9IDk7XG4gIHZhciBvdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIGhhbmRsZWxlbiArIDggKyA0ICsgbGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKG91dCwgb3V0Lmxlbmd0aCAtIDQsIDApO1xuICBvdXRbNF0gPSBSRVFVRVNULldSSVRFO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShvdXQsIHJlcWlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKG91dCwgaGFuZGxlbGVuLCBwKTtcbiAgaGFuZGxlLmNvcHkob3V0LCBwICs9IDQpO1xuICBwICs9IGhhbmRsZWxlbjtcbiAgZm9yICh2YXIgaSA9IDc7IGkgPj0gMDsgLS1pKSB7XG4gICAgb3V0W3AgKyBpXSA9IHBvc2l0aW9uICYgMHhGRjtcbiAgICBwb3NpdGlvbiAvPSAyNTY7XG4gIH1cbiAgd3JpdGVVSW50MzJCRShvdXQsIGxlbiwgcCArPSA4KTtcbiAgYnVmLmNvcHkob3V0LCBwICs9IDQsIG9mZiwgb2ZmICsgbGVuKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7XG4gICAgY2I6IGZ1bmN0aW9uKGVycikge1xuICAgICAgaWYgKGVycilcbiAgICAgICAgY2IgJiYgY2IoZXJyKTtcbiAgICAgIGVsc2UgaWYgKG92ZXJmbG93KSB7XG4gICAgICAgIHNlbGYud3JpdGVEYXRhKGhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgYnVmLFxuICAgICAgICAgICAgICAgICAgICAgICBvZmYgKyBsZW4sXG4gICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LFxuICAgICAgICAgICAgICAgICAgICAgICBvcmlnUG9zaXRpb24gKyBsZW4sXG4gICAgICAgICAgICAgICAgICAgICAgIGNiKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICBjYiAmJiBjYih1bmRlZmluZWQsIG9mZiArIGxlbik7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBXUklURScpO1xuICByZXR1cm4gdGhpcy5wdXNoKG91dCk7XG59O1xuZnVuY3Rpb24gdHJ5Q3JlYXRlQnVmZmVyKHNpemUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKHNpemUpO1xuICB9IGNhdGNoIChleCkge1xuICAgIHJldHVybiBleDtcbiAgfVxufVxuZnVuY3Rpb24gZmFzdFhmZXIoc3JjLCBkc3QsIHNyY1BhdGgsIGRzdFBhdGgsIG9wdHMsIGNiKSB7XG4gIHZhciBjb25jdXJyZW5jeSA9IDY0O1xuICB2YXIgY2h1bmtTaXplID0gMzI3Njg7XG4gIC8vdmFyIHByZXNlcnZlID0gZmFsc2U7XG4gIHZhciBvbnN0ZXA7XG4gIHZhciBtb2RlO1xuICB2YXIgZmlsZVNpemU7XG5cbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiBvcHRzICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbmN1cnJlbmN5ID09PSAnbnVtYmVyJ1xuICAgICAgICAmJiBvcHRzLmNvbmN1cnJlbmN5ID4gMFxuICAgICAgICAmJiAhaXNOYU4ob3B0cy5jb25jdXJyZW5jeSkpXG4gICAgICBjb25jdXJyZW5jeSA9IG9wdHMuY29uY3VycmVuY3k7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmNodW5rU2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgJiYgb3B0cy5jaHVua1NpemUgPiAwXG4gICAgICAgICYmICFpc05hTihvcHRzLmNodW5rU2l6ZSkpXG4gICAgICBjaHVua1NpemUgPSBvcHRzLmNodW5rU2l6ZTtcbiAgICBpZiAodHlwZW9mIG9wdHMuZmlsZVNpemUgPT09ICdudW1iZXInXG4gICAgICAgICYmIG9wdHMuZmlsZVNpemUgPiAwXG4gICAgICAgICYmICFpc05hTihvcHRzLmZpbGVTaXplKSlcbiAgICAgIGZpbGVTaXplID0gb3B0cy5maWxlU2l6ZTtcbiAgICBpZiAodHlwZW9mIG9wdHMuc3RlcCA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIG9uc3RlcCA9IG9wdHMuc3RlcDtcbiAgICAvL3ByZXNlcnZlID0gKG9wdHMucHJlc2VydmUgPyB0cnVlIDogZmFsc2UpO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5tb2RlID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb3B0cy5tb2RlID09PSAnbnVtYmVyJylcbiAgICAgIG1vZGUgPSBtb2RlTnVtKG9wdHMubW9kZSk7XG4gIH1cblxuICAvLyBpbnRlcm5hbCBzdGF0ZSB2YXJpYWJsZXNcbiAgdmFyIGZzaXplO1xuICB2YXIgcGRzdCA9IDA7XG4gIHZhciB0b3RhbCA9IDA7XG4gIHZhciBoYWRFcnJvciA9IGZhbHNlO1xuICB2YXIgc3JjSGFuZGxlO1xuICB2YXIgZHN0SGFuZGxlO1xuICB2YXIgcmVhZGJ1ZjtcbiAgdmFyIGJ1ZnNpemUgPSBjaHVua1NpemUgKiBjb25jdXJyZW5jeTtcblxuICBmdW5jdGlvbiBvbmVycm9yKGVycikge1xuICAgIGlmIChoYWRFcnJvcilcbiAgICAgIHJldHVybjtcblxuICAgIGhhZEVycm9yID0gdHJ1ZTtcblxuICAgIHZhciBsZWZ0ID0gMDtcbiAgICB2YXIgY2JmaW5hbDtcblxuICAgIGlmIChzcmNIYW5kbGUgfHwgZHN0SGFuZGxlKSB7XG4gICAgICBjYmZpbmFsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICgtLWxlZnQgPT09IDApXG4gICAgICAgICAgY2IoZXJyKTtcbiAgICAgIH07XG4gICAgICBpZiAoc3JjSGFuZGxlICYmIChzcmMgPT09IGZzIHx8IHNyYy53cml0YWJsZSkpXG4gICAgICAgICsrbGVmdDtcbiAgICAgIGlmIChkc3RIYW5kbGUgJiYgKGRzdCA9PT0gZnMgfHwgZHN0LndyaXRhYmxlKSlcbiAgICAgICAgKytsZWZ0O1xuICAgICAgaWYgKHNyY0hhbmRsZSAmJiAoc3JjID09PSBmcyB8fCBzcmMud3JpdGFibGUpKVxuICAgICAgICBzcmMuY2xvc2Uoc3JjSGFuZGxlLCBjYmZpbmFsKTtcbiAgICAgIGlmIChkc3RIYW5kbGUgJiYgKGRzdCA9PT0gZnMgfHwgZHN0LndyaXRhYmxlKSlcbiAgICAgICAgZHN0LmNsb3NlKGRzdEhhbmRsZSwgY2JmaW5hbCk7XG4gICAgfSBlbHNlXG4gICAgICBjYihlcnIpO1xuICB9XG5cbiAgc3JjLm9wZW4oc3JjUGF0aCwgJ3InLCBmdW5jdGlvbihlcnIsIHNvdXJjZUhhbmRsZSkge1xuICAgIGlmIChlcnIpXG4gICAgICByZXR1cm4gb25lcnJvcihlcnIpO1xuXG4gICAgc3JjSGFuZGxlID0gc291cmNlSGFuZGxlO1xuXG4gICAgaWYgKGZpbGVTaXplID09PSB1bmRlZmluZWQpXG4gICAgICBzcmMuZnN0YXQoc3JjSGFuZGxlLCB0cnlTdGF0KTtcbiAgICBlbHNlXG4gICAgICB0cnlTdGF0KG51bGwsIHsgc2l6ZTogZmlsZVNpemUgfSk7XG5cbiAgICBmdW5jdGlvbiB0cnlTdGF0KGVyciwgYXR0cnMpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKHNyYyAhPT0gZnMpIHtcbiAgICAgICAgICAvLyBUcnkgc3RhdCgpIGZvciBzZnRwIHNlcnZlcnMgdGhhdCBtYXkgbm90IHN1cHBvcnQgZnN0YXQoKSBmb3JcbiAgICAgICAgICAvLyB3aGF0ZXZlciByZWFzb25cbiAgICAgICAgICBzcmMuc3RhdChzcmNQYXRoLCBmdW5jdGlvbihlcnJfLCBhdHRyc18pIHtcbiAgICAgICAgICAgIGlmIChlcnJfKVxuICAgICAgICAgICAgICByZXR1cm4gb25lcnJvcihlcnIpO1xuICAgICAgICAgICAgdHJ5U3RhdChudWxsLCBhdHRyc18pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb25lcnJvcihlcnIpO1xuICAgICAgfVxuICAgICAgZnNpemUgPSBhdHRycy5zaXplO1xuXG4gICAgICBkc3Qub3Blbihkc3RQYXRoLCAndycsIGZ1bmN0aW9uKGVyciwgZGVzdEhhbmRsZSkge1xuICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgIHJldHVybiBvbmVycm9yKGVycik7XG5cbiAgICAgICAgZHN0SGFuZGxlID0gZGVzdEhhbmRsZTtcblxuICAgICAgICBpZiAoZnNpemUgPD0gMClcbiAgICAgICAgICByZXR1cm4gb25lcnJvcigpO1xuXG4gICAgICAgIC8vIFVzZSBsZXNzIG1lbW9yeSB3aGVyZSBwb3NzaWJsZVxuICAgICAgICB3aGlsZSAoYnVmc2l6ZSA+IGZzaXplKSB7XG4gICAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09PSAxKSB7XG4gICAgICAgICAgICBidWZzaXplID0gZnNpemU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmc2l6ZSAtPSBjaHVua1NpemU7XG4gICAgICAgICAgLS1jb25jdXJyZW5jeTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYWRidWYgPSB0cnlDcmVhdGVCdWZmZXIoYnVmc2l6ZSk7XG4gICAgICAgIGlmIChyZWFkYnVmIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgICAgICAgcmV0dXJuIG9uZXJyb3IocmVhZGJ1Zik7XG5cbiAgICAgICAgaWYgKG1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRzdC5mY2htb2QoZHN0SGFuZGxlLCBtb2RlLCBmdW5jdGlvbiB0cnlBZ2FpbihlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gVHJ5IGNobW9kKCkgZm9yIHNmdHAgc2VydmVycyB0aGF0IG1heSBub3Qgc3VwcG9ydCBmY2htb2QoKSBmb3JcbiAgICAgICAgICAgICAgLy8gd2hhdGV2ZXIgcmVhc29uXG4gICAgICAgICAgICAgIGRzdC5jaG1vZChkc3RQYXRoLCBtb2RlLCBmdW5jdGlvbihlcnJfKSB7XG4gICAgICAgICAgICAgICAgdHJ5QWdhaW4oKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0UmVhZHMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydFJlYWRzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvbnJlYWQoZXJyLCBuYiwgZGF0YSwgZHN0cG9zLCBkYXRhcG9zLCBvcmlnQ2h1bmtMZW4pIHtcbiAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgcmV0dXJuIG9uZXJyb3IoZXJyKTtcblxuICAgICAgICAgIGRhdGFwb3MgPSBkYXRhcG9zIHx8IDA7XG5cbiAgICAgICAgICBpZiAoc3JjID09PSBmcylcbiAgICAgICAgICAgIGRzdC53cml0ZURhdGEoZHN0SGFuZGxlLCByZWFkYnVmLCBkYXRhcG9zLCBuYiwgZHN0cG9zLCB3cml0ZUNiKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkc3Qud3JpdGUoZHN0SGFuZGxlLCByZWFkYnVmLCBkYXRhcG9zLCBuYiwgZHN0cG9zLCB3cml0ZUNiKTtcblxuICAgICAgICAgIGZ1bmN0aW9uIHdyaXRlQ2IoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICByZXR1cm4gb25lcnJvcihlcnIpO1xuXG4gICAgICAgICAgICB0b3RhbCArPSBuYjtcbiAgICAgICAgICAgIG9uc3RlcCAmJiBvbnN0ZXAodG90YWwsIG5iLCBmc2l6ZSk7XG5cbiAgICAgICAgICAgIGlmIChuYiA8IG9yaWdDaHVua0xlbilcbiAgICAgICAgICAgICAgcmV0dXJuIHNpbmdsZVJlYWQoZGF0YXBvcywgZHN0cG9zICsgbmIsIG9yaWdDaHVua0xlbiAtIG5iKTtcblxuICAgICAgICAgICAgaWYgKHRvdGFsID09PSBmc2l6ZSkge1xuICAgICAgICAgICAgICBkc3QuY2xvc2UoZHN0SGFuZGxlLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBkc3RIYW5kbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvbmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgc3JjLmNsb3NlKHNyY0hhbmRsZSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICBzcmNIYW5kbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBkc3QgPj0gZnNpemUpXG4gICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgdmFyIGNodW5rID0gKHBkc3QgKyBjaHVua1NpemUgPiBmc2l6ZSA/IGZzaXplIC0gcGRzdCA6IGNodW5rU2l6ZSk7XG4gICAgICAgICAgICBzaW5nbGVSZWFkKGRhdGFwb3MsIHBkc3QsIGNodW5rKTtcbiAgICAgICAgICAgIHBkc3QgKz0gY2h1bms7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbWFrZUNiKHBzcmMsIHBkc3QsIGNodW5rKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVyciwgbmIsIGRhdGEpIHtcbiAgICAgICAgICAgIG9ucmVhZChlcnIsIG5iLCBkYXRhLCBwZHN0LCBwc3JjLCBjaHVuayk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNpbmdsZVJlYWQocHNyYywgcGRzdCwgY2h1bmspIHtcbiAgICAgICAgICBpZiAoc3JjID09PSBmcykge1xuICAgICAgICAgICAgc3JjLnJlYWQoc3JjSGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICAgcmVhZGJ1ZixcbiAgICAgICAgICAgICAgICAgICAgIHBzcmMsXG4gICAgICAgICAgICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgIHBkc3QsXG4gICAgICAgICAgICAgICAgICAgICBtYWtlQ2IocHNyYywgcGRzdCwgY2h1bmspKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3JjLnJlYWREYXRhKHNyY0hhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkYnVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBzcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGRzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlQ2IocHNyYywgcGRzdCwgY2h1bmspKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzdGFydFJlYWRzKCkge1xuICAgICAgICAgIHZhciByZWFkcyA9IDA7XG4gICAgICAgICAgdmFyIHBzcmMgPSAwO1xuICAgICAgICAgIHdoaWxlIChwZHN0IDwgZnNpemUgJiYgcmVhZHMgPCBjb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgdmFyIGNodW5rID0gKHBkc3QgKyBjaHVua1NpemUgPiBmc2l6ZSA/IGZzaXplIC0gcGRzdCA6IGNodW5rU2l6ZSk7XG4gICAgICAgICAgICBzaW5nbGVSZWFkKHBzcmMsIHBkc3QsIGNodW5rKTtcbiAgICAgICAgICAgIHBzcmMgKz0gY2h1bms7XG4gICAgICAgICAgICBwZHN0ICs9IGNodW5rO1xuICAgICAgICAgICAgKytyZWFkcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5mYXN0R2V0ID0gZnVuY3Rpb24ocmVtb3RlUGF0aCwgbG9jYWxQYXRoLCBvcHRzLCBjYikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgZmFzdFhmZXIodGhpcywgZnMsIHJlbW90ZVBhdGgsIGxvY2FsUGF0aCwgb3B0cywgY2IpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmZhc3RQdXQgPSBmdW5jdGlvbihsb2NhbFBhdGgsIHJlbW90ZVBhdGgsIG9wdHMsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICBmYXN0WGZlcihmcywgdGhpcywgbG9jYWxQYXRoLCByZW1vdGVQYXRoLCBvcHRzLCBjYik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUucmVhZEZpbGUgPSBmdW5jdGlvbihwYXRoLCBvcHRpb25zLCBjYWxsYmFja18pIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBjYWxsYmFjaztcbiAgaWYgKHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGNhbGxiYWNrXztcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpXG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMsIGZsYWc6ICdyJyB9O1xuICBlbHNlIGlmICghb3B0aW9ucylcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogbnVsbCwgZmxhZzogJ3InIH07XG4gIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCYWQgYXJndW1lbnRzJyk7XG5cbiAgdmFyIGVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgaWYgKGVuY29kaW5nICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuXG4gIC8vIGZpcnN0LCBzdGF0IHRoZSBmaWxlLCBzbyB3ZSBrbm93IHRoZSBzaXplLlxuICB2YXIgc2l6ZTtcbiAgdmFyIGJ1ZmZlcjsgLy8gc2luZ2xlIGJ1ZmZlciB3aXRoIGZpbGUgZGF0YVxuICB2YXIgYnVmZmVyczsgLy8gbGlzdCBmb3Igd2hlbiBzaXplIGlzIHVua25vd25cbiAgdmFyIHBvcyA9IDA7XG4gIHZhciBoYW5kbGU7XG5cbiAgLy8gU0ZUUHYzIGRvZXMgbm90IHN1cHBvcnQgdXNpbmcgLTEgZm9yIHJlYWQgcG9zaXRpb24sIHNvIHdlIGhhdmUgdG8gdHJhY2tcbiAgLy8gcmVhZCBwb3NpdGlvbiBtYW51YWxseVxuICB2YXIgYnl0ZXNSZWFkID0gMDtcblxuICB2YXIgZmxhZyA9IG9wdGlvbnMuZmxhZyB8fCAncic7XG4gIHRoaXMub3BlbihwYXRoLCBmbGFnLCA0MzggLyo9MDY2NiovLCBmdW5jdGlvbihlciwgaGFuZGxlXykge1xuICAgIGlmIChlcilcbiAgICAgIHJldHVybiBjYWxsYmFjayAmJiBjYWxsYmFjayhlcik7XG4gICAgaGFuZGxlID0gaGFuZGxlXztcblxuICAgIHNlbGYuZnN0YXQoaGFuZGxlLCBmdW5jdGlvbiB0cnlTdGF0KGVyLCBzdCkge1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIC8vIFRyeSBzdGF0KCkgZm9yIHNmdHAgc2VydmVycyB0aGF0IG1heSBub3Qgc3VwcG9ydCBmc3RhdCgpIGZvclxuICAgICAgICAvLyB3aGF0ZXZlciByZWFzb25cbiAgICAgICAgc2VsZi5zdGF0KHBhdGgsIGZ1bmN0aW9uKGVyXywgc3RfKSB7XG4gICAgICAgICAgaWYgKGVyXykge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2xvc2UoaGFuZGxlLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeVN0YXQobnVsbCwgc3RfKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2l6ZSA9IHN0LnNpemUgfHwgMDtcbiAgICAgIGlmIChzaXplID09PSAwKSB7XG4gICAgICAgIC8vIHRoZSBrZXJuZWwgbGllcyBhYm91dCBtYW55IGZpbGVzLlxuICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdHJ5IHRvIHJlYWQgc29tZSBieXRlcy5cbiAgICAgICAgYnVmZmVycyA9IFtdO1xuICAgICAgICByZXR1cm4gcmVhZCgpO1xuICAgICAgfVxuXG4gICAgICBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoc2l6ZSk7XG4gICAgICByZWFkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg4MTkyKTtcbiAgICAgIHNlbGYucmVhZERhdGEoaGFuZGxlLCBidWZmZXIsIDAsIDgxOTIsIGJ5dGVzUmVhZCwgYWZ0ZXJSZWFkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5yZWFkRGF0YShoYW5kbGUsIGJ1ZmZlciwgcG9zLCBzaXplIC0gcG9zLCBieXRlc1JlYWQsIGFmdGVyUmVhZCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWZ0ZXJSZWFkKGVyLCBuYnl0ZXMpIHtcbiAgICB2YXIgZW9mO1xuICAgIGlmIChlcikge1xuICAgICAgZW9mID0gKGVyLmNvZGUgPT09IFNUQVRVU19DT0RFLkVPRik7XG4gICAgICBpZiAoIWVvZikge1xuICAgICAgICByZXR1cm4gc2VsZi5jbG9zZShoYW5kbGUsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayAmJiBjYWxsYmFjayhlcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlb2YgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZW9mIHx8IChzaXplID09PSAwICYmIG5ieXRlcyA9PT0gMCkpXG4gICAgICByZXR1cm4gY2xvc2UoKTtcblxuICAgIGJ5dGVzUmVhZCArPSBuYnl0ZXM7XG4gICAgcG9zICs9IG5ieXRlcztcbiAgICBpZiAoc2l6ZSAhPT0gMCkge1xuICAgICAgaWYgKHBvcyA9PT0gc2l6ZSlcbiAgICAgICAgY2xvc2UoKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmVhZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bmtub3duIHNpemUsIGp1c3QgcmVhZCB1bnRpbCB3ZSBkb24ndCBnZXQgYnl0ZXMuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyLnNsaWNlKDAsIG5ieXRlcykpO1xuICAgICAgcmVhZCgpO1xuICAgIH1cbiAgfVxuICBhZnRlclJlYWQuX3dhbnRFT0ZFcnJvciA9IHRydWU7XG5cbiAgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgc2VsZi5jbG9zZShoYW5kbGUsIGZ1bmN0aW9uKGVyKSB7XG4gICAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgICAvLyBjb2xsZWN0ZWQgdGhlIGRhdGEgaW50byB0aGUgYnVmZmVycyBsaXN0LlxuICAgICAgICBidWZmZXIgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIHBvcyk7XG4gICAgICB9IGVsc2UgaWYgKHBvcyA8IHNpemUpIHtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKDAsIHBvcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmNvZGluZylcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyLnRvU3RyaW5nKGVuY29kaW5nKTtcbiAgICAgIHJldHVybiBjYWxsYmFjayAmJiBjYWxsYmFjayhlciwgYnVmZmVyKTtcbiAgICB9KTtcbiAgfVxufTtcbmZ1bmN0aW9uIHdyaXRlQWxsKHNlbGYsIGhhbmRsZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrXykge1xuICB2YXIgY2FsbGJhY2sgPSAodHlwZW9mIGNhbGxiYWNrXyA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrXyA6IHVuZGVmaW5lZCk7XG5cbiAgc2VsZi53cml0ZURhdGEoaGFuZGxlLFxuICAgICAgICAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgZnVuY3Rpb24od3JpdGVFcnIsIHdyaXR0ZW4pIHtcbiAgICBpZiAod3JpdGVFcnIpIHtcbiAgICAgIHJldHVybiBzZWxmLmNsb3NlKGhhbmRsZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHdyaXRlRXJyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAod3JpdHRlbiA9PT0gbGVuZ3RoKVxuICAgICAgc2VsZi5jbG9zZShoYW5kbGUsIGNhbGxiYWNrKTtcbiAgICBlbHNlIHtcbiAgICAgIG9mZnNldCArPSB3cml0dGVuO1xuICAgICAgbGVuZ3RoIC09IHdyaXR0ZW47XG4gICAgICBwb3NpdGlvbiArPSB3cml0dGVuO1xuICAgICAgd3JpdGVBbGwoc2VsZiwgaGFuZGxlLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSk7XG59XG5TRlRQU3RyZWFtLnByb3RvdHlwZS53cml0ZUZpbGUgPSBmdW5jdGlvbihwYXRoLCBkYXRhLCBvcHRpb25zLCBjYWxsYmFja18pIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBjYWxsYmFjaztcbiAgaWYgKHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGNhbGxiYWNrXztcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKVxuICAgIG9wdGlvbnMgPSB7IGVuY29kaW5nOiBvcHRpb25zLCBtb2RlOiA0MzgsIGZsYWc6ICd3JyB9O1xuICBlbHNlIGlmICghb3B0aW9ucylcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogJ3V0ZjgnLCBtb2RlOiA0MzggLyo9MDY2NiovLCBmbGFnOiAndycgfTtcbiAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JhZCBhcmd1bWVudHMnKTtcblxuICBpZiAob3B0aW9ucy5lbmNvZGluZyAmJiAhQnVmZmVyLmlzRW5jb2Rpbmcob3B0aW9ucy5lbmNvZGluZykpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgb3B0aW9ucy5lbmNvZGluZyk7XG5cbiAgdmFyIGZsYWcgPSBvcHRpb25zLmZsYWcgfHwgJ3cnO1xuICB0aGlzLm9wZW4ocGF0aCwgZmxhZywgb3B0aW9ucy5tb2RlLCBmdW5jdGlvbihvcGVuRXJyLCBoYW5kbGUpIHtcbiAgICBpZiAob3BlbkVycilcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKG9wZW5FcnIpO1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGJ1ZmZlciA9IChCdWZmZXIuaXNCdWZmZXIoZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgPyBkYXRhXG4gICAgICAgICAgICAgICAgICAgIDogQnVmZmVyLmZyb20oJycgKyBkYXRhLCBvcHRpb25zLmVuY29kaW5nIHx8ICd1dGY4JykpO1xuICAgICAgdmFyIHBvc2l0aW9uID0gKC9hLy50ZXN0KGZsYWcpID8gbnVsbCA6IDApO1xuXG4gICAgICAvLyBTRlRQdjMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbm90aW9uIG9mICdjdXJyZW50IHBvc2l0aW9uJ1xuICAgICAgLy8gKG51bGwgcG9zaXRpb24pLCBzbyB3ZSBqdXN0IGF0dGVtcHQgdG8gYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGVcbiAgICAgIC8vIGluc3RlYWRcbiAgICAgIGlmIChwb3NpdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICBzZWxmLmZzdGF0KGhhbmRsZSwgZnVuY3Rpb24gdHJ5U3RhdChlciwgc3QpIHtcbiAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgIC8vIFRyeSBzdGF0KCkgZm9yIHNmdHAgc2VydmVycyB0aGF0IG1heSBub3Qgc3VwcG9ydCBmc3RhdCgpIGZvclxuICAgICAgICAgICAgLy8gd2hhdGV2ZXIgcmVhc29uXG4gICAgICAgICAgICBzZWxmLnN0YXQocGF0aCwgZnVuY3Rpb24oZXJfLCBzdF8pIHtcbiAgICAgICAgICAgICAgaWYgKGVyXykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNsb3NlKGhhbmRsZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhlcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdHJ5U3RhdChudWxsLCBzdF8pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHdyaXRlQWxsKHNlbGYsIGhhbmRsZSwgYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoLCBzdC5zaXplLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB3cml0ZUFsbChzZWxmLCBoYW5kbGUsIGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0pO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmFwcGVuZEZpbGUgPSBmdW5jdGlvbihwYXRoLCBkYXRhLCBvcHRpb25zLCBjYWxsYmFja18pIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBjYWxsYmFjaztcbiAgaWYgKHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGNhbGxiYWNrXztcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJylcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogb3B0aW9ucywgbW9kZTogNDM4LCBmbGFnOiAnYScgfTtcbiAgZWxzZSBpZiAoIW9wdGlvbnMpXG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6ICd1dGY4JywgbW9kZTogNDM4IC8qPTA2NjYqLywgZmxhZzogJ2EnIH07XG4gIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCYWQgYXJndW1lbnRzJyk7XG5cbiAgaWYgKCFvcHRpb25zLmZsYWcpXG4gICAgb3B0aW9ucyA9IHV0aWwuX2V4dGVuZCh7IGZsYWc6ICdhJyB9LCBvcHRpb25zKTtcbiAgdGhpcy53cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2FsbGJhY2spO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uKHBhdGgsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB0aGlzLnN0YXQocGF0aCwgZnVuY3Rpb24oZXJyKSB7XG4gICAgY2IgJiYgY2IoZXJyID8gZmFsc2UgOiB0cnVlKTtcbiAgfSk7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24oZmlsZW5hbWUsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIGZpbGVuYW1lXG4gICovXG4gIHZhciBmbmFtZWxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGZpbGVuYW1lKTtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBmbmFtZWxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5SRU1PVkU7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBmbmFtZWxlbiwgcCk7XG4gIGJ1Zi53cml0ZShmaWxlbmFtZSwgcCArPSA0LCBmbmFtZWxlbiwgJ3V0ZjgnKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBSRU1PVkUnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLnJlbmFtZSA9IGZ1bmN0aW9uKG9sZFBhdGgsIG5ld1BhdGgsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIG9sZHBhdGhcbiAgICBzdHJpbmcgICAgIG5ld3BhdGhcbiAgKi9cbiAgdmFyIG9sZGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKG9sZFBhdGgpO1xuICB2YXIgbmV3bGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobmV3UGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgb2xkbGVuICsgNCArIG5ld2xlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5SRU5BTUU7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBvbGRsZW4sIHApO1xuICBidWYud3JpdGUob2xkUGF0aCwgcCArPSA0LCBvbGRsZW4sICd1dGY4Jyk7XG4gIHdyaXRlVUludDMyQkUoYnVmLCBuZXdsZW4sIHAgKz0gb2xkbGVuKTtcbiAgYnVmLndyaXRlKG5ld1BhdGgsIHAgKz0gNCwgbmV3bGVuLCAndXRmOCcpO1xuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHsgY2I6IGNiIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIFJFTkFNRScpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihwYXRoLCBhdHRycywgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBmbGFncyA9IDA7XG4gIHZhciBhdHRyQnl0ZXMgPSAwO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICBpZiAodHlwZW9mIGF0dHJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBhdHRycztcbiAgICBhdHRycyA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodHlwZW9mIGF0dHJzID09PSAnb2JqZWN0JyAmJiBhdHRycyAhPT0gbnVsbCkge1xuICAgIGF0dHJzID0gYXR0cnNUb0J5dGVzKGF0dHJzKTtcbiAgICBmbGFncyA9IGF0dHJzLmZsYWdzO1xuICAgIGF0dHJCeXRlcyA9IGF0dHJzLm5ieXRlcztcbiAgICBhdHRycyA9IGF0dHJzLmJ5dGVzO1xuICB9XG5cbiAgLypcbiAgICB1aW50MzIgICAgIGlkXG4gICAgc3RyaW5nICAgICBwYXRoXG4gICAgQVRUUlMgICAgICBhdHRyc1xuICAqL1xuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHBhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIHBhdGhsZW4gKyA0ICsgYXR0ckJ5dGVzKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULk1LRElSO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHJlcWlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcGF0aGxlbiwgcCk7XG4gIGJ1Zi53cml0ZShwYXRoLCBwICs9IDQsIHBhdGhsZW4sICd1dGY4Jyk7XG4gIHdyaXRlVUludDMyQkUoYnVmLCBmbGFncywgcCArPSBwYXRobGVuKTtcbiAgaWYgKGZsYWdzKSB7XG4gICAgcCArPSA0O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhdHRycy5sZW5ndGg7IGkgPCBsZW47ICsraSlcbiAgICAgIGZvciAodmFyIGogPSAwLCBsZW4yID0gYXR0cnNbaV0ubGVuZ3RoOyBqIDwgbGVuMjsgKytqKVxuICAgICAgICBidWZbcCsrXSA9IGF0dHJzW2ldW2pdO1xuICB9XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0geyBjYjogY2IgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgTUtESVInKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgcGF0aFxuICAqL1xuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHBhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIHBhdGhsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuUk1ESVI7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwYXRobGVuLCBwKTtcbiAgYnVmLndyaXRlKHBhdGgsIHAgKz0gNCwgcGF0aGxlbiwgJ3V0ZjgnKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBSTURJUicpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKHdoZXJlLCBvcHRzLCBjYikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG4gIHZhciBkb0ZpbHRlcjtcblxuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcgfHwgb3B0cyA9PT0gbnVsbClcbiAgICBvcHRzID0ge307XG5cbiAgZG9GaWx0ZXIgPSAob3B0cyAmJiBvcHRzLmZ1bGwgPyBmYWxzZSA6IHRydWUpO1xuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHdoZXJlKSAmJiB0eXBlb2Ygd2hlcmUgIT09ICdzdHJpbmcnKVxuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBkaXJlY3RvcnkgaGFuZGxlIG9yIHBhdGgnKTtcblxuICBpZiAodHlwZW9mIHdoZXJlID09PSAnc3RyaW5nJykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgIHZhciBlID0gMDtcblxuICAgIHJldHVybiB0aGlzLm9wZW5kaXIod2hlcmUsIGZ1bmN0aW9uIHJlcmVhZChlcnIsIGhhbmRsZSkge1xuICAgICAgaWYgKGVycilcbiAgICAgICAgcmV0dXJuIGNiKGVycik7XG5cbiAgICAgIHNlbGYucmVhZGRpcihoYW5kbGUsIG9wdHMsIGZ1bmN0aW9uKGVyciwgbGlzdCkge1xuICAgICAgICB2YXIgZW9mID0gKGVyciAmJiBlcnIuY29kZSA9PT0gU1RBVFVTX0NPREUuRU9GKTtcblxuICAgICAgICBpZiAoZXJyICYmICFlb2YpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5jbG9zZShoYW5kbGUsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChlb2YpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5jbG9zZShoYW5kbGUsIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgICBjYih1bmRlZmluZWQsIGVudHJpZXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpc3QubGVuZ3RoOyBpIDwgbGVuOyArK2ksICsrZSlcbiAgICAgICAgICBlbnRyaWVzW2VdID0gbGlzdFtpXTtcblxuICAgICAgICByZXJlYWQodW5kZWZpbmVkLCBoYW5kbGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIGhhbmRsZVxuICAqL1xuICB2YXIgaGFuZGxlbGVuID0gd2hlcmUubGVuZ3RoO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIGhhbmRsZWxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5SRUFERElSO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHJlcWlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaGFuZGxlbGVuLCBwKTtcbiAgd2hlcmUuY29weShidWYsIHAgKz0gNCk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0ge1xuICAgIGNiOiAoZG9GaWx0ZXJcbiAgICAgICAgID8gZnVuY3Rpb24oZXJyLCBsaXN0KSB7XG4gICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuXG4gICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgIGlmIChsaXN0W2ldLmZpbGVuYW1lID09PSAnLicgfHwgbGlzdFtpXS5maWxlbmFtZSA9PT0gJy4uJylcbiAgICAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgY2IodW5kZWZpbmVkLCBsaXN0KTtcbiAgICAgICAgICAgfVxuICAgICAgICAgOiBjYilcbiAgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgUkVBRERJUicpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuZnN0YXQgPSBmdW5jdGlvbihoYW5kbGUsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcbiAgZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihoYW5kbGUpKVxuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlIGlzIG5vdCBhIEJ1ZmZlcicpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgaGFuZGxlXG4gICovXG4gIHZhciBoYW5kbGVsZW4gPSBoYW5kbGUubGVuZ3RoO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIGhhbmRsZWxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5GU1RBVDtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGhhbmRsZWxlbiwgcCk7XG4gIGhhbmRsZS5jb3B5KGJ1ZiwgcCArPSA0KTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBGU1RBVCcpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuc3RhdCA9IGZ1bmN0aW9uKHBhdGgsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIHBhdGhcbiAgKi9cbiAgdmFyIHBhdGhsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChwYXRoKTtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBwYXRobGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULlNUQVQ7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwYXRobGVuLCBwKTtcbiAgYnVmLndyaXRlKHBhdGgsIHAgKz0gNCwgcGF0aGxlbiwgJ3V0ZjgnKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBTVEFUJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5sc3RhdCA9IGZ1bmN0aW9uKHBhdGgsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIHBhdGhcbiAgKi9cbiAgdmFyIHBhdGhsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChwYXRoKTtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBwYXRobGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULkxTVEFUO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHJlcWlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcGF0aGxlbiwgcCk7XG4gIGJ1Zi53cml0ZShwYXRoLCBwICs9IDQsIHBhdGhsZW4sICd1dGY4Jyk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0geyBjYjogY2IgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgTFNUQVQnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLm9wZW5kaXIgPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgLypcbiAgICB1aW50MzIgICAgIGlkXG4gICAgc3RyaW5nICAgICBwYXRoXG4gICovXG4gIHZhciBwYXRobGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgcGF0aGxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5PUEVORElSO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHJlcWlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcGF0aGxlbiwgcCk7XG4gIGJ1Zi53cml0ZShwYXRoLCBwICs9IDQsIHBhdGhsZW4sICd1dGY4Jyk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0geyBjYjogY2IgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgT1BFTkRJUicpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuc2V0c3RhdCA9IGZ1bmN0aW9uKHBhdGgsIGF0dHJzLCBjYikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIGZsYWdzID0gMDtcbiAgdmFyIGF0dHJCeXRlcyA9IDA7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIGlmICh0eXBlb2YgYXR0cnMgPT09ICdvYmplY3QnICYmIGF0dHJzICE9PSBudWxsKSB7XG4gICAgYXR0cnMgPSBhdHRyc1RvQnl0ZXMoYXR0cnMpO1xuICAgIGZsYWdzID0gYXR0cnMuZmxhZ3M7XG4gICAgYXR0ckJ5dGVzID0gYXR0cnMubmJ5dGVzO1xuICAgIGF0dHJzID0gYXR0cnMuYnl0ZXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGF0dHJzID09PSAnZnVuY3Rpb24nKVxuICAgIGNiID0gYXR0cnM7XG5cbiAgLypcbiAgICB1aW50MzIgICAgIGlkXG4gICAgc3RyaW5nICAgICBwYXRoXG4gICAgQVRUUlMgICAgICBhdHRyc1xuICAqL1xuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHBhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIHBhdGhsZW4gKyA0ICsgYXR0ckJ5dGVzKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULlNFVFNUQVQ7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwYXRobGVuLCBwKTtcbiAgYnVmLndyaXRlKHBhdGgsIHAgKz0gNCwgcGF0aGxlbiwgJ3V0ZjgnKTtcbiAgd3JpdGVVSW50MzJCRShidWYsIGZsYWdzLCBwICs9IHBhdGhsZW4pO1xuICBpZiAoZmxhZ3MpIHtcbiAgICBwICs9IDQ7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGF0dHJzLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICAgICAgZm9yICh2YXIgaiA9IDAsIGxlbjIgPSBhdHRyc1tpXS5sZW5ndGg7IGogPCBsZW4yOyArK2opXG4gICAgICAgIGJ1ZltwKytdID0gYXR0cnNbaV1bal07XG4gIH1cblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBTRVRTVEFUJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5mc2V0c3RhdCA9IGZ1bmN0aW9uKGhhbmRsZSwgYXR0cnMsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcbiAgZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihoYW5kbGUpKVxuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlIGlzIG5vdCBhIEJ1ZmZlcicpO1xuXG4gIHZhciBmbGFncyA9IDA7XG4gIHZhciBhdHRyQnl0ZXMgPSAwO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICBpZiAodHlwZW9mIGF0dHJzID09PSAnb2JqZWN0JyAmJiBhdHRycyAhPT0gbnVsbCkge1xuICAgIGF0dHJzID0gYXR0cnNUb0J5dGVzKGF0dHJzKTtcbiAgICBmbGFncyA9IGF0dHJzLmZsYWdzO1xuICAgIGF0dHJCeXRlcyA9IGF0dHJzLm5ieXRlcztcbiAgICBhdHRycyA9IGF0dHJzLmJ5dGVzO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhdHRycyA9PT0gJ2Z1bmN0aW9uJylcbiAgICBjYiA9IGF0dHJzO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgaGFuZGxlXG4gICAgQVRUUlMgICAgICBhdHRyc1xuICAqL1xuICB2YXIgaGFuZGxlbGVuID0gaGFuZGxlLmxlbmd0aDtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBoYW5kbGVsZW4gKyA0ICsgYXR0ckJ5dGVzKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULkZTRVRTVEFUO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHJlcWlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaGFuZGxlbGVuLCBwKTtcbiAgaGFuZGxlLmNvcHkoYnVmLCBwICs9IDQpO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgZmxhZ3MsIHAgKz0gaGFuZGxlbGVuKTtcbiAgaWYgKGZsYWdzKSB7XG4gICAgcCArPSA0O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhdHRycy5sZW5ndGg7IGkgPCBsZW47ICsraSlcbiAgICAgIGZvciAodmFyIGogPSAwLCBsZW4yID0gYXR0cnNbaV0ubGVuZ3RoOyBqIDwgbGVuMjsgKytqKVxuICAgICAgICBidWZbcCsrXSA9IGF0dHJzW2ldW2pdO1xuICB9XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0geyBjYjogY2IgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgRlNFVFNUQVQnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmZ1dGltZXMgPSBmdW5jdGlvbihoYW5kbGUsIGF0aW1lLCBtdGltZSwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuZnNldHN0YXQoaGFuZGxlLCB7XG4gICAgYXRpbWU6IHRvVW5peFRpbWVzdGFtcChhdGltZSksXG4gICAgbXRpbWU6IHRvVW5peFRpbWVzdGFtcChtdGltZSlcbiAgfSwgY2IpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLnV0aW1lcyA9IGZ1bmN0aW9uKHBhdGgsIGF0aW1lLCBtdGltZSwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuc2V0c3RhdChwYXRoLCB7XG4gICAgYXRpbWU6IHRvVW5peFRpbWVzdGFtcChhdGltZSksXG4gICAgbXRpbWU6IHRvVW5peFRpbWVzdGFtcChtdGltZSlcbiAgfSwgY2IpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmZjaG93biA9IGZ1bmN0aW9uKGhhbmRsZSwgdWlkLCBnaWQsIGNiKSB7XG4gIHJldHVybiB0aGlzLmZzZXRzdGF0KGhhbmRsZSwge1xuICAgIHVpZDogdWlkLFxuICAgIGdpZDogZ2lkXG4gIH0sIGNiKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5jaG93biA9IGZ1bmN0aW9uKHBhdGgsIHVpZCwgZ2lkLCBjYikge1xuICByZXR1cm4gdGhpcy5zZXRzdGF0KHBhdGgsIHtcbiAgICB1aWQ6IHVpZCxcbiAgICBnaWQ6IGdpZFxuICB9LCBjYik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuZmNobW9kID0gZnVuY3Rpb24oaGFuZGxlLCBtb2RlLCBjYikge1xuICByZXR1cm4gdGhpcy5mc2V0c3RhdChoYW5kbGUsIHtcbiAgICBtb2RlOiBtb2RlXG4gIH0sIGNiKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5jaG1vZCA9IGZ1bmN0aW9uKHBhdGgsIG1vZGUsIGNiKSB7XG4gIHJldHVybiB0aGlzLnNldHN0YXQocGF0aCwge1xuICAgIG1vZGU6IG1vZGVcbiAgfSwgY2IpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLnJlYWRsaW5rID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgcGF0aFxuICAqL1xuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHBhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIHBhdGhsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuUkVBRExJTks7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwYXRobGVuLCBwKTtcbiAgYnVmLndyaXRlKHBhdGgsIHAgKz0gNCwgcGF0aGxlbiwgJ3V0ZjgnKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7XG4gICAgY2I6IGZ1bmN0aW9uKGVyciwgbmFtZXMpIHtcbiAgICAgIGlmIChlcnIpXG4gICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgZWxzZSBpZiAoIW5hbWVzIHx8ICFuYW1lcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ1Jlc3BvbnNlIG1pc3NpbmcgbGluayBpbmZvJykpO1xuICAgICAgY2IodW5kZWZpbmVkLCBuYW1lc1swXS5maWxlbmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBSRUFETElOSycpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuc3ltbGluayA9IGZ1bmN0aW9uKHRhcmdldFBhdGgsIGxpbmtQYXRoLCBjYikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgLypcbiAgICB1aW50MzIgICAgIGlkXG4gICAgc3RyaW5nICAgICBsaW5rcGF0aFxuICAgIHN0cmluZyAgICAgdGFyZ2V0cGF0aFxuICAqL1xuICB2YXIgbGlua2xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGxpbmtQYXRoKTtcbiAgdmFyIHRhcmdldGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHRhcmdldFBhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIGxpbmtsZW4gKyA0ICsgdGFyZ2V0bGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULlNZTUxJTks7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIGlmICh0aGlzLl9pc09wZW5TU0gpIHtcbiAgICAvLyBPcGVuU1NIIGhhcyBsaW5rcGF0aCBhbmQgdGFyZ2V0cGF0aCBwb3NpdGlvbnMgc3dpdGNoZWRcbiAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgdGFyZ2V0bGVuLCBwKTtcbiAgICBidWYud3JpdGUodGFyZ2V0UGF0aCwgcCArPSA0LCB0YXJnZXRsZW4sICd1dGY4Jyk7XG4gICAgd3JpdGVVSW50MzJCRShidWYsIGxpbmtsZW4sIHAgKz0gdGFyZ2V0bGVuKTtcbiAgICBidWYud3JpdGUobGlua1BhdGgsIHAgKz0gNCwgbGlua2xlbiwgJ3V0ZjgnKTtcbiAgfSBlbHNlIHtcbiAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbGlua2xlbiwgcCk7XG4gICAgYnVmLndyaXRlKGxpbmtQYXRoLCBwICs9IDQsIGxpbmtsZW4sICd1dGY4Jyk7XG4gICAgd3JpdGVVSW50MzJCRShidWYsIHRhcmdldGxlbiwgcCArPSBsaW5rbGVuKTtcbiAgICBidWYud3JpdGUodGFyZ2V0UGF0aCwgcCArPSA0LCB0YXJnZXRsZW4sICd1dGY4Jyk7XG4gIH1cblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBTWU1MSU5LJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5yZWFscGF0aCA9IGZ1bmN0aW9uKHBhdGgsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIHBhdGhcbiAgKi9cbiAgdmFyIHBhdGhsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChwYXRoKTtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBwYXRobGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULlJFQUxQQVRIO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHJlcWlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcGF0aGxlbiwgcCk7XG4gIGJ1Zi53cml0ZShwYXRoLCBwICs9IDQsIHBhdGhsZW4sICd1dGY4Jyk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0ge1xuICAgIGNiOiBmdW5jdGlvbihlcnIsIG5hbWVzKSB7XG4gICAgICBpZiAoZXJyKVxuICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgIGVsc2UgaWYgKCFuYW1lcyB8fCAhbmFtZXMubGVuZ3RoKVxuICAgICAgICByZXR1cm4gY2IobmV3IEVycm9yKCdSZXNwb25zZSBtaXNzaW5nIHBhdGggaW5mbycpKTtcbiAgICAgIGNiKHVuZGVmaW5lZCwgbmFtZXNbMF0uZmlsZW5hbWUpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgUkVBTFBBVEgnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcbi8vIGV4dGVuZGVkIHJlcXVlc3RzXG5TRlRQU3RyZWFtLnByb3RvdHlwZS5leHRfb3BlbnNzaF9yZW5hbWUgPSBmdW5jdGlvbihvbGRQYXRoLCBuZXdQYXRoLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG4gIGVsc2UgaWYgKCFzdGF0ZS5leHRlbnNpb25zWydwb3NpeC1yZW5hbWVAb3BlbnNzaC5jb20nXVxuICAgICAgICAgICB8fCBzdGF0ZS5leHRlbnNpb25zWydwb3NpeC1yZW5hbWVAb3BlbnNzaC5jb20nXS5pbmRleE9mKCcxJykgPT09IC0xKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBleHRlbmRlZCByZXF1ZXN0Jyk7XG5cbiAgLypcbiAgICB1aW50MzIgICAgaWRcbiAgICBzdHJpbmcgICAgXCJwb3NpeC1yZW5hbWVAb3BlbnNzaC5jb21cIlxuICAgIHN0cmluZyAgICBvbGRwYXRoXG4gICAgc3RyaW5nICAgIG5ld3BhdGhcbiAgKi9cbiAgdmFyIG9sZGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKG9sZFBhdGgpO1xuICB2YXIgbmV3bGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobmV3UGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgMjQgKyA0ICsgb2xkbGVuICsgNCArIG5ld2xlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5FWFRFTkRFRDtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG4gIHdyaXRlVUludDMyQkUoYnVmLCAyNCwgcCk7XG4gIGJ1Zi53cml0ZSgncG9zaXgtcmVuYW1lQG9wZW5zc2guY29tJywgcCArPSA0LCAyNCwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG9sZGxlbiwgcCArPSAyNCk7XG4gIGJ1Zi53cml0ZShvbGRQYXRoLCBwICs9IDQsIG9sZGxlbiwgJ3V0ZjgnKTtcbiAgd3JpdGVVSW50MzJCRShidWYsIG5ld2xlbiwgcCArPSBvbGRsZW4pO1xuICBidWYud3JpdGUobmV3UGF0aCwgcCArPSA0LCBuZXdsZW4sICd1dGY4Jyk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0geyBjYjogY2IgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgcG9zaXgtcmVuYW1lQG9wZW5zc2guY29tJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5leHRfb3BlbnNzaF9zdGF0dmZzID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuICBlbHNlIGlmICghc3RhdGUuZXh0ZW5zaW9uc1snc3RhdHZmc0BvcGVuc3NoLmNvbSddXG4gICAgICAgICAgIHx8IHN0YXRlLmV4dGVuc2lvbnNbJ3N0YXR2ZnNAb3BlbnNzaC5jb20nXS5pbmRleE9mKCcyJykgPT09IC0xKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBleHRlbmRlZCByZXF1ZXN0Jyk7XG5cbiAgLypcbiAgICB1aW50MzIgICAgaWRcbiAgICBzdHJpbmcgICAgXCJzdGF0dmZzQG9wZW5zc2guY29tXCJcbiAgICBzdHJpbmcgICAgcGF0aFxuICAqL1xuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHBhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIDE5ICsgNCArIHBhdGhsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuRVhURU5ERUQ7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTksIHApO1xuICBidWYud3JpdGUoJ3N0YXR2ZnNAb3BlbnNzaC5jb20nLCBwICs9IDQsIDE5LCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcGF0aGxlbiwgcCArPSAxOSk7XG4gIGJ1Zi53cml0ZShwYXRoLCBwICs9IDQsIHBhdGhsZW4sICd1dGY4Jyk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0ge1xuICAgIGV4dGVuZGVkOiAnc3RhdHZmc0BvcGVuc3NoLmNvbScsXG4gICAgY2I6IGNiXG4gIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIHN0YXR2ZnNAb3BlbnNzaC5jb20nKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmV4dF9vcGVuc3NoX2ZzdGF0dmZzID0gZnVuY3Rpb24oaGFuZGxlLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG4gIGVsc2UgaWYgKCFzdGF0ZS5leHRlbnNpb25zWydmc3RhdHZmc0BvcGVuc3NoLmNvbSddXG4gICAgICAgICAgIHx8IHN0YXRlLmV4dGVuc2lvbnNbJ2ZzdGF0dmZzQG9wZW5zc2guY29tJ10uaW5kZXhPZignMicpID09PSAtMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZXh0ZW5kZWQgcmVxdWVzdCcpO1xuICBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhbmRsZSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGUgaXMgbm90IGEgQnVmZmVyJyk7XG5cbiAgLypcbiAgICB1aW50MzIgICAgaWRcbiAgICBzdHJpbmcgICAgXCJmc3RhdHZmc0BvcGVuc3NoLmNvbVwiXG4gICAgc3RyaW5nICAgIGhhbmRsZVxuICAqL1xuICB2YXIgaGFuZGxlbGVuID0gaGFuZGxlLmxlbmd0aDtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyAyMCArIDQgKyBoYW5kbGVsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuRVhURU5ERUQ7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMjAsIHApO1xuICBidWYud3JpdGUoJ2ZzdGF0dmZzQG9wZW5zc2guY29tJywgcCArPSA0LCAyMCwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGhhbmRsZWxlbiwgcCArPSAyMCk7XG4gIGJ1Zi53cml0ZShoYW5kbGUsIHAgKz0gNCwgaGFuZGxlbGVuLCAndXRmOCcpO1xuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHtcbiAgICBleHRlbmRlZDogJ2ZzdGF0dmZzQG9wZW5zc2guY29tJyxcbiAgICBjYjogY2JcbiAgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgZnN0YXR2ZnNAb3BlbnNzaC5jb20nKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmV4dF9vcGVuc3NoX2hhcmRsaW5rID0gZnVuY3Rpb24ob2xkUGF0aCwgbmV3UGF0aCwgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuICBlbHNlIGlmICghc3RhdGUuZXh0ZW5zaW9uc1snaGFyZGxpbmtAb3BlbnNzaC5jb20nXVxuICAgICAgICAgICB8fCBzdGF0ZS5leHRlbnNpb25zWydoYXJkbGlua0BvcGVuc3NoLmNvbSddLmluZGV4T2YoJzEnKSA9PT0gLTEpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGV4dGVuZGVkIHJlcXVlc3QnKTtcblxuICAvKlxuICAgIHVpbnQzMiAgICBpZFxuICAgIHN0cmluZyAgICBcImhhcmRsaW5rQG9wZW5zc2guY29tXCJcbiAgICBzdHJpbmcgICAgb2xkcGF0aFxuICAgIHN0cmluZyAgICBuZXdwYXRoXG4gICovXG4gIHZhciBvbGRsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChvbGRQYXRoKTtcbiAgdmFyIG5ld2xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKG5ld1BhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIDIwICsgNCArIG9sZGxlbiArIDQgKyBuZXdsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuRVhURU5ERUQ7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMjAsIHApO1xuICBidWYud3JpdGUoJ2hhcmRsaW5rQG9wZW5zc2guY29tJywgcCArPSA0LCAyMCwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG9sZGxlbiwgcCArPSAyMCk7XG4gIGJ1Zi53cml0ZShvbGRQYXRoLCBwICs9IDQsIG9sZGxlbiwgJ3V0ZjgnKTtcbiAgd3JpdGVVSW50MzJCRShidWYsIG5ld2xlbiwgcCArPSBvbGRsZW4pO1xuICBidWYud3JpdGUobmV3UGF0aCwgcCArPSA0LCBuZXdsZW4sICd1dGY4Jyk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0geyBjYjogY2IgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgaGFyZGxpbmtAb3BlbnNzaC5jb20nKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmV4dF9vcGVuc3NoX2ZzeW5jID0gZnVuY3Rpb24oaGFuZGxlLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG4gIGVsc2UgaWYgKCFzdGF0ZS5leHRlbnNpb25zWydmc3luY0BvcGVuc3NoLmNvbSddXG4gICAgICAgICAgIHx8IHN0YXRlLmV4dGVuc2lvbnNbJ2ZzeW5jQG9wZW5zc2guY29tJ10uaW5kZXhPZignMScpID09PSAtMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZXh0ZW5kZWQgcmVxdWVzdCcpO1xuICBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhbmRsZSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGUgaXMgbm90IGEgQnVmZmVyJyk7XG5cbiAgLypcbiAgICB1aW50MzIgICAgaWRcbiAgICBzdHJpbmcgICAgXCJmc3luY0BvcGVuc3NoLmNvbVwiXG4gICAgc3RyaW5nICAgIGhhbmRsZVxuICAqL1xuICB2YXIgaGFuZGxlbGVuID0gaGFuZGxlLmxlbmd0aDtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyAxNyArIDQgKyBoYW5kbGVsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuRVhURU5ERUQ7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTcsIHApO1xuICBidWYud3JpdGUoJ2ZzeW5jQG9wZW5zc2guY29tJywgcCArPSA0LCAxNywgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGhhbmRsZWxlbiwgcCArPSAxNyk7XG4gIGJ1Zi53cml0ZShoYW5kbGUsIHAgKz0gNCwgaGFuZGxlbGVuLCAndXRmOCcpO1xuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHsgY2I6IGNiIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIGZzeW5jQG9wZW5zc2guY29tJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5cbi8vIHNlcnZlclxuU0ZUUFN0cmVhbS5wcm90b3R5cGUuc3RhdHVzID0gZnVuY3Rpb24oaWQsIGNvZGUsIG1lc3NhZ2UsIGxhbmcpIHtcbiAgaWYgKCF0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlci1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gY2xpZW50IG1vZGUnKTtcblxuICBpZiAoIVNUQVRVU19DT0RFW2NvZGVdIHx8IHR5cGVvZiBjb2RlICE9PSAnbnVtYmVyJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JhZCBzdGF0dXMgY29kZTogJyArIGNvZGUpO1xuXG4gIG1lc3NhZ2UgfHwgKG1lc3NhZ2UgPSAnJyk7XG4gIGxhbmcgfHwgKGxhbmcgPSAnJyk7XG5cbiAgdmFyIG1zZ0xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKG1lc3NhZ2UpO1xuICB2YXIgbGFuZ0xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGxhbmcpO1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyA0ICsgbXNnTGVuICsgNCArIGxhbmdMZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFU1BPTlNFLlNUQVRVUztcbiAgd3JpdGVVSW50MzJCRShidWYsIGlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY29kZSwgOSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG1zZ0xlbiwgMTMpO1xuICBpZiAobXNnTGVuKVxuICAgIGJ1Zi53cml0ZShtZXNzYWdlLCAxNywgbXNnTGVuLCAndXRmOCcpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBsYW5nTGVuLCAxNyArIG1zZ0xlbik7XG4gIGlmIChsYW5nTGVuKVxuICAgIGJ1Zi53cml0ZShsYW5nLCAxNyArIG1zZ0xlbiArIDQsIGxhbmdMZW4sICdhc2NpaScpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBTVEFUVVMnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmhhbmRsZSA9IGZ1bmN0aW9uKGlkLCBoYW5kbGUpIHtcbiAgaWYgKCF0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlci1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gY2xpZW50IG1vZGUnKTtcblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihoYW5kbGUpKVxuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlIGlzIG5vdCBhIEJ1ZmZlcicpO1xuXG4gIHZhciBoYW5kbGVMZW4gPSBoYW5kbGUubGVuZ3RoO1xuXG4gIGlmIChoYW5kbGVMZW4gPiAyNTYpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGUgdG9vIGxhcmdlICg+IDI1NiBieXRlcyknKTtcblxuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBoYW5kbGVMZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFU1BPTlNFLkhBTkRMRTtcbiAgd3JpdGVVSW50MzJCRShidWYsIGlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaGFuZGxlTGVuLCA5KTtcbiAgaWYgKGhhbmRsZUxlbilcbiAgICBoYW5kbGUuY29weShidWYsIDEzKTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgSEFORExFJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5kYXRhID0gZnVuY3Rpb24oaWQsIGRhdGEsIGVuY29kaW5nKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgdmFyIGlzQnVmZmVyID0gQnVmZmVyLmlzQnVmZmVyKGRhdGEpO1xuXG4gIGlmICghaXNCdWZmZXIgJiYgdHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKVxuICAgIHRocm93IG5ldyBFcnJvcignZGF0YSBpcyBub3QgYSBCdWZmZXIgb3Igc3RyaW5nJyk7XG5cbiAgaWYgKCFpc0J1ZmZlcilcbiAgICBlbmNvZGluZyB8fCAoZW5jb2RpbmcgPSAndXRmOCcpO1xuXG4gIHZhciBkYXRhTGVuID0gKGlzQnVmZmVyID8gZGF0YS5sZW5ndGggOiBCdWZmZXIuYnl0ZUxlbmd0aChkYXRhLCBlbmNvZGluZykpO1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBkYXRhTGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVNQT05TRS5EQVRBO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBkYXRhTGVuLCA5KTtcbiAgaWYgKGRhdGFMZW4pIHtcbiAgICBpZiAoaXNCdWZmZXIpXG4gICAgICBkYXRhLmNvcHkoYnVmLCAxMyk7XG4gICAgZWxzZVxuICAgICAgYnVmLndyaXRlKGRhdGEsIDEzLCBkYXRhTGVuLCBlbmNvZGluZyk7XG4gIH1cblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgREFUQScpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uKGlkLCBuYW1lcykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShuYW1lcykpIHtcbiAgICBpZiAodHlwZW9mIG5hbWVzICE9PSAnb2JqZWN0JyB8fCBuYW1lcyA9PT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcignbmFtZXMgaXMgbm90IGFuIG9iamVjdCBvciBhcnJheScpO1xuICAgIG5hbWVzID0gWyBuYW1lcyBdO1xuICB9XG5cbiAgdmFyIGNvdW50ID0gbmFtZXMubGVuZ3RoO1xuICB2YXIgbmFtZXNMZW4gPSAwO1xuICB2YXIgbmFtZUF0dHJzO1xuICB2YXIgYXR0cnMgPSBbXTtcbiAgdmFyIG5hbWU7XG4gIHZhciBmaWxlbmFtZTtcbiAgdmFyIGxvbmduYW1lO1xuICB2YXIgYXR0cjtcbiAgdmFyIGxlbjtcbiAgdmFyIGxlbjI7XG4gIHZhciBidWY7XG4gIHZhciBwO1xuICB2YXIgaTtcbiAgdmFyIGo7XG4gIHZhciBrO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgbmFtZSA9IG5hbWVzW2ldO1xuICAgIGZpbGVuYW1lID0gKCFuYW1lIHx8ICFuYW1lLmZpbGVuYW1lIHx8IHR5cGVvZiBuYW1lLmZpbGVuYW1lICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IG5hbWUuZmlsZW5hbWUpO1xuICAgIG5hbWVzTGVuICs9IDQgKyBCdWZmZXIuYnl0ZUxlbmd0aChmaWxlbmFtZSk7XG4gICAgbG9uZ25hbWUgPSAoIW5hbWUgfHwgIW5hbWUubG9uZ25hbWUgfHwgdHlwZW9mIG5hbWUubG9uZ25hbWUgIT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgIDogbmFtZS5sb25nbmFtZSk7XG4gICAgbmFtZXNMZW4gKz0gNCArIEJ1ZmZlci5ieXRlTGVuZ3RoKGxvbmduYW1lKTtcblxuICAgIGlmICh0eXBlb2YgbmFtZS5hdHRycyA9PT0gJ29iamVjdCcgJiYgbmFtZS5hdHRycyAhPT0gbnVsbCkge1xuICAgICAgbmFtZUF0dHJzID0gYXR0cnNUb0J5dGVzKG5hbWUuYXR0cnMpO1xuICAgICAgbmFtZXNMZW4gKz0gNCArIG5hbWVBdHRycy5uYnl0ZXM7XG4gICAgICBhdHRycy5wdXNoKG5hbWVBdHRycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWVzTGVuICs9IDQ7XG4gICAgICBhdHRycy5wdXNoKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgbmFtZXNMZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFU1BPTlNFLk5BTUU7XG4gIHdyaXRlVUludDMyQkUoYnVmLCBpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNvdW50LCA5KTtcblxuICBwID0gMTM7XG5cbiAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICBuYW1lID0gbmFtZXNbaV07XG5cbiAgICBmaWxlbmFtZSA9ICghbmFtZSB8fCAhbmFtZS5maWxlbmFtZSB8fCB0eXBlb2YgbmFtZS5maWxlbmFtZSAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgOiBuYW1lLmZpbGVuYW1lKTtcbiAgICBsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChmaWxlbmFtZSk7XG4gICAgd3JpdGVVSW50MzJCRShidWYsIGxlbiwgcCk7XG4gICAgcCArPSA0O1xuICAgIGlmIChsZW4pIHtcbiAgICAgIGJ1Zi53cml0ZShmaWxlbmFtZSwgcCwgbGVuLCAndXRmOCcpO1xuICAgICAgcCArPSBsZW47XG4gICAgfVxuXG4gICAgbG9uZ25hbWUgPSAoIW5hbWUgfHwgIW5hbWUubG9uZ25hbWUgfHwgdHlwZW9mIG5hbWUubG9uZ25hbWUgIT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgIDogbmFtZS5sb25nbmFtZSk7XG4gICAgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobG9uZ25hbWUpO1xuICAgIHdyaXRlVUludDMyQkUoYnVmLCBsZW4sIHApO1xuICAgIHAgKz0gNDtcbiAgICBpZiAobGVuKSB7XG4gICAgICBidWYud3JpdGUobG9uZ25hbWUsIHAsIGxlbiwgJ3V0ZjgnKTtcbiAgICAgIHAgKz0gbGVuO1xuICAgIH1cblxuICAgIGF0dHIgPSBhdHRyc1tpXTtcbiAgICBpZiAoYXR0cikge1xuICAgICAgd3JpdGVVSW50MzJCRShidWYsIGF0dHIuZmxhZ3MsIHApO1xuICAgICAgcCArPSA0O1xuICAgICAgaWYgKGF0dHIuZmxhZ3MgJiYgYXR0ci5ieXRlcykge1xuICAgICAgICB2YXIgYnl0ZXMgPSBhdHRyLmJ5dGVzO1xuICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSBieXRlcy5sZW5ndGg7IGogPCBsZW47ICsrailcbiAgICAgICAgICBmb3IgKGsgPSAwLCBsZW4yID0gYnl0ZXNbal0ubGVuZ3RoOyBrIDwgbGVuMjsgKytrKVxuICAgICAgICAgICAgYnVmW3ArK10gPSBieXRlc1tqXVtrXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVVSW50MzJCRShidWYsIDAsIHApO1xuICAgICAgcCArPSA0O1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBOQU1FJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5hdHRycyA9IGZ1bmN0aW9uKGlkLCBhdHRycykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIGlmICh0eXBlb2YgYXR0cnMgIT09ICdvYmplY3QnIHx8IGF0dHJzID09PSBudWxsKVxuICAgIHRocm93IG5ldyBFcnJvcignYXR0cnMgaXMgbm90IGFuIG9iamVjdCcpO1xuXG4gIHZhciBpbmZvID0gYXR0cnNUb0J5dGVzKGF0dHJzKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgaW5mby5uYnl0ZXMpO1xuICB2YXIgcCA9IDEzO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFU1BPTlNFLkFUVFJTO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBpbmZvLmZsYWdzLCA5KTtcblxuICBpZiAoaW5mby5mbGFncyAmJiBpbmZvLmJ5dGVzKSB7XG4gICAgdmFyIGJ5dGVzID0gaW5mby5ieXRlcztcbiAgICBmb3IgKHZhciBqID0gMCwgbGVuID0gYnl0ZXMubGVuZ3RoOyBqIDwgbGVuOyArK2opXG4gICAgICBmb3IgKHZhciBrID0gMCwgbGVuMiA9IGJ5dGVzW2pdLmxlbmd0aDsgayA8IGxlbjI7ICsraylcbiAgICAgICAgYnVmW3ArK10gPSBieXRlc1tqXVtrXTtcbiAgfVxuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBBVFRSUycpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuXG5mdW5jdGlvbiByZWFkQXR0cnMoYnVmLCBwLCBzdHJlYW0sIGNhbGxiYWNrKSB7XG4gIC8qXG4gICAgdWludDMyICAgZmxhZ3NcbiAgICB1aW50NjQgICBzaXplICAgICAgICAgICBwcmVzZW50IG9ubHkgaWYgZmxhZyBTU0hfRklMRVhGRVJfQVRUUl9TSVpFXG4gICAgdWludDMyICAgdWlkICAgICAgICAgICAgcHJlc2VudCBvbmx5IGlmIGZsYWcgU1NIX0ZJTEVYRkVSX0FUVFJfVUlER0lEXG4gICAgdWludDMyICAgZ2lkICAgICAgICAgICAgcHJlc2VudCBvbmx5IGlmIGZsYWcgU1NIX0ZJTEVYRkVSX0FUVFJfVUlER0lEXG4gICAgdWludDMyICAgcGVybWlzc2lvbnMgICAgcHJlc2VudCBvbmx5IGlmIGZsYWcgU1NIX0ZJTEVYRkVSX0FUVFJfUEVSTUlTU0lPTlNcbiAgICB1aW50MzIgICBhdGltZSAgICAgICAgICBwcmVzZW50IG9ubHkgaWYgZmxhZyBTU0hfRklMRVhGRVJfQUNNT0RUSU1FXG4gICAgdWludDMyICAgbXRpbWUgICAgICAgICAgcHJlc2VudCBvbmx5IGlmIGZsYWcgU1NIX0ZJTEVYRkVSX0FDTU9EVElNRVxuICAgIHVpbnQzMiAgIGV4dGVuZGVkX2NvdW50IHByZXNlbnQgb25seSBpZiBmbGFnIFNTSF9GSUxFWEZFUl9BVFRSX0VYVEVOREVEXG4gICAgc3RyaW5nICAgZXh0ZW5kZWRfdHlwZVxuICAgIHN0cmluZyAgIGV4dGVuZGVkX2RhdGFcbiAgICAuLi4gICAgICBtb3JlIGV4dGVuZGVkIGRhdGEgKGV4dGVuZGVkX3R5cGUgLSBleHRlbmRlZF9kYXRhIHBhaXJzKSxcbiAgICAgICAgICAgICAgIHNvIHRoYXQgbnVtYmVyIG9mIHBhaXJzIGVxdWFscyBleHRlbmRlZF9jb3VudFxuICAqL1xuICB2YXIgZmxhZ3MgPSByZWFkVUludDMyQkUoYnVmLCBwKTtcbiAgdmFyIGF0dHJzID0gbmV3IFN0YXRzKCk7XG5cbiAgcCArPSA0O1xuXG4gIGlmIChmbGFncyAmIEFUVFIuU0laRSkge1xuICAgIHZhciBzaXplID0gcmVhZFVJbnQ2NEJFKGJ1ZiwgcCwgc3RyZWFtLCBjYWxsYmFjayk7XG4gICAgaWYgKHNpemUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGF0dHJzLnNpemUgPSBzaXplO1xuICAgIHAgKz0gODtcbiAgfVxuICBpZiAoZmxhZ3MgJiBBVFRSLlVJREdJRCkge1xuICAgIHZhciB1aWQ7XG4gICAgdmFyIGdpZDtcbiAgICB1aWQgPSByZWFkSW50KGJ1ZiwgcCwgdGhpcywgY2FsbGJhY2spO1xuICAgIGlmICh1aWQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGF0dHJzLnVpZCA9IHVpZDtcbiAgICBwICs9IDQ7XG4gICAgZ2lkID0gcmVhZEludChidWYsIHAsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICBpZiAoZ2lkID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBhdHRycy5naWQgPSBnaWQ7XG4gICAgcCArPSA0O1xuICB9XG4gIGlmIChmbGFncyAmIEFUVFIuUEVSTUlTU0lPTlMpIHtcbiAgICB2YXIgbW9kZSA9IHJlYWRJbnQoYnVmLCBwLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgaWYgKG1vZGUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGF0dHJzLm1vZGUgPSBtb2RlO1xuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgYXR0cnMucGVybWlzc2lvbnMgPSBtb2RlO1xuICAgIHAgKz0gNDtcbiAgfVxuICBpZiAoZmxhZ3MgJiBBVFRSLkFDTU9EVElNRSkge1xuICAgIHZhciBhdGltZTtcbiAgICB2YXIgbXRpbWU7XG4gICAgYXRpbWUgPSByZWFkSW50KGJ1ZiwgcCwgdGhpcywgY2FsbGJhY2spO1xuICAgIGlmIChhdGltZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgYXR0cnMuYXRpbWUgPSBhdGltZTtcbiAgICBwICs9IDQ7XG4gICAgbXRpbWUgPSByZWFkSW50KGJ1ZiwgcCwgdGhpcywgY2FsbGJhY2spO1xuICAgIGlmIChtdGltZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgYXR0cnMubXRpbWUgPSBtdGltZTtcbiAgICBwICs9IDQ7XG4gIH1cbiAgaWYgKGZsYWdzICYgQVRUUi5FWFRFTkRFRCkge1xuICAgIC8vIFRPRE86IHJlYWQvcGFyc2UgZXh0ZW5kZWQgZGF0YVxuICAgIHZhciBleHRjb3VudCA9IHJlYWRJbnQoYnVmLCBwLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgaWYgKGV4dGNvdW50ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBwICs9IDQ7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbjsgaSA8IGV4dGNvdW50OyArK2kpIHtcbiAgICAgIGxlbiA9IHJlYWRJbnQoYnVmLCBwLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICBpZiAobGVuID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgcCArPSA0ICsgbGVuO1xuICAgIH1cbiAgfVxuXG4gIGJ1Zi5fcG9zID0gcDtcblxuICByZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIHJlYWRVSW50NjRCRShidWZmZXIsIHAsIHN0cmVhbSwgY2FsbGJhY2spIHtcbiAgaWYgKChidWZmZXIubGVuZ3RoIC0gcCkgPCA4KSB7XG4gICAgc3RyZWFtICYmIHN0cmVhbS5fY2xlYW51cChjYWxsYmFjayk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHZhbCA9IDA7XG5cbiAgZm9yICh2YXIgbGVuID0gcCArIDg7IHAgPCBsZW47ICsrcCkge1xuICAgIHZhbCAqPSAyNTY7XG4gICAgdmFsICs9IGJ1ZmZlcltwXTtcbiAgfVxuXG4gIGJ1ZmZlci5fcG9zID0gcDtcblxuICByZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiBhdHRyc1RvQnl0ZXMoYXR0cnMpIHtcbiAgdmFyIGZsYWdzID0gMDtcbiAgdmFyIGF0dHJCeXRlcyA9IDA7XG4gIHZhciByZXQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuXG4gIGlmICh0eXBlb2YgYXR0cnMgIT09ICdvYmplY3QnIHx8IGF0dHJzID09PSBudWxsKVxuICAgIHJldHVybiB7IGZsYWdzOiBmbGFncywgbmJ5dGVzOiBhdHRyQnl0ZXMsIGJ5dGVzOiByZXQgfTtcblxuICBpZiAodHlwZW9mIGF0dHJzLnNpemUgPT09ICdudW1iZXInKSB7XG4gICAgZmxhZ3MgfD0gQVRUUi5TSVpFO1xuICAgIGF0dHJCeXRlcyArPSA4O1xuICAgIHZhciBzaXplQnl0ZXMgPSBuZXcgQXJyYXkoOCk7XG4gICAgdmFyIHZhbCA9IGF0dHJzLnNpemU7XG4gICAgZm9yIChpID0gNzsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHNpemVCeXRlc1tpXSA9IHZhbCAmIDB4RkY7XG4gICAgICB2YWwgLz0gMjU2O1xuICAgIH1cbiAgICByZXQucHVzaChzaXplQnl0ZXMpO1xuICB9XG4gIGlmICh0eXBlb2YgYXR0cnMudWlkID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYXR0cnMuZ2lkID09PSAnbnVtYmVyJykge1xuICAgIGZsYWdzIHw9IEFUVFIuVUlER0lEO1xuICAgIGF0dHJCeXRlcyArPSA4O1xuICAgIHJldC5wdXNoKFsoYXR0cnMudWlkID4+IDI0KSAmIDB4RkYsIChhdHRycy51aWQgPj4gMTYpICYgMHhGRixcbiAgICAgICAgICAgICAgKGF0dHJzLnVpZCA+PiA4KSAmIDB4RkYsIGF0dHJzLnVpZCAmIDB4RkZdKTtcbiAgICByZXQucHVzaChbKGF0dHJzLmdpZCA+PiAyNCkgJiAweEZGLCAoYXR0cnMuZ2lkID4+IDE2KSAmIDB4RkYsXG4gICAgICAgICAgICAgIChhdHRycy5naWQgPj4gOCkgJiAweEZGLCBhdHRycy5naWQgJiAweEZGXSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBhdHRycy5wZXJtaXNzaW9ucyA9PT0gJ251bWJlcidcbiAgICAgIHx8IHR5cGVvZiBhdHRycy5wZXJtaXNzaW9ucyA9PT0gJ3N0cmluZydcbiAgICAgIHx8IHR5cGVvZiBhdHRycy5tb2RlID09PSAnbnVtYmVyJ1xuICAgICAgfHwgdHlwZW9mIGF0dHJzLm1vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIG1vZGUgPSBtb2RlTnVtKGF0dHJzLm1vZGUgfHwgYXR0cnMucGVybWlzc2lvbnMpO1xuICAgIGZsYWdzIHw9IEFUVFIuUEVSTUlTU0lPTlM7XG4gICAgYXR0ckJ5dGVzICs9IDQ7XG4gICAgcmV0LnB1c2goWyhtb2RlID4+IDI0KSAmIDB4RkYsXG4gICAgICAgICAgICAgIChtb2RlID4+IDE2KSAmIDB4RkYsXG4gICAgICAgICAgICAgIChtb2RlID4+IDgpICYgMHhGRixcbiAgICAgICAgICAgICAgbW9kZSAmIDB4RkZdKTtcbiAgfVxuICBpZiAoKHR5cGVvZiBhdHRycy5hdGltZSA9PT0gJ251bWJlcicgfHwgaXNEYXRlKGF0dHJzLmF0aW1lKSlcbiAgICAgICYmICh0eXBlb2YgYXR0cnMubXRpbWUgPT09ICdudW1iZXInIHx8IGlzRGF0ZShhdHRycy5tdGltZSkpKSB7XG4gICAgdmFyIGF0aW1lID0gdG9Vbml4VGltZXN0YW1wKGF0dHJzLmF0aW1lKTtcbiAgICB2YXIgbXRpbWUgPSB0b1VuaXhUaW1lc3RhbXAoYXR0cnMubXRpbWUpO1xuXG4gICAgZmxhZ3MgfD0gQVRUUi5BQ01PRFRJTUU7XG4gICAgYXR0ckJ5dGVzICs9IDg7XG4gICAgcmV0LnB1c2goWyhhdGltZSA+PiAyNCkgJiAweEZGLCAoYXRpbWUgPj4gMTYpICYgMHhGRixcbiAgICAgICAgICAgICAgKGF0aW1lID4+IDgpICYgMHhGRiwgYXRpbWUgJiAweEZGXSk7XG4gICAgcmV0LnB1c2goWyhtdGltZSA+PiAyNCkgJiAweEZGLCAobXRpbWUgPj4gMTYpICYgMHhGRixcbiAgICAgICAgICAgICAgKG10aW1lID4+IDgpICYgMHhGRiwgbXRpbWUgJiAweEZGXSk7XG4gIH1cbiAgLy8gVE9ETzogZXh0ZW5kZWQgYXR0cmlidXRlc1xuXG4gIHJldHVybiB7IGZsYWdzOiBmbGFncywgbmJ5dGVzOiBhdHRyQnl0ZXMsIGJ5dGVzOiByZXQgfTtcbn1cblxuZnVuY3Rpb24gdG9Vbml4VGltZXN0YW1wKHRpbWUpIHtcbiAgaWYgKHR5cGVvZiB0aW1lID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odGltZSkpXG4gICAgcmV0dXJuIHRpbWU7XG4gIGVsc2UgaWYgKGlzRGF0ZSh0aW1lKSlcbiAgICByZXR1cm4gcGFyc2VJbnQodGltZS5nZXRUaW1lKCkgLyAxMDAwLCAxMCk7XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIHRpbWU6ICcgKyB0aW1lKTtcbn1cblxuZnVuY3Rpb24gbW9kZU51bShtb2RlKSB7XG4gIGlmICh0eXBlb2YgbW9kZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKG1vZGUpKVxuICAgIHJldHVybiBtb2RlO1xuICBlbHNlIGlmICh0eXBlb2YgbW9kZSA9PT0gJ3N0cmluZycpXG4gICAgcmV0dXJuIG1vZGVOdW0ocGFyc2VJbnQobW9kZSwgOCkpO1xuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSBtb2RlOiAnICsgbW9kZSk7XG59XG5cbnZhciBzdHJpbmdGbGFnTWFwID0ge1xuICAncic6IE9QRU5fTU9ERS5SRUFELFxuICAncisnOiBPUEVOX01PREUuUkVBRCB8IE9QRU5fTU9ERS5XUklURSxcbiAgJ3cnOiBPUEVOX01PREUuVFJVTkMgfCBPUEVOX01PREUuQ1JFQVQgfCBPUEVOX01PREUuV1JJVEUsXG4gICd3eCc6IE9QRU5fTU9ERS5UUlVOQyB8IE9QRU5fTU9ERS5DUkVBVCB8IE9QRU5fTU9ERS5XUklURSB8IE9QRU5fTU9ERS5FWENMLFxuICAneHcnOiBPUEVOX01PREUuVFJVTkMgfCBPUEVOX01PREUuQ1JFQVQgfCBPUEVOX01PREUuV1JJVEUgfCBPUEVOX01PREUuRVhDTCxcbiAgJ3crJzogT1BFTl9NT0RFLlRSVU5DIHwgT1BFTl9NT0RFLkNSRUFUIHwgT1BFTl9NT0RFLlJFQUQgfCBPUEVOX01PREUuV1JJVEUsXG4gICd3eCsnOiBPUEVOX01PREUuVFJVTkMgfCBPUEVOX01PREUuQ1JFQVQgfCBPUEVOX01PREUuUkVBRCB8IE9QRU5fTU9ERS5XUklURVxuICAgICAgICAgfCBPUEVOX01PREUuRVhDTCxcbiAgJ3h3Kyc6IE9QRU5fTU9ERS5UUlVOQyB8IE9QRU5fTU9ERS5DUkVBVCB8IE9QRU5fTU9ERS5SRUFEIHwgT1BFTl9NT0RFLldSSVRFXG4gICAgICAgICB8IE9QRU5fTU9ERS5FWENMLFxuICAnYSc6IE9QRU5fTU9ERS5BUFBFTkQgfCBPUEVOX01PREUuQ1JFQVQgfCBPUEVOX01PREUuV1JJVEUsXG4gICdheCc6IE9QRU5fTU9ERS5BUFBFTkQgfCBPUEVOX01PREUuQ1JFQVQgfCBPUEVOX01PREUuV1JJVEUgfCBPUEVOX01PREUuRVhDTCxcbiAgJ3hhJzogT1BFTl9NT0RFLkFQUEVORCB8IE9QRU5fTU9ERS5DUkVBVCB8IE9QRU5fTU9ERS5XUklURSB8IE9QRU5fTU9ERS5FWENMLFxuICAnYSsnOiBPUEVOX01PREUuQVBQRU5EIHwgT1BFTl9NT0RFLkNSRUFUIHwgT1BFTl9NT0RFLlJFQUQgfCBPUEVOX01PREUuV1JJVEUsXG4gICdheCsnOiBPUEVOX01PREUuQVBQRU5EIHwgT1BFTl9NT0RFLkNSRUFUIHwgT1BFTl9NT0RFLlJFQUQgfCBPUEVOX01PREUuV1JJVEVcbiAgICAgICAgIHwgT1BFTl9NT0RFLkVYQ0wsXG4gICd4YSsnOiBPUEVOX01PREUuQVBQRU5EIHwgT1BFTl9NT0RFLkNSRUFUIHwgT1BFTl9NT0RFLlJFQUQgfCBPUEVOX01PREUuV1JJVEVcbiAgICAgICAgIHwgT1BFTl9NT0RFLkVYQ0xcbn07XG52YXIgc3RyaW5nRmxhZ01hcEtleXMgPSBPYmplY3Qua2V5cyhzdHJpbmdGbGFnTWFwKTtcblxuZnVuY3Rpb24gc3RyaW5nVG9GbGFncyhzdHIpIHtcbiAgdmFyIGZsYWdzID0gc3RyaW5nRmxhZ01hcFtzdHJdO1xuICBpZiAoZmxhZ3MgIT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmxhZ3M7XG4gIHJldHVybiBudWxsO1xufVxuU0ZUUFN0cmVhbS5zdHJpbmdUb0ZsYWdzID0gc3RyaW5nVG9GbGFncztcblxuZnVuY3Rpb24gZmxhZ3NUb1N0cmluZyhmbGFncykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ0ZsYWdNYXBLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGtleSA9IHN0cmluZ0ZsYWdNYXBLZXlzW2ldO1xuICAgIGlmIChzdHJpbmdGbGFnTWFwW2tleV0gPT09IGZsYWdzKVxuICAgICAgcmV0dXJuIGtleTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblNGVFBTdHJlYW0uZmxhZ3NUb1N0cmluZyA9IGZsYWdzVG9TdHJpbmc7XG5cbmZ1bmN0aW9uIFN0YXRzKGluaXRpYWwpIHtcbiAgdGhpcy5tb2RlID0gKGluaXRpYWwgJiYgaW5pdGlhbC5tb2RlKTtcbiAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMubW9kZTsgLy8gYmFja3dhcmRzIGNvbXBhdGlibGl0eVxuICB0aGlzLnVpZCA9IChpbml0aWFsICYmIGluaXRpYWwudWlkKTtcbiAgdGhpcy5naWQgPSAoaW5pdGlhbCAmJiBpbml0aWFsLmdpZCk7XG4gIHRoaXMuc2l6ZSA9IChpbml0aWFsICYmIGluaXRpYWwuc2l6ZSk7XG4gIHRoaXMuYXRpbWUgPSAoaW5pdGlhbCAmJiBpbml0aWFsLmF0aW1lKTtcbiAgdGhpcy5tdGltZSA9IChpbml0aWFsICYmIGluaXRpYWwubXRpbWUpO1xufVxuU3RhdHMucHJvdG90eXBlLl9jaGVja01vZGVQcm9wZXJ0eSA9IGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gIHJldHVybiAoKHRoaXMubW9kZSAmIGNvbnN0YW50cy5TX0lGTVQpID09PSBwcm9wZXJ0eSk7XG59O1xuU3RhdHMucHJvdG90eXBlLmlzRGlyZWN0b3J5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShjb25zdGFudHMuU19JRkRJUik7XG59O1xuU3RhdHMucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoY29uc3RhbnRzLlNfSUZSRUcpO1xufTtcblN0YXRzLnByb3RvdHlwZS5pc0Jsb2NrRGV2aWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShjb25zdGFudHMuU19JRkJMSyk7XG59O1xuU3RhdHMucHJvdG90eXBlLmlzQ2hhcmFjdGVyRGV2aWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShjb25zdGFudHMuU19JRkNIUik7XG59O1xuU3RhdHMucHJvdG90eXBlLmlzU3ltYm9saWNMaW5rID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShjb25zdGFudHMuU19JRkxOSyk7XG59O1xuU3RhdHMucHJvdG90eXBlLmlzRklGTyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoY29uc3RhbnRzLlNfSUZJRk8pO1xufTtcblN0YXRzLnByb3RvdHlwZS5pc1NvY2tldCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoY29uc3RhbnRzLlNfSUZTT0NLKTtcbn07XG5TRlRQU3RyZWFtLlN0YXRzID0gU3RhdHM7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSZWFkU3RyZWFtL1dyaXRlU3RyZWFtLXJlbGF0ZWRcbnZhciBmc0NvbXBhdCA9IHJlcXVpcmUoJy4vbm9kZS1mcy1jb21wYXQnKTtcbnZhciB2YWxpZGF0ZU51bWJlciA9IGZzQ29tcGF0LnZhbGlkYXRlTnVtYmVyO1xudmFyIGRlc3Ryb3lJbXBsID0gZnNDb21wYXQuZGVzdHJveUltcGw7XG52YXIgRVJSX09VVF9PRl9SQU5HRSA9IGZzQ29tcGF0LkVSUl9PVVRfT0ZfUkFOR0U7XG52YXIgRVJSX0lOVkFMSURfQVJHX1RZUEUgPSBmc0NvbXBhdC5FUlJfSU5WQUxJRF9BUkdfVFlQRTtcblxudmFyIGtNaW5Qb29sU3BhY2UgPSAxMjg7XG5cbnZhciBwb29sO1xuLy8gSXQgY2FuIGhhcHBlbiB0aGF0IHdlIGV4cGVjdCB0byByZWFkIGEgbGFyZ2UgY2h1bmsgb2YgZGF0YSwgYW5kIHJlc2VydmVcbi8vIGEgbGFyZ2UgY2h1bmsgb2YgdGhlIHBvb2wgYWNjb3JkaW5nbHksIGJ1dCB0aGUgcmVhZCgpIGNhbGwgb25seSBmaWxsZWRcbi8vIGEgcG9ydGlvbiBvZiBpdC4gSWYgYSBjb25jdXJyZW50bHkgZXhlY3V0aW5nIHJlYWQoKSB0aGVuIHVzZXMgdGhlIHNhbWUgcG9vbCxcbi8vIHRoZSBcInJlc2VydmVkXCIgcG9ydGlvbiBjYW5ub3QgYmUgdXNlZCwgc28gd2UgYWxsb3cgaXQgdG8gYmUgcmUtdXNlZCBhcyBhXG4vLyBuZXcgcG9vbCBsYXRlci5cbnZhciBwb29sRnJhZ21lbnRzID0gW107XG5cbmZ1bmN0aW9uIGFsbG9jTmV3UG9vbChwb29sU2l6ZSkge1xuICBpZiAocG9vbEZyYWdtZW50cy5sZW5ndGggPiAwKVxuICAgIHBvb2wgPSBwb29sRnJhZ21lbnRzLnBvcCgpO1xuICBlbHNlXG4gICAgcG9vbCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShwb29sU2l6ZSk7XG4gIHBvb2wudXNlZCA9IDA7XG59XG5cbi8vIENoZWNrIHRoZSBgdGhpcy5zdGFydGAgYW5kIGB0aGlzLmVuZGAgb2Ygc3RyZWFtLlxuZnVuY3Rpb24gY2hlY2tQb3NpdGlvbihwb3MsIG5hbWUpIHtcbiAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihwb3MpKSB7XG4gICAgdmFsaWRhdGVOdW1iZXIocG9zLCBuYW1lKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocG9zKSlcbiAgICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsICdhbiBpbnRlZ2VyJywgcG9zKTtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCAnPj0gMCBhbmQgPD0gMiAqKiA1MyAtIDEnLCBwb3MpO1xuICB9XG4gIGlmIChwb3MgPCAwKVxuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsICc+PSAwIGFuZCA8PSAyICoqIDUzIC0gMScsIHBvcyk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kVXBUb011bHRpcGxlT2Y4KG4pIHtcbiAgcmV0dXJuIChuICsgNykgJiB+NzsgIC8vIEFsaWduIHRvIDggYnl0ZSBib3VuZGFyeS5cbn1cblxuZnVuY3Rpb24gUmVhZFN0cmVhbShzZnRwLCBwYXRoLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG4gICAgb3B0aW9ucyA9IHt9O1xuICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpXG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfTtcbiAgZWxzZSBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJvcHRpb25zXCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBvYmplY3QnKTtcbiAgZWxzZVxuICAgIG9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG9wdGlvbnMpO1xuXG4gIC8vIEEgbGl0dGxlIGJpdCBiaWdnZXIgYnVmZmVyIGFuZCB3YXRlciBtYXJrcyBieSBkZWZhdWx0XG4gIGlmIChvcHRpb25zLmhpZ2hXYXRlck1hcmsgPT09IHVuZGVmaW5lZClcbiAgICBvcHRpb25zLmhpZ2hXYXRlck1hcmsgPSA2NCAqIDEwMjQ7XG5cbiAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXQgZG8gbm90IGVtaXQgY2xvc2Ugb24gZGVzdHJveS5cbiAgb3B0aW9ucy5lbWl0Q2xvc2UgPSBmYWxzZTtcblxuICBSZWFkYWJsZVN0cmVhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMucGF0aCA9IHBhdGg7XG4gIHRoaXMuZmxhZ3MgPSBvcHRpb25zLmZsYWdzID09PSB1bmRlZmluZWQgPyAncicgOiBvcHRpb25zLmZsYWdzO1xuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgPT09IHVuZGVmaW5lZCA/IDBvNjY2IDogb3B0aW9ucy5tb2RlO1xuXG4gIHRoaXMuc3RhcnQgPSBvcHRpb25zLnN0YXJ0O1xuICB0aGlzLmVuZCA9IG9wdGlvbnMuZW5kO1xuICB0aGlzLmF1dG9DbG9zZSA9IG9wdGlvbnMuYXV0b0Nsb3NlID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy5hdXRvQ2xvc2U7XG4gIHRoaXMucG9zID0gMDtcbiAgdGhpcy5ieXRlc1JlYWQgPSAwO1xuICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuXG4gIHRoaXMuaGFuZGxlID0gb3B0aW9ucy5oYW5kbGUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvcHRpb25zLmhhbmRsZTtcbiAgdGhpcy5zZnRwID0gc2Z0cDtcbiAgdGhpcy5fb3BlbmluZyA9IGZhbHNlO1xuXG4gIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjaGVja1Bvc2l0aW9uKHRoaXMuc3RhcnQsICdzdGFydCcpO1xuXG4gICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICB9XG5cbiAgaWYgKHRoaXMuZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmVuZCA9IEluZmluaXR5O1xuICB9IGVsc2UgaWYgKHRoaXMuZW5kICE9PSBJbmZpbml0eSkge1xuICAgIGNoZWNrUG9zaXRpb24odGhpcy5lbmQsICdlbmQnKTtcblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zdGFydCA+IHRoaXMuZW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShcbiAgICAgICAgJ3N0YXJ0JyxcbiAgICAgICAgYDw9IFwiZW5kXCIgKGhlcmU6ICR7dGhpcy5lbmR9KWAsXG4gICAgICAgIHRoaXMuc3RhcnRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlKVxuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gIH0pO1xuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMuaGFuZGxlKSlcbiAgICB0aGlzLm9wZW4oKTtcbn1cbmluaGVyaXRzKFJlYWRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKTtcblxuUmVhZFN0cmVhbS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fb3BlbmluZylcbiAgICByZXR1cm47XG5cbiAgdGhpcy5fb3BlbmluZyA9IHRydWU7XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICB0aGlzLnNmdHAub3Blbih0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgKGVyLCBoYW5kbGUpID0+IHtcbiAgICB0aGlzLl9vcGVuaW5nID0gZmFsc2U7XG5cbiAgICBpZiAoZXIpIHtcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICBpZiAodGhpcy5hdXRvQ2xvc2UpXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlID0gaGFuZGxlO1xuICAgIHRoaXMuZW1pdCgnb3BlbicsIGhhbmRsZSk7XG4gICAgdGhpcy5lbWl0KCdyZWFkeScpO1xuICAgIC8vIHN0YXJ0IHRoZSBmbG93IG9mIGRhdGEuXG4gICAgdGhpcy5yZWFkKCk7XG4gIH0pO1xufTtcblxuUmVhZFN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMuaGFuZGxlKSkge1xuICAgIHJldHVybiB0aGlzLm9uY2UoJ29wZW4nLCBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX3JlYWQobik7XG4gICAgfSk7XG4gIH1cblxuICAvLyBYWFg6IHNhZmUgdG8gcmVtb3ZlIHRoaXM/XG4gIGlmICh0aGlzLmRlc3Ryb3llZClcbiAgICByZXR1cm47XG5cbiAgaWYgKCFwb29sIHx8IHBvb2wubGVuZ3RoIC0gcG9vbC51c2VkIDwga01pblBvb2xTcGFjZSkge1xuICAgIC8vIGRpc2NhcmQgdGhlIG9sZCBwb29sLlxuICAgIGFsbG9jTmV3UG9vbCh0aGlzLnJlYWRhYmxlSGlnaFdhdGVyTWFya1xuICAgICAgICAgICAgICAgICB8fCB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICB9XG5cbiAgLy8gR3JhYiBhbm90aGVyIHJlZmVyZW5jZSB0byB0aGUgcG9vbCBpbiB0aGUgY2FzZSB0aGF0IHdoaWxlIHdlJ3JlXG4gIC8vIGluIHRoZSB0aHJlYWQgcG9vbCBhbm90aGVyIHJlYWQoKSBmaW5pc2hlcyB1cCB0aGUgcG9vbCwgYW5kXG4gIC8vIGFsbG9jYXRlcyBhIG5ldyBvbmUuXG4gIHZhciB0aGlzUG9vbCA9IHBvb2w7XG4gIHZhciB0b1JlYWQgPSBNYXRoLm1pbihwb29sLmxlbmd0aCAtIHBvb2wudXNlZCwgbik7XG4gIHZhciBzdGFydCA9IHBvb2wudXNlZDtcblxuICBpZiAodGhpcy5lbmQgIT09IHVuZGVmaW5lZClcbiAgICB0b1JlYWQgPSBNYXRoLm1pbih0aGlzLmVuZCAtIHRoaXMucG9zICsgMSwgdG9SZWFkKTtcblxuICAvLyBBbHJlYWR5IHJlYWQgZXZlcnl0aGluZyB3ZSB3ZXJlIHN1cHBvc2VkIHRvIHJlYWQhXG4gIC8vIHRyZWF0IGFzIEVPRi5cbiAgaWYgKHRvUmVhZCA8PSAwKVxuICAgIHJldHVybiB0aGlzLnB1c2gobnVsbCk7XG5cbiAgLy8gdGhlIGFjdHVhbCByZWFkLlxuICB0aGlzLnNmdHAucmVhZERhdGEodGhpcy5oYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgICAgICAgICAgcG9vbC51c2VkLFxuICAgICAgICAgICAgICAgICAgICAgdG9SZWFkLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MsXG4gICAgICAgICAgICAgICAgICAgICAoZXIsIGJ5dGVzUmVhZCkgPT4ge1xuICAgIGlmIChlcikge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgIGlmICh0aGlzLmF1dG9DbG9zZSlcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBiID0gbnVsbDtcblxuICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgaG93IG11Y2ggZGF0YSB3ZSBoYXZlIGFjdHVhbGx5IHJlYWQsIHJlLXdpbmQgdGhlXG4gICAgLy8gJ3VzZWQnIGZpZWxkIGlmIHdlIGNhbiwgYW5kIG90aGVyd2lzZSBhbGxvdyB0aGUgcmVtYWluZGVyIG9mIG91clxuICAgIC8vIHJlc2VydmF0aW9uIHRvIGJlIHVzZWQgYXMgYSBuZXcgcG9vbCBsYXRlci5cbiAgICBpZiAoc3RhcnQgKyB0b1JlYWQgPT09IHRoaXNQb29sLnVzZWQgJiYgdGhpc1Bvb2wgPT09IHBvb2wpIHtcbiAgICAgIHZhciBuZXdVc2VkID0gdGhpc1Bvb2wudXNlZCArIGJ5dGVzUmVhZCAtIHRvUmVhZDtcbiAgICAgIHRoaXNQb29sLnVzZWQgPSByb3VuZFVwVG9NdWx0aXBsZU9mOChuZXdVc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUm91bmQgZG93biB0byB0aGUgbmV4dCBsb3dlc3QgbXVsdGlwbGUgb2YgOCB0byBlbnN1cmUgdGhlIG5ldyBwb29sXG4gICAgICAvLyBmcmFnbWVudCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyBhcmUgYWxpZ25lZCB0byBhbiA4IGJ5dGUgYm91bmRhcnkuXG4gICAgICB2YXIgYWxpZ25lZEVuZCA9IChzdGFydCArIHRvUmVhZCkgJiB+NztcbiAgICAgIHZhciBhbGlnbmVkU3RhcnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mOChzdGFydCArIGJ5dGVzUmVhZCk7XG4gICAgICBpZiAoYWxpZ25lZEVuZCAtIGFsaWduZWRTdGFydCA+PSBrTWluUG9vbFNwYWNlKVxuICAgICAgICBwb29sRnJhZ21lbnRzLnB1c2godGhpc1Bvb2wuc2xpY2UoYWxpZ25lZFN0YXJ0LCBhbGlnbmVkRW5kKSk7XG4gICAgfVxuXG4gICAgaWYgKGJ5dGVzUmVhZCA+IDApIHtcbiAgICAgIHRoaXMuYnl0ZXNSZWFkICs9IGJ5dGVzUmVhZDtcbiAgICAgIGIgPSB0aGlzUG9vbC5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlc1JlYWQpO1xuICAgIH1cblxuICAgIC8vIE1vdmUgdGhlIHBvb2wgcG9zaXRpb25zLCBhbmQgaW50ZXJuYWwgcG9zaXRpb24gZm9yIHJlYWRpbmcuXG4gICAgdGhpcy5wb3MgKz0gYnl0ZXNSZWFkO1xuXG4gICAgdGhpcy5wdXNoKGIpO1xuICB9KTtcblxuICBwb29sLnVzZWQgPSByb3VuZFVwVG9NdWx0aXBsZU9mOChwb29sLnVzZWQgKyB0b1JlYWQpO1xufTtcblxuaWYgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJylcbiAgUmVhZFN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsO1xuXG5SZWFkU3RyZWFtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uKGVyciwgY2IpIHtcbiAgaWYgKHRoaXMuX29wZW5pbmcgJiYgIUJ1ZmZlci5pc0J1ZmZlcih0aGlzLmhhbmRsZSkpIHtcbiAgICB0aGlzLm9uY2UoJ29wZW4nLCBjbG9zZVN0cmVhbS5iaW5kKG51bGwsIHRoaXMsIGNiLCBlcnIpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjbG9zZVN0cmVhbSh0aGlzLCBjYiwgZXJyKTtcbiAgdGhpcy5oYW5kbGUgPSBudWxsO1xuICB0aGlzLl9vcGVuaW5nID0gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiBjbG9zZVN0cmVhbShzdHJlYW0sIGNiLCBlcnIpIHtcbiAgaWYgKCFzdHJlYW0uaGFuZGxlKVxuICAgIHJldHVybiBvbmNsb3NlKCk7XG5cbiAgc3RyZWFtLnNmdHAuY2xvc2Uoc3RyZWFtLmhhbmRsZSwgb25jbG9zZSk7XG5cbiAgZnVuY3Rpb24gb25jbG9zZShlcikge1xuICAgIGVyID0gZXIgfHwgZXJyO1xuICAgIGNiKGVyKTtcbiAgICBzdHJlYW0uY2xvc2VkID0gdHJ1ZTtcbiAgICBpZiAoIWVyKVxuICAgICAgc3RyZWFtLmVtaXQoJ2Nsb3NlJyk7XG4gIH1cbn1cblxuUmVhZFN0cmVhbS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbihjYikge1xuICB0aGlzLmRlc3Ryb3kobnVsbCwgY2IpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRTdHJlYW0ucHJvdG90eXBlLCAncGVuZGluZycsIHtcbiAgZ2V0KCkgeyByZXR1cm4gdGhpcy5oYW5kbGUgPT09IG51bGw7IH0sXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbmZ1bmN0aW9uIFdyaXRlU3RyZWFtKHNmdHAsIHBhdGgsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcbiAgICBvcHRpb25zID0ge307XG4gIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJylcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogb3B0aW9ucyB9O1xuICBlbHNlIGlmIChvcHRpb25zID09PSBudWxsIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcIm9wdGlvbnNcIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCcpO1xuICBlbHNlXG4gICAgb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUob3B0aW9ucyk7XG5cbiAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXQgZG8gbm90IGVtaXQgY2xvc2Ugb24gZGVzdHJveS5cbiAgb3B0aW9ucy5lbWl0Q2xvc2UgPSBmYWxzZTtcblxuICBXcml0YWJsZVN0cmVhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMucGF0aCA9IHBhdGg7XG4gIHRoaXMuZmxhZ3MgPSBvcHRpb25zLmZsYWdzID09PSB1bmRlZmluZWQgPyAndycgOiBvcHRpb25zLmZsYWdzO1xuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgPT09IHVuZGVmaW5lZCA/IDBvNjY2IDogb3B0aW9ucy5tb2RlO1xuXG4gIHRoaXMuc3RhcnQgPSBvcHRpb25zLnN0YXJ0O1xuICB0aGlzLmF1dG9DbG9zZSA9IG9wdGlvbnMuYXV0b0Nsb3NlID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy5hdXRvQ2xvc2U7XG4gIHRoaXMucG9zID0gMDtcbiAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwO1xuICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuXG4gIHRoaXMuaGFuZGxlID0gb3B0aW9ucy5oYW5kbGUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvcHRpb25zLmhhbmRsZTtcbiAgdGhpcy5zZnRwID0gc2Z0cDtcbiAgdGhpcy5fb3BlbmluZyA9IGZhbHNlO1xuXG4gIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjaGVja1Bvc2l0aW9uKHRoaXMuc3RhcnQsICdzdGFydCcpO1xuXG4gICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuZW5jb2RpbmcpXG4gICAgdGhpcy5zZXREZWZhdWx0RW5jb2Rpbmcob3B0aW9ucy5lbmNvZGluZyk7XG5cbiAgLy8gTm9kZSB2Ni54IG9ubHlcbiAgdGhpcy5vbignZmluaXNoJywgZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQpXG4gICAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlKVxuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gIH0pO1xuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMuaGFuZGxlKSlcbiAgICB0aGlzLm9wZW4oKTtcbn1cbmluaGVyaXRzKFdyaXRlU3RyZWFtLCBXcml0YWJsZVN0cmVhbSk7XG5cbldyaXRlU3RyZWFtLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbihjYikge1xuICBpZiAodGhpcy5hdXRvQ2xvc2UpXG4gICAgdGhpcy5kZXN0cm95KCk7XG4gIGNiKCk7XG59O1xuXG5Xcml0ZVN0cmVhbS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fb3BlbmluZylcbiAgICByZXR1cm47XG5cbiAgdGhpcy5fb3BlbmluZyA9IHRydWU7XG5cbiAgdGhpcy5zZnRwLm9wZW4odGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIChlciwgaGFuZGxlKSA9PiB7XG4gICAgdGhpcy5fb3BlbmluZyA9IGZhbHNlO1xuXG4gICAgaWYgKGVyKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgaWYgKHRoaXMuYXV0b0Nsb3NlKVxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTtcblxuICAgIHZhciB0cnlBZ2FpbiA9IChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgLy8gVHJ5IGNobW9kKCkgZm9yIHNmdHAgc2VydmVycyB0aGF0IG1heSBub3Qgc3VwcG9ydCBmY2htb2QoKSBmb3JcbiAgICAgICAgLy8gd2hhdGV2ZXIgcmVhc29uXG4gICAgICAgIHRoaXMuc2Z0cC5jaG1vZCh0aGlzLnBhdGgsIHRoaXMubW9kZSwgKGVycl8pID0+IHtcbiAgICAgICAgICB0cnlBZ2FpbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTRlRQdjMgcmVxdWlyZXMgYWJzb2x1dGUgb2Zmc2V0cywgbm8gbWF0dGVyIHRoZSBvcGVuIGZsYWcgdXNlZFxuICAgICAgaWYgKHRoaXMuZmxhZ3NbMF0gPT09ICdhJykge1xuICAgICAgICB2YXIgdHJ5U3RhdCA9IChlcnIsIHN0KSA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gVHJ5IHN0YXQoKSBmb3Igc2Z0cCBzZXJ2ZXJzIHRoYXQgbWF5IG5vdCBzdXBwb3J0IGZzdGF0KCkgZm9yXG4gICAgICAgICAgICAvLyB3aGF0ZXZlciByZWFzb25cbiAgICAgICAgICAgIHRoaXMuc2Z0cC5zdGF0KHRoaXMucGF0aCwgKGVycl8sIHN0XykgPT4ge1xuICAgICAgICAgICAgICBpZiAoZXJyXykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0cnlTdGF0KG51bGwsIHN0Xyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnBvcyA9IHN0LnNpemU7XG4gICAgICAgICAgdGhpcy5lbWl0KCdvcGVuJywgaGFuZGxlKTtcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWR5Jyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zZnRwLmZzdGF0KGhhbmRsZSwgdHJ5U3RhdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbWl0KCdvcGVuJywgaGFuZGxlKTtcbiAgICAgIHRoaXMuZW1pdCgncmVhZHknKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZnRwLmZjaG1vZChoYW5kbGUsIHRoaXMubW9kZSwgdHJ5QWdhaW4pO1xuICB9KTtcbn07XG5cbldyaXRlU3RyZWFtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbihkYXRhLCBlbmNvZGluZywgY2IpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICBjb25zdCBlcnIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2RhdGEnLCAnQnVmZmVyJywgZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcy5oYW5kbGUpKSB7XG4gICAgcmV0dXJuIHRoaXMub25jZSgnb3BlbicsIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fd3JpdGUoZGF0YSwgZW5jb2RpbmcsIGNiKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuc2Z0cC53cml0ZURhdGEodGhpcy5oYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zLFxuICAgICAgICAgICAgICAgICAgICAgIChlciwgYnl0ZXMpID0+IHtcbiAgICBpZiAoZXIpIHtcbiAgICAgIGlmICh0aGlzLmF1dG9DbG9zZSlcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICByZXR1cm4gY2IoZXIpO1xuICAgIH1cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBieXRlcztcbiAgICBjYigpO1xuICB9KTtcblxuICB0aGlzLnBvcyArPSBkYXRhLmxlbmd0aDtcbn07XG5cbldyaXRlU3RyZWFtLnByb3RvdHlwZS5fd3JpdGV2ID0gZnVuY3Rpb24oZGF0YSwgY2IpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcy5oYW5kbGUpKSB7XG4gICAgcmV0dXJuIHRoaXMub25jZSgnb3BlbicsIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fd3JpdGV2KGRhdGEsIGNiKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBzZnRwID0gdGhpcy5zZnRwO1xuICB2YXIgaGFuZGxlID0gdGhpcy5oYW5kbGU7XG4gIHZhciB3cml0ZXNMZWZ0ID0gZGF0YS5sZW5ndGg7XG5cbiAgdmFyIG9ud3JpdGUgPSAoZXIsIGJ5dGVzKSA9PiB7XG4gICAgaWYgKGVyKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIHJldHVybiBjYihlcik7XG4gICAgfVxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGJ5dGVzO1xuICAgIGlmICgtLXdyaXRlc0xlZnQgPT09IDApXG4gICAgICBjYigpO1xuICB9O1xuXG4gIC8vIFRPRE86IHRyeSB0byBjb21iaW5lIGNodW5rcyB0byByZWR1Y2UgbnVtYmVyIG9mIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGNodW5rID0gZGF0YVtpXS5jaHVuaztcblxuICAgIHNmdHAud3JpdGVEYXRhKGhhbmRsZSwgY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgdGhpcy5wb3MsIG9ud3JpdGUpO1xuICAgIHRoaXMucG9zICs9IGNodW5rLmxlbmd0aDtcbiAgfVxufTtcblxuaWYgKHR5cGVvZiBXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJylcbiAgV3JpdGVTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3kgPSBSZWFkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95O1xuXG5Xcml0ZVN0cmVhbS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBSZWFkU3RyZWFtLnByb3RvdHlwZS5fZGVzdHJveTtcbldyaXRlU3RyZWFtLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKGNiKSB7XG4gIGlmIChjYikge1xuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub24oJ2Nsb3NlJywgY2IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHdlIGFyZSBub3QgYXV0b0Nsb3NpbmcsIHdlIHNob3VsZCBjYWxsXG4gIC8vIGRlc3Ryb3kgb24gJ2ZpbmlzaCcuXG4gIGlmICghdGhpcy5hdXRvQ2xvc2UpXG4gICAgdGhpcy5vbignZmluaXNoJywgdGhpcy5kZXN0cm95LmJpbmQodGhpcykpO1xuXG4gIHRoaXMuZW5kKCk7XG59O1xuXG4vLyBUaGVyZSBpcyBubyBzaHV0ZG93bigpIGZvciBmaWxlcy5cbldyaXRlU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95U29vbiA9IFdyaXRlU3RyZWFtLnByb3RvdHlwZS5lbmQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0ZVN0cmVhbS5wcm90b3R5cGUsICdwZW5kaW5nJywge1xuICBnZXQoKSB7IHJldHVybiB0aGlzLmhhbmRsZSA9PT0gbnVsbDsgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTRlRQU3RyZWFtO1xuXG4iLCIvLyBDb3B5cmlnaHQgMjAxMSBNYXJrIENhdmFnZSA8bWNhdmFnZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbnZhciBlcnJvcnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xudmFyIHR5cGVzID0gcmVxdWlyZSgnLi90eXBlcycpO1xuXG52YXIgUmVhZGVyID0gcmVxdWlyZSgnLi9yZWFkZXInKTtcbnZhciBXcml0ZXIgPSByZXF1aXJlKCcuL3dyaXRlcicpO1xuXG5cbi8vIC0tLSBFeHBvcnRzXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIFJlYWRlcjogUmVhZGVyLFxuXG4gIFdyaXRlcjogV3JpdGVyXG5cbn07XG5cbmZvciAodmFyIHQgaW4gdHlwZXMpIHtcbiAgaWYgKHR5cGVzLmhhc093blByb3BlcnR5KHQpKVxuICAgIG1vZHVsZS5leHBvcnRzW3RdID0gdHlwZXNbdF07XG59XG5mb3IgKHZhciBlIGluIGVycm9ycykge1xuICBpZiAoZXJyb3JzLmhhc093blByb3BlcnR5KGUpKVxuICAgIG1vZHVsZS5leHBvcnRzW2VdID0gZXJyb3JzW2VdO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTEgTWFyayBDYXZhZ2UgPG1jYXZhZ2VAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZXItYnVmZmVyJykuQnVmZmVyO1xuXG52YXIgQVNOMSA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcbnZhciBlcnJvcnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xuXG5cbi8vIC0tLSBHbG9iYWxzXG5cbnZhciBuZXdJbnZhbGlkQXNuMUVycm9yID0gZXJyb3JzLm5ld0ludmFsaWRBc24xRXJyb3I7XG5cblxuXG4vLyAtLS0gQVBJXG5cbmZ1bmN0aW9uIFJlYWRlcihkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhQnVmZmVyLmlzQnVmZmVyKGRhdGEpKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhIG5vZGUgQnVmZmVyJyk7XG5cbiAgdGhpcy5fYnVmID0gZGF0YTtcbiAgdGhpcy5fc2l6ZSA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFRoZXNlIGhvbGQgdGhlIFwiY3VycmVudFwiIHN0YXRlXG4gIHRoaXMuX2xlbiA9IDA7XG4gIHRoaXMuX29mZnNldCA9IDA7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkZXIucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLl9sZW4pOyB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRlci5wcm90b3R5cGUsICdvZmZzZXQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuX29mZnNldCk7IH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGVyLnByb3RvdHlwZSwgJ3JlbWFpbicsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5fc2l6ZSAtIHRoaXMuX29mZnNldCk7IH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5fYnVmLnNsaWNlKHRoaXMuX29mZnNldCkpOyB9XG59KTtcblxuXG4vKipcbiAqIFJlYWRzIGEgc2luZ2xlIGJ5dGUgYW5kIGFkdmFuY2VzIG9mZnNldDsgeW91IGNhbiBwYXNzIGluIGB0cnVlYCB0byBtYWtlIHRoaXNcbiAqIGEgXCJwZWVrXCIgb3BlcmF0aW9uIChpLmUuLCBnZXQgdGhlIGJ5dGUsIGJ1dCBkb24ndCBhZHZhbmNlIHRoZSBvZmZzZXQpLlxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcGVlayB0cnVlIG1lYW5zIGRvbid0IG1vdmUgb2Zmc2V0LlxuICogQHJldHVybiB7TnVtYmVyfSB0aGUgbmV4dCBieXRlLCBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YS5cbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5yZWFkQnl0ZSA9IGZ1bmN0aW9uIChwZWVrKSB7XG4gIGlmICh0aGlzLl9zaXplIC0gdGhpcy5fb2Zmc2V0IDwgMSlcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYiA9IHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXRdICYgMHhmZjtcblxuICBpZiAoIXBlZWspXG4gICAgdGhpcy5fb2Zmc2V0ICs9IDE7XG5cbiAgcmV0dXJuIGI7XG59O1xuXG5cblJlYWRlci5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVhZEJ5dGUodHJ1ZSk7XG59O1xuXG5cbi8qKlxuICogUmVhZHMgYSAocG90ZW50aWFsbHkpIHZhcmlhYmxlIGxlbmd0aCBvZmYgdGhlIEJFUiBidWZmZXIuICBUaGlzIGNhbGwgaXNcbiAqIG5vdCByZWFsbHkgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LCBhcyBjYWxsZXJzIGhhdmUgdG8gbWFuaXB1bGF0ZVxuICogdGhlIGludGVybmFsIGJ1ZmZlciBhZnRlcndhcmRzLlxuICpcbiAqIEFzIGEgcmVzdWx0IG9mIHRoaXMgY2FsbCwgeW91IGNhbiBjYWxsIGBSZWFkZXIubGVuZ3RoYCwgdW50aWwgdGhlXG4gKiBuZXh0IHRoaW5nIGNhbGxlZCB0aGF0IGRvZXMgYSByZWFkTGVuZ3RoLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gdGhlIGFtb3VudCBvZiBvZmZzZXQgdG8gYWR2YW5jZSB0aGUgYnVmZmVyLlxuICogQHRocm93cyB7SW52YWxpZEFzbjFFcnJvcn0gb24gYmFkIEFTTi4xXG4gKi9cblJlYWRlci5wcm90b3R5cGUucmVhZExlbmd0aCA9IGZ1bmN0aW9uIChvZmZzZXQpIHtcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgIG9mZnNldCA9IHRoaXMuX29mZnNldDtcblxuICBpZiAob2Zmc2V0ID49IHRoaXMuX3NpemUpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgdmFyIGxlbkIgPSB0aGlzLl9idWZbb2Zmc2V0KytdICYgMHhmZjtcbiAgaWYgKGxlbkIgPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgaWYgKChsZW5CICYgMHg4MCkgPT09IDB4ODApIHtcbiAgICBsZW5CICY9IDB4N2Y7XG5cbiAgICBpZiAobGVuQiA9PT0gMClcbiAgICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ0luZGVmaW5pdGUgbGVuZ3RoIG5vdCBzdXBwb3J0ZWQnKTtcblxuICAgIGlmIChsZW5CID4gNClcbiAgICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ2VuY29kaW5nIHRvbyBsb25nJyk7XG5cbiAgICBpZiAodGhpcy5fc2l6ZSAtIG9mZnNldCA8IGxlbkIpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIHRoaXMuX2xlbiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5COyBpKyspXG4gICAgICB0aGlzLl9sZW4gPSAodGhpcy5fbGVuIDw8IDgpICsgKHRoaXMuX2J1ZltvZmZzZXQrK10gJiAweGZmKTtcblxuICB9IGVsc2Uge1xuICAgIC8vIFdhc24ndCBhIHZhcmlhYmxlIGxlbmd0aFxuICAgIHRoaXMuX2xlbiA9IGxlbkI7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0O1xufTtcblxuXG4vKipcbiAqIFBhcnNlcyB0aGUgbmV4dCBzZXF1ZW5jZSBpbiB0aGlzIEJFUiBidWZmZXIuXG4gKlxuICogVG8gZ2V0IHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBjYWxsIGBSZWFkZXIubGVuZ3RoYC5cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBzZXF1ZW5jZSdzIHRhZy5cbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5yZWFkU2VxdWVuY2UgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzZXEgPSB0aGlzLnBlZWsoKTtcbiAgaWYgKHNlcSA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcbiAgaWYgKHRhZyAhPT0gdW5kZWZpbmVkICYmIHRhZyAhPT0gc2VxKVxuICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ0V4cGVjdGVkIDB4JyArIHRhZy50b1N0cmluZygxNikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogZ290IDB4JyArIHNlcS50b1N0cmluZygxNikpO1xuXG4gIHZhciBvID0gdGhpcy5yZWFkTGVuZ3RoKHRoaXMuX29mZnNldCArIDEpOyAvLyBzdG9yZWQgaW4gYGxlbmd0aGBcbiAgaWYgKG8gPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgdGhpcy5fb2Zmc2V0ID0gbztcbiAgcmV0dXJuIHNlcTtcbn07XG5cblxuUmVhZGVyLnByb3RvdHlwZS5yZWFkSW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZFRhZyhBU04xLkludGVnZXIpO1xufTtcblxuXG5SZWFkZXIucHJvdG90eXBlLnJlYWRCb29sZWFuID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMuX3JlYWRUYWcoQVNOMS5Cb29sZWFuKSA9PT0gMCA/IGZhbHNlIDogdHJ1ZSk7XG59O1xuXG5cblJlYWRlci5wcm90b3R5cGUucmVhZEVudW1lcmF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZFRhZyhBU04xLkVudW1lcmF0aW9uKTtcbn07XG5cblxuUmVhZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nID0gZnVuY3Rpb24gKHRhZywgcmV0YnVmKSB7XG4gIGlmICghdGFnKVxuICAgIHRhZyA9IEFTTjEuT2N0ZXRTdHJpbmc7XG5cbiAgdmFyIGIgPSB0aGlzLnBlZWsoKTtcbiAgaWYgKGIgPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgaWYgKGIgIT09IHRhZylcbiAgICB0aHJvdyBuZXdJbnZhbGlkQXNuMUVycm9yKCdFeHBlY3RlZCAweCcgKyB0YWcudG9TdHJpbmcoMTYpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IGdvdCAweCcgKyBiLnRvU3RyaW5nKDE2KSk7XG5cbiAgdmFyIG8gPSB0aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0ICsgMSk7IC8vIHN0b3JlZCBpbiBgbGVuZ3RoYFxuXG4gIGlmIChvID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIGlmICh0aGlzLmxlbmd0aCA+IHRoaXMuX3NpemUgLSBvKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHRoaXMuX29mZnNldCA9IG87XG5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiByZXRidWYgPyBCdWZmZXIuYWxsb2MoMCkgOiAnJztcblxuICB2YXIgc3RyID0gdGhpcy5fYnVmLnNsaWNlKHRoaXMuX29mZnNldCwgdGhpcy5fb2Zmc2V0ICsgdGhpcy5sZW5ndGgpO1xuICB0aGlzLl9vZmZzZXQgKz0gdGhpcy5sZW5ndGg7XG5cbiAgcmV0dXJuIHJldGJ1ZiA/IHN0ciA6IHN0ci50b1N0cmluZygndXRmOCcpO1xufTtcblxuUmVhZGVyLnByb3RvdHlwZS5yZWFkT0lEID0gZnVuY3Rpb24gKHRhZykge1xuICBpZiAoIXRhZylcbiAgICB0YWcgPSBBU04xLk9JRDtcblxuICB2YXIgYiA9IHRoaXMucmVhZFN0cmluZyh0YWcsIHRydWUpO1xuICBpZiAoYiA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgdmFsdWVzID0gW107XG4gIHZhciB2YWx1ZSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGJ5dGUgPSBiW2ldICYgMHhmZjtcblxuICAgIHZhbHVlIDw8PSA3O1xuICAgIHZhbHVlICs9IGJ5dGUgJiAweDdmO1xuICAgIGlmICgoYnl0ZSAmIDB4ODApID09PSAwKSB7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IDA7XG4gICAgfVxuICB9XG5cbiAgdmFsdWUgPSB2YWx1ZXMuc2hpZnQoKTtcbiAgdmFsdWVzLnVuc2hpZnQodmFsdWUgJSA0MCk7XG4gIHZhbHVlcy51bnNoaWZ0KCh2YWx1ZSAvIDQwKSA+PiAwKTtcblxuICByZXR1cm4gdmFsdWVzLmpvaW4oJy4nKTtcbn07XG5cblxuUmVhZGVyLnByb3RvdHlwZS5fcmVhZFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgYXNzZXJ0Lm9rKHRhZyAhPT0gdW5kZWZpbmVkKTtcblxuICB2YXIgYiA9IHRoaXMucGVlaygpO1xuXG4gIGlmIChiID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIGlmIChiICE9PSB0YWcpXG4gICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignRXhwZWN0ZWQgMHgnICsgdGFnLnRvU3RyaW5nKDE2KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBnb3QgMHgnICsgYi50b1N0cmluZygxNikpO1xuXG4gIHZhciBvID0gdGhpcy5yZWFkTGVuZ3RoKHRoaXMuX29mZnNldCArIDEpOyAvLyBzdG9yZWQgaW4gYGxlbmd0aGBcbiAgaWYgKG8gPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgaWYgKHRoaXMubGVuZ3RoID4gNClcbiAgICB0aHJvdyBuZXdJbnZhbGlkQXNuMUVycm9yKCdJbnRlZ2VyIHRvbyBsb25nOiAnICsgdGhpcy5sZW5ndGgpO1xuXG4gIGlmICh0aGlzLmxlbmd0aCA+IHRoaXMuX3NpemUgLSBvKVxuICAgIHJldHVybiBudWxsO1xuICB0aGlzLl9vZmZzZXQgPSBvO1xuXG4gIHZhciBmYiA9IHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXRdO1xuICB2YXIgdmFsdWUgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhbHVlIDw8PSA4O1xuICAgIHZhbHVlIHw9ICh0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdICYgMHhmZik7XG4gIH1cblxuICBpZiAoKGZiICYgMHg4MCkgPT09IDB4ODAgJiYgaSAhPT0gNClcbiAgICB2YWx1ZSAtPSAoMSA8PCAoaSAqIDgpKTtcblxuICByZXR1cm4gdmFsdWUgPj4gMDtcbn07XG5cblxuXG4vLyAtLS0gRXhwb3J0ZWQgQVBJXG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYnVmZmVyXCIpOyIsIi8vIENvcHlyaWdodCAyMDExIE1hcmsgQ2F2YWdlIDxtY2F2YWdlQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmVyLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciBBU04xID0gcmVxdWlyZSgnLi90eXBlcycpO1xudmFyIGVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG5cblxuLy8gLS0tIEdsb2JhbHNcblxudmFyIG5ld0ludmFsaWRBc24xRXJyb3IgPSBlcnJvcnMubmV3SW52YWxpZEFzbjFFcnJvcjtcblxudmFyIERFRkFVTFRfT1BUUyA9IHtcbiAgc2l6ZTogMTAyNCxcbiAgZ3Jvd3RoRmFjdG9yOiA4XG59O1xuXG5cbi8vIC0tLSBIZWxwZXJzXG5cbmZ1bmN0aW9uIG1lcmdlKGZyb20sIHRvKSB7XG4gIGFzc2VydC5vayhmcm9tKTtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiAoZnJvbSksICdvYmplY3QnKTtcbiAgYXNzZXJ0Lm9rKHRvKTtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiAodG8pLCAnb2JqZWN0Jyk7XG5cbiAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmcm9tKTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAodG9ba2V5XSlcbiAgICAgIHJldHVybjtcblxuICAgIHZhciB2YWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnJvbSwga2V5KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodG8sIGtleSwgdmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gdG87XG59XG5cblxuXG4vLyAtLS0gQVBJXG5cbmZ1bmN0aW9uIFdyaXRlcihvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBtZXJnZShERUZBVUxUX09QVFMsIG9wdGlvbnMgfHwge30pO1xuXG4gIHRoaXMuX2J1ZiA9IEJ1ZmZlci5hbGxvYyhvcHRpb25zLnNpemUgfHwgMTAyNCk7XG4gIHRoaXMuX3NpemUgPSB0aGlzLl9idWYubGVuZ3RoO1xuICB0aGlzLl9vZmZzZXQgPSAwO1xuICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcblxuICAvLyBBIGxpc3Qgb2Ygb2Zmc2V0cyBpbiB0aGUgYnVmZmVyIHdoZXJlIHdlIG5lZWQgdG8gaW5zZXJ0XG4gIC8vIHNlcXVlbmNlIHRhZy9sZW4gcGFpcnMuXG4gIHRoaXMuX3NlcSA9IFtdO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3NlcS5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXdJbnZhbGlkQXNuMUVycm9yKHRoaXMuX3NlcS5sZW5ndGggKyAnIHVuZW5kZWQgc2VxdWVuY2UocyknKTtcblxuICAgIHJldHVybiAodGhpcy5fYnVmLnNsaWNlKDAsIHRoaXMuX29mZnNldCkpO1xuICB9XG59KTtcblxuV3JpdGVyLnByb3RvdHlwZS53cml0ZUJ5dGUgPSBmdW5jdGlvbiAoYikge1xuICBpZiAodHlwZW9mIChiKSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlcicpO1xuXG4gIHRoaXMuX2Vuc3VyZSgxKTtcbiAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGI7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVJbnQgPSBmdW5jdGlvbiAoaSwgdGFnKSB7XG4gIGlmICh0eXBlb2YgKGkpICE9PSAnbnVtYmVyJylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gIGlmICh0eXBlb2YgKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuSW50ZWdlcjtcblxuICB2YXIgc3ogPSA0O1xuXG4gIHdoaWxlICgoKChpICYgMHhmZjgwMDAwMCkgPT09IDApIHx8ICgoaSAmIDB4ZmY4MDAwMDApID09PSAweGZmODAwMDAwID4+IDApKSAmJlxuICAgICAgICAoc3ogPiAxKSkge1xuICAgIHN6LS07XG4gICAgaSA8PD0gODtcbiAgfVxuXG4gIGlmIChzeiA+IDQpXG4gICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignQkVSIGludHMgY2Fubm90IGJlID4gMHhmZmZmZmZmZicpO1xuXG4gIHRoaXMuX2Vuc3VyZSgyICsgc3opO1xuICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gdGFnO1xuICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gc3o7XG5cbiAgd2hpbGUgKHN6LS0gPiAwKSB7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9ICgoaSAmIDB4ZmYwMDAwMDApID4+PiAyNCk7XG4gICAgaSA8PD0gODtcbiAgfVxuXG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVOdWxsID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLndyaXRlQnl0ZShBU04xLk51bGwpO1xuICB0aGlzLndyaXRlQnl0ZSgweDAwKTtcbn07XG5cblxuV3JpdGVyLnByb3RvdHlwZS53cml0ZUVudW1lcmF0aW9uID0gZnVuY3Rpb24gKGksIHRhZykge1xuICBpZiAodHlwZW9mIChpKSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICBpZiAodHlwZW9mICh0YWcpICE9PSAnbnVtYmVyJylcbiAgICB0YWcgPSBBU04xLkVudW1lcmF0aW9uO1xuXG4gIHJldHVybiB0aGlzLndyaXRlSW50KGksIHRhZyk7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVCb29sZWFuID0gZnVuY3Rpb24gKGIsIHRhZykge1xuICBpZiAodHlwZW9mIChiKSAhPT0gJ2Jvb2xlYW4nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYSBCb29sZWFuJyk7XG4gIGlmICh0eXBlb2YgKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuQm9vbGVhbjtcblxuICB0aGlzLl9lbnN1cmUoMyk7XG4gIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSB0YWc7XG4gIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSAweDAxO1xuICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gYiA/IDB4ZmYgOiAweDAwO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nID0gZnVuY3Rpb24gKHMsIHRhZykge1xuICBpZiAodHlwZW9mIChzKSAhPT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyAod2FzOiAnICsgdHlwZW9mIChzKSArICcpJyk7XG4gIGlmICh0eXBlb2YgKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuT2N0ZXRTdHJpbmc7XG5cbiAgdmFyIGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHMpO1xuICB0aGlzLndyaXRlQnl0ZSh0YWcpO1xuICB0aGlzLndyaXRlTGVuZ3RoKGxlbik7XG4gIGlmIChsZW4pIHtcbiAgICB0aGlzLl9lbnN1cmUobGVuKTtcbiAgICB0aGlzLl9idWYud3JpdGUocywgdGhpcy5fb2Zmc2V0KTtcbiAgICB0aGlzLl9vZmZzZXQgKz0gbGVuO1xuICB9XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVCdWZmZXIgPSBmdW5jdGlvbiAoYnVmLCB0YWcpIHtcbiAgaWYgKHR5cGVvZiAodGFnKSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFnIG11c3QgYmUgYSBudW1iZXInKTtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBtdXN0IGJlIGEgYnVmZmVyJyk7XG5cbiAgdGhpcy53cml0ZUJ5dGUodGFnKTtcbiAgdGhpcy53cml0ZUxlbmd0aChidWYubGVuZ3RoKTtcbiAgdGhpcy5fZW5zdXJlKGJ1Zi5sZW5ndGgpO1xuICBidWYuY29weSh0aGlzLl9idWYsIHRoaXMuX29mZnNldCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMuX29mZnNldCArPSBidWYubGVuZ3RoO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nQXJyYXkgPSBmdW5jdGlvbiAoc3RyaW5ncykge1xuICBpZiAoKCFzdHJpbmdzIGluc3RhbmNlb2YgQXJyYXkpKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXlbU3RyaW5nXScpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgc2VsZi53cml0ZVN0cmluZyhzKTtcbiAgfSk7XG59O1xuXG4vLyBUaGlzIGlzIHJlYWxseSB0byBzb2x2ZSBERVIgY2FzZXMsIGJ1dCB3aGF0ZXZlciBmb3Igbm93XG5Xcml0ZXIucHJvdG90eXBlLndyaXRlT0lEID0gZnVuY3Rpb24gKHMsIHRhZykge1xuICBpZiAodHlwZW9mIChzKSAhPT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO1xuICBpZiAodHlwZW9mICh0YWcpICE9PSAnbnVtYmVyJylcbiAgICB0YWcgPSBBU04xLk9JRDtcblxuICBpZiAoIS9eKFswLTldK1xcLil7Myx9WzAtOV0rJC8udGVzdChzKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIE9JRCBzdHJpbmcnKTtcblxuICBmdW5jdGlvbiBlbmNvZGVPY3RldChieXRlcywgb2N0ZXQpIHtcbiAgICBpZiAob2N0ZXQgPCAxMjgpIHtcbiAgICAgICAgYnl0ZXMucHVzaChvY3RldCk7XG4gICAgfSBlbHNlIGlmIChvY3RldCA8IDE2Mzg0KSB7XG4gICAgICAgIGJ5dGVzLnB1c2goKG9jdGV0ID4+PiA3KSB8IDB4ODApO1xuICAgICAgICBieXRlcy5wdXNoKG9jdGV0ICYgMHg3Rik7XG4gICAgfSBlbHNlIGlmIChvY3RldCA8IDIwOTcxNTIpIHtcbiAgICAgIGJ5dGVzLnB1c2goKG9jdGV0ID4+PiAxNCkgfCAweDgwKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gNykgfCAweDgwKSAmIDB4RkYpO1xuICAgICAgYnl0ZXMucHVzaChvY3RldCAmIDB4N0YpO1xuICAgIH0gZWxzZSBpZiAob2N0ZXQgPCAyNjg0MzU0NTYpIHtcbiAgICAgIGJ5dGVzLnB1c2goKG9jdGV0ID4+PiAyMSkgfCAweDgwKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gMTQpIHwgMHg4MCkgJiAweEZGKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gNykgfCAweDgwKSAmIDB4RkYpO1xuICAgICAgYnl0ZXMucHVzaChvY3RldCAmIDB4N0YpO1xuICAgIH0gZWxzZSB7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDI4KSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDIxKSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDE0KSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDcpIHwgMHg4MCkgJiAweEZGKTtcbiAgICAgIGJ5dGVzLnB1c2gob2N0ZXQgJiAweDdGKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdG1wID0gcy5zcGxpdCgnLicpO1xuICB2YXIgYnl0ZXMgPSBbXTtcbiAgYnl0ZXMucHVzaChwYXJzZUludCh0bXBbMF0sIDEwKSAqIDQwICsgcGFyc2VJbnQodG1wWzFdLCAxMCkpO1xuICB0bXAuc2xpY2UoMikuZm9yRWFjaChmdW5jdGlvbiAoYikge1xuICAgIGVuY29kZU9jdGV0KGJ5dGVzLCBwYXJzZUludChiLCAxMCkpO1xuICB9KTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX2Vuc3VyZSgyICsgYnl0ZXMubGVuZ3RoKTtcbiAgdGhpcy53cml0ZUJ5dGUodGFnKTtcbiAgdGhpcy53cml0ZUxlbmd0aChieXRlcy5sZW5ndGgpO1xuICBieXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7XG4gICAgc2VsZi53cml0ZUJ5dGUoYik7XG4gIH0pO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlTGVuZ3RoID0gZnVuY3Rpb24gKGxlbikge1xuICBpZiAodHlwZW9mIChsZW4pICE9PSAnbnVtYmVyJylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyJyk7XG5cbiAgdGhpcy5fZW5zdXJlKDQpO1xuXG4gIGlmIChsZW4gPD0gMHg3Zikge1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBsZW47XG4gIH0gZWxzZSBpZiAobGVuIDw9IDB4ZmYpIHtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gMHg4MTtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuO1xuICB9IGVsc2UgaWYgKGxlbiA8PSAweGZmZmYpIHtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gMHg4MjtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuID4+IDg7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZmZmZmYpIHtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gMHg4MztcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuID4+IDE2O1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBsZW4gPj4gODtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ0xlbmd0aCB0b28gbG9uZyAoPiA0IGJ5dGVzKScpO1xuICB9XG59O1xuXG5Xcml0ZXIucHJvdG90eXBlLnN0YXJ0U2VxdWVuY2UgPSBmdW5jdGlvbiAodGFnKSB7XG4gIGlmICh0eXBlb2YgKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuU2VxdWVuY2UgfCBBU04xLkNvbnN0cnVjdG9yO1xuXG4gIHRoaXMud3JpdGVCeXRlKHRhZyk7XG4gIHRoaXMuX3NlcS5wdXNoKHRoaXMuX29mZnNldCk7XG4gIHRoaXMuX2Vuc3VyZSgzKTtcbiAgdGhpcy5fb2Zmc2V0ICs9IDM7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUuZW5kU2VxdWVuY2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZXEgPSB0aGlzLl9zZXEucG9wKCk7XG4gIHZhciBzdGFydCA9IHNlcSArIDM7XG4gIHZhciBsZW4gPSB0aGlzLl9vZmZzZXQgLSBzdGFydDtcblxuICBpZiAobGVuIDw9IDB4N2YpIHtcbiAgICB0aGlzLl9zaGlmdChzdGFydCwgbGVuLCAtMik7XG4gICAgdGhpcy5fYnVmW3NlcV0gPSBsZW47XG4gIH0gZWxzZSBpZiAobGVuIDw9IDB4ZmYpIHtcbiAgICB0aGlzLl9zaGlmdChzdGFydCwgbGVuLCAtMSk7XG4gICAgdGhpcy5fYnVmW3NlcV0gPSAweDgxO1xuICAgIHRoaXMuX2J1ZltzZXEgKyAxXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZmZmKSB7XG4gICAgdGhpcy5fYnVmW3NlcV0gPSAweDgyO1xuICAgIHRoaXMuX2J1ZltzZXEgKyAxXSA9IGxlbiA+PiA4O1xuICAgIHRoaXMuX2J1ZltzZXEgKyAyXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZmZmZmYpIHtcbiAgICB0aGlzLl9zaGlmdChzdGFydCwgbGVuLCAxKTtcbiAgICB0aGlzLl9idWZbc2VxXSA9IDB4ODM7XG4gICAgdGhpcy5fYnVmW3NlcSArIDFdID0gbGVuID4+IDE2O1xuICAgIHRoaXMuX2J1ZltzZXEgKyAyXSA9IGxlbiA+PiA4O1xuICAgIHRoaXMuX2J1ZltzZXEgKyAzXSA9IGxlbjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXdJbnZhbGlkQXNuMUVycm9yKCdTZXF1ZW5jZSB0b28gbG9uZycpO1xuICB9XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUuX3NoaWZ0ID0gZnVuY3Rpb24gKHN0YXJ0LCBsZW4sIHNoaWZ0KSB7XG4gIGFzc2VydC5vayhzdGFydCAhPT0gdW5kZWZpbmVkKTtcbiAgYXNzZXJ0Lm9rKGxlbiAhPT0gdW5kZWZpbmVkKTtcbiAgYXNzZXJ0Lm9rKHNoaWZ0KTtcblxuICB0aGlzLl9idWYuY29weSh0aGlzLl9idWYsIHN0YXJ0ICsgc2hpZnQsIHN0YXJ0LCBzdGFydCArIGxlbik7XG4gIHRoaXMuX29mZnNldCArPSBzaGlmdDtcbn07XG5cbldyaXRlci5wcm90b3R5cGUuX2Vuc3VyZSA9IGZ1bmN0aW9uIChsZW4pIHtcbiAgYXNzZXJ0Lm9rKGxlbik7XG5cbiAgaWYgKHRoaXMuX3NpemUgLSB0aGlzLl9vZmZzZXQgPCBsZW4pIHtcbiAgICB2YXIgc3ogPSB0aGlzLl9zaXplICogdGhpcy5fb3B0aW9ucy5ncm93dGhGYWN0b3I7XG4gICAgaWYgKHN6IC0gdGhpcy5fb2Zmc2V0IDwgbGVuKVxuICAgICAgc3ogKz0gbGVuO1xuXG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYyhzeik7XG5cbiAgICB0aGlzLl9idWYuY29weShidWYsIDAsIDAsIHRoaXMuX29mZnNldCk7XG4gICAgdGhpcy5fYnVmID0gYnVmO1xuICAgIHRoaXMuX3NpemUgPSBzejtcbiAgfVxufTtcblxuXG5cbi8vIC0tLSBFeHBvcnRlZCBBUElcblxubW9kdWxlLmV4cG9ydHMgPSBXcml0ZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcnlwdG9faGFzaF9zaGE1MTIgPSByZXF1aXJlKCd0d2VldG5hY2wnKS5sb3dsZXZlbC5jcnlwdG9faGFzaDtcblxuLypcbiAqIFRoaXMgZmlsZSBpcyBhIDE6MSBwb3J0IGZyb20gdGhlIE9wZW5CU0QgYmxvd2Zpc2guYyBhbmQgYmNyeXB0X3Bia2RmLmMuIEFzIGFcbiAqIHJlc3VsdCwgaXQgcmV0YWlucyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IGFuZCBsaWNlbnNlLiBUaGUgdHdvIGZpbGVzIGFyZVxuICogdW5kZXIgc2xpZ2h0bHkgZGlmZmVyZW50IChidXQgY29tcGF0aWJsZSkgbGljZW5zZXMsIGFuZCBhcmUgaGVyZSBjb21iaW5lZCBpblxuICogb25lIGZpbGUuXG4gKlxuICogQ3JlZGl0IGZvciB0aGUgYWN0dWFsIHBvcnRpbmcgd29yayBnb2VzIHRvOlxuICogIERldmkgTWFuZGlyaSA8bWVAZGV2aS53ZWIuaWQ+XG4gKi9cblxuLypcbiAqIFRoZSBCbG93ZmlzaCBwb3J0aW9ucyBhcmUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOlxuICpcbiAqIEJsb3dmaXNoIGJsb2NrIGNpcGhlciBmb3IgT3BlbkJTRFxuICogQ29weXJpZ2h0IDE5OTcgTmllbHMgUHJvdm9zIDxwcm92b3NAcGh5c25ldC51bmktaGFtYnVyZy5kZT5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogSW1wbGVtZW50YXRpb24gYWR2aWNlIGJ5IERhdmlkIE1hemllcmVzIDxkbUBsY3MubWl0LmVkdT4uXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnNcbiAqIGFyZSBtZXQ6XG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbiAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTXG4gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELlxuICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULFxuICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUXG4gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG4vKlxuICogVGhlIGJjcnlwdF9wYmtkZiBwb3J0aW9ucyBhcmUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMyBUZWQgVW5hbmdzdCA8dGVkdUBvcGVuYnNkLm9yZz5cbiAqXG4gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbiAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmVcbiAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVNcbiAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0ZcbiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SXG4gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTXG4gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU5cbiAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GXG4gKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuICovXG5cbi8qXG4gKiBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgKEphdmFzY3JpcHQtc3BlY2lmaWMpOlxuICpcbiAqIENvcHlyaWdodCAyMDE2LCBKb3llbnQgSW5jXG4gKiBBdXRob3I6IEFsZXggV2lsc29uIDxhbGV4LndpbHNvbkBqb3llbnQuY29tPlxuICpcbiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxuICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZVxuICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFU1xuICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRlxuICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1JcbiAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVNcbiAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTlxuICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0ZcbiAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4gKi9cblxuLy8gUG9ydGVkIGZyb20gT3BlbkJTRCBiY3J5cHRfcGJrZGYuYyB2MS45XG5cbnZhciBCTEZfSiA9IDA7XG5cbnZhciBCbG93ZmlzaCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLlMgPSBbXG4gICAgbmV3IFVpbnQzMkFycmF5KFtcbiAgICAgIDB4ZDEzMTBiYTYsIDB4OThkZmI1YWMsIDB4MmZmZDcyZGIsIDB4ZDAxYWRmYjcsXG4gICAgICAweGI4ZTFhZmVkLCAweDZhMjY3ZTk2LCAweGJhN2M5MDQ1LCAweGYxMmM3Zjk5LFxuICAgICAgMHgyNGExOTk0NywgMHhiMzkxNmNmNywgMHgwODAxZjJlMiwgMHg4NThlZmMxNixcbiAgICAgIDB4NjM2OTIwZDgsIDB4NzE1NzRlNjksIDB4YTQ1OGZlYTMsIDB4ZjQ5MzNkN2UsXG4gICAgICAweDBkOTU3NDhmLCAweDcyOGViNjU4LCAweDcxOGJjZDU4LCAweDgyMTU0YWVlLFxuICAgICAgMHg3YjU0YTQxZCwgMHhjMjVhNTliNSwgMHg5YzMwZDUzOSwgMHgyYWYyNjAxMyxcbiAgICAgIDB4YzVkMWIwMjMsIDB4Mjg2MDg1ZjAsIDB4Y2E0MTc5MTgsIDB4YjhkYjM4ZWYsXG4gICAgICAweDhlNzlkY2IwLCAweDYwM2ExODBlLCAweDZjOWUwZThiLCAweGIwMWU4YTNlLFxuICAgICAgMHhkNzE1NzdjMSwgMHhiZDMxNGIyNywgMHg3OGFmMmZkYSwgMHg1NTYwNWM2MCxcbiAgICAgIDB4ZTY1NTI1ZjMsIDB4YWE1NWFiOTQsIDB4NTc0ODk4NjIsIDB4NjNlODE0NDAsXG4gICAgICAweDU1Y2EzOTZhLCAweDJhYWIxMGI2LCAweGI0Y2M1YzM0LCAweDExNDFlOGNlLFxuICAgICAgMHhhMTU0ODZhZiwgMHg3YzcyZTk5MywgMHhiM2VlMTQxMSwgMHg2MzZmYmMyYSxcbiAgICAgIDB4MmJhOWM1NWQsIDB4NzQxODMxZjYsIDB4Y2U1YzNlMTYsIDB4OWI4NzkzMWUsXG4gICAgICAweGFmZDZiYTMzLCAweDZjMjRjZjVjLCAweDdhMzI1MzgxLCAweDI4OTU4Njc3LFxuICAgICAgMHgzYjhmNDg5OCwgMHg2YjRiYjlhZiwgMHhjNGJmZTgxYiwgMHg2NjI4MjE5MyxcbiAgICAgIDB4NjFkODA5Y2MsIDB4ZmIyMWE5OTEsIDB4NDg3Y2FjNjAsIDB4NWRlYzgwMzIsXG4gICAgICAweGVmODQ1ZDVkLCAweGU5ODU3NWIxLCAweGRjMjYyMzAyLCAweGViNjUxYjg4LFxuICAgICAgMHgyMzg5M2U4MSwgMHhkMzk2YWNjNSwgMHgwZjZkNmZmMywgMHg4M2Y0NDIzOSxcbiAgICAgIDB4MmUwYjQ0ODIsIDB4YTQ4NDIwMDQsIDB4NjljOGYwNGEsIDB4OWUxZjliNWUsXG4gICAgICAweDIxYzY2ODQyLCAweGY2ZTk2YzlhLCAweDY3MGM5YzYxLCAweGFiZDM4OGYwLFxuICAgICAgMHg2YTUxYTBkMiwgMHhkODU0MmY2OCwgMHg5NjBmYTcyOCwgMHhhYjUxMzNhMyxcbiAgICAgIDB4NmVlZjBiNmMsIDB4MTM3YTNiZTQsIDB4YmEzYmYwNTAsIDB4N2VmYjJhOTgsXG4gICAgICAweGExZjE2NTFkLCAweDM5YWYwMTc2LCAweDY2Y2E1OTNlLCAweDgyNDMwZTg4LFxuICAgICAgMHg4Y2VlODYxOSwgMHg0NTZmOWZiNCwgMHg3ZDg0YTVjMywgMHgzYjhiNWViZSxcbiAgICAgIDB4ZTA2Zjc1ZDgsIDB4ODVjMTIwNzMsIDB4NDAxYTQ0OWYsIDB4NTZjMTZhYTYsXG4gICAgICAweDRlZDNhYTYyLCAweDM2M2Y3NzA2LCAweDFiZmVkZjcyLCAweDQyOWIwMjNkLFxuICAgICAgMHgzN2QwZDcyNCwgMHhkMDBhMTI0OCwgMHhkYjBmZWFkMywgMHg0OWYxYzA5YixcbiAgICAgIDB4MDc1MzcyYzksIDB4ODA5OTFiN2IsIDB4MjVkNDc5ZDgsIDB4ZjZlOGRlZjcsXG4gICAgICAweGUzZmU1MDFhLCAweGI2Nzk0YzNiLCAweDk3NmNlMGJkLCAweDA0YzAwNmJhLFxuICAgICAgMHhjMWE5NGZiNiwgMHg0MDlmNjBjNCwgMHg1ZTVjOWVjMiwgMHgxOTZhMjQ2MyxcbiAgICAgIDB4NjhmYjZmYWYsIDB4M2U2YzUzYjUsIDB4MTMzOWIyZWIsIDB4M2I1MmVjNmYsXG4gICAgICAweDZkZmM1MTFmLCAweDliMzA5NTJjLCAweGNjODE0NTQ0LCAweGFmNWViZDA5LFxuICAgICAgMHhiZWUzZDAwNCwgMHhkZTMzNGFmZCwgMHg2NjBmMjgwNywgMHgxOTJlNGJiMyxcbiAgICAgIDB4YzBjYmE4NTcsIDB4NDVjODc0MGYsIDB4ZDIwYjVmMzksIDB4YjlkM2ZiZGIsXG4gICAgICAweDU1NzljMGJkLCAweDFhNjAzMjBhLCAweGQ2YTEwMGM2LCAweDQwMmM3Mjc5LFxuICAgICAgMHg2NzlmMjVmZSwgMHhmYjFmYTNjYywgMHg4ZWE1ZTlmOCwgMHhkYjMyMjJmOCxcbiAgICAgIDB4M2M3NTE2ZGYsIDB4ZmQ2MTZiMTUsIDB4MmY1MDFlYzgsIDB4YWQwNTUyYWIsXG4gICAgICAweDMyM2RiNWZhLCAweGZkMjM4NzYwLCAweDUzMzE3YjQ4LCAweDNlMDBkZjgyLFxuICAgICAgMHg5ZTVjNTdiYiwgMHhjYTZmOGNhMCwgMHgxYTg3NTYyZSwgMHhkZjE3NjlkYixcbiAgICAgIDB4ZDU0MmE4ZjYsIDB4Mjg3ZWZmYzMsIDB4YWM2NzMyYzYsIDB4OGM0ZjU1NzMsXG4gICAgICAweDY5NWIyN2IwLCAweGJiY2E1OGM4LCAweGUxZmZhMzVkLCAweGI4ZjAxMWEwLFxuICAgICAgMHgxMGZhM2Q5OCwgMHhmZDIxODNiOCwgMHg0YWZjYjU2YywgMHgyZGQxZDM1YixcbiAgICAgIDB4OWE1M2U0NzksIDB4YjZmODQ1NjUsIDB4ZDI4ZTQ5YmMsIDB4NGJmYjk3OTAsXG4gICAgICAweGUxZGRmMmRhLCAweGE0Y2I3ZTMzLCAweDYyZmIxMzQxLCAweGNlZTRjNmU4LFxuICAgICAgMHhlZjIwY2FkYSwgMHgzNjc3NGMwMSwgMHhkMDdlOWVmZSwgMHgyYmYxMWZiNCxcbiAgICAgIDB4OTVkYmRhNGQsIDB4YWU5MDkxOTgsIDB4ZWFhZDhlNzEsIDB4NmI5M2Q1YTAsXG4gICAgICAweGQwOGVkMWQwLCAweGFmYzcyNWUwLCAweDhlM2M1YjJmLCAweDhlNzU5NGI3LFxuICAgICAgMHg4ZmY2ZTJmYiwgMHhmMjEyMmI2NCwgMHg4ODg4YjgxMiwgMHg5MDBkZjAxYyxcbiAgICAgIDB4NGZhZDVlYTAsIDB4Njg4ZmMzMWMsIDB4ZDFjZmYxOTEsIDB4YjNhOGMxYWQsXG4gICAgICAweDJmMmYyMjE4LCAweGJlMGUxNzc3LCAweGVhNzUyZGZlLCAweDhiMDIxZmExLFxuICAgICAgMHhlNWEwY2MwZiwgMHhiNTZmNzRlOCwgMHgxOGFjZjNkNiwgMHhjZTg5ZTI5OSxcbiAgICAgIDB4YjRhODRmZTAsIDB4ZmQxM2UwYjcsIDB4N2NjNDNiODEsIDB4ZDJhZGE4ZDksXG4gICAgICAweDE2NWZhMjY2LCAweDgwOTU3NzA1LCAweDkzY2M3MzE0LCAweDIxMWExNDc3LFxuICAgICAgMHhlNmFkMjA2NSwgMHg3N2I1ZmE4NiwgMHhjNzU0NDJmNSwgMHhmYjlkMzVjZixcbiAgICAgIDB4ZWJjZGFmMGMsIDB4N2IzZTg5YTAsIDB4ZDY0MTFiZDMsIDB4YWUxZTdlNDksXG4gICAgICAweDAwMjUwZTJkLCAweDIwNzFiMzVlLCAweDIyNjgwMGJiLCAweDU3YjhlMGFmLFxuICAgICAgMHgyNDY0MzY5YiwgMHhmMDA5YjkxZSwgMHg1NTYzOTExZCwgMHg1OWRmYTZhYSxcbiAgICAgIDB4NzhjMTQzODksIDB4ZDk1YTUzN2YsIDB4MjA3ZDViYTIsIDB4MDJlNWI5YzUsXG4gICAgICAweDgzMjYwMzc2LCAweDYyOTVjZmE5LCAweDExYzgxOTY4LCAweDRlNzM0YTQxLFxuICAgICAgMHhiMzQ3MmRjYSwgMHg3YjE0YTk0YSwgMHgxYjUxMDA1MiwgMHg5YTUzMjkxNSxcbiAgICAgIDB4ZDYwZjU3M2YsIDB4YmM5YmM2ZTQsIDB4MmI2MGE0NzYsIDB4ODFlNjc0MDAsXG4gICAgICAweDA4YmE2ZmI1LCAweDU3MWJlOTFmLCAweGYyOTZlYzZiLCAweDJhMGRkOTE1LFxuICAgICAgMHhiNjYzNjUyMSwgMHhlN2I5ZjliNiwgMHhmZjM0MDUyZSwgMHhjNTg1NTY2NCxcbiAgICAgIDB4NTNiMDJkNWQsIDB4YTk5ZjhmYTEsIDB4MDhiYTQ3OTksIDB4NmU4NTA3NmFdKSxcbiAgICBuZXcgVWludDMyQXJyYXkoW1xuICAgICAgMHg0YjdhNzBlOSwgMHhiNWIzMjk0NCwgMHhkYjc1MDkyZSwgMHhjNDE5MjYyMyxcbiAgICAgIDB4YWQ2ZWE2YjAsIDB4NDlhN2RmN2QsIDB4OWNlZTYwYjgsIDB4OGZlZGIyNjYsXG4gICAgICAweGVjYWE4YzcxLCAweDY5OWExN2ZmLCAweDU2NjQ1MjZjLCAweGMyYjE5ZWUxLFxuICAgICAgMHgxOTM2MDJhNSwgMHg3NTA5NGMyOSwgMHhhMDU5MTM0MCwgMHhlNDE4M2EzZSxcbiAgICAgIDB4M2Y1NDk4OWEsIDB4NWI0MjlkNjUsIDB4NmI4ZmU0ZDYsIDB4OTlmNzNmZDYsXG4gICAgICAweGExZDI5YzA3LCAweGVmZTgzMGY1LCAweDRkMmQzOGU2LCAweGYwMjU1ZGMxLFxuICAgICAgMHg0Y2RkMjA4NiwgMHg4NDcwZWIyNiwgMHg2MzgyZTljNiwgMHgwMjFlY2M1ZSxcbiAgICAgIDB4MDk2ODZiM2YsIDB4M2ViYWVmYzksIDB4M2M5NzE4MTQsIDB4NmI2YTcwYTEsXG4gICAgICAweDY4N2YzNTg0LCAweDUyYTBlMjg2LCAweGI3OWM1MzA1LCAweGFhNTAwNzM3LFxuICAgICAgMHgzZTA3ODQxYywgMHg3ZmRlYWU1YywgMHg4ZTdkNDRlYywgMHg1NzE2ZjJiOCxcbiAgICAgIDB4YjAzYWRhMzcsIDB4ZjA1MDBjMGQsIDB4ZjAxYzFmMDQsIDB4MDIwMGIzZmYsXG4gICAgICAweGFlMGNmNTFhLCAweDNjYjU3NGIyLCAweDI1ODM3YTU4LCAweGRjMDkyMWJkLFxuICAgICAgMHhkMTkxMTNmOSwgMHg3Y2E5MmZmNiwgMHg5NDMyNDc3MywgMHgyMmY1NDcwMSxcbiAgICAgIDB4M2FlNWU1ODEsIDB4MzdjMmRhZGMsIDB4YzhiNTc2MzQsIDB4OWFmM2RkYTcsXG4gICAgICAweGE5NDQ2MTQ2LCAweDBmZDAwMzBlLCAweGVjYzhjNzNlLCAweGE0NzUxZTQxLFxuICAgICAgMHhlMjM4Y2Q5OSwgMHgzYmVhMGUyZiwgMHgzMjgwYmJhMSwgMHgxODNlYjMzMSxcbiAgICAgIDB4NGU1NDhiMzgsIDB4NGY2ZGI5MDgsIDB4NmY0MjBkMDMsIDB4ZjYwYTA0YmYsXG4gICAgICAweDJjYjgxMjkwLCAweDI0OTc3Yzc5LCAweDU2NzliMDcyLCAweGJjYWY4OWFmLFxuICAgICAgMHhkZTlhNzcxZiwgMHhkOTkzMDgxMCwgMHhiMzhiYWUxMiwgMHhkY2NmM2YyZSxcbiAgICAgIDB4NTUxMjcyMWYsIDB4MmU2YjcxMjQsIDB4NTAxYWRkZTYsIDB4OWY4NGNkODcsXG4gICAgICAweDdhNTg0NzE4LCAweDc0MDhkYTE3LCAweGJjOWY5YWJjLCAweGU5NGI3ZDhjLFxuICAgICAgMHhlYzdhZWMzYSwgMHhkYjg1MWRmYSwgMHg2MzA5NDM2NiwgMHhjNDY0YzNkMixcbiAgICAgIDB4ZWYxYzE4NDcsIDB4MzIxNWQ5MDgsIDB4ZGQ0MzNiMzcsIDB4MjRjMmJhMTYsXG4gICAgICAweDEyYTE0ZDQzLCAweDJhNjVjNDUxLCAweDUwOTQwMDAyLCAweDEzM2FlNGRkLFxuICAgICAgMHg3MWRmZjg5ZSwgMHgxMDMxNGU1NSwgMHg4MWFjNzdkNiwgMHg1ZjExMTk5YixcbiAgICAgIDB4MDQzNTU2ZjEsIDB4ZDdhM2M3NmIsIDB4M2MxMTE4M2IsIDB4NTkyNGE1MDksXG4gICAgICAweGYyOGZlNmVkLCAweDk3ZjFmYmZhLCAweDllYmFiZjJjLCAweDFlMTUzYzZlLFxuICAgICAgMHg4NmUzNDU3MCwgMHhlYWU5NmZiMSwgMHg4NjBlNWUwYSwgMHg1YTNlMmFiMyxcbiAgICAgIDB4NzcxZmU3MWMsIDB4NGUzZDA2ZmEsIDB4Mjk2NWRjYjksIDB4OTllNzFkMGYsXG4gICAgICAweDgwM2U4OWQ2LCAweDUyNjZjODI1LCAweDJlNGNjOTc4LCAweDljMTBiMzZhLFxuICAgICAgMHhjNjE1MGViYSwgMHg5NGUyZWE3OCwgMHhhNWZjM2M1MywgMHgxZTBhMmRmNCxcbiAgICAgIDB4ZjJmNzRlYTcsIDB4MzYxZDJiM2QsIDB4MTkzOTI2MGYsIDB4MTljMjc5NjAsXG4gICAgICAweDUyMjNhNzA4LCAweGY3MTMxMmI2LCAweGViYWRmZTZlLCAweGVhYzMxZjY2LFxuICAgICAgMHhlM2JjNDU5NSwgMHhhNjdiYzg4MywgMHhiMTdmMzdkMSwgMHgwMThjZmYyOCxcbiAgICAgIDB4YzMzMmRkZWYsIDB4YmU2YzVhYTUsIDB4NjU1ODIxODUsIDB4NjhhYjk4MDIsXG4gICAgICAweGVlY2VhNTBmLCAweGRiMmY5NTNiLCAweDJhZWY3ZGFkLCAweDViNmUyZjg0LFxuICAgICAgMHgxNTIxYjYyOCwgMHgyOTA3NjE3MCwgMHhlY2RkNDc3NSwgMHg2MTlmMTUxMCxcbiAgICAgIDB4MTNjY2E4MzAsIDB4ZWI2MWJkOTYsIDB4MDMzNGZlMWUsIDB4YWEwMzYzY2YsXG4gICAgICAweGI1NzM1YzkwLCAweDRjNzBhMjM5LCAweGQ1OWU5ZTBiLCAweGNiYWFkZTE0LFxuICAgICAgMHhlZWNjODZiYywgMHg2MDYyMmNhNywgMHg5Y2FiNWNhYiwgMHhiMmYzODQ2ZSxcbiAgICAgIDB4NjQ4YjFlYWYsIDB4MTliZGYwY2EsIDB4YTAyMzY5YjksIDB4NjU1YWJiNTAsXG4gICAgICAweDQwNjg1YTMyLCAweDNjMmFiNGIzLCAweDMxOWVlOWQ1LCAweGMwMjFiOGY3LFxuICAgICAgMHg5YjU0MGIxOSwgMHg4NzVmYTA5OSwgMHg5NWY3OTk3ZSwgMHg2MjNkN2RhOCxcbiAgICAgIDB4ZjgzNzg4OWEsIDB4OTdlMzJkNzcsIDB4MTFlZDkzNWYsIDB4MTY2ODEyODEsXG4gICAgICAweDBlMzU4ODI5LCAweGM3ZTYxZmQ2LCAweDk2ZGVkZmExLCAweDc4NThiYTk5LFxuICAgICAgMHg1N2Y1ODRhNSwgMHgxYjIyNzI2MywgMHg5YjgzYzNmZiwgMHgxYWMyNDY5NixcbiAgICAgIDB4Y2RiMzBhZWIsIDB4NTMyZTMwNTQsIDB4OGZkOTQ4ZTQsIDB4NmRiYzMxMjgsXG4gICAgICAweDU4ZWJmMmVmLCAweDM0YzZmZmVhLCAweGZlMjhlZDYxLCAweGVlN2MzYzczLFxuICAgICAgMHg1ZDRhMTRkOSwgMHhlODY0YjdlMywgMHg0MjEwNWQxNCwgMHgyMDNlMTNlMCxcbiAgICAgIDB4NDVlZWUyYjYsIDB4YTNhYWFiZWEsIDB4ZGI2YzRmMTUsIDB4ZmFjYjRmZDAsXG4gICAgICAweGM3NDJmNDQyLCAweGVmNmFiYmI1LCAweDY1NGYzYjFkLCAweDQxY2QyMTA1LFxuICAgICAgMHhkODFlNzk5ZSwgMHg4Njg1NGRjNywgMHhlNDRiNDc2YSwgMHgzZDgxNjI1MCxcbiAgICAgIDB4Y2Y2MmExZjIsIDB4NWI4ZDI2NDYsIDB4ZmM4ODgzYTAsIDB4YzFjN2I2YTMsXG4gICAgICAweDdmMTUyNGMzLCAweDY5Y2I3NDkyLCAweDQ3ODQ4YTBiLCAweDU2OTJiMjg1LFxuICAgICAgMHgwOTViYmYwMCwgMHhhZDE5NDg5ZCwgMHgxNDYyYjE3NCwgMHgyMzgyMGUwMCxcbiAgICAgIDB4NTg0MjhkMmEsIDB4MGM1NWY1ZWEsIDB4MWRhZGY0M2UsIDB4MjMzZjcwNjEsXG4gICAgICAweDMzNzJmMDkyLCAweDhkOTM3ZTQxLCAweGQ2NWZlY2YxLCAweDZjMjIzYmRiLFxuICAgICAgMHg3Y2RlMzc1OSwgMHhjYmVlNzQ2MCwgMHg0MDg1ZjJhNywgMHhjZTc3MzI2ZSxcbiAgICAgIDB4YTYwNzgwODQsIDB4MTlmODUwOWUsIDB4ZThlZmQ4NTUsIDB4NjFkOTk3MzUsXG4gICAgICAweGE5NjlhN2FhLCAweGM1MGMwNmMyLCAweDVhMDRhYmZjLCAweDgwMGJjYWRjLFxuICAgICAgMHg5ZTQ0N2EyZSwgMHhjMzQ1MzQ4NCwgMHhmZGQ1NjcwNSwgMHgwZTFlOWVjOSxcbiAgICAgIDB4ZGI3M2RiZDMsIDB4MTA1NTg4Y2QsIDB4Njc1ZmRhNzksIDB4ZTM2NzQzNDAsXG4gICAgICAweGM1YzQzNDY1LCAweDcxM2UzOGQ4LCAweDNkMjhmODllLCAweGYxNmRmZjIwLFxuICAgICAgMHgxNTNlMjFlNywgMHg4ZmIwM2Q0YSwgMHhlNmUzOWYyYiwgMHhkYjgzYWRmN10pLFxuICAgIG5ldyBVaW50MzJBcnJheShbXG4gICAgICAweGU5M2Q1YTY4LCAweDk0ODE0MGY3LCAweGY2NGMyNjFjLCAweDk0NjkyOTM0LFxuICAgICAgMHg0MTE1MjBmNywgMHg3NjAyZDRmNywgMHhiY2Y0NmIyZSwgMHhkNGEyMDA2OCxcbiAgICAgIDB4ZDQwODI0NzEsIDB4MzMyMGY0NmEsIDB4NDNiN2Q0YjcsIDB4NTAwMDYxYWYsXG4gICAgICAweDFlMzlmNjJlLCAweDk3MjQ0NTQ2LCAweDE0MjE0Zjc0LCAweGJmOGI4ODQwLFxuICAgICAgMHg0ZDk1ZmMxZCwgMHg5NmI1OTFhZiwgMHg3MGY0ZGRkMywgMHg2NmEwMmY0NSxcbiAgICAgIDB4YmZiYzA5ZWMsIDB4MDNiZDk3ODUsIDB4N2ZhYzZkZDAsIDB4MzFjYjg1MDQsXG4gICAgICAweDk2ZWIyN2IzLCAweDU1ZmQzOTQxLCAweGRhMjU0N2U2LCAweGFiY2EwYTlhLFxuICAgICAgMHgyODUwNzgyNSwgMHg1MzA0MjlmNCwgMHgwYTJjODZkYSwgMHhlOWI2NmRmYixcbiAgICAgIDB4NjhkYzE0NjIsIDB4ZDc0ODY5MDAsIDB4NjgwZWMwYTQsIDB4MjdhMThkZWUsXG4gICAgICAweDRmM2ZmZWEyLCAweGU4ODdhZDhjLCAweGI1OGNlMDA2LCAweDdhZjRkNmI2LFxuICAgICAgMHhhYWNlMWU3YywgMHhkMzM3NWZlYywgMHhjZTc4YTM5OSwgMHg0MDZiMmE0MixcbiAgICAgIDB4MjBmZTllMzUsIDB4ZDlmMzg1YjksIDB4ZWUzOWQ3YWIsIDB4M2IxMjRlOGIsXG4gICAgICAweDFkYzlmYWY3LCAweDRiNmQxODU2LCAweDI2YTM2NjMxLCAweGVhZTM5N2IyLFxuICAgICAgMHgzYTZlZmE3NCwgMHhkZDViNDMzMiwgMHg2ODQxZTdmNywgMHhjYTc4MjBmYixcbiAgICAgIDB4ZmIwYWY1NGUsIDB4ZDhmZWIzOTcsIDB4NDU0MDU2YWMsIDB4YmE0ODk1MjcsXG4gICAgICAweDU1NTMzYTNhLCAweDIwODM4ZDg3LCAweGZlNmJhOWI3LCAweGQwOTY5NTRiLFxuICAgICAgMHg1NWE4NjdiYywgMHhhMTE1OWE1OCwgMHhjY2E5Mjk2MywgMHg5OWUxZGIzMyxcbiAgICAgIDB4YTYyYTRhNTYsIDB4M2YzMTI1ZjksIDB4NWVmNDdlMWMsIDB4OTAyOTMxN2MsXG4gICAgICAweGZkZjhlODAyLCAweDA0MjcyZjcwLCAweDgwYmIxNTVjLCAweDA1MjgyY2UzLFxuICAgICAgMHg5NWMxMTU0OCwgMHhlNGM2NmQyMiwgMHg0OGMxMTMzZiwgMHhjNzBmODZkYyxcbiAgICAgIDB4MDdmOWM5ZWUsIDB4NDEwNDFmMGYsIDB4NDA0Nzc5YTQsIDB4NWQ4ODZlMTcsXG4gICAgICAweDMyNWY1MWViLCAweGQ1OWJjMGQxLCAweGYyYmNjMThmLCAweDQxMTEzNTY0LFxuICAgICAgMHgyNTdiNzgzNCwgMHg2MDJhOWM2MCwgMHhkZmY4ZThhMywgMHgxZjYzNmMxYixcbiAgICAgIDB4MGUxMmI0YzIsIDB4MDJlMTMyOWUsIDB4YWY2NjRmZDEsIDB4Y2FkMTgxMTUsXG4gICAgICAweDZiMjM5NWUwLCAweDMzM2U5MmUxLCAweDNiMjQwYjYyLCAweGVlYmViOTIyLFxuICAgICAgMHg4NWIyYTIwZSwgMHhlNmJhMGQ5OSwgMHhkZTcyMGM4YywgMHgyZGEyZjcyOCxcbiAgICAgIDB4ZDAxMjc4NDUsIDB4OTViNzk0ZmQsIDB4NjQ3ZDA4NjIsIDB4ZTdjY2Y1ZjAsXG4gICAgICAweDU0NDlhMzZmLCAweDg3N2Q0OGZhLCAweGMzOWRmZDI3LCAweGYzM2U4ZDFlLFxuICAgICAgMHgwYTQ3NjM0MSwgMHg5OTJlZmY3NCwgMHgzYTZmNmVhYiwgMHhmNGY4ZmQzNyxcbiAgICAgIDB4YTgxMmRjNjAsIDB4YTFlYmRkZjgsIDB4OTkxYmUxNGMsIDB4ZGI2ZTZiMGQsXG4gICAgICAweGM2N2I1NTEwLCAweDZkNjcyYzM3LCAweDI3NjVkNDNiLCAweGRjZDBlODA0LFxuICAgICAgMHhmMTI5MGRjNywgMHhjYzAwZmZhMywgMHhiNTM5MGY5MiwgMHg2OTBmZWQwYixcbiAgICAgIDB4NjY3YjlmZmIsIDB4Y2VkYjdkOWMsIDB4YTA5MWNmMGIsIDB4ZDkxNTVlYTMsXG4gICAgICAweGJiMTMyZjg4LCAweDUxNWJhZDI0LCAweDdiOTQ3OWJmLCAweDc2M2JkNmViLFxuICAgICAgMHgzNzM5MmViMywgMHhjYzExNTk3OSwgMHg4MDI2ZTI5NywgMHhmNDJlMzEyZCxcbiAgICAgIDB4Njg0MmFkYTcsIDB4YzY2YTJiM2IsIDB4MTI3NTRjY2MsIDB4NzgyZWYxMWMsXG4gICAgICAweDZhMTI0MjM3LCAweGI3OTI1MWU3LCAweDA2YTFiYmU2LCAweDRiZmI2MzUwLFxuICAgICAgMHgxYTZiMTAxOCwgMHgxMWNhZWRmYSwgMHgzZDI1YmRkOCwgMHhlMmUxYzNjOSxcbiAgICAgIDB4NDQ0MjE2NTksIDB4MGExMjEzODYsIDB4ZDkwY2VjNmUsIDB4ZDVhYmVhMmEsXG4gICAgICAweDY0YWY2NzRlLCAweGRhODZhODVmLCAweGJlYmZlOTg4LCAweDY0ZTRjM2ZlLFxuICAgICAgMHg5ZGJjODA1NywgMHhmMGY3YzA4NiwgMHg2MDc4N2JmOCwgMHg2MDAzNjA0ZCxcbiAgICAgIDB4ZDFmZDgzNDYsIDB4ZjYzODFmYjAsIDB4Nzc0NWFlMDQsIDB4ZDczNmZjY2MsXG4gICAgICAweDgzNDI2YjMzLCAweGYwMWVhYjcxLCAweGIwODA0MTg3LCAweDNjMDA1ZTVmLFxuICAgICAgMHg3N2EwNTdiZSwgMHhiZGU4YWUyNCwgMHg1NTQ2NDI5OSwgMHhiZjU4MmU2MSxcbiAgICAgIDB4NGU1OGY0OGYsIDB4ZjJkZGZkYTIsIDB4ZjQ3NGVmMzgsIDB4ODc4OWJkYzIsXG4gICAgICAweDUzNjZmOWMzLCAweGM4YjM4ZTc0LCAweGI0NzVmMjU1LCAweDQ2ZmNkOWI5LFxuICAgICAgMHg3YWViMjY2MSwgMHg4YjFkZGY4NCwgMHg4NDZhMGU3OSwgMHg5MTVmOTVlMixcbiAgICAgIDB4NDY2ZTU5OGUsIDB4MjBiNDU3NzAsIDB4OGNkNTU1OTEsIDB4YzkwMmRlNGMsXG4gICAgICAweGI5MGJhY2UxLCAweGJiODIwNWQwLCAweDExYTg2MjQ4LCAweDc1NzRhOTllLFxuICAgICAgMHhiNzdmMTliNiwgMHhlMGE5ZGMwOSwgMHg2NjJkMDlhMSwgMHhjNDMyNDYzMyxcbiAgICAgIDB4ZTg1YTFmMDIsIDB4MDlmMGJlOGMsIDB4NGE5OWEwMjUsIDB4MWQ2ZWZlMTAsXG4gICAgICAweDFhYjkzZDFkLCAweDBiYTVhNGRmLCAweGExODZmMjBmLCAweDI4NjhmMTY5LFxuICAgICAgMHhkY2I3ZGE4MywgMHg1NzM5MDZmZSwgMHhhMWUyY2U5YiwgMHg0ZmNkN2Y1MixcbiAgICAgIDB4NTAxMTVlMDEsIDB4YTcwNjgzZmEsIDB4YTAwMmI1YzQsIDB4MGRlNmQwMjcsXG4gICAgICAweDlhZjg4YzI3LCAweDc3M2Y4NjQxLCAweGMzNjA0YzA2LCAweDYxYTgwNmI1LFxuICAgICAgMHhmMDE3N2EyOCwgMHhjMGY1ODZlMCwgMHgwMDYwNThhYSwgMHgzMGRjN2Q2MixcbiAgICAgIDB4MTFlNjllZDcsIDB4MjMzOGVhNjMsIDB4NTNjMmRkOTQsIDB4YzJjMjE2MzQsXG4gICAgICAweGJiY2JlZTU2LCAweDkwYmNiNmRlLCAweGViZmM3ZGExLCAweGNlNTkxZDc2LFxuICAgICAgMHg2ZjA1ZTQwOSwgMHg0YjdjMDE4OCwgMHgzOTcyMGEzZCwgMHg3YzkyN2MyNCxcbiAgICAgIDB4ODZlMzcyNWYsIDB4NzI0ZDlkYjksIDB4MWFjMTViYjQsIDB4ZDM5ZWI4ZmMsXG4gICAgICAweGVkNTQ1NTc4LCAweDA4ZmNhNWI1LCAweGQ4M2Q3Y2QzLCAweDRkYWQwZmM0LFxuICAgICAgMHgxZTUwZWY1ZSwgMHhiMTYxZTZmOCwgMHhhMjg1MTRkOSwgMHg2YzUxMTMzYyxcbiAgICAgIDB4NmZkNWM3ZTcsIDB4NTZlMTRlYzQsIDB4MzYyYWJmY2UsIDB4ZGRjNmM4MzcsXG4gICAgICAweGQ3OWEzMjM0LCAweDkyNjM4MjEyLCAweDY3MGVmYThlLCAweDQwNjAwMGUwXSksXG4gICAgbmV3IFVpbnQzMkFycmF5KFtcbiAgICAgIDB4M2EzOWNlMzcsIDB4ZDNmYWY1Y2YsIDB4YWJjMjc3MzcsIDB4NWFjNTJkMWIsXG4gICAgICAweDVjYjA2NzllLCAweDRmYTMzNzQyLCAweGQzODIyNzQwLCAweDk5YmM5YmJlLFxuICAgICAgMHhkNTExOGU5ZCwgMHhiZjBmNzMxNSwgMHhkNjJkMWM3ZSwgMHhjNzAwYzQ3YixcbiAgICAgIDB4Yjc4YzFiNmIsIDB4MjFhMTkwNDUsIDB4YjI2ZWIxYmUsIDB4NmEzNjZlYjQsXG4gICAgICAweDU3NDhhYjJmLCAweGJjOTQ2ZTc5LCAweGM2YTM3NmQyLCAweDY1NDljMmM4LFxuICAgICAgMHg1MzBmZjhlZSwgMHg0NjhkZGU3ZCwgMHhkNTczMGExZCwgMHg0Y2QwNGRjNixcbiAgICAgIDB4MjkzOWJiZGIsIDB4YTliYTQ2NTAsIDB4YWM5NTI2ZTgsIDB4YmU1ZWUzMDQsXG4gICAgICAweGExZmFkNWYwLCAweDZhMmQ1MTlhLCAweDYzZWY4Y2UyLCAweDlhODZlZTIyLFxuICAgICAgMHhjMDg5YzJiOCwgMHg0MzI0MmVmNiwgMHhhNTFlMDNhYSwgMHg5Y2YyZDBhNCxcbiAgICAgIDB4ODNjMDYxYmEsIDB4OWJlOTZhNGQsIDB4OGZlNTE1NTAsIDB4YmE2NDViZDYsXG4gICAgICAweDI4MjZhMmY5LCAweGE3M2EzYWUxLCAweDRiYTk5NTg2LCAweGVmNTU2MmU5LFxuICAgICAgMHhjNzJmZWZkMywgMHhmNzUyZjdkYSwgMHgzZjA0NmY2OSwgMHg3N2ZhMGE1OSxcbiAgICAgIDB4ODBlNGE5MTUsIDB4ODdiMDg2MDEsIDB4OWIwOWU2YWQsIDB4M2IzZWU1OTMsXG4gICAgICAweGU5OTBmZDVhLCAweDllMzRkNzk3LCAweDJjZjBiN2Q5LCAweDAyMmI4YjUxLFxuICAgICAgMHg5NmQ1YWMzYSwgMHgwMTdkYTY3ZCwgMHhkMWNmM2VkNiwgMHg3YzdkMmQyOCxcbiAgICAgIDB4MWY5ZjI1Y2YsIDB4YWRmMmI4OWIsIDB4NWFkNmI0NzIsIDB4NWE4OGY1NGMsXG4gICAgICAweGUwMjlhYzcxLCAweGUwMTlhNWU2LCAweDQ3YjBhY2ZkLCAweGVkOTNmYTliLFxuICAgICAgMHhlOGQzYzQ4ZCwgMHgyODNiNTdjYywgMHhmOGQ1NjYyOSwgMHg3OTEzMmUyOCxcbiAgICAgIDB4Nzg1ZjAxOTEsIDB4ZWQ3NTYwNTUsIDB4Zjc5NjBlNDQsIDB4ZTNkMzVlOGMsXG4gICAgICAweDE1MDU2ZGQ0LCAweDg4ZjQ2ZGJhLCAweDAzYTE2MTI1LCAweDA1NjRmMGJkLFxuICAgICAgMHhjM2ViOWUxNSwgMHgzYzkwNTdhMiwgMHg5NzI3MWFlYywgMHhhOTNhMDcyYSxcbiAgICAgIDB4MWIzZjZkOWIsIDB4MWU2MzIxZjUsIDB4ZjU5YzY2ZmIsIDB4MjZkY2YzMTksXG4gICAgICAweDc1MzNkOTI4LCAweGIxNTVmZGY1LCAweDAzNTYzNDgyLCAweDhhYmEzY2JiLFxuICAgICAgMHgyODUxNzcxMSwgMHhjMjBhZDlmOCwgMHhhYmNjNTE2NywgMHhjY2FkOTI1ZixcbiAgICAgIDB4NGRlODE3NTEsIDB4MzgzMGRjOGUsIDB4Mzc5ZDU4NjIsIDB4OTMyMGY5OTEsXG4gICAgICAweGVhN2E5MGMyLCAweGZiM2U3YmNlLCAweDUxMjFjZTY0LCAweDc3NGZiZTMyLFxuICAgICAgMHhhOGI2ZTM3ZSwgMHhjMzI5M2Q0NiwgMHg0OGRlNTM2OSwgMHg2NDEzZTY4MCxcbiAgICAgIDB4YTJhZTA4MTAsIDB4ZGQ2ZGIyMjQsIDB4Njk4NTJkZmQsIDB4MDkwNzIxNjYsXG4gICAgICAweGIzOWE0NjBhLCAweDY0NDVjMGRkLCAweDU4NmNkZWNmLCAweDFjMjBjOGFlLFxuICAgICAgMHg1YmJlZjdkZCwgMHgxYjU4OGQ0MCwgMHhjY2QyMDE3ZiwgMHg2YmI0ZTNiYixcbiAgICAgIDB4ZGRhMjZhN2UsIDB4M2E1OWZmNDUsIDB4M2UzNTBhNDQsIDB4YmNiNGNkZDUsXG4gICAgICAweDcyZWFjZWE4LCAweGZhNjQ4NGJiLCAweDhkNjYxMmFlLCAweGJmM2M2ZjQ3LFxuICAgICAgMHhkMjliZTQ2MywgMHg1NDJmNWQ5ZSwgMHhhZWMyNzcxYiwgMHhmNjRlNjM3MCxcbiAgICAgIDB4NzQwZTBkOGQsIDB4ZTc1YjEzNTcsIDB4Zjg3MjE2NzEsIDB4YWY1MzdkNWQsXG4gICAgICAweDQwNDBjYjA4LCAweDRlYjRlMmNjLCAweDM0ZDI0NjZhLCAweDAxMTVhZjg0LFxuICAgICAgMHhlMWIwMDQyOCwgMHg5NTk4M2ExZCwgMHgwNmI4OWZiNCwgMHhjZTZlYTA0OCxcbiAgICAgIDB4NmYzZjNiODIsIDB4MzUyMGFiODIsIDB4MDExYTFkNGIsIDB4Mjc3MjI3ZjgsXG4gICAgICAweDYxMTU2MGIxLCAweGU3OTMzZmRjLCAweGJiM2E3OTJiLCAweDM0NDUyNWJkLFxuICAgICAgMHhhMDg4MzllMSwgMHg1MWNlNzk0YiwgMHgyZjMyYzliNywgMHhhMDFmYmFjOSxcbiAgICAgIDB4ZTAxY2M4N2UsIDB4YmNjN2QxZjYsIDB4Y2YwMTExYzMsIDB4YTFlOGFhYzcsXG4gICAgICAweDFhOTA4NzQ5LCAweGQ0NGZiZDlhLCAweGQwZGFkZWNiLCAweGQ1MGFkYTM4LFxuICAgICAgMHgwMzM5YzMyYSwgMHhjNjkxMzY2NywgMHg4ZGY5MzE3YywgMHhlMGIxMmI0ZixcbiAgICAgIDB4Zjc5ZTU5YjcsIDB4NDNmNWJiM2EsIDB4ZjJkNTE5ZmYsIDB4MjdkOTQ1OWMsXG4gICAgICAweGJmOTcyMjJjLCAweDE1ZTZmYzJhLCAweDBmOTFmYzcxLCAweDliOTQxNTI1LFxuICAgICAgMHhmYWU1OTM2MSwgMHhjZWI2OWNlYiwgMHhjMmE4NjQ1OSwgMHgxMmJhYThkMSxcbiAgICAgIDB4YjZjMTA3NWUsIDB4ZTMwNTZhMGMsIDB4MTBkMjUwNjUsIDB4Y2IwM2E0NDIsXG4gICAgICAweGUwZWM2ZTBlLCAweDE2OThkYjNiLCAweDRjOThhMGJlLCAweDMyNzhlOTY0LFxuICAgICAgMHg5ZjFmOTUzMiwgMHhlMGQzOTJkZiwgMHhkM2EwMzQyYiwgMHg4OTcxZjIxZSxcbiAgICAgIDB4MWIwYTc0NDEsIDB4NGJhMzM0OGMsIDB4YzViZTcxMjAsIDB4YzM3NjMyZDgsXG4gICAgICAweGRmMzU5ZjhkLCAweDliOTkyZjJlLCAweGU2MGI2ZjQ3LCAweDBmZTNmMTFkLFxuICAgICAgMHhlNTRjZGE1NCwgMHgxZWRhZDg5MSwgMHhjZTYyNzljZiwgMHhjZDNlN2U2ZixcbiAgICAgIDB4MTYxOGIxNjYsIDB4ZmQyYzFkMDUsIDB4ODQ4ZmQyYzUsIDB4ZjZmYjIyOTksXG4gICAgICAweGY1MjNmMzU3LCAweGE2MzI3NjIzLCAweDkzYTgzNTMxLCAweDU2Y2NjZDAyLFxuICAgICAgMHhhY2YwODE2MiwgMHg1YTc1ZWJiNSwgMHg2ZTE2MzY5NywgMHg4OGQyNzNjYyxcbiAgICAgIDB4ZGU5NjYyOTIsIDB4ODFiOTQ5ZDAsIDB4NGM1MDkwMWIsIDB4NzFjNjU2MTQsXG4gICAgICAweGU2YzZjN2JkLCAweDMyN2ExNDBhLCAweDQ1ZTFkMDA2LCAweGMzZjI3YjlhLFxuICAgICAgMHhjOWFhNTNmZCwgMHg2MmE4MGYwMCwgMHhiYjI1YmZlMiwgMHgzNWJkZDJmNixcbiAgICAgIDB4NzExMjY5MDUsIDB4YjIwNDAyMjIsIDB4YjZjYmNmN2MsIDB4Y2Q3NjljMmIsXG4gICAgICAweDUzMTEzZWMwLCAweDE2NDBlM2QzLCAweDM4YWJiZDYwLCAweDI1NDdhZGYwLFxuICAgICAgMHhiYTM4MjA5YywgMHhmNzQ2Y2U3NiwgMHg3N2FmYTFjNSwgMHgyMDc1NjA2MCxcbiAgICAgIDB4ODVjYmZlNGUsIDB4OGFlODhkZDgsIDB4N2FhYWY5YjAsIDB4NGNmOWFhN2UsXG4gICAgICAweDE5NDhjMjVjLCAweDAyZmI4YThjLCAweDAxYzM2YWU0LCAweGQ2ZWJlMWY5LFxuICAgICAgMHg5MGQ0Zjg2OSwgMHhhNjVjZGVhMCwgMHgzZjA5MjUyZCwgMHhjMjA4ZTY5ZixcbiAgICAgIDB4Yjc0ZTYxMzIsIDB4Y2U3N2UyNWIsIDB4NTc4ZmRmZTMsIDB4M2FjMzcyZTZdKVxuICAgIF07XG4gIHRoaXMuUCA9IG5ldyBVaW50MzJBcnJheShbXG4gICAgMHgyNDNmNmE4OCwgMHg4NWEzMDhkMywgMHgxMzE5OGEyZSwgMHgwMzcwNzM0NCxcbiAgICAweGE0MDkzODIyLCAweDI5OWYzMWQwLCAweDA4MmVmYTk4LCAweGVjNGU2Yzg5LFxuICAgIDB4NDUyODIxZTYsIDB4MzhkMDEzNzcsIDB4YmU1NDY2Y2YsIDB4MzRlOTBjNmMsXG4gICAgMHhjMGFjMjliNywgMHhjOTdjNTBkZCwgMHgzZjg0ZDViNSwgMHhiNTQ3MDkxNyxcbiAgICAweDkyMTZkNWQ5LCAweDg5NzlmYjFiXSk7XG59O1xuXG5mdW5jdGlvbiBGKFMsIHg4LCBpKSB7XG4gIHJldHVybiAoKChTWzBdW3g4W2krM11dICtcbiAgICAgICAgICAgIFNbMV1beDhbaSsyXV0pIF5cbiAgICAgICAgICAgIFNbMl1beDhbaSsxXV0pICtcbiAgICAgICAgICAgIFNbM11beDhbaV1dKTtcbn07XG5cbkJsb3dmaXNoLnByb3RvdHlwZS5lbmNpcGhlciA9IGZ1bmN0aW9uKHgsIHg4KSB7XG4gIGlmICh4OCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgeDggPSBuZXcgVWludDhBcnJheSh4LmJ1ZmZlcik7XG4gICAgaWYgKHguYnl0ZU9mZnNldCAhPT0gMClcbiAgICAgIHg4ID0geDguc3ViYXJyYXkoeC5ieXRlT2Zmc2V0KTtcbiAgfVxuICB4WzBdIF49IHRoaXMuUFswXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCAxNjsgaSArPSAyKSB7XG4gICAgeFsxXSBePSBGKHRoaXMuUywgeDgsIDApIF4gdGhpcy5QW2ldO1xuICAgIHhbMF0gXj0gRih0aGlzLlMsIHg4LCA0KSBeIHRoaXMuUFtpKzFdO1xuICB9XG4gIHZhciB0ID0geFswXTtcbiAgeFswXSA9IHhbMV0gXiB0aGlzLlBbMTddO1xuICB4WzFdID0gdDtcbn07XG5cbkJsb3dmaXNoLnByb3RvdHlwZS5kZWNpcGhlciA9IGZ1bmN0aW9uKHgpIHtcbiAgdmFyIHg4ID0gbmV3IFVpbnQ4QXJyYXkoeC5idWZmZXIpO1xuICBpZiAoeC5ieXRlT2Zmc2V0ICE9PSAwKVxuICAgIHg4ID0geDguc3ViYXJyYXkoeC5ieXRlT2Zmc2V0KTtcbiAgeFswXSBePSB0aGlzLlBbMTddO1xuICBmb3IgKHZhciBpID0gMTY7IGkgPiAwOyBpIC09IDIpIHtcbiAgICB4WzFdIF49IEYodGhpcy5TLCB4OCwgMCkgXiB0aGlzLlBbaV07XG4gICAgeFswXSBePSBGKHRoaXMuUywgeDgsIDQpIF4gdGhpcy5QW2ktMV07XG4gIH1cbiAgdmFyIHQgPSB4WzBdO1xuICB4WzBdID0geFsxXSBeIHRoaXMuUFswXTtcbiAgeFsxXSA9IHQ7XG59O1xuXG5mdW5jdGlvbiBzdHJlYW0yd29yZChkYXRhLCBkYXRhYnl0ZXMpe1xuICB2YXIgaSwgdGVtcCA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyssIEJMRl9KKyspIHtcbiAgICBpZiAoQkxGX0ogPj0gZGF0YWJ5dGVzKSBCTEZfSiA9IDA7XG4gICAgdGVtcCA9ICh0ZW1wIDw8IDgpIHwgZGF0YVtCTEZfSl07XG4gIH1cbiAgcmV0dXJuIHRlbXA7XG59O1xuXG5CbG93ZmlzaC5wcm90b3R5cGUuZXhwYW5kMHN0YXRlID0gZnVuY3Rpb24oa2V5LCBrZXlieXRlcykge1xuICB2YXIgZCA9IG5ldyBVaW50MzJBcnJheSgyKSwgaSwgaztcbiAgdmFyIGQ4ID0gbmV3IFVpbnQ4QXJyYXkoZC5idWZmZXIpO1xuXG4gIGZvciAoaSA9IDAsIEJMRl9KID0gMDsgaSA8IDE4OyBpKyspIHtcbiAgICB0aGlzLlBbaV0gXj0gc3RyZWFtMndvcmQoa2V5LCBrZXlieXRlcyk7XG4gIH1cbiAgQkxGX0ogPSAwO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAxODsgaSArPSAyKSB7XG4gICAgdGhpcy5lbmNpcGhlcihkLCBkOCk7XG4gICAgdGhpcy5QW2ldICAgPSBkWzBdO1xuICAgIHRoaXMuUFtpKzFdID0gZFsxXTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBmb3IgKGsgPSAwOyBrIDwgMjU2OyBrICs9IDIpIHtcbiAgICAgIHRoaXMuZW5jaXBoZXIoZCwgZDgpO1xuICAgICAgdGhpcy5TW2ldW2tdICAgPSBkWzBdO1xuICAgICAgdGhpcy5TW2ldW2srMV0gPSBkWzFdO1xuICAgIH1cbiAgfVxufTtcblxuQmxvd2Zpc2gucHJvdG90eXBlLmV4cGFuZHN0YXRlID0gZnVuY3Rpb24oZGF0YSwgZGF0YWJ5dGVzLCBrZXksIGtleWJ5dGVzKSB7XG4gIHZhciBkID0gbmV3IFVpbnQzMkFycmF5KDIpLCBpLCBrO1xuXG4gIGZvciAoaSA9IDAsIEJMRl9KID0gMDsgaSA8IDE4OyBpKyspIHtcbiAgICB0aGlzLlBbaV0gXj0gc3RyZWFtMndvcmQoa2V5LCBrZXlieXRlcyk7XG4gIH1cblxuICBmb3IgKGkgPSAwLCBCTEZfSiA9IDA7IGkgPCAxODsgaSArPSAyKSB7XG4gICAgZFswXSBePSBzdHJlYW0yd29yZChkYXRhLCBkYXRhYnl0ZXMpO1xuICAgIGRbMV0gXj0gc3RyZWFtMndvcmQoZGF0YSwgZGF0YWJ5dGVzKTtcbiAgICB0aGlzLmVuY2lwaGVyKGQpO1xuICAgIHRoaXMuUFtpXSAgID0gZFswXTtcbiAgICB0aGlzLlBbaSsxXSA9IGRbMV07XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgZm9yIChrID0gMDsgayA8IDI1NjsgayArPSAyKSB7XG4gICAgICBkWzBdIF49IHN0cmVhbTJ3b3JkKGRhdGEsIGRhdGFieXRlcyk7XG4gICAgICBkWzFdIF49IHN0cmVhbTJ3b3JkKGRhdGEsIGRhdGFieXRlcyk7XG4gICAgICB0aGlzLmVuY2lwaGVyKGQpO1xuICAgICAgdGhpcy5TW2ldW2tdICAgPSBkWzBdO1xuICAgICAgdGhpcy5TW2ldW2srMV0gPSBkWzFdO1xuICAgIH1cbiAgfVxuICBCTEZfSiA9IDA7XG59O1xuXG5CbG93ZmlzaC5wcm90b3R5cGUuZW5jID0gZnVuY3Rpb24oZGF0YSwgYmxvY2tzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tzOyBpKyspIHtcbiAgICB0aGlzLmVuY2lwaGVyKGRhdGEuc3ViYXJyYXkoaSoyKSk7XG4gIH1cbn07XG5cbkJsb3dmaXNoLnByb3RvdHlwZS5kZWMgPSBmdW5jdGlvbihkYXRhLCBibG9ja3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja3M7IGkrKykge1xuICAgIHRoaXMuZGVjaXBoZXIoZGF0YS5zdWJhcnJheShpKjIpKTtcbiAgfVxufTtcblxudmFyIEJDUllQVF9CTE9DS1MgPSA4LFxuICAgIEJDUllQVF9IQVNIU0laRSA9IDMyO1xuXG5mdW5jdGlvbiBiY3J5cHRfaGFzaChzaGEycGFzcywgc2hhMnNhbHQsIG91dCkge1xuICB2YXIgc3RhdGUgPSBuZXcgQmxvd2Zpc2goKSxcbiAgICAgIGNkYXRhID0gbmV3IFVpbnQzMkFycmF5KEJDUllQVF9CTE9DS1MpLCBpLFxuICAgICAgY2lwaGVydGV4dCA9IG5ldyBVaW50OEFycmF5KFs3OSwxMjAsMTIxLDk5LDEwNCwxMTQsMTExLDEwOSw5NywxMTYsMTA1LFxuICAgICAgICAgICAgOTksNjYsMTA4LDExMSwxMTksMTAyLDEwNSwxMTUsMTA0LDgzLDExOSw5NywxMTYsNjgsMTIxLDExMCw5NywxMDksXG4gICAgICAgICAgICAxMDUsMTE2LDEwMV0pOyAvL1wiT3h5Y2hyb21hdGljQmxvd2Zpc2hTd2F0RHluYW1pdGVcIlxuXG4gIHN0YXRlLmV4cGFuZHN0YXRlKHNoYTJzYWx0LCA2NCwgc2hhMnBhc3MsIDY0KTtcbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHtcbiAgICBzdGF0ZS5leHBhbmQwc3RhdGUoc2hhMnNhbHQsIDY0KTtcbiAgICBzdGF0ZS5leHBhbmQwc3RhdGUoc2hhMnBhc3MsIDY0KTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBCQ1JZUFRfQkxPQ0tTOyBpKyspXG4gICAgY2RhdGFbaV0gPSBzdHJlYW0yd29yZChjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0LmJ5dGVMZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKylcbiAgICBzdGF0ZS5lbmMoY2RhdGEsIGNkYXRhLmJ5dGVMZW5ndGggLyA4KTtcblxuICBmb3IgKGkgPSAwOyBpIDwgQkNSWVBUX0JMT0NLUzsgaSsrKSB7XG4gICAgb3V0WzQqaSszXSA9IGNkYXRhW2ldID4+PiAyNDtcbiAgICBvdXRbNCppKzJdID0gY2RhdGFbaV0gPj4+IDE2O1xuICAgIG91dFs0KmkrMV0gPSBjZGF0YVtpXSA+Pj4gODtcbiAgICBvdXRbNCppKzBdID0gY2RhdGFbaV07XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJjcnlwdF9wYmtkZihwYXNzLCBwYXNzbGVuLCBzYWx0LCBzYWx0bGVuLCBrZXksIGtleWxlbiwgcm91bmRzKSB7XG4gIHZhciBzaGEycGFzcyA9IG5ldyBVaW50OEFycmF5KDY0KSxcbiAgICAgIHNoYTJzYWx0ID0gbmV3IFVpbnQ4QXJyYXkoNjQpLFxuICAgICAgb3V0ID0gbmV3IFVpbnQ4QXJyYXkoQkNSWVBUX0hBU0hTSVpFKSxcbiAgICAgIHRtcG91dCA9IG5ldyBVaW50OEFycmF5KEJDUllQVF9IQVNIU0laRSksXG4gICAgICBjb3VudHNhbHQgPSBuZXcgVWludDhBcnJheShzYWx0bGVuKzQpLFxuICAgICAgaSwgaiwgYW10LCBzdHJpZGUsIGRlc3QsIGNvdW50LFxuICAgICAgb3JpZ2tleWxlbiA9IGtleWxlbjtcblxuICBpZiAocm91bmRzIDwgMSlcbiAgICByZXR1cm4gLTE7XG4gIGlmIChwYXNzbGVuID09PSAwIHx8IHNhbHRsZW4gPT09IDAgfHwga2V5bGVuID09PSAwIHx8XG4gICAgICBrZXlsZW4gPiAob3V0LmJ5dGVMZW5ndGggKiBvdXQuYnl0ZUxlbmd0aCkgfHwgc2FsdGxlbiA+ICgxPDwyMCkpXG4gICAgcmV0dXJuIC0xO1xuXG4gIHN0cmlkZSA9IE1hdGguZmxvb3IoKGtleWxlbiArIG91dC5ieXRlTGVuZ3RoIC0gMSkgLyBvdXQuYnl0ZUxlbmd0aCk7XG4gIGFtdCA9IE1hdGguZmxvb3IoKGtleWxlbiArIHN0cmlkZSAtIDEpIC8gc3RyaWRlKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc2FsdGxlbjsgaSsrKVxuICAgIGNvdW50c2FsdFtpXSA9IHNhbHRbaV07XG5cbiAgY3J5cHRvX2hhc2hfc2hhNTEyKHNoYTJwYXNzLCBwYXNzLCBwYXNzbGVuKTtcblxuICBmb3IgKGNvdW50ID0gMTsga2V5bGVuID4gMDsgY291bnQrKykge1xuICAgIGNvdW50c2FsdFtzYWx0bGVuKzBdID0gY291bnQgPj4+IDI0O1xuICAgIGNvdW50c2FsdFtzYWx0bGVuKzFdID0gY291bnQgPj4+IDE2O1xuICAgIGNvdW50c2FsdFtzYWx0bGVuKzJdID0gY291bnQgPj4+ICA4O1xuICAgIGNvdW50c2FsdFtzYWx0bGVuKzNdID0gY291bnQ7XG5cbiAgICBjcnlwdG9faGFzaF9zaGE1MTIoc2hhMnNhbHQsIGNvdW50c2FsdCwgc2FsdGxlbiArIDQpO1xuICAgIGJjcnlwdF9oYXNoKHNoYTJwYXNzLCBzaGEyc2FsdCwgdG1wb3V0KTtcbiAgICBmb3IgKGkgPSBvdXQuYnl0ZUxlbmd0aDsgaS0tOylcbiAgICAgIG91dFtpXSA9IHRtcG91dFtpXTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCByb3VuZHM7IGkrKykge1xuICAgICAgY3J5cHRvX2hhc2hfc2hhNTEyKHNoYTJzYWx0LCB0bXBvdXQsIHRtcG91dC5ieXRlTGVuZ3RoKTtcbiAgICAgIGJjcnlwdF9oYXNoKHNoYTJwYXNzLCBzaGEyc2FsdCwgdG1wb3V0KTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBvdXQuYnl0ZUxlbmd0aDsgaisrKVxuICAgICAgICBvdXRbal0gXj0gdG1wb3V0W2pdO1xuICAgIH1cblxuICAgIGFtdCA9IE1hdGgubWluKGFtdCwga2V5bGVuKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYW10OyBpKyspIHtcbiAgICAgIGRlc3QgPSBpICogc3RyaWRlICsgKGNvdW50IC0gMSk7XG4gICAgICBpZiAoZGVzdCA+PSBvcmlna2V5bGVuKVxuICAgICAgICBicmVhaztcbiAgICAgIGtleVtkZXN0XSA9IG91dFtpXTtcbiAgICB9XG4gICAga2V5bGVuIC09IGk7XG4gIH1cblxuICByZXR1cm4gMDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgQkxPQ0tTOiBCQ1JZUFRfQkxPQ0tTLFxuICAgICAgSEFTSFNJWkU6IEJDUllQVF9IQVNIU0laRSxcbiAgICAgIGhhc2g6IGJjcnlwdF9oYXNoLFxuICAgICAgcGJrZGY6IGJjcnlwdF9wYmtkZlxufTtcbiIsIihmdW5jdGlvbihuYWNsKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFBvcnRlZCBpbiAyMDE0IGJ5IERtaXRyeSBDaGVzdG55a2ggYW5kIERldmkgTWFuZGlyaS5cbi8vIFB1YmxpYyBkb21haW4uXG4vL1xuLy8gSW1wbGVtZW50YXRpb24gZGVyaXZlZCBmcm9tIFR3ZWV0TmFDbCB2ZXJzaW9uIDIwMTQwNDI3LlxuLy8gU2VlIGZvciBkZXRhaWxzOiBodHRwOi8vdHdlZXRuYWNsLmNyLnlwLnRvL1xuXG52YXIgZ2YgPSBmdW5jdGlvbihpbml0KSB7XG4gIHZhciBpLCByID0gbmV3IEZsb2F0NjRBcnJheSgxNik7XG4gIGlmIChpbml0KSBmb3IgKGkgPSAwOyBpIDwgaW5pdC5sZW5ndGg7IGkrKykgcltpXSA9IGluaXRbaV07XG4gIHJldHVybiByO1xufTtcblxuLy8gIFBsdWdnYWJsZSwgaW5pdGlhbGl6ZWQgaW4gaGlnaC1sZXZlbCBBUEkgYmVsb3cuXG52YXIgcmFuZG9tYnl0ZXMgPSBmdW5jdGlvbigvKiB4LCBuICovKSB7IHRocm93IG5ldyBFcnJvcignbm8gUFJORycpOyB9O1xuXG52YXIgXzAgPSBuZXcgVWludDhBcnJheSgxNik7XG52YXIgXzkgPSBuZXcgVWludDhBcnJheSgzMik7IF85WzBdID0gOTtcblxudmFyIGdmMCA9IGdmKCksXG4gICAgZ2YxID0gZ2YoWzFdKSxcbiAgICBfMTIxNjY1ID0gZ2YoWzB4ZGI0MSwgMV0pLFxuICAgIEQgPSBnZihbMHg3OGEzLCAweDEzNTksIDB4NGRjYSwgMHg3NWViLCAweGQ4YWIsIDB4NDE0MSwgMHgwYTRkLCAweDAwNzAsIDB4ZTg5OCwgMHg3Nzc5LCAweDQwNzksIDB4OGNjNywgMHhmZTczLCAweDJiNmYsIDB4NmNlZSwgMHg1MjAzXSksXG4gICAgRDIgPSBnZihbMHhmMTU5LCAweDI2YjIsIDB4OWI5NCwgMHhlYmQ2LCAweGIxNTYsIDB4ODI4MywgMHgxNDlhLCAweDAwZTAsIDB4ZDEzMCwgMHhlZWYzLCAweDgwZjIsIDB4MTk4ZSwgMHhmY2U3LCAweDU2ZGYsIDB4ZDlkYywgMHgyNDA2XSksXG4gICAgWCA9IGdmKFsweGQ1MWEsIDB4OGYyNSwgMHgyZDYwLCAweGM5NTYsIDB4YTdiMiwgMHg5NTI1LCAweGM3NjAsIDB4NjkyYywgMHhkYzVjLCAweGZkZDYsIDB4ZTIzMSwgMHhjMGE0LCAweDUzZmUsIDB4Y2Q2ZSwgMHgzNmQzLCAweDIxNjldKSxcbiAgICBZID0gZ2YoWzB4NjY1OCwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2Nl0pLFxuICAgIEkgPSBnZihbMHhhMGIwLCAweDRhMGUsIDB4MWIyNywgMHhjNGVlLCAweGU0NzgsIDB4YWQyZiwgMHgxODA2LCAweDJmNDMsIDB4ZDdhNywgMHgzZGZiLCAweDAwOTksIDB4MmI0ZCwgMHhkZjBiLCAweDRmYzEsIDB4MjQ4MCwgMHgyYjgzXSk7XG5cbmZ1bmN0aW9uIHRzNjQoeCwgaSwgaCwgbCkge1xuICB4W2ldICAgPSAoaCA+PiAyNCkgJiAweGZmO1xuICB4W2krMV0gPSAoaCA+PiAxNikgJiAweGZmO1xuICB4W2krMl0gPSAoaCA+PiAgOCkgJiAweGZmO1xuICB4W2krM10gPSBoICYgMHhmZjtcbiAgeFtpKzRdID0gKGwgPj4gMjQpICAmIDB4ZmY7XG4gIHhbaSs1XSA9IChsID4+IDE2KSAgJiAweGZmO1xuICB4W2krNl0gPSAobCA+PiAgOCkgICYgMHhmZjtcbiAgeFtpKzddID0gbCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIHZuKHgsIHhpLCB5LCB5aSwgbikge1xuICB2YXIgaSxkID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgZCB8PSB4W3hpK2ldXnlbeWkraV07XG4gIHJldHVybiAoMSAmICgoZCAtIDEpID4+PiA4KSkgLSAxO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fdmVyaWZ5XzE2KHgsIHhpLCB5LCB5aSkge1xuICByZXR1cm4gdm4oeCx4aSx5LHlpLDE2KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3ZlcmlmeV8zMih4LCB4aSwgeSwgeWkpIHtcbiAgcmV0dXJuIHZuKHgseGkseSx5aSwzMik7XG59XG5cbmZ1bmN0aW9uIGNvcmVfc2Fsc2EyMChvLCBwLCBrLCBjKSB7XG4gIHZhciBqMCAgPSBjWyAwXSAmIDB4ZmYgfCAoY1sgMV0gJiAweGZmKTw8OCB8IChjWyAyXSAmIDB4ZmYpPDwxNiB8IChjWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxICA9IGtbIDBdICYgMHhmZiB8IChrWyAxXSAmIDB4ZmYpPDw4IHwgKGtbIDJdICYgMHhmZik8PDE2IHwgKGtbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajIgID0ga1sgNF0gJiAweGZmIHwgKGtbIDVdICYgMHhmZik8PDggfCAoa1sgNl0gJiAweGZmKTw8MTYgfCAoa1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqMyAgPSBrWyA4XSAmIDB4ZmYgfCAoa1sgOV0gJiAweGZmKTw8OCB8IChrWzEwXSAmIDB4ZmYpPDwxNiB8IChrWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo0ICA9IGtbMTJdICYgMHhmZiB8IChrWzEzXSAmIDB4ZmYpPDw4IHwgKGtbMTRdICYgMHhmZik8PDE2IHwgKGtbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajUgID0gY1sgNF0gJiAweGZmIHwgKGNbIDVdICYgMHhmZik8PDggfCAoY1sgNl0gJiAweGZmKTw8MTYgfCAoY1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqNiAgPSBwWyAwXSAmIDB4ZmYgfCAocFsgMV0gJiAweGZmKTw8OCB8IChwWyAyXSAmIDB4ZmYpPDwxNiB8IChwWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo3ICA9IHBbIDRdICYgMHhmZiB8IChwWyA1XSAmIDB4ZmYpPDw4IHwgKHBbIDZdICYgMHhmZik8PDE2IHwgKHBbIDddICYgMHhmZik8PDI0LFxuICAgICAgajggID0gcFsgOF0gJiAweGZmIHwgKHBbIDldICYgMHhmZik8PDggfCAocFsxMF0gJiAweGZmKTw8MTYgfCAocFsxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqOSAgPSBwWzEyXSAmIDB4ZmYgfCAocFsxM10gJiAweGZmKTw8OCB8IChwWzE0XSAmIDB4ZmYpPDwxNiB8IChwWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMCA9IGNbIDhdICYgMHhmZiB8IChjWyA5XSAmIDB4ZmYpPDw4IHwgKGNbMTBdICYgMHhmZik8PDE2IHwgKGNbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajExID0ga1sxNl0gJiAweGZmIHwgKGtbMTddICYgMHhmZik8PDggfCAoa1sxOF0gJiAweGZmKTw8MTYgfCAoa1sxOV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTIgPSBrWzIwXSAmIDB4ZmYgfCAoa1syMV0gJiAweGZmKTw8OCB8IChrWzIyXSAmIDB4ZmYpPDwxNiB8IChrWzIzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMyA9IGtbMjRdICYgMHhmZiB8IChrWzI1XSAmIDB4ZmYpPDw4IHwgKGtbMjZdICYgMHhmZik8PDE2IHwgKGtbMjddICYgMHhmZik8PDI0LFxuICAgICAgajE0ID0ga1syOF0gJiAweGZmIHwgKGtbMjldICYgMHhmZik8PDggfCAoa1szMF0gJiAweGZmKTw8MTYgfCAoa1szMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTUgPSBjWzEyXSAmIDB4ZmYgfCAoY1sxM10gJiAweGZmKTw8OCB8IChjWzE0XSAmIDB4ZmYpPDwxNiB8IChjWzE1XSAmIDB4ZmYpPDwyNDtcblxuICB2YXIgeDAgPSBqMCwgeDEgPSBqMSwgeDIgPSBqMiwgeDMgPSBqMywgeDQgPSBqNCwgeDUgPSBqNSwgeDYgPSBqNiwgeDcgPSBqNyxcbiAgICAgIHg4ID0gajgsIHg5ID0gajksIHgxMCA9IGoxMCwgeDExID0gajExLCB4MTIgPSBqMTIsIHgxMyA9IGoxMywgeDE0ID0gajE0LFxuICAgICAgeDE1ID0gajE1LCB1O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkgKz0gMikge1xuICAgIHUgPSB4MCArIHgxMiB8IDA7XG4gICAgeDQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg0ICsgeDAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHg0IHwgMDtcbiAgICB4MTIgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEyICsgeDggfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4MSB8IDA7XG4gICAgeDkgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg5ICsgeDUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDkgfCAwO1xuICAgIHgxIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxICsgeDEzIHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg2IHwgMDtcbiAgICB4MTQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxNCArIHgxMCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDE0IHwgMDtcbiAgICB4NiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NiArIHgyIHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTEgfCAwO1xuICAgIHgzIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MyArIHgxNSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDMgfCAwO1xuICAgIHgxMSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTEgKyB4NyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDAgKyB4MyB8IDA7XG4gICAgeDEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxICsgeDAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxIHwgMDtcbiAgICB4MyBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MyArIHgyIHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDQgfCAwO1xuICAgIHg2IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NiArIHg1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4NiB8IDA7XG4gICAgeDQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDQgKyB4NyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4OSB8IDA7XG4gICAgeDExIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTEgKyB4MTAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHgxMSB8IDA7XG4gICAgeDkgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDkgKyB4OCB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDE0IHwgMDtcbiAgICB4MTIgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMiArIHgxNSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4MTIgfCAwO1xuICAgIHgxNCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTQgKyB4MTMgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuICB9XG4gICB4MCA9ICB4MCArICBqMCB8IDA7XG4gICB4MSA9ICB4MSArICBqMSB8IDA7XG4gICB4MiA9ICB4MiArICBqMiB8IDA7XG4gICB4MyA9ICB4MyArICBqMyB8IDA7XG4gICB4NCA9ICB4NCArICBqNCB8IDA7XG4gICB4NSA9ICB4NSArICBqNSB8IDA7XG4gICB4NiA9ICB4NiArICBqNiB8IDA7XG4gICB4NyA9ICB4NyArICBqNyB8IDA7XG4gICB4OCA9ICB4OCArICBqOCB8IDA7XG4gICB4OSA9ICB4OSArICBqOSB8IDA7XG4gIHgxMCA9IHgxMCArIGoxMCB8IDA7XG4gIHgxMSA9IHgxMSArIGoxMSB8IDA7XG4gIHgxMiA9IHgxMiArIGoxMiB8IDA7XG4gIHgxMyA9IHgxMyArIGoxMyB8IDA7XG4gIHgxNCA9IHgxNCArIGoxNCB8IDA7XG4gIHgxNSA9IHgxNSArIGoxNSB8IDA7XG5cbiAgb1sgMF0gPSB4MCA+Pj4gIDAgJiAweGZmO1xuICBvWyAxXSA9IHgwID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDJdID0geDAgPj4+IDE2ICYgMHhmZjtcbiAgb1sgM10gPSB4MCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDRdID0geDEgPj4+ICAwICYgMHhmZjtcbiAgb1sgNV0gPSB4MSA+Pj4gIDggJiAweGZmO1xuICBvWyA2XSA9IHgxID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDddID0geDEgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA4XSA9IHgyID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDldID0geDIgPj4+ICA4ICYgMHhmZjtcbiAgb1sxMF0gPSB4MiA+Pj4gMTYgJiAweGZmO1xuICBvWzExXSA9IHgyID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxMl0gPSB4MyA+Pj4gIDAgJiAweGZmO1xuICBvWzEzXSA9IHgzID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTRdID0geDMgPj4+IDE2ICYgMHhmZjtcbiAgb1sxNV0gPSB4MyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTZdID0geDQgPj4+ICAwICYgMHhmZjtcbiAgb1sxN10gPSB4NCA+Pj4gIDggJiAweGZmO1xuICBvWzE4XSA9IHg0ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTldID0geDQgPj4+IDI0ICYgMHhmZjtcblxuICBvWzIwXSA9IHg1ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjFdID0geDUgPj4+ICA4ICYgMHhmZjtcbiAgb1syMl0gPSB4NSA+Pj4gMTYgJiAweGZmO1xuICBvWzIzXSA9IHg1ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syNF0gPSB4NiA+Pj4gIDAgJiAweGZmO1xuICBvWzI1XSA9IHg2ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjZdID0geDYgPj4+IDE2ICYgMHhmZjtcbiAgb1syN10gPSB4NiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjhdID0geDcgPj4+ICAwICYgMHhmZjtcbiAgb1syOV0gPSB4NyA+Pj4gIDggJiAweGZmO1xuICBvWzMwXSA9IHg3ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMzFdID0geDcgPj4+IDI0ICYgMHhmZjtcblxuICBvWzMyXSA9IHg4ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMzNdID0geDggPj4+ICA4ICYgMHhmZjtcbiAgb1szNF0gPSB4OCA+Pj4gMTYgJiAweGZmO1xuICBvWzM1XSA9IHg4ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1szNl0gPSB4OSA+Pj4gIDAgJiAweGZmO1xuICBvWzM3XSA9IHg5ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzhdID0geDkgPj4+IDE2ICYgMHhmZjtcbiAgb1szOV0gPSB4OSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNDBdID0geDEwID4+PiAgMCAmIDB4ZmY7XG4gIG9bNDFdID0geDEwID4+PiAgOCAmIDB4ZmY7XG4gIG9bNDJdID0geDEwID4+PiAxNiAmIDB4ZmY7XG4gIG9bNDNdID0geDEwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s0NF0gPSB4MTEgPj4+ICAwICYgMHhmZjtcbiAgb1s0NV0gPSB4MTEgPj4+ICA4ICYgMHhmZjtcbiAgb1s0Nl0gPSB4MTEgPj4+IDE2ICYgMHhmZjtcbiAgb1s0N10gPSB4MTEgPj4+IDI0ICYgMHhmZjtcblxuICBvWzQ4XSA9IHgxMiA+Pj4gIDAgJiAweGZmO1xuICBvWzQ5XSA9IHgxMiA+Pj4gIDggJiAweGZmO1xuICBvWzUwXSA9IHgxMiA+Pj4gMTYgJiAweGZmO1xuICBvWzUxXSA9IHgxMiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNTJdID0geDEzID4+PiAgMCAmIDB4ZmY7XG4gIG9bNTNdID0geDEzID4+PiAgOCAmIDB4ZmY7XG4gIG9bNTRdID0geDEzID4+PiAxNiAmIDB4ZmY7XG4gIG9bNTVdID0geDEzID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s1Nl0gPSB4MTQgPj4+ICAwICYgMHhmZjtcbiAgb1s1N10gPSB4MTQgPj4+ICA4ICYgMHhmZjtcbiAgb1s1OF0gPSB4MTQgPj4+IDE2ICYgMHhmZjtcbiAgb1s1OV0gPSB4MTQgPj4+IDI0ICYgMHhmZjtcblxuICBvWzYwXSA9IHgxNSA+Pj4gIDAgJiAweGZmO1xuICBvWzYxXSA9IHgxNSA+Pj4gIDggJiAweGZmO1xuICBvWzYyXSA9IHgxNSA+Pj4gMTYgJiAweGZmO1xuICBvWzYzXSA9IHgxNSA+Pj4gMjQgJiAweGZmO1xufVxuXG5mdW5jdGlvbiBjb3JlX2hzYWxzYTIwKG8scCxrLGMpIHtcbiAgdmFyIGowICA9IGNbIDBdICYgMHhmZiB8IChjWyAxXSAmIDB4ZmYpPDw4IHwgKGNbIDJdICYgMHhmZik8PDE2IHwgKGNbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajEgID0ga1sgMF0gJiAweGZmIHwgKGtbIDFdICYgMHhmZik8PDggfCAoa1sgMl0gJiAweGZmKTw8MTYgfCAoa1sgM10gJiAweGZmKTw8MjQsXG4gICAgICBqMiAgPSBrWyA0XSAmIDB4ZmYgfCAoa1sgNV0gJiAweGZmKTw8OCB8IChrWyA2XSAmIDB4ZmYpPDwxNiB8IChrWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGozICA9IGtbIDhdICYgMHhmZiB8IChrWyA5XSAmIDB4ZmYpPDw4IHwgKGtbMTBdICYgMHhmZik8PDE2IHwgKGtbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajQgID0ga1sxMl0gJiAweGZmIHwgKGtbMTNdICYgMHhmZik8PDggfCAoa1sxNF0gJiAweGZmKTw8MTYgfCAoa1sxNV0gJiAweGZmKTw8MjQsXG4gICAgICBqNSAgPSBjWyA0XSAmIDB4ZmYgfCAoY1sgNV0gJiAweGZmKTw8OCB8IChjWyA2XSAmIDB4ZmYpPDwxNiB8IChjWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo2ICA9IHBbIDBdICYgMHhmZiB8IChwWyAxXSAmIDB4ZmYpPDw4IHwgKHBbIDJdICYgMHhmZik8PDE2IHwgKHBbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajcgID0gcFsgNF0gJiAweGZmIHwgKHBbIDVdICYgMHhmZik8PDggfCAocFsgNl0gJiAweGZmKTw8MTYgfCAocFsgN10gJiAweGZmKTw8MjQsXG4gICAgICBqOCAgPSBwWyA4XSAmIDB4ZmYgfCAocFsgOV0gJiAweGZmKTw8OCB8IChwWzEwXSAmIDB4ZmYpPDwxNiB8IChwWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo5ICA9IHBbMTJdICYgMHhmZiB8IChwWzEzXSAmIDB4ZmYpPDw4IHwgKHBbMTRdICYgMHhmZik8PDE2IHwgKHBbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajEwID0gY1sgOF0gJiAweGZmIHwgKGNbIDldICYgMHhmZik8PDggfCAoY1sxMF0gJiAweGZmKTw8MTYgfCAoY1sxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTEgPSBrWzE2XSAmIDB4ZmYgfCAoa1sxN10gJiAweGZmKTw8OCB8IChrWzE4XSAmIDB4ZmYpPDwxNiB8IChrWzE5XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMiA9IGtbMjBdICYgMHhmZiB8IChrWzIxXSAmIDB4ZmYpPDw4IHwgKGtbMjJdICYgMHhmZik8PDE2IHwgKGtbMjNdICYgMHhmZik8PDI0LFxuICAgICAgajEzID0ga1syNF0gJiAweGZmIHwgKGtbMjVdICYgMHhmZik8PDggfCAoa1syNl0gJiAweGZmKTw8MTYgfCAoa1syN10gJiAweGZmKTw8MjQsXG4gICAgICBqMTQgPSBrWzI4XSAmIDB4ZmYgfCAoa1syOV0gJiAweGZmKTw8OCB8IChrWzMwXSAmIDB4ZmYpPDwxNiB8IChrWzMxXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxNSA9IGNbMTJdICYgMHhmZiB8IChjWzEzXSAmIDB4ZmYpPDw4IHwgKGNbMTRdICYgMHhmZik8PDE2IHwgKGNbMTVdICYgMHhmZik8PDI0O1xuXG4gIHZhciB4MCA9IGowLCB4MSA9IGoxLCB4MiA9IGoyLCB4MyA9IGozLCB4NCA9IGo0LCB4NSA9IGo1LCB4NiA9IGo2LCB4NyA9IGo3LFxuICAgICAgeDggPSBqOCwgeDkgPSBqOSwgeDEwID0gajEwLCB4MTEgPSBqMTEsIHgxMiA9IGoxMiwgeDEzID0gajEzLCB4MTQgPSBqMTQsXG4gICAgICB4MTUgPSBqMTUsIHU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSArPSAyKSB7XG4gICAgdSA9IHgwICsgeDEyIHwgMDtcbiAgICB4NCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDQgKyB4MCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDQgfCAwO1xuICAgIHgxMiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTIgKyB4OCB8IDA7XG4gICAgeDAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4NSArIHgxIHwgMDtcbiAgICB4OSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDkgKyB4NSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4OSB8IDA7XG4gICAgeDEgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEgKyB4MTMgfCAwO1xuICAgIHg1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDEwICsgeDYgfCAwO1xuICAgIHgxNCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDE0ICsgeDEwIHwgMDtcbiAgICB4MiBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDIgKyB4MTQgfCAwO1xuICAgIHg2IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg2ICsgeDIgfCAwO1xuICAgIHgxMCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxNSArIHgxMSB8IDA7XG4gICAgeDMgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgzICsgeDE1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4MyB8IDA7XG4gICAgeDExIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxMSArIHg3IHwgMDtcbiAgICB4MTUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MCArIHgzIHwgMDtcbiAgICB4MSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEgKyB4MCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDEgfCAwO1xuICAgIHgzIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgzICsgeDIgfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4NCB8IDA7XG4gICAgeDYgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg2ICsgeDUgfCAwO1xuICAgIHg3IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4NyArIHg2IHwgMDtcbiAgICB4NCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NCArIHg3IHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg5IHwgMDtcbiAgICB4MTEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMSArIHgxMCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDExIHwgMDtcbiAgICB4OSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4OSArIHg4IHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTQgfCAwO1xuICAgIHgxMiBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEyICsgeDE1IHwgMDtcbiAgICB4MTMgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgxMyArIHgxMiB8IDA7XG4gICAgeDE0IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxNCArIHgxMyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG4gIH1cblxuICBvWyAwXSA9IHgwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDFdID0geDAgPj4+ICA4ICYgMHhmZjtcbiAgb1sgMl0gPSB4MCA+Pj4gMTYgJiAweGZmO1xuICBvWyAzXSA9IHgwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sgNF0gPSB4NSA+Pj4gIDAgJiAweGZmO1xuICBvWyA1XSA9IHg1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDZdID0geDUgPj4+IDE2ICYgMHhmZjtcbiAgb1sgN10gPSB4NSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDhdID0geDEwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDldID0geDEwID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTBdID0geDEwID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTFdID0geDEwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxMl0gPSB4MTUgPj4+ICAwICYgMHhmZjtcbiAgb1sxM10gPSB4MTUgPj4+ICA4ICYgMHhmZjtcbiAgb1sxNF0gPSB4MTUgPj4+IDE2ICYgMHhmZjtcbiAgb1sxNV0gPSB4MTUgPj4+IDI0ICYgMHhmZjtcblxuICBvWzE2XSA9IHg2ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTddID0geDYgPj4+ICA4ICYgMHhmZjtcbiAgb1sxOF0gPSB4NiA+Pj4gMTYgJiAweGZmO1xuICBvWzE5XSA9IHg2ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syMF0gPSB4NyA+Pj4gIDAgJiAweGZmO1xuICBvWzIxXSA9IHg3ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjJdID0geDcgPj4+IDE2ICYgMHhmZjtcbiAgb1syM10gPSB4NyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjRdID0geDggPj4+ICAwICYgMHhmZjtcbiAgb1syNV0gPSB4OCA+Pj4gIDggJiAweGZmO1xuICBvWzI2XSA9IHg4ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjddID0geDggPj4+IDI0ICYgMHhmZjtcblxuICBvWzI4XSA9IHg5ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjldID0geDkgPj4+ICA4ICYgMHhmZjtcbiAgb1szMF0gPSB4OSA+Pj4gMTYgJiAweGZmO1xuICBvWzMxXSA9IHg5ID4+PiAyNCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19jb3JlX3NhbHNhMjAob3V0LGlucCxrLGMpIHtcbiAgY29yZV9zYWxzYTIwKG91dCxpbnAsayxjKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2NvcmVfaHNhbHNhMjAob3V0LGlucCxrLGMpIHtcbiAgY29yZV9oc2Fsc2EyMChvdXQsaW5wLGssYyk7XG59XG5cbnZhciBzaWdtYSA9IG5ldyBVaW50OEFycmF5KFsxMDEsIDEyMCwgMTEyLCA5NywgMTEwLCAxMDAsIDMyLCA1MSwgNTAsIDQ1LCA5OCwgMTIxLCAxMTYsIDEwMSwgMzIsIDEwN10pO1xuICAgICAgICAgICAgLy8gXCJleHBhbmQgMzItYnl0ZSBrXCJcblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcihjLGNwb3MsbSxtcG9zLGIsbixrKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMTYpLCB4ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgdSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHpbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB6W2ldID0gbltpXTtcbiAgd2hpbGUgKGIgPj0gNjQpIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgY1tjcG9zK2ldID0gbVttcG9zK2ldIF4geFtpXTtcbiAgICB1ID0gMTtcbiAgICBmb3IgKGkgPSA4OyBpIDwgMTY7IGkrKykge1xuICAgICAgdSA9IHUgKyAoeltpXSAmIDB4ZmYpIHwgMDtcbiAgICAgIHpbaV0gPSB1ICYgMHhmZjtcbiAgICAgIHUgPj4+PSA4O1xuICAgIH1cbiAgICBiIC09IDY0O1xuICAgIGNwb3MgKz0gNjQ7XG4gICAgbXBvcyArPSA2NDtcbiAgfVxuICBpZiAoYiA+IDApIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYjsgaSsrKSBjW2Nwb3MraV0gPSBtW21wb3MraV0gXiB4W2ldO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAoYyxjcG9zLGIsbixrKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMTYpLCB4ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgdSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHpbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB6W2ldID0gbltpXTtcbiAgd2hpbGUgKGIgPj0gNjQpIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgY1tjcG9zK2ldID0geFtpXTtcbiAgICB1ID0gMTtcbiAgICBmb3IgKGkgPSA4OyBpIDwgMTY7IGkrKykge1xuICAgICAgdSA9IHUgKyAoeltpXSAmIDB4ZmYpIHwgMDtcbiAgICAgIHpbaV0gPSB1ICYgMHhmZjtcbiAgICAgIHUgPj4+PSA4O1xuICAgIH1cbiAgICBiIC09IDY0O1xuICAgIGNwb3MgKz0gNjQ7XG4gIH1cbiAgaWYgKGIgPiAwKSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IGI7IGkrKykgY1tjcG9zK2ldID0geFtpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbShjLGNwb3MsZCxuLGspIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwKHMsbixrLHNpZ21hKTtcbiAgdmFyIHNuID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBzbltpXSA9IG5baSsxNl07XG4gIHJldHVybiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAoYyxjcG9zLGQsc24scyk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW1feG9yKGMsY3BvcyxtLG1wb3MsZCxuLGspIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwKHMsbixrLHNpZ21hKTtcbiAgdmFyIHNuID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBzbltpXSA9IG5baSsxNl07XG4gIHJldHVybiBjcnlwdG9fc3RyZWFtX3NhbHNhMjBfeG9yKGMsY3BvcyxtLG1wb3MsZCxzbixzKTtcbn1cblxuLypcbiogUG9ydCBvZiBBbmRyZXcgTW9vbidzIFBvbHkxMzA1LWRvbm5hLTE2LiBQdWJsaWMgZG9tYWluLlxuKiBodHRwczovL2dpdGh1Yi5jb20vZmxvb2R5YmVycnkvcG9seTEzMDUtZG9ubmFcbiovXG5cbnZhciBwb2x5MTMwNSA9IGZ1bmN0aW9uKGtleSkge1xuICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgdGhpcy5yID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdGhpcy5oID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdGhpcy5wYWQgPSBuZXcgVWludDE2QXJyYXkoOCk7XG4gIHRoaXMubGVmdG92ZXIgPSAwO1xuICB0aGlzLmZpbiA9IDA7XG5cbiAgdmFyIHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NztcblxuICB0MCA9IGtleVsgMF0gJiAweGZmIHwgKGtleVsgMV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbMF0gPSAoIHQwICAgICAgICAgICAgICAgICAgICAgKSAmIDB4MWZmZjtcbiAgdDEgPSBrZXlbIDJdICYgMHhmZiB8IChrZXlbIDNdICYgMHhmZikgPDwgODsgdGhpcy5yWzFdID0gKCh0MCA+Pj4gMTMpIHwgKHQxIDw8ICAzKSkgJiAweDFmZmY7XG4gIHQyID0ga2V5WyA0XSAmIDB4ZmYgfCAoa2V5WyA1XSAmIDB4ZmYpIDw8IDg7IHRoaXMuclsyXSA9ICgodDEgPj4+IDEwKSB8ICh0MiA8PCAgNikpICYgMHgxZjAzO1xuICB0MyA9IGtleVsgNl0gJiAweGZmIHwgKGtleVsgN10gJiAweGZmKSA8PCA4OyB0aGlzLnJbM10gPSAoKHQyID4+PiAgNykgfCAodDMgPDwgIDkpKSAmIDB4MWZmZjtcbiAgdDQgPSBrZXlbIDhdICYgMHhmZiB8IChrZXlbIDldICYgMHhmZikgPDwgODsgdGhpcy5yWzRdID0gKCh0MyA+Pj4gIDQpIHwgKHQ0IDw8IDEyKSkgJiAweDAwZmY7XG4gIHRoaXMucls1XSA9ICgodDQgPj4+ICAxKSkgJiAweDFmZmU7XG4gIHQ1ID0ga2V5WzEwXSAmIDB4ZmYgfCAoa2V5WzExXSAmIDB4ZmYpIDw8IDg7IHRoaXMucls2XSA9ICgodDQgPj4+IDE0KSB8ICh0NSA8PCAgMikpICYgMHgxZmZmO1xuICB0NiA9IGtleVsxMl0gJiAweGZmIHwgKGtleVsxM10gJiAweGZmKSA8PCA4OyB0aGlzLnJbN10gPSAoKHQ1ID4+PiAxMSkgfCAodDYgPDwgIDUpKSAmIDB4MWY4MTtcbiAgdDcgPSBrZXlbMTRdICYgMHhmZiB8IChrZXlbMTVdICYgMHhmZikgPDwgODsgdGhpcy5yWzhdID0gKCh0NiA+Pj4gIDgpIHwgKHQ3IDw8ICA4KSkgJiAweDFmZmY7XG4gIHRoaXMucls5XSA9ICgodDcgPj4+ICA1KSkgJiAweDAwN2Y7XG5cbiAgdGhpcy5wYWRbMF0gPSBrZXlbMTZdICYgMHhmZiB8IChrZXlbMTddICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbMV0gPSBrZXlbMThdICYgMHhmZiB8IChrZXlbMTldICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbMl0gPSBrZXlbMjBdICYgMHhmZiB8IChrZXlbMjFdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbM10gPSBrZXlbMjJdICYgMHhmZiB8IChrZXlbMjNdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNF0gPSBrZXlbMjRdICYgMHhmZiB8IChrZXlbMjVdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNV0gPSBrZXlbMjZdICYgMHhmZiB8IChrZXlbMjddICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNl0gPSBrZXlbMjhdICYgMHhmZiB8IChrZXlbMjldICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbN10gPSBrZXlbMzBdICYgMHhmZiB8IChrZXlbMzFdICYgMHhmZikgPDwgODtcbn07XG5cbnBvbHkxMzA1LnByb3RvdHlwZS5ibG9ja3MgPSBmdW5jdGlvbihtLCBtcG9zLCBieXRlcykge1xuICB2YXIgaGliaXQgPSB0aGlzLmZpbiA/IDAgOiAoMSA8PCAxMSk7XG4gIHZhciB0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIGM7XG4gIHZhciBkMCwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcsIGQ4LCBkOTtcblxuICB2YXIgaDAgPSB0aGlzLmhbMF0sXG4gICAgICBoMSA9IHRoaXMuaFsxXSxcbiAgICAgIGgyID0gdGhpcy5oWzJdLFxuICAgICAgaDMgPSB0aGlzLmhbM10sXG4gICAgICBoNCA9IHRoaXMuaFs0XSxcbiAgICAgIGg1ID0gdGhpcy5oWzVdLFxuICAgICAgaDYgPSB0aGlzLmhbNl0sXG4gICAgICBoNyA9IHRoaXMuaFs3XSxcbiAgICAgIGg4ID0gdGhpcy5oWzhdLFxuICAgICAgaDkgPSB0aGlzLmhbOV07XG5cbiAgdmFyIHIwID0gdGhpcy5yWzBdLFxuICAgICAgcjEgPSB0aGlzLnJbMV0sXG4gICAgICByMiA9IHRoaXMuclsyXSxcbiAgICAgIHIzID0gdGhpcy5yWzNdLFxuICAgICAgcjQgPSB0aGlzLnJbNF0sXG4gICAgICByNSA9IHRoaXMucls1XSxcbiAgICAgIHI2ID0gdGhpcy5yWzZdLFxuICAgICAgcjcgPSB0aGlzLnJbN10sXG4gICAgICByOCA9IHRoaXMucls4XSxcbiAgICAgIHI5ID0gdGhpcy5yWzldO1xuXG4gIHdoaWxlIChieXRlcyA+PSAxNikge1xuICAgIHQwID0gbVttcG9zKyAwXSAmIDB4ZmYgfCAobVttcG9zKyAxXSAmIDB4ZmYpIDw8IDg7IGgwICs9ICggdDAgICAgICAgICAgICAgICAgICAgICApICYgMHgxZmZmO1xuICAgIHQxID0gbVttcG9zKyAyXSAmIDB4ZmYgfCAobVttcG9zKyAzXSAmIDB4ZmYpIDw8IDg7IGgxICs9ICgodDAgPj4+IDEzKSB8ICh0MSA8PCAgMykpICYgMHgxZmZmO1xuICAgIHQyID0gbVttcG9zKyA0XSAmIDB4ZmYgfCAobVttcG9zKyA1XSAmIDB4ZmYpIDw8IDg7IGgyICs9ICgodDEgPj4+IDEwKSB8ICh0MiA8PCAgNikpICYgMHgxZmZmO1xuICAgIHQzID0gbVttcG9zKyA2XSAmIDB4ZmYgfCAobVttcG9zKyA3XSAmIDB4ZmYpIDw8IDg7IGgzICs9ICgodDIgPj4+ICA3KSB8ICh0MyA8PCAgOSkpICYgMHgxZmZmO1xuICAgIHQ0ID0gbVttcG9zKyA4XSAmIDB4ZmYgfCAobVttcG9zKyA5XSAmIDB4ZmYpIDw8IDg7IGg0ICs9ICgodDMgPj4+ICA0KSB8ICh0NCA8PCAxMikpICYgMHgxZmZmO1xuICAgIGg1ICs9ICgodDQgPj4+ICAxKSkgJiAweDFmZmY7XG4gICAgdDUgPSBtW21wb3MrMTBdICYgMHhmZiB8IChtW21wb3MrMTFdICYgMHhmZikgPDwgODsgaDYgKz0gKCh0NCA+Pj4gMTQpIHwgKHQ1IDw8ICAyKSkgJiAweDFmZmY7XG4gICAgdDYgPSBtW21wb3MrMTJdICYgMHhmZiB8IChtW21wb3MrMTNdICYgMHhmZikgPDwgODsgaDcgKz0gKCh0NSA+Pj4gMTEpIHwgKHQ2IDw8ICA1KSkgJiAweDFmZmY7XG4gICAgdDcgPSBtW21wb3MrMTRdICYgMHhmZiB8IChtW21wb3MrMTVdICYgMHhmZikgPDwgODsgaDggKz0gKCh0NiA+Pj4gIDgpIHwgKHQ3IDw8ICA4KSkgJiAweDFmZmY7XG4gICAgaDkgKz0gKCh0NyA+Pj4gNSkpIHwgaGliaXQ7XG5cbiAgICBjID0gMDtcblxuICAgIGQwID0gYztcbiAgICBkMCArPSBoMCAqIHIwO1xuICAgIGQwICs9IGgxICogKDUgKiByOSk7XG4gICAgZDAgKz0gaDIgKiAoNSAqIHI4KTtcbiAgICBkMCArPSBoMyAqICg1ICogcjcpO1xuICAgIGQwICs9IGg0ICogKDUgKiByNik7XG4gICAgYyA9IChkMCA+Pj4gMTMpOyBkMCAmPSAweDFmZmY7XG4gICAgZDAgKz0gaDUgKiAoNSAqIHI1KTtcbiAgICBkMCArPSBoNiAqICg1ICogcjQpO1xuICAgIGQwICs9IGg3ICogKDUgKiByMyk7XG4gICAgZDAgKz0gaDggKiAoNSAqIHIyKTtcbiAgICBkMCArPSBoOSAqICg1ICogcjEpO1xuICAgIGMgKz0gKGQwID4+PiAxMyk7IGQwICY9IDB4MWZmZjtcblxuICAgIGQxID0gYztcbiAgICBkMSArPSBoMCAqIHIxO1xuICAgIGQxICs9IGgxICogcjA7XG4gICAgZDEgKz0gaDIgKiAoNSAqIHI5KTtcbiAgICBkMSArPSBoMyAqICg1ICogcjgpO1xuICAgIGQxICs9IGg0ICogKDUgKiByNyk7XG4gICAgYyA9IChkMSA+Pj4gMTMpOyBkMSAmPSAweDFmZmY7XG4gICAgZDEgKz0gaDUgKiAoNSAqIHI2KTtcbiAgICBkMSArPSBoNiAqICg1ICogcjUpO1xuICAgIGQxICs9IGg3ICogKDUgKiByNCk7XG4gICAgZDEgKz0gaDggKiAoNSAqIHIzKTtcbiAgICBkMSArPSBoOSAqICg1ICogcjIpO1xuICAgIGMgKz0gKGQxID4+PiAxMyk7IGQxICY9IDB4MWZmZjtcblxuICAgIGQyID0gYztcbiAgICBkMiArPSBoMCAqIHIyO1xuICAgIGQyICs9IGgxICogcjE7XG4gICAgZDIgKz0gaDIgKiByMDtcbiAgICBkMiArPSBoMyAqICg1ICogcjkpO1xuICAgIGQyICs9IGg0ICogKDUgKiByOCk7XG4gICAgYyA9IChkMiA+Pj4gMTMpOyBkMiAmPSAweDFmZmY7XG4gICAgZDIgKz0gaDUgKiAoNSAqIHI3KTtcbiAgICBkMiArPSBoNiAqICg1ICogcjYpO1xuICAgIGQyICs9IGg3ICogKDUgKiByNSk7XG4gICAgZDIgKz0gaDggKiAoNSAqIHI0KTtcbiAgICBkMiArPSBoOSAqICg1ICogcjMpO1xuICAgIGMgKz0gKGQyID4+PiAxMyk7IGQyICY9IDB4MWZmZjtcblxuICAgIGQzID0gYztcbiAgICBkMyArPSBoMCAqIHIzO1xuICAgIGQzICs9IGgxICogcjI7XG4gICAgZDMgKz0gaDIgKiByMTtcbiAgICBkMyArPSBoMyAqIHIwO1xuICAgIGQzICs9IGg0ICogKDUgKiByOSk7XG4gICAgYyA9IChkMyA+Pj4gMTMpOyBkMyAmPSAweDFmZmY7XG4gICAgZDMgKz0gaDUgKiAoNSAqIHI4KTtcbiAgICBkMyArPSBoNiAqICg1ICogcjcpO1xuICAgIGQzICs9IGg3ICogKDUgKiByNik7XG4gICAgZDMgKz0gaDggKiAoNSAqIHI1KTtcbiAgICBkMyArPSBoOSAqICg1ICogcjQpO1xuICAgIGMgKz0gKGQzID4+PiAxMyk7IGQzICY9IDB4MWZmZjtcblxuICAgIGQ0ID0gYztcbiAgICBkNCArPSBoMCAqIHI0O1xuICAgIGQ0ICs9IGgxICogcjM7XG4gICAgZDQgKz0gaDIgKiByMjtcbiAgICBkNCArPSBoMyAqIHIxO1xuICAgIGQ0ICs9IGg0ICogcjA7XG4gICAgYyA9IChkNCA+Pj4gMTMpOyBkNCAmPSAweDFmZmY7XG4gICAgZDQgKz0gaDUgKiAoNSAqIHI5KTtcbiAgICBkNCArPSBoNiAqICg1ICogcjgpO1xuICAgIGQ0ICs9IGg3ICogKDUgKiByNyk7XG4gICAgZDQgKz0gaDggKiAoNSAqIHI2KTtcbiAgICBkNCArPSBoOSAqICg1ICogcjUpO1xuICAgIGMgKz0gKGQ0ID4+PiAxMyk7IGQ0ICY9IDB4MWZmZjtcblxuICAgIGQ1ID0gYztcbiAgICBkNSArPSBoMCAqIHI1O1xuICAgIGQ1ICs9IGgxICogcjQ7XG4gICAgZDUgKz0gaDIgKiByMztcbiAgICBkNSArPSBoMyAqIHIyO1xuICAgIGQ1ICs9IGg0ICogcjE7XG4gICAgYyA9IChkNSA+Pj4gMTMpOyBkNSAmPSAweDFmZmY7XG4gICAgZDUgKz0gaDUgKiByMDtcbiAgICBkNSArPSBoNiAqICg1ICogcjkpO1xuICAgIGQ1ICs9IGg3ICogKDUgKiByOCk7XG4gICAgZDUgKz0gaDggKiAoNSAqIHI3KTtcbiAgICBkNSArPSBoOSAqICg1ICogcjYpO1xuICAgIGMgKz0gKGQ1ID4+PiAxMyk7IGQ1ICY9IDB4MWZmZjtcblxuICAgIGQ2ID0gYztcbiAgICBkNiArPSBoMCAqIHI2O1xuICAgIGQ2ICs9IGgxICogcjU7XG4gICAgZDYgKz0gaDIgKiByNDtcbiAgICBkNiArPSBoMyAqIHIzO1xuICAgIGQ2ICs9IGg0ICogcjI7XG4gICAgYyA9IChkNiA+Pj4gMTMpOyBkNiAmPSAweDFmZmY7XG4gICAgZDYgKz0gaDUgKiByMTtcbiAgICBkNiArPSBoNiAqIHIwO1xuICAgIGQ2ICs9IGg3ICogKDUgKiByOSk7XG4gICAgZDYgKz0gaDggKiAoNSAqIHI4KTtcbiAgICBkNiArPSBoOSAqICg1ICogcjcpO1xuICAgIGMgKz0gKGQ2ID4+PiAxMyk7IGQ2ICY9IDB4MWZmZjtcblxuICAgIGQ3ID0gYztcbiAgICBkNyArPSBoMCAqIHI3O1xuICAgIGQ3ICs9IGgxICogcjY7XG4gICAgZDcgKz0gaDIgKiByNTtcbiAgICBkNyArPSBoMyAqIHI0O1xuICAgIGQ3ICs9IGg0ICogcjM7XG4gICAgYyA9IChkNyA+Pj4gMTMpOyBkNyAmPSAweDFmZmY7XG4gICAgZDcgKz0gaDUgKiByMjtcbiAgICBkNyArPSBoNiAqIHIxO1xuICAgIGQ3ICs9IGg3ICogcjA7XG4gICAgZDcgKz0gaDggKiAoNSAqIHI5KTtcbiAgICBkNyArPSBoOSAqICg1ICogcjgpO1xuICAgIGMgKz0gKGQ3ID4+PiAxMyk7IGQ3ICY9IDB4MWZmZjtcblxuICAgIGQ4ID0gYztcbiAgICBkOCArPSBoMCAqIHI4O1xuICAgIGQ4ICs9IGgxICogcjc7XG4gICAgZDggKz0gaDIgKiByNjtcbiAgICBkOCArPSBoMyAqIHI1O1xuICAgIGQ4ICs9IGg0ICogcjQ7XG4gICAgYyA9IChkOCA+Pj4gMTMpOyBkOCAmPSAweDFmZmY7XG4gICAgZDggKz0gaDUgKiByMztcbiAgICBkOCArPSBoNiAqIHIyO1xuICAgIGQ4ICs9IGg3ICogcjE7XG4gICAgZDggKz0gaDggKiByMDtcbiAgICBkOCArPSBoOSAqICg1ICogcjkpO1xuICAgIGMgKz0gKGQ4ID4+PiAxMyk7IGQ4ICY9IDB4MWZmZjtcblxuICAgIGQ5ID0gYztcbiAgICBkOSArPSBoMCAqIHI5O1xuICAgIGQ5ICs9IGgxICogcjg7XG4gICAgZDkgKz0gaDIgKiByNztcbiAgICBkOSArPSBoMyAqIHI2O1xuICAgIGQ5ICs9IGg0ICogcjU7XG4gICAgYyA9IChkOSA+Pj4gMTMpOyBkOSAmPSAweDFmZmY7XG4gICAgZDkgKz0gaDUgKiByNDtcbiAgICBkOSArPSBoNiAqIHIzO1xuICAgIGQ5ICs9IGg3ICogcjI7XG4gICAgZDkgKz0gaDggKiByMTtcbiAgICBkOSArPSBoOSAqIHIwO1xuICAgIGMgKz0gKGQ5ID4+PiAxMyk7IGQ5ICY9IDB4MWZmZjtcblxuICAgIGMgPSAoKChjIDw8IDIpICsgYykpIHwgMDtcbiAgICBjID0gKGMgKyBkMCkgfCAwO1xuICAgIGQwID0gYyAmIDB4MWZmZjtcbiAgICBjID0gKGMgPj4+IDEzKTtcbiAgICBkMSArPSBjO1xuXG4gICAgaDAgPSBkMDtcbiAgICBoMSA9IGQxO1xuICAgIGgyID0gZDI7XG4gICAgaDMgPSBkMztcbiAgICBoNCA9IGQ0O1xuICAgIGg1ID0gZDU7XG4gICAgaDYgPSBkNjtcbiAgICBoNyA9IGQ3O1xuICAgIGg4ID0gZDg7XG4gICAgaDkgPSBkOTtcblxuICAgIG1wb3MgKz0gMTY7XG4gICAgYnl0ZXMgLT0gMTY7XG4gIH1cbiAgdGhpcy5oWzBdID0gaDA7XG4gIHRoaXMuaFsxXSA9IGgxO1xuICB0aGlzLmhbMl0gPSBoMjtcbiAgdGhpcy5oWzNdID0gaDM7XG4gIHRoaXMuaFs0XSA9IGg0O1xuICB0aGlzLmhbNV0gPSBoNTtcbiAgdGhpcy5oWzZdID0gaDY7XG4gIHRoaXMuaFs3XSA9IGg3O1xuICB0aGlzLmhbOF0gPSBoODtcbiAgdGhpcy5oWzldID0gaDk7XG59O1xuXG5wb2x5MTMwNS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24obWFjLCBtYWNwb3MpIHtcbiAgdmFyIGcgPSBuZXcgVWludDE2QXJyYXkoMTApO1xuICB2YXIgYywgbWFzaywgZiwgaTtcblxuICBpZiAodGhpcy5sZWZ0b3Zlcikge1xuICAgIGkgPSB0aGlzLmxlZnRvdmVyO1xuICAgIHRoaXMuYnVmZmVyW2krK10gPSAxO1xuICAgIGZvciAoOyBpIDwgMTY7IGkrKykgdGhpcy5idWZmZXJbaV0gPSAwO1xuICAgIHRoaXMuZmluID0gMTtcbiAgICB0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwgMCwgMTYpO1xuICB9XG5cbiAgYyA9IHRoaXMuaFsxXSA+Pj4gMTM7XG4gIHRoaXMuaFsxXSAmPSAweDFmZmY7XG4gIGZvciAoaSA9IDI7IGkgPCAxMDsgaSsrKSB7XG4gICAgdGhpcy5oW2ldICs9IGM7XG4gICAgYyA9IHRoaXMuaFtpXSA+Pj4gMTM7XG4gICAgdGhpcy5oW2ldICY9IDB4MWZmZjtcbiAgfVxuICB0aGlzLmhbMF0gKz0gKGMgKiA1KTtcbiAgYyA9IHRoaXMuaFswXSA+Pj4gMTM7XG4gIHRoaXMuaFswXSAmPSAweDFmZmY7XG4gIHRoaXMuaFsxXSArPSBjO1xuICBjID0gdGhpcy5oWzFdID4+PiAxMztcbiAgdGhpcy5oWzFdICY9IDB4MWZmZjtcbiAgdGhpcy5oWzJdICs9IGM7XG5cbiAgZ1swXSA9IHRoaXMuaFswXSArIDU7XG4gIGMgPSBnWzBdID4+PiAxMztcbiAgZ1swXSAmPSAweDFmZmY7XG4gIGZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgZ1tpXSA9IHRoaXMuaFtpXSArIGM7XG4gICAgYyA9IGdbaV0gPj4+IDEzO1xuICAgIGdbaV0gJj0gMHgxZmZmO1xuICB9XG4gIGdbOV0gLT0gKDEgPDwgMTMpO1xuXG4gIG1hc2sgPSAoYyBeIDEpIC0gMTtcbiAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIGdbaV0gJj0gbWFzaztcbiAgbWFzayA9IH5tYXNrO1xuICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgdGhpcy5oW2ldID0gKHRoaXMuaFtpXSAmIG1hc2spIHwgZ1tpXTtcblxuICB0aGlzLmhbMF0gPSAoKHRoaXMuaFswXSAgICAgICApIHwgKHRoaXMuaFsxXSA8PCAxMykgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFsxXSA9ICgodGhpcy5oWzFdID4+PiAgMykgfCAodGhpcy5oWzJdIDw8IDEwKSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzJdID0gKCh0aGlzLmhbMl0gPj4+ICA2KSB8ICh0aGlzLmhbM10gPDwgIDcpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbM10gPSAoKHRoaXMuaFszXSA+Pj4gIDkpIHwgKHRoaXMuaFs0XSA8PCAgNCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs0XSA9ICgodGhpcy5oWzRdID4+PiAxMikgfCAodGhpcy5oWzVdIDw8ICAxKSB8ICh0aGlzLmhbNl0gPDwgMTQpKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzVdID0gKCh0aGlzLmhbNl0gPj4+ICAyKSB8ICh0aGlzLmhbN10gPDwgMTEpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbNl0gPSAoKHRoaXMuaFs3XSA+Pj4gIDUpIHwgKHRoaXMuaFs4XSA8PCAgOCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs3XSA9ICgodGhpcy5oWzhdID4+PiAgOCkgfCAodGhpcy5oWzldIDw8ICA1KSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcblxuICBmID0gdGhpcy5oWzBdICsgdGhpcy5wYWRbMF07XG4gIHRoaXMuaFswXSA9IGYgJiAweGZmZmY7XG4gIGZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHtcbiAgICBmID0gKCgodGhpcy5oW2ldICsgdGhpcy5wYWRbaV0pIHwgMCkgKyAoZiA+Pj4gMTYpKSB8IDA7XG4gICAgdGhpcy5oW2ldID0gZiAmIDB4ZmZmZjtcbiAgfVxuXG4gIG1hY1ttYWNwb3MrIDBdID0gKHRoaXMuaFswXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyAxXSA9ICh0aGlzLmhbMF0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgMl0gPSAodGhpcy5oWzFdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDNdID0gKHRoaXMuaFsxXSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA0XSA9ICh0aGlzLmhbMl0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgNV0gPSAodGhpcy5oWzJdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDZdID0gKHRoaXMuaFszXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA3XSA9ICh0aGlzLmhbM10gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgOF0gPSAodGhpcy5oWzRdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDldID0gKHRoaXMuaFs0XSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEwXSA9ICh0aGlzLmhbNV0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysxMV0gPSAodGhpcy5oWzVdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTJdID0gKHRoaXMuaFs2XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEzXSA9ICh0aGlzLmhbNl0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysxNF0gPSAodGhpcy5oWzddID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTVdID0gKHRoaXMuaFs3XSA+Pj4gOCkgJiAweGZmO1xufTtcblxucG9seTEzMDUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKG0sIG1wb3MsIGJ5dGVzKSB7XG4gIHZhciBpLCB3YW50O1xuXG4gIGlmICh0aGlzLmxlZnRvdmVyKSB7XG4gICAgd2FudCA9ICgxNiAtIHRoaXMubGVmdG92ZXIpO1xuICAgIGlmICh3YW50ID4gYnl0ZXMpXG4gICAgICB3YW50ID0gYnl0ZXM7XG4gICAgZm9yIChpID0gMDsgaSA8IHdhbnQ7IGkrKylcbiAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVmdG92ZXIgKyBpXSA9IG1bbXBvcytpXTtcbiAgICBieXRlcyAtPSB3YW50O1xuICAgIG1wb3MgKz0gd2FudDtcbiAgICB0aGlzLmxlZnRvdmVyICs9IHdhbnQ7XG4gICAgaWYgKHRoaXMubGVmdG92ZXIgPCAxNilcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwgMCwgMTYpO1xuICAgIHRoaXMubGVmdG92ZXIgPSAwO1xuICB9XG5cbiAgaWYgKGJ5dGVzID49IDE2KSB7XG4gICAgd2FudCA9IGJ5dGVzIC0gKGJ5dGVzICUgMTYpO1xuICAgIHRoaXMuYmxvY2tzKG0sIG1wb3MsIHdhbnQpO1xuICAgIG1wb3MgKz0gd2FudDtcbiAgICBieXRlcyAtPSB3YW50O1xuICB9XG5cbiAgaWYgKGJ5dGVzKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyspXG4gICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyICsgaV0gPSBtW21wb3MraV07XG4gICAgdGhpcy5sZWZ0b3ZlciArPSBieXRlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gY3J5cHRvX29uZXRpbWVhdXRoKG91dCwgb3V0cG9zLCBtLCBtcG9zLCBuLCBrKSB7XG4gIHZhciBzID0gbmV3IHBvbHkxMzA1KGspO1xuICBzLnVwZGF0ZShtLCBtcG9zLCBuKTtcbiAgcy5maW5pc2gob3V0LCBvdXRwb3MpO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeShoLCBocG9zLCBtLCBtcG9zLCBuLCBrKSB7XG4gIHZhciB4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBjcnlwdG9fb25ldGltZWF1dGgoeCwwLG0sbXBvcyxuLGspO1xuICByZXR1cm4gY3J5cHRvX3ZlcmlmeV8xNihoLGhwb3MseCwwKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NlY3JldGJveChjLG0sZCxuLGspIHtcbiAgdmFyIGk7XG4gIGlmIChkIDwgMzIpIHJldHVybiAtMTtcbiAgY3J5cHRvX3N0cmVhbV94b3IoYywwLG0sMCxkLG4sayk7XG4gIGNyeXB0b19vbmV0aW1lYXV0aChjLCAxNiwgYywgMzIsIGQgLSAzMiwgYyk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSBjW2ldID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3hfb3BlbihtLGMsZCxuLGspIHtcbiAgdmFyIGk7XG4gIHZhciB4ID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBpZiAoZCA8IDMyKSByZXR1cm4gLTE7XG4gIGNyeXB0b19zdHJlYW0oeCwwLDMyLG4sayk7XG4gIGlmIChjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5KGMsIDE2LGMsIDMyLGQgLSAzMix4KSAhPT0gMCkgcmV0dXJuIC0xO1xuICBjcnlwdG9fc3RyZWFtX3hvcihtLDAsYywwLGQsbixrKTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIG1baV0gPSAwO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gc2V0MjU1MTkociwgYSkge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHJbaV0gPSBhW2ldfDA7XG59XG5cbmZ1bmN0aW9uIGNhcjI1NTE5KG8pIHtcbiAgdmFyIGksIHYsIGMgPSAxO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIHYgPSBvW2ldICsgYyArIDY1NTM1O1xuICAgIGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7XG4gICAgb1tpXSA9IHYgLSBjICogNjU1MzY7XG4gIH1cbiAgb1swXSArPSBjLTEgKyAzNyAqIChjLTEpO1xufVxuXG5mdW5jdGlvbiBzZWwyNTUxOShwLCBxLCBiKSB7XG4gIHZhciB0LCBjID0gfihiLTEpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB0ID0gYyAmIChwW2ldIF4gcVtpXSk7XG4gICAgcFtpXSBePSB0O1xuICAgIHFbaV0gXj0gdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWNrMjU1MTkobywgbikge1xuICB2YXIgaSwgaiwgYjtcbiAgdmFyIG0gPSBnZigpLCB0ID0gZ2YoKTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHRbaV0gPSBuW2ldO1xuICBjYXIyNTUxOSh0KTtcbiAgY2FyMjU1MTkodCk7XG4gIGNhcjI1NTE5KHQpO1xuICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7XG4gICAgbVswXSA9IHRbMF0gLSAweGZmZWQ7XG4gICAgZm9yIChpID0gMTsgaSA8IDE1OyBpKyspIHtcbiAgICAgIG1baV0gPSB0W2ldIC0gMHhmZmZmIC0gKChtW2ktMV0+PjE2KSAmIDEpO1xuICAgICAgbVtpLTFdICY9IDB4ZmZmZjtcbiAgICB9XG4gICAgbVsxNV0gPSB0WzE1XSAtIDB4N2ZmZiAtICgobVsxNF0+PjE2KSAmIDEpO1xuICAgIGIgPSAobVsxNV0+PjE2KSAmIDE7XG4gICAgbVsxNF0gJj0gMHhmZmZmO1xuICAgIHNlbDI1NTE5KHQsIG0sIDEtYik7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBvWzIqaV0gPSB0W2ldICYgMHhmZjtcbiAgICBvWzIqaSsxXSA9IHRbaV0+Pjg7XG4gIH1cbn1cblxuZnVuY3Rpb24gbmVxMjU1MTkoYSwgYikge1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KDMyKSwgZCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgcGFjazI1NTE5KGMsIGEpO1xuICBwYWNrMjU1MTkoZCwgYik7XG4gIHJldHVybiBjcnlwdG9fdmVyaWZ5XzMyKGMsIDAsIGQsIDApO1xufVxuXG5mdW5jdGlvbiBwYXIyNTUxOShhKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBwYWNrMjU1MTkoZCwgYSk7XG4gIHJldHVybiBkWzBdICYgMTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrMjU1MTkobywgbikge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIG9baV0gPSBuWzIqaV0gKyAoblsyKmkrMV0gPDwgOCk7XG4gIG9bMTVdICY9IDB4N2ZmZjtcbn1cblxuZnVuY3Rpb24gQShvLCBhLCBiKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgb1tpXSA9IGFbaV0gKyBiW2ldO1xufVxuXG5mdW5jdGlvbiBaKG8sIGEsIGIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSBvW2ldID0gYVtpXSAtIGJbaV07XG59XG5cbmZ1bmN0aW9uIE0obywgYSwgYikge1xuICB2YXIgdiwgYyxcbiAgICAgdDAgPSAwLCAgdDEgPSAwLCAgdDIgPSAwLCAgdDMgPSAwLCAgdDQgPSAwLCAgdDUgPSAwLCAgdDYgPSAwLCAgdDcgPSAwLFxuICAgICB0OCA9IDAsICB0OSA9IDAsIHQxMCA9IDAsIHQxMSA9IDAsIHQxMiA9IDAsIHQxMyA9IDAsIHQxNCA9IDAsIHQxNSA9IDAsXG4gICAgdDE2ID0gMCwgdDE3ID0gMCwgdDE4ID0gMCwgdDE5ID0gMCwgdDIwID0gMCwgdDIxID0gMCwgdDIyID0gMCwgdDIzID0gMCxcbiAgICB0MjQgPSAwLCB0MjUgPSAwLCB0MjYgPSAwLCB0MjcgPSAwLCB0MjggPSAwLCB0MjkgPSAwLCB0MzAgPSAwLFxuICAgIGIwID0gYlswXSxcbiAgICBiMSA9IGJbMV0sXG4gICAgYjIgPSBiWzJdLFxuICAgIGIzID0gYlszXSxcbiAgICBiNCA9IGJbNF0sXG4gICAgYjUgPSBiWzVdLFxuICAgIGI2ID0gYls2XSxcbiAgICBiNyA9IGJbN10sXG4gICAgYjggPSBiWzhdLFxuICAgIGI5ID0gYls5XSxcbiAgICBiMTAgPSBiWzEwXSxcbiAgICBiMTEgPSBiWzExXSxcbiAgICBiMTIgPSBiWzEyXSxcbiAgICBiMTMgPSBiWzEzXSxcbiAgICBiMTQgPSBiWzE0XSxcbiAgICBiMTUgPSBiWzE1XTtcblxuICB2ID0gYVswXTtcbiAgdDAgKz0gdiAqIGIwO1xuICB0MSArPSB2ICogYjE7XG4gIHQyICs9IHYgKiBiMjtcbiAgdDMgKz0gdiAqIGIzO1xuICB0NCArPSB2ICogYjQ7XG4gIHQ1ICs9IHYgKiBiNTtcbiAgdDYgKz0gdiAqIGI2O1xuICB0NyArPSB2ICogYjc7XG4gIHQ4ICs9IHYgKiBiODtcbiAgdDkgKz0gdiAqIGI5O1xuICB0MTAgKz0gdiAqIGIxMDtcbiAgdDExICs9IHYgKiBiMTE7XG4gIHQxMiArPSB2ICogYjEyO1xuICB0MTMgKz0gdiAqIGIxMztcbiAgdDE0ICs9IHYgKiBiMTQ7XG4gIHQxNSArPSB2ICogYjE1O1xuICB2ID0gYVsxXTtcbiAgdDEgKz0gdiAqIGIwO1xuICB0MiArPSB2ICogYjE7XG4gIHQzICs9IHYgKiBiMjtcbiAgdDQgKz0gdiAqIGIzO1xuICB0NSArPSB2ICogYjQ7XG4gIHQ2ICs9IHYgKiBiNTtcbiAgdDcgKz0gdiAqIGI2O1xuICB0OCArPSB2ICogYjc7XG4gIHQ5ICs9IHYgKiBiODtcbiAgdDEwICs9IHYgKiBiOTtcbiAgdDExICs9IHYgKiBiMTA7XG4gIHQxMiArPSB2ICogYjExO1xuICB0MTMgKz0gdiAqIGIxMjtcbiAgdDE0ICs9IHYgKiBiMTM7XG4gIHQxNSArPSB2ICogYjE0O1xuICB0MTYgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMl07XG4gIHQyICs9IHYgKiBiMDtcbiAgdDMgKz0gdiAqIGIxO1xuICB0NCArPSB2ICogYjI7XG4gIHQ1ICs9IHYgKiBiMztcbiAgdDYgKz0gdiAqIGI0O1xuICB0NyArPSB2ICogYjU7XG4gIHQ4ICs9IHYgKiBiNjtcbiAgdDkgKz0gdiAqIGI3O1xuICB0MTAgKz0gdiAqIGI4O1xuICB0MTEgKz0gdiAqIGI5O1xuICB0MTIgKz0gdiAqIGIxMDtcbiAgdDEzICs9IHYgKiBiMTE7XG4gIHQxNCArPSB2ICogYjEyO1xuICB0MTUgKz0gdiAqIGIxMztcbiAgdDE2ICs9IHYgKiBiMTQ7XG4gIHQxNyArPSB2ICogYjE1O1xuICB2ID0gYVszXTtcbiAgdDMgKz0gdiAqIGIwO1xuICB0NCArPSB2ICogYjE7XG4gIHQ1ICs9IHYgKiBiMjtcbiAgdDYgKz0gdiAqIGIzO1xuICB0NyArPSB2ICogYjQ7XG4gIHQ4ICs9IHYgKiBiNTtcbiAgdDkgKz0gdiAqIGI2O1xuICB0MTAgKz0gdiAqIGI3O1xuICB0MTEgKz0gdiAqIGI4O1xuICB0MTIgKz0gdiAqIGI5O1xuICB0MTMgKz0gdiAqIGIxMDtcbiAgdDE0ICs9IHYgKiBiMTE7XG4gIHQxNSArPSB2ICogYjEyO1xuICB0MTYgKz0gdiAqIGIxMztcbiAgdDE3ICs9IHYgKiBiMTQ7XG4gIHQxOCArPSB2ICogYjE1O1xuICB2ID0gYVs0XTtcbiAgdDQgKz0gdiAqIGIwO1xuICB0NSArPSB2ICogYjE7XG4gIHQ2ICs9IHYgKiBiMjtcbiAgdDcgKz0gdiAqIGIzO1xuICB0OCArPSB2ICogYjQ7XG4gIHQ5ICs9IHYgKiBiNTtcbiAgdDEwICs9IHYgKiBiNjtcbiAgdDExICs9IHYgKiBiNztcbiAgdDEyICs9IHYgKiBiODtcbiAgdDEzICs9IHYgKiBiOTtcbiAgdDE0ICs9IHYgKiBiMTA7XG4gIHQxNSArPSB2ICogYjExO1xuICB0MTYgKz0gdiAqIGIxMjtcbiAgdDE3ICs9IHYgKiBiMTM7XG4gIHQxOCArPSB2ICogYjE0O1xuICB0MTkgKz0gdiAqIGIxNTtcbiAgdiA9IGFbNV07XG4gIHQ1ICs9IHYgKiBiMDtcbiAgdDYgKz0gdiAqIGIxO1xuICB0NyArPSB2ICogYjI7XG4gIHQ4ICs9IHYgKiBiMztcbiAgdDkgKz0gdiAqIGI0O1xuICB0MTAgKz0gdiAqIGI1O1xuICB0MTEgKz0gdiAqIGI2O1xuICB0MTIgKz0gdiAqIGI3O1xuICB0MTMgKz0gdiAqIGI4O1xuICB0MTQgKz0gdiAqIGI5O1xuICB0MTUgKz0gdiAqIGIxMDtcbiAgdDE2ICs9IHYgKiBiMTE7XG4gIHQxNyArPSB2ICogYjEyO1xuICB0MTggKz0gdiAqIGIxMztcbiAgdDE5ICs9IHYgKiBiMTQ7XG4gIHQyMCArPSB2ICogYjE1O1xuICB2ID0gYVs2XTtcbiAgdDYgKz0gdiAqIGIwO1xuICB0NyArPSB2ICogYjE7XG4gIHQ4ICs9IHYgKiBiMjtcbiAgdDkgKz0gdiAqIGIzO1xuICB0MTAgKz0gdiAqIGI0O1xuICB0MTEgKz0gdiAqIGI1O1xuICB0MTIgKz0gdiAqIGI2O1xuICB0MTMgKz0gdiAqIGI3O1xuICB0MTQgKz0gdiAqIGI4O1xuICB0MTUgKz0gdiAqIGI5O1xuICB0MTYgKz0gdiAqIGIxMDtcbiAgdDE3ICs9IHYgKiBiMTE7XG4gIHQxOCArPSB2ICogYjEyO1xuICB0MTkgKz0gdiAqIGIxMztcbiAgdDIwICs9IHYgKiBiMTQ7XG4gIHQyMSArPSB2ICogYjE1O1xuICB2ID0gYVs3XTtcbiAgdDcgKz0gdiAqIGIwO1xuICB0OCArPSB2ICogYjE7XG4gIHQ5ICs9IHYgKiBiMjtcbiAgdDEwICs9IHYgKiBiMztcbiAgdDExICs9IHYgKiBiNDtcbiAgdDEyICs9IHYgKiBiNTtcbiAgdDEzICs9IHYgKiBiNjtcbiAgdDE0ICs9IHYgKiBiNztcbiAgdDE1ICs9IHYgKiBiODtcbiAgdDE2ICs9IHYgKiBiOTtcbiAgdDE3ICs9IHYgKiBiMTA7XG4gIHQxOCArPSB2ICogYjExO1xuICB0MTkgKz0gdiAqIGIxMjtcbiAgdDIwICs9IHYgKiBiMTM7XG4gIHQyMSArPSB2ICogYjE0O1xuICB0MjIgKz0gdiAqIGIxNTtcbiAgdiA9IGFbOF07XG4gIHQ4ICs9IHYgKiBiMDtcbiAgdDkgKz0gdiAqIGIxO1xuICB0MTAgKz0gdiAqIGIyO1xuICB0MTEgKz0gdiAqIGIzO1xuICB0MTIgKz0gdiAqIGI0O1xuICB0MTMgKz0gdiAqIGI1O1xuICB0MTQgKz0gdiAqIGI2O1xuICB0MTUgKz0gdiAqIGI3O1xuICB0MTYgKz0gdiAqIGI4O1xuICB0MTcgKz0gdiAqIGI5O1xuICB0MTggKz0gdiAqIGIxMDtcbiAgdDE5ICs9IHYgKiBiMTE7XG4gIHQyMCArPSB2ICogYjEyO1xuICB0MjEgKz0gdiAqIGIxMztcbiAgdDIyICs9IHYgKiBiMTQ7XG4gIHQyMyArPSB2ICogYjE1O1xuICB2ID0gYVs5XTtcbiAgdDkgKz0gdiAqIGIwO1xuICB0MTAgKz0gdiAqIGIxO1xuICB0MTEgKz0gdiAqIGIyO1xuICB0MTIgKz0gdiAqIGIzO1xuICB0MTMgKz0gdiAqIGI0O1xuICB0MTQgKz0gdiAqIGI1O1xuICB0MTUgKz0gdiAqIGI2O1xuICB0MTYgKz0gdiAqIGI3O1xuICB0MTcgKz0gdiAqIGI4O1xuICB0MTggKz0gdiAqIGI5O1xuICB0MTkgKz0gdiAqIGIxMDtcbiAgdDIwICs9IHYgKiBiMTE7XG4gIHQyMSArPSB2ICogYjEyO1xuICB0MjIgKz0gdiAqIGIxMztcbiAgdDIzICs9IHYgKiBiMTQ7XG4gIHQyNCArPSB2ICogYjE1O1xuICB2ID0gYVsxMF07XG4gIHQxMCArPSB2ICogYjA7XG4gIHQxMSArPSB2ICogYjE7XG4gIHQxMiArPSB2ICogYjI7XG4gIHQxMyArPSB2ICogYjM7XG4gIHQxNCArPSB2ICogYjQ7XG4gIHQxNSArPSB2ICogYjU7XG4gIHQxNiArPSB2ICogYjY7XG4gIHQxNyArPSB2ICogYjc7XG4gIHQxOCArPSB2ICogYjg7XG4gIHQxOSArPSB2ICogYjk7XG4gIHQyMCArPSB2ICogYjEwO1xuICB0MjEgKz0gdiAqIGIxMTtcbiAgdDIyICs9IHYgKiBiMTI7XG4gIHQyMyArPSB2ICogYjEzO1xuICB0MjQgKz0gdiAqIGIxNDtcbiAgdDI1ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzExXTtcbiAgdDExICs9IHYgKiBiMDtcbiAgdDEyICs9IHYgKiBiMTtcbiAgdDEzICs9IHYgKiBiMjtcbiAgdDE0ICs9IHYgKiBiMztcbiAgdDE1ICs9IHYgKiBiNDtcbiAgdDE2ICs9IHYgKiBiNTtcbiAgdDE3ICs9IHYgKiBiNjtcbiAgdDE4ICs9IHYgKiBiNztcbiAgdDE5ICs9IHYgKiBiODtcbiAgdDIwICs9IHYgKiBiOTtcbiAgdDIxICs9IHYgKiBiMTA7XG4gIHQyMiArPSB2ICogYjExO1xuICB0MjMgKz0gdiAqIGIxMjtcbiAgdDI0ICs9IHYgKiBiMTM7XG4gIHQyNSArPSB2ICogYjE0O1xuICB0MjYgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTJdO1xuICB0MTIgKz0gdiAqIGIwO1xuICB0MTMgKz0gdiAqIGIxO1xuICB0MTQgKz0gdiAqIGIyO1xuICB0MTUgKz0gdiAqIGIzO1xuICB0MTYgKz0gdiAqIGI0O1xuICB0MTcgKz0gdiAqIGI1O1xuICB0MTggKz0gdiAqIGI2O1xuICB0MTkgKz0gdiAqIGI3O1xuICB0MjAgKz0gdiAqIGI4O1xuICB0MjEgKz0gdiAqIGI5O1xuICB0MjIgKz0gdiAqIGIxMDtcbiAgdDIzICs9IHYgKiBiMTE7XG4gIHQyNCArPSB2ICogYjEyO1xuICB0MjUgKz0gdiAqIGIxMztcbiAgdDI2ICs9IHYgKiBiMTQ7XG4gIHQyNyArPSB2ICogYjE1O1xuICB2ID0gYVsxM107XG4gIHQxMyArPSB2ICogYjA7XG4gIHQxNCArPSB2ICogYjE7XG4gIHQxNSArPSB2ICogYjI7XG4gIHQxNiArPSB2ICogYjM7XG4gIHQxNyArPSB2ICogYjQ7XG4gIHQxOCArPSB2ICogYjU7XG4gIHQxOSArPSB2ICogYjY7XG4gIHQyMCArPSB2ICogYjc7XG4gIHQyMSArPSB2ICogYjg7XG4gIHQyMiArPSB2ICogYjk7XG4gIHQyMyArPSB2ICogYjEwO1xuICB0MjQgKz0gdiAqIGIxMTtcbiAgdDI1ICs9IHYgKiBiMTI7XG4gIHQyNiArPSB2ICogYjEzO1xuICB0MjcgKz0gdiAqIGIxNDtcbiAgdDI4ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzE0XTtcbiAgdDE0ICs9IHYgKiBiMDtcbiAgdDE1ICs9IHYgKiBiMTtcbiAgdDE2ICs9IHYgKiBiMjtcbiAgdDE3ICs9IHYgKiBiMztcbiAgdDE4ICs9IHYgKiBiNDtcbiAgdDE5ICs9IHYgKiBiNTtcbiAgdDIwICs9IHYgKiBiNjtcbiAgdDIxICs9IHYgKiBiNztcbiAgdDIyICs9IHYgKiBiODtcbiAgdDIzICs9IHYgKiBiOTtcbiAgdDI0ICs9IHYgKiBiMTA7XG4gIHQyNSArPSB2ICogYjExO1xuICB0MjYgKz0gdiAqIGIxMjtcbiAgdDI3ICs9IHYgKiBiMTM7XG4gIHQyOCArPSB2ICogYjE0O1xuICB0MjkgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTVdO1xuICB0MTUgKz0gdiAqIGIwO1xuICB0MTYgKz0gdiAqIGIxO1xuICB0MTcgKz0gdiAqIGIyO1xuICB0MTggKz0gdiAqIGIzO1xuICB0MTkgKz0gdiAqIGI0O1xuICB0MjAgKz0gdiAqIGI1O1xuICB0MjEgKz0gdiAqIGI2O1xuICB0MjIgKz0gdiAqIGI3O1xuICB0MjMgKz0gdiAqIGI4O1xuICB0MjQgKz0gdiAqIGI5O1xuICB0MjUgKz0gdiAqIGIxMDtcbiAgdDI2ICs9IHYgKiBiMTE7XG4gIHQyNyArPSB2ICogYjEyO1xuICB0MjggKz0gdiAqIGIxMztcbiAgdDI5ICs9IHYgKiBiMTQ7XG4gIHQzMCArPSB2ICogYjE1O1xuXG4gIHQwICArPSAzOCAqIHQxNjtcbiAgdDEgICs9IDM4ICogdDE3O1xuICB0MiAgKz0gMzggKiB0MTg7XG4gIHQzICArPSAzOCAqIHQxOTtcbiAgdDQgICs9IDM4ICogdDIwO1xuICB0NSAgKz0gMzggKiB0MjE7XG4gIHQ2ICArPSAzOCAqIHQyMjtcbiAgdDcgICs9IDM4ICogdDIzO1xuICB0OCAgKz0gMzggKiB0MjQ7XG4gIHQ5ICArPSAzOCAqIHQyNTtcbiAgdDEwICs9IDM4ICogdDI2O1xuICB0MTEgKz0gMzggKiB0Mjc7XG4gIHQxMiArPSAzOCAqIHQyODtcbiAgdDEzICs9IDM4ICogdDI5O1xuICB0MTQgKz0gMzggKiB0MzA7XG4gIC8vIHQxNSBsZWZ0IGFzIGlzXG5cbiAgLy8gZmlyc3QgY2FyXG4gIGMgPSAxO1xuICB2ID0gIHQwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQxICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDUgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ2ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDYgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ3ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDcgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ4ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDggPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ5ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDkgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDExICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTUgPSB2IC0gYyAqIDY1NTM2O1xuICB0MCArPSBjLTEgKyAzNyAqIChjLTEpO1xuXG4gIC8vIHNlY29uZCBjYXJcbiAgYyA9IDE7XG4gIHYgPSAgdDAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDYgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDcgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDggKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDkgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNSA9IHYgLSBjICogNjU1MzY7XG4gIHQwICs9IGMtMSArIDM3ICogKGMtMSk7XG5cbiAgb1sgMF0gPSB0MDtcbiAgb1sgMV0gPSB0MTtcbiAgb1sgMl0gPSB0MjtcbiAgb1sgM10gPSB0MztcbiAgb1sgNF0gPSB0NDtcbiAgb1sgNV0gPSB0NTtcbiAgb1sgNl0gPSB0NjtcbiAgb1sgN10gPSB0NztcbiAgb1sgOF0gPSB0ODtcbiAgb1sgOV0gPSB0OTtcbiAgb1sxMF0gPSB0MTA7XG4gIG9bMTFdID0gdDExO1xuICBvWzEyXSA9IHQxMjtcbiAgb1sxM10gPSB0MTM7XG4gIG9bMTRdID0gdDE0O1xuICBvWzE1XSA9IHQxNTtcbn1cblxuZnVuY3Rpb24gUyhvLCBhKSB7XG4gIE0obywgYSwgYSk7XG59XG5cbmZ1bmN0aW9uIGludjI1NTE5KG8sIGkpIHtcbiAgdmFyIGMgPSBnZigpO1xuICB2YXIgYTtcbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIGNbYV0gPSBpW2FdO1xuICBmb3IgKGEgPSAyNTM7IGEgPj0gMDsgYS0tKSB7XG4gICAgUyhjLCBjKTtcbiAgICBpZihhICE9PSAyICYmIGEgIT09IDQpIE0oYywgYywgaSk7XG4gIH1cbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIG9bYV0gPSBjW2FdO1xufVxuXG5mdW5jdGlvbiBwb3cyNTIzKG8sIGkpIHtcbiAgdmFyIGMgPSBnZigpO1xuICB2YXIgYTtcbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIGNbYV0gPSBpW2FdO1xuICBmb3IgKGEgPSAyNTA7IGEgPj0gMDsgYS0tKSB7XG4gICAgICBTKGMsIGMpO1xuICAgICAgaWYoYSAhPT0gMSkgTShjLCBjLCBpKTtcbiAgfVxuICBmb3IgKGEgPSAwOyBhIDwgMTY7IGErKykgb1thXSA9IGNbYV07XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIHApIHtcbiAgdmFyIHogPSBuZXcgVWludDhBcnJheSgzMik7XG4gIHZhciB4ID0gbmV3IEZsb2F0NjRBcnJheSg4MCksIHIsIGk7XG4gIHZhciBhID0gZ2YoKSwgYiA9IGdmKCksIGMgPSBnZigpLFxuICAgICAgZCA9IGdmKCksIGUgPSBnZigpLCBmID0gZ2YoKTtcbiAgZm9yIChpID0gMDsgaSA8IDMxOyBpKyspIHpbaV0gPSBuW2ldO1xuICB6WzMxXT0oblszMV0mMTI3KXw2NDtcbiAgelswXSY9MjQ4O1xuICB1bnBhY2syNTUxOSh4LHApO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJbaV09eFtpXTtcbiAgICBkW2ldPWFbaV09Y1tpXT0wO1xuICB9XG4gIGFbMF09ZFswXT0xO1xuICBmb3IgKGk9MjU0OyBpPj0wOyAtLWkpIHtcbiAgICByPSh6W2k+Pj4zXT4+PihpJjcpKSYxO1xuICAgIHNlbDI1NTE5KGEsYixyKTtcbiAgICBzZWwyNTUxOShjLGQscik7XG4gICAgQShlLGEsYyk7XG4gICAgWihhLGEsYyk7XG4gICAgQShjLGIsZCk7XG4gICAgWihiLGIsZCk7XG4gICAgUyhkLGUpO1xuICAgIFMoZixhKTtcbiAgICBNKGEsYyxhKTtcbiAgICBNKGMsYixlKTtcbiAgICBBKGUsYSxjKTtcbiAgICBaKGEsYSxjKTtcbiAgICBTKGIsYSk7XG4gICAgWihjLGQsZik7XG4gICAgTShhLGMsXzEyMTY2NSk7XG4gICAgQShhLGEsZCk7XG4gICAgTShjLGMsYSk7XG4gICAgTShhLGQsZik7XG4gICAgTShkLGIseCk7XG4gICAgUyhiLGUpO1xuICAgIHNlbDI1NTE5KGEsYixyKTtcbiAgICBzZWwyNTUxOShjLGQscik7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB4W2krMTZdPWFbaV07XG4gICAgeFtpKzMyXT1jW2ldO1xuICAgIHhbaSs0OF09YltpXTtcbiAgICB4W2krNjRdPWRbaV07XG4gIH1cbiAgdmFyIHgzMiA9IHguc3ViYXJyYXkoMzIpO1xuICB2YXIgeDE2ID0geC5zdWJhcnJheSgxNik7XG4gIGludjI1NTE5KHgzMix4MzIpO1xuICBNKHgxNix4MTYseDMyKTtcbiAgcGFjazI1NTE5KHEseDE2KTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UocSwgbikge1xuICByZXR1cm4gY3J5cHRvX3NjYWxhcm11bHQocSwgbiwgXzkpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X2tleXBhaXIoeSwgeCkge1xuICByYW5kb21ieXRlcyh4LCAzMik7XG4gIHJldHVybiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHksIHgpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHksIHgpIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19zY2FsYXJtdWx0KHMsIHgsIHkpO1xuICByZXR1cm4gY3J5cHRvX2NvcmVfaHNhbHNhMjAoaywgXzAsIHMsIHNpZ21hKTtcbn1cblxudmFyIGNyeXB0b19ib3hfYWZ0ZXJubSA9IGNyeXB0b19zZWNyZXRib3g7XG52YXIgY3J5cHRvX2JveF9vcGVuX2FmdGVybm0gPSBjcnlwdG9fc2VjcmV0Ym94X29wZW47XG5cbmZ1bmN0aW9uIGNyeXB0b19ib3goYywgbSwgZCwgbiwgeSwgeCkge1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgY3J5cHRvX2JveF9iZWZvcmVubShrLCB5LCB4KTtcbiAgcmV0dXJuIGNyeXB0b19ib3hfYWZ0ZXJubShjLCBtLCBkLCBuLCBrKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9vcGVuKG0sIGMsIGQsIG4sIHksIHgpIHtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgeSwgeCk7XG4gIHJldHVybiBjcnlwdG9fYm94X29wZW5fYWZ0ZXJubShtLCBjLCBkLCBuLCBrKTtcbn1cblxudmFyIEsgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl07XG5cbmZ1bmN0aW9uIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgbSwgbikge1xuICB2YXIgd2ggPSBuZXcgSW50MzJBcnJheSgxNiksIHdsID0gbmV3IEludDMyQXJyYXkoMTYpLFxuICAgICAgYmgwLCBiaDEsIGJoMiwgYmgzLCBiaDQsIGJoNSwgYmg2LCBiaDcsXG4gICAgICBibDAsIGJsMSwgYmwyLCBibDMsIGJsNCwgYmw1LCBibDYsIGJsNyxcbiAgICAgIHRoLCB0bCwgaSwgaiwgaCwgbCwgYSwgYiwgYywgZDtcblxuICB2YXIgYWgwID0gaGhbMF0sXG4gICAgICBhaDEgPSBoaFsxXSxcbiAgICAgIGFoMiA9IGhoWzJdLFxuICAgICAgYWgzID0gaGhbM10sXG4gICAgICBhaDQgPSBoaFs0XSxcbiAgICAgIGFoNSA9IGhoWzVdLFxuICAgICAgYWg2ID0gaGhbNl0sXG4gICAgICBhaDcgPSBoaFs3XSxcblxuICAgICAgYWwwID0gaGxbMF0sXG4gICAgICBhbDEgPSBobFsxXSxcbiAgICAgIGFsMiA9IGhsWzJdLFxuICAgICAgYWwzID0gaGxbM10sXG4gICAgICBhbDQgPSBobFs0XSxcbiAgICAgIGFsNSA9IGhsWzVdLFxuICAgICAgYWw2ID0gaGxbNl0sXG4gICAgICBhbDcgPSBobFs3XTtcblxuICB2YXIgcG9zID0gMDtcbiAgd2hpbGUgKG4gPj0gMTI4KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGogPSA4ICogaSArIHBvcztcbiAgICAgIHdoW2ldID0gKG1baiswXSA8PCAyNCkgfCAobVtqKzFdIDw8IDE2KSB8IChtW2orMl0gPDwgOCkgfCBtW2orM107XG4gICAgICB3bFtpXSA9IChtW2orNF0gPDwgMjQpIHwgKG1bais1XSA8PCAxNikgfCAobVtqKzZdIDw8IDgpIHwgbVtqKzddO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgODA7IGkrKykge1xuICAgICAgYmgwID0gYWgwO1xuICAgICAgYmgxID0gYWgxO1xuICAgICAgYmgyID0gYWgyO1xuICAgICAgYmgzID0gYWgzO1xuICAgICAgYmg0ID0gYWg0O1xuICAgICAgYmg1ID0gYWg1O1xuICAgICAgYmg2ID0gYWg2O1xuICAgICAgYmg3ID0gYWg3O1xuXG4gICAgICBibDAgPSBhbDA7XG4gICAgICBibDEgPSBhbDE7XG4gICAgICBibDIgPSBhbDI7XG4gICAgICBibDMgPSBhbDM7XG4gICAgICBibDQgPSBhbDQ7XG4gICAgICBibDUgPSBhbDU7XG4gICAgICBibDYgPSBhbDY7XG4gICAgICBibDcgPSBhbDc7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IGFoNztcbiAgICAgIGwgPSBhbDc7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAvLyBTaWdtYTFcbiAgICAgIGggPSAoKGFoNCA+Pj4gMTQpIHwgKGFsNCA8PCAoMzItMTQpKSkgXiAoKGFoNCA+Pj4gMTgpIHwgKGFsNCA8PCAoMzItMTgpKSkgXiAoKGFsNCA+Pj4gKDQxLTMyKSkgfCAoYWg0IDw8ICgzMi0oNDEtMzIpKSkpO1xuICAgICAgbCA9ICgoYWw0ID4+PiAxNCkgfCAoYWg0IDw8ICgzMi0xNCkpKSBeICgoYWw0ID4+PiAxOCkgfCAoYWg0IDw8ICgzMi0xOCkpKSBeICgoYWg0ID4+PiAoNDEtMzIpKSB8IChhbDQgPDwgKDMyLSg0MS0zMikpKSk7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgLy8gQ2hcbiAgICAgIGggPSAoYWg0ICYgYWg1KSBeICh+YWg0ICYgYWg2KTtcbiAgICAgIGwgPSAoYWw0ICYgYWw1KSBeICh+YWw0ICYgYWw2KTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyBLXG4gICAgICBoID0gS1tpKjJdO1xuICAgICAgbCA9IEtbaSoyKzFdO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIHdcbiAgICAgIGggPSB3aFtpJTE2XTtcbiAgICAgIGwgPSB3bFtpJTE2XTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICBiICs9IGEgPj4+IDE2O1xuICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICAgIHRoID0gYyAmIDB4ZmZmZiB8IGQgPDwgMTY7XG4gICAgICB0bCA9IGEgJiAweGZmZmYgfCBiIDw8IDE2O1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSB0aDtcbiAgICAgIGwgPSB0bDtcblxuICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIFNpZ21hMFxuICAgICAgaCA9ICgoYWgwID4+PiAyOCkgfCAoYWwwIDw8ICgzMi0yOCkpKSBeICgoYWwwID4+PiAoMzQtMzIpKSB8IChhaDAgPDwgKDMyLSgzNC0zMikpKSkgXiAoKGFsMCA+Pj4gKDM5LTMyKSkgfCAoYWgwIDw8ICgzMi0oMzktMzIpKSkpO1xuICAgICAgbCA9ICgoYWwwID4+PiAyOCkgfCAoYWgwIDw8ICgzMi0yOCkpKSBeICgoYWgwID4+PiAoMzQtMzIpKSB8IChhbDAgPDwgKDMyLSgzNC0zMikpKSkgXiAoKGFoMCA+Pj4gKDM5LTMyKSkgfCAoYWwwIDw8ICgzMi0oMzktMzIpKSkpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIE1halxuICAgICAgaCA9IChhaDAgJiBhaDEpIF4gKGFoMCAmIGFoMikgXiAoYWgxICYgYWgyKTtcbiAgICAgIGwgPSAoYWwwICYgYWwxKSBeIChhbDAgJiBhbDIpIF4gKGFsMSAmIGFsMik7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICBiaDcgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICBibDcgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IGJoMztcbiAgICAgIGwgPSBibDM7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICBoID0gdGg7XG4gICAgICBsID0gdGw7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICBiaDMgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICBibDMgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICAgIGFoMSA9IGJoMDtcbiAgICAgIGFoMiA9IGJoMTtcbiAgICAgIGFoMyA9IGJoMjtcbiAgICAgIGFoNCA9IGJoMztcbiAgICAgIGFoNSA9IGJoNDtcbiAgICAgIGFoNiA9IGJoNTtcbiAgICAgIGFoNyA9IGJoNjtcbiAgICAgIGFoMCA9IGJoNztcblxuICAgICAgYWwxID0gYmwwO1xuICAgICAgYWwyID0gYmwxO1xuICAgICAgYWwzID0gYmwyO1xuICAgICAgYWw0ID0gYmwzO1xuICAgICAgYWw1ID0gYmw0O1xuICAgICAgYWw2ID0gYmw1O1xuICAgICAgYWw3ID0gYmw2O1xuICAgICAgYWwwID0gYmw3O1xuXG4gICAgICBpZiAoaSUxNiA9PT0gMTUpIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHtcbiAgICAgICAgICAvLyBhZGRcbiAgICAgICAgICBoID0gd2hbal07XG4gICAgICAgICAgbCA9IHdsW2pdO1xuXG4gICAgICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAgICAgaCA9IHdoWyhqKzkpJTE2XTtcbiAgICAgICAgICBsID0gd2xbKGorOSklMTZdO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIC8vIHNpZ21hMFxuICAgICAgICAgIHRoID0gd2hbKGorMSklMTZdO1xuICAgICAgICAgIHRsID0gd2xbKGorMSklMTZdO1xuICAgICAgICAgIGggPSAoKHRoID4+PiAxKSB8ICh0bCA8PCAoMzItMSkpKSBeICgodGggPj4+IDgpIHwgKHRsIDw8ICgzMi04KSkpIF4gKHRoID4+PiA3KTtcbiAgICAgICAgICBsID0gKCh0bCA+Pj4gMSkgfCAodGggPDwgKDMyLTEpKSkgXiAoKHRsID4+PiA4KSB8ICh0aCA8PCAoMzItOCkpKSBeICgodGwgPj4+IDcpIHwgKHRoIDw8ICgzMi03KSkpO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIC8vIHNpZ21hMVxuICAgICAgICAgIHRoID0gd2hbKGorMTQpJTE2XTtcbiAgICAgICAgICB0bCA9IHdsWyhqKzE0KSUxNl07XG4gICAgICAgICAgaCA9ICgodGggPj4+IDE5KSB8ICh0bCA8PCAoMzItMTkpKSkgXiAoKHRsID4+PiAoNjEtMzIpKSB8ICh0aCA8PCAoMzItKDYxLTMyKSkpKSBeICh0aCA+Pj4gNik7XG4gICAgICAgICAgbCA9ICgodGwgPj4+IDE5KSB8ICh0aCA8PCAoMzItMTkpKSkgXiAoKHRoID4+PiAoNjEtMzIpKSB8ICh0bCA8PCAoMzItKDYxLTMyKSkpKSBeICgodGwgPj4+IDYpIHwgKHRoIDw8ICgzMi02KSkpO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICAgICAgd2hbal0gPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICAgICAgd2xbal0gPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGRcbiAgICBoID0gYWgwO1xuICAgIGwgPSBhbDA7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMF07XG4gICAgbCA9IGhsWzBdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMF0gPSBhaDAgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMF0gPSBhbDAgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgxO1xuICAgIGwgPSBhbDE7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMV07XG4gICAgbCA9IGhsWzFdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMV0gPSBhaDEgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMV0gPSBhbDEgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgyO1xuICAgIGwgPSBhbDI7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMl07XG4gICAgbCA9IGhsWzJdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMl0gPSBhaDIgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMl0gPSBhbDIgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgzO1xuICAgIGwgPSBhbDM7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbM107XG4gICAgbCA9IGhsWzNdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbM10gPSBhaDMgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbM10gPSBhbDMgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg0O1xuICAgIGwgPSBhbDQ7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNF07XG4gICAgbCA9IGhsWzRdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNF0gPSBhaDQgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNF0gPSBhbDQgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg1O1xuICAgIGwgPSBhbDU7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNV07XG4gICAgbCA9IGhsWzVdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNV0gPSBhaDUgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNV0gPSBhbDUgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg2O1xuICAgIGwgPSBhbDY7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNl07XG4gICAgbCA9IGhsWzZdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNl0gPSBhaDYgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNl0gPSBhbDYgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg3O1xuICAgIGwgPSBhbDc7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbN107XG4gICAgbCA9IGhsWzddO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbN10gPSBhaDcgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbN10gPSBhbDcgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBwb3MgKz0gMTI4O1xuICAgIG4gLT0gMTI4O1xuICB9XG5cbiAgcmV0dXJuIG47XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19oYXNoKG91dCwgbSwgbikge1xuICB2YXIgaGggPSBuZXcgSW50MzJBcnJheSg4KSxcbiAgICAgIGhsID0gbmV3IEludDMyQXJyYXkoOCksXG4gICAgICB4ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KSxcbiAgICAgIGksIGIgPSBuO1xuXG4gIGhoWzBdID0gMHg2YTA5ZTY2NztcbiAgaGhbMV0gPSAweGJiNjdhZTg1O1xuICBoaFsyXSA9IDB4M2M2ZWYzNzI7XG4gIGhoWzNdID0gMHhhNTRmZjUzYTtcbiAgaGhbNF0gPSAweDUxMGU1MjdmO1xuICBoaFs1XSA9IDB4OWIwNTY4OGM7XG4gIGhoWzZdID0gMHgxZjgzZDlhYjtcbiAgaGhbN10gPSAweDViZTBjZDE5O1xuXG4gIGhsWzBdID0gMHhmM2JjYzkwODtcbiAgaGxbMV0gPSAweDg0Y2FhNzNiO1xuICBobFsyXSA9IDB4ZmU5NGY4MmI7XG4gIGhsWzNdID0gMHg1ZjFkMzZmMTtcbiAgaGxbNF0gPSAweGFkZTY4MmQxO1xuICBobFs1XSA9IDB4MmIzZTZjMWY7XG4gIGhsWzZdID0gMHhmYjQxYmQ2YjtcbiAgaGxbN10gPSAweDEzN2UyMTc5O1xuXG4gIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgbSwgbik7XG4gIG4gJT0gMTI4O1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHhbaV0gPSBtW2ItbitpXTtcbiAgeFtuXSA9IDEyODtcblxuICBuID0gMjU2LTEyOCoobjwxMTI/MTowKTtcbiAgeFtuLTldID0gMDtcbiAgdHM2NCh4LCBuLTgsICAoYiAvIDB4MjAwMDAwMDApIHwgMCwgYiA8PCAzKTtcbiAgY3J5cHRvX2hhc2hibG9ja3NfaGwoaGgsIGhsLCB4LCBuKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB0czY0KG91dCwgOCppLCBoaFtpXSwgaGxbaV0pO1xuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBhZGQocCwgcSkge1xuICB2YXIgYSA9IGdmKCksIGIgPSBnZigpLCBjID0gZ2YoKSxcbiAgICAgIGQgPSBnZigpLCBlID0gZ2YoKSwgZiA9IGdmKCksXG4gICAgICBnID0gZ2YoKSwgaCA9IGdmKCksIHQgPSBnZigpO1xuXG4gIFooYSwgcFsxXSwgcFswXSk7XG4gIFoodCwgcVsxXSwgcVswXSk7XG4gIE0oYSwgYSwgdCk7XG4gIEEoYiwgcFswXSwgcFsxXSk7XG4gIEEodCwgcVswXSwgcVsxXSk7XG4gIE0oYiwgYiwgdCk7XG4gIE0oYywgcFszXSwgcVszXSk7XG4gIE0oYywgYywgRDIpO1xuICBNKGQsIHBbMl0sIHFbMl0pO1xuICBBKGQsIGQsIGQpO1xuICBaKGUsIGIsIGEpO1xuICBaKGYsIGQsIGMpO1xuICBBKGcsIGQsIGMpO1xuICBBKGgsIGIsIGEpO1xuXG4gIE0ocFswXSwgZSwgZik7XG4gIE0ocFsxXSwgaCwgZyk7XG4gIE0ocFsyXSwgZywgZik7XG4gIE0ocFszXSwgZSwgaCk7XG59XG5cbmZ1bmN0aW9uIGNzd2FwKHAsIHEsIGIpIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBzZWwyNTUxOShwW2ldLCBxW2ldLCBiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWNrKHIsIHApIHtcbiAgdmFyIHR4ID0gZ2YoKSwgdHkgPSBnZigpLCB6aSA9IGdmKCk7XG4gIGludjI1NTE5KHppLCBwWzJdKTtcbiAgTSh0eCwgcFswXSwgemkpO1xuICBNKHR5LCBwWzFdLCB6aSk7XG4gIHBhY2syNTUxOShyLCB0eSk7XG4gIHJbMzFdIF49IHBhcjI1NTE5KHR4KSA8PCA3O1xufVxuXG5mdW5jdGlvbiBzY2FsYXJtdWx0KHAsIHEsIHMpIHtcbiAgdmFyIGIsIGk7XG4gIHNldDI1NTE5KHBbMF0sIGdmMCk7XG4gIHNldDI1NTE5KHBbMV0sIGdmMSk7XG4gIHNldDI1NTE5KHBbMl0sIGdmMSk7XG4gIHNldDI1NTE5KHBbM10sIGdmMCk7XG4gIGZvciAoaSA9IDI1NTsgaSA+PSAwOyAtLWkpIHtcbiAgICBiID0gKHNbKGkvOCl8MF0gPj4gKGkmNykpICYgMTtcbiAgICBjc3dhcChwLCBxLCBiKTtcbiAgICBhZGQocSwgcCk7XG4gICAgYWRkKHAsIHApO1xuICAgIGNzd2FwKHAsIHEsIGIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjYWxhcmJhc2UocCwgcykge1xuICB2YXIgcSA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcbiAgc2V0MjU1MTkocVswXSwgWCk7XG4gIHNldDI1NTE5KHFbMV0sIFkpO1xuICBzZXQyNTUxOShxWzJdLCBnZjEpO1xuICBNKHFbM10sIFgsIFkpO1xuICBzY2FsYXJtdWx0KHAsIHEsIHMpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzaywgc2VlZGVkKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcbiAgdmFyIGk7XG5cbiAgaWYgKCFzZWVkZWQpIHJhbmRvbWJ5dGVzKHNrLCAzMik7XG4gIGNyeXB0b19oYXNoKGQsIHNrLCAzMik7XG4gIGRbMF0gJj0gMjQ4O1xuICBkWzMxXSAmPSAxMjc7XG4gIGRbMzFdIHw9IDY0O1xuXG4gIHNjYWxhcmJhc2UocCwgZCk7XG4gIHBhY2socGssIHApO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBza1tpKzMyXSA9IHBrW2ldO1xuICByZXR1cm4gMDtcbn1cblxudmFyIEwgPSBuZXcgRmxvYXQ2NEFycmF5KFsweGVkLCAweGQzLCAweGY1LCAweDVjLCAweDFhLCAweDYzLCAweDEyLCAweDU4LCAweGQ2LCAweDljLCAweGY3LCAweGEyLCAweGRlLCAweGY5LCAweGRlLCAweDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDEwXSk7XG5cbmZ1bmN0aW9uIG1vZEwociwgeCkge1xuICB2YXIgY2FycnksIGksIGosIGs7XG4gIGZvciAoaSA9IDYzOyBpID49IDMyOyAtLWkpIHtcbiAgICBjYXJyeSA9IDA7XG4gICAgZm9yIChqID0gaSAtIDMyLCBrID0gaSAtIDEyOyBqIDwgazsgKytqKSB7XG4gICAgICB4W2pdICs9IGNhcnJ5IC0gMTYgKiB4W2ldICogTFtqIC0gKGkgLSAzMildO1xuICAgICAgY2FycnkgPSAoeFtqXSArIDEyOCkgPj4gODtcbiAgICAgIHhbal0gLT0gY2FycnkgKiAyNTY7XG4gICAgfVxuICAgIHhbal0gKz0gY2Fycnk7XG4gICAgeFtpXSA9IDA7XG4gIH1cbiAgY2FycnkgPSAwO1xuICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykge1xuICAgIHhbal0gKz0gY2FycnkgLSAoeFszMV0gPj4gNCkgKiBMW2pdO1xuICAgIGNhcnJ5ID0geFtqXSA+PiA4O1xuICAgIHhbal0gJj0gMjU1O1xuICB9XG4gIGZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB4W2pdIC09IGNhcnJ5ICogTFtqXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICB4W2krMV0gKz0geFtpXSA+PiA4O1xuICAgIHJbaV0gPSB4W2ldICYgMjU1O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZHVjZShyKSB7XG4gIHZhciB4ID0gbmV3IEZsb2F0NjRBcnJheSg2NCksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB4W2ldID0gcltpXTtcbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHJbaV0gPSAwO1xuICBtb2RMKHIsIHgpO1xufVxuXG4vLyBOb3RlOiBkaWZmZXJlbmNlIGZyb20gQyAtIHNtbGVuIHJldHVybmVkLCBub3QgcGFzc2VkIGFzIGFyZ3VtZW50LlxuZnVuY3Rpb24gY3J5cHRvX3NpZ24oc20sIG0sIG4sIHNrKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoNjQpLCBoID0gbmV3IFVpbnQ4QXJyYXkoNjQpLCByID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgaSwgaiwgeCA9IG5ldyBGbG9hdDY0QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcblxuICBjcnlwdG9faGFzaChkLCBzaywgMzIpO1xuICBkWzBdICY9IDI0ODtcbiAgZFszMV0gJj0gMTI3O1xuICBkWzMxXSB8PSA2NDtcblxuICB2YXIgc21sZW4gPSBuICsgNjQ7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHNtWzY0ICsgaV0gPSBtW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgc21bMzIgKyBpXSA9IGRbMzIgKyBpXTtcblxuICBjcnlwdG9faGFzaChyLCBzbS5zdWJhcnJheSgzMiksIG4rMzIpO1xuICByZWR1Y2Uocik7XG4gIHNjYWxhcmJhc2UocCwgcik7XG4gIHBhY2soc20sIHApO1xuXG4gIGZvciAoaSA9IDMyOyBpIDwgNjQ7IGkrKykgc21baV0gPSBza1tpXTtcbiAgY3J5cHRvX2hhc2goaCwgc20sIG4gKyA2NCk7XG4gIHJlZHVjZShoKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeFtpXSA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB4W2ldID0gcltpXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykge1xuICAgICAgeFtpK2pdICs9IGhbaV0gKiBkW2pdO1xuICAgIH1cbiAgfVxuXG4gIG1vZEwoc20uc3ViYXJyYXkoMzIpLCB4KTtcbiAgcmV0dXJuIHNtbGVuO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tuZWcociwgcCkge1xuICB2YXIgdCA9IGdmKCksIGNoayA9IGdmKCksIG51bSA9IGdmKCksXG4gICAgICBkZW4gPSBnZigpLCBkZW4yID0gZ2YoKSwgZGVuNCA9IGdmKCksXG4gICAgICBkZW42ID0gZ2YoKTtcblxuICBzZXQyNTUxOShyWzJdLCBnZjEpO1xuICB1bnBhY2syNTUxOShyWzFdLCBwKTtcbiAgUyhudW0sIHJbMV0pO1xuICBNKGRlbiwgbnVtLCBEKTtcbiAgWihudW0sIG51bSwgclsyXSk7XG4gIEEoZGVuLCByWzJdLCBkZW4pO1xuXG4gIFMoZGVuMiwgZGVuKTtcbiAgUyhkZW40LCBkZW4yKTtcbiAgTShkZW42LCBkZW40LCBkZW4yKTtcbiAgTSh0LCBkZW42LCBudW0pO1xuICBNKHQsIHQsIGRlbik7XG5cbiAgcG93MjUyMyh0LCB0KTtcbiAgTSh0LCB0LCBudW0pO1xuICBNKHQsIHQsIGRlbik7XG4gIE0odCwgdCwgZGVuKTtcbiAgTShyWzBdLCB0LCBkZW4pO1xuXG4gIFMoY2hrLCByWzBdKTtcbiAgTShjaGssIGNoaywgZGVuKTtcbiAgaWYgKG5lcTI1NTE5KGNoaywgbnVtKSkgTShyWzBdLCByWzBdLCBJKTtcblxuICBTKGNoaywgclswXSk7XG4gIE0oY2hrLCBjaGssIGRlbik7XG4gIGlmIChuZXEyNTUxOShjaGssIG51bSkpIHJldHVybiAtMTtcblxuICBpZiAocGFyMjU1MTkoclswXSkgPT09IChwWzMxXT4+NykpIFooclswXSwgZ2YwLCByWzBdKTtcblxuICBNKHJbM10sIHJbMF0sIHJbMV0pO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NpZ25fb3BlbihtLCBzbSwgbiwgcGspIHtcbiAgdmFyIGksIG1sZW47XG4gIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoMzIpLCBoID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXSxcbiAgICAgIHEgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG5cbiAgbWxlbiA9IC0xO1xuICBpZiAobiA8IDY0KSByZXR1cm4gLTE7XG5cbiAgaWYgKHVucGFja25lZyhxLCBwaykpIHJldHVybiAtMTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBtW2ldID0gc21baV07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBtW2krMzJdID0gcGtbaV07XG4gIGNyeXB0b19oYXNoKGgsIG0sIG4pO1xuICByZWR1Y2UoaCk7XG4gIHNjYWxhcm11bHQocCwgcSwgaCk7XG5cbiAgc2NhbGFyYmFzZShxLCBzbS5zdWJhcnJheSgzMikpO1xuICBhZGQocCwgcSk7XG4gIHBhY2sodCwgcCk7XG5cbiAgbiAtPSA2NDtcbiAgaWYgKGNyeXB0b192ZXJpZnlfMzIoc20sIDAsIHQsIDApKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IHNtW2kgKyA2NF07XG4gIG1sZW4gPSBuO1xuICByZXR1cm4gbWxlbjtcbn1cblxudmFyIGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMgPSAyNCxcbiAgICBjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyA9IDMyLFxuICAgIGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTID0gMTYsXG4gICAgY3J5cHRvX3NjYWxhcm11bHRfQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9OT05DRUJZVEVTID0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTLFxuICAgIGNyeXB0b19ib3hfWkVST0JZVEVTID0gY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMsXG4gICAgY3J5cHRvX2JveF9CT1haRVJPQllURVMgPSBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyxcbiAgICBjcnlwdG9fc2lnbl9CWVRFUyA9IDY0LFxuICAgIGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMgPSA2NCxcbiAgICBjcnlwdG9fc2lnbl9TRUVEQllURVMgPSAzMixcbiAgICBjcnlwdG9faGFzaF9CWVRFUyA9IDY0O1xuXG5uYWNsLmxvd2xldmVsID0ge1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMDogY3J5cHRvX2NvcmVfaHNhbHNhMjAsXG4gIGNyeXB0b19zdHJlYW1feG9yOiBjcnlwdG9fc3RyZWFtX3hvcixcbiAgY3J5cHRvX3N0cmVhbTogY3J5cHRvX3N0cmVhbSxcbiAgY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcjogY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcixcbiAgY3J5cHRvX3N0cmVhbV9zYWxzYTIwOiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAsXG4gIGNyeXB0b19vbmV0aW1lYXV0aDogY3J5cHRvX29uZXRpbWVhdXRoLFxuICBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5OiBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5LFxuICBjcnlwdG9fdmVyaWZ5XzE2OiBjcnlwdG9fdmVyaWZ5XzE2LFxuICBjcnlwdG9fdmVyaWZ5XzMyOiBjcnlwdG9fdmVyaWZ5XzMyLFxuICBjcnlwdG9fc2VjcmV0Ym94OiBjcnlwdG9fc2VjcmV0Ym94LFxuICBjcnlwdG9fc2VjcmV0Ym94X29wZW46IGNyeXB0b19zZWNyZXRib3hfb3BlbixcbiAgY3J5cHRvX3NjYWxhcm11bHQ6IGNyeXB0b19zY2FsYXJtdWx0LFxuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlOiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlLFxuICBjcnlwdG9fYm94X2JlZm9yZW5tOiBjcnlwdG9fYm94X2JlZm9yZW5tLFxuICBjcnlwdG9fYm94X2FmdGVybm06IGNyeXB0b19ib3hfYWZ0ZXJubSxcbiAgY3J5cHRvX2JveDogY3J5cHRvX2JveCxcbiAgY3J5cHRvX2JveF9vcGVuOiBjcnlwdG9fYm94X29wZW4sXG4gIGNyeXB0b19ib3hfa2V5cGFpcjogY3J5cHRvX2JveF9rZXlwYWlyLFxuICBjcnlwdG9faGFzaDogY3J5cHRvX2hhc2gsXG4gIGNyeXB0b19zaWduOiBjcnlwdG9fc2lnbixcbiAgY3J5cHRvX3NpZ25fa2V5cGFpcjogY3J5cHRvX3NpZ25fa2V5cGFpcixcbiAgY3J5cHRvX3NpZ25fb3BlbjogY3J5cHRvX3NpZ25fb3BlbixcblxuICBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVM6IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVM6IGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUzogY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMsXG4gIGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTOiBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyxcbiAgY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM6IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTLFxuICBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTOiBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTLFxuICBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTOiBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTLFxuICBjcnlwdG9fYm94X0JFRk9SRU5NQllURVM6IGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyxcbiAgY3J5cHRvX2JveF9OT05DRUJZVEVTOiBjcnlwdG9fYm94X05PTkNFQllURVMsXG4gIGNyeXB0b19ib3hfWkVST0JZVEVTOiBjcnlwdG9fYm94X1pFUk9CWVRFUyxcbiAgY3J5cHRvX2JveF9CT1haRVJPQllURVM6IGNyeXB0b19ib3hfQk9YWkVST0JZVEVTLFxuICBjcnlwdG9fc2lnbl9CWVRFUzogY3J5cHRvX3NpZ25fQllURVMsXG4gIGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTOiBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyxcbiAgY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVM6IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTLFxuICBjcnlwdG9fc2lnbl9TRUVEQllURVM6IGNyeXB0b19zaWduX1NFRURCWVRFUyxcbiAgY3J5cHRvX2hhc2hfQllURVM6IGNyeXB0b19oYXNoX0JZVEVTXG59O1xuXG4vKiBIaWdoLWxldmVsIEFQSSAqL1xuXG5mdW5jdGlvbiBjaGVja0xlbmd0aHMoaywgbikge1xuICBpZiAoay5sZW5ndGggIT09IGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIGtleSBzaXplJyk7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBub25jZSBzaXplJyk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQm94TGVuZ3Rocyhwaywgc2spIHtcbiAgaWYgKHBrLmxlbmd0aCAhPT0gY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgcHVibGljIGtleSBzaXplJyk7XG4gIGlmIChzay5sZW5ndGggIT09IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xufVxuXG5mdW5jdGlvbiBjaGVja0FycmF5VHlwZXMoKSB7XG4gIHZhciB0LCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgIGlmICgodCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHNbaV0pKSAhPT0gJ1tvYmplY3QgVWludDhBcnJheV0nKVxuICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgdHlwZSAnICsgdCArICcsIHVzZSBVaW50OEFycmF5Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cChhcnIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycltpXSA9IDA7XG59XG5cbi8vIFRPRE86IENvbXBsZXRlbHkgcmVtb3ZlIHRoaXMgaW4gdjAuMTUuXG5pZiAoIW5hY2wudXRpbCkge1xuICBuYWNsLnV0aWwgPSB7fTtcbiAgbmFjbC51dGlsLmRlY29kZVVURjggPSBuYWNsLnV0aWwuZW5jb2RlVVRGOCA9IG5hY2wudXRpbC5lbmNvZGVCYXNlNjQgPSBuYWNsLnV0aWwuZGVjb2RlQmFzZTY0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCduYWNsLnV0aWwgbW92ZWQgaW50byBzZXBhcmF0ZSBwYWNrYWdlOiBodHRwczovL2dpdGh1Yi5jb20vZGNoZXN0L3R3ZWV0bmFjbC11dGlsLWpzJyk7XG4gIH07XG59XG5cbm5hY2wucmFuZG9tQnl0ZXMgPSBmdW5jdGlvbihuKSB7XG4gIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gIHJhbmRvbWJ5dGVzKGIsIG4pO1xuICByZXR1cm4gYjtcbn07XG5cbm5hY2wuc2VjcmV0Ym94ID0gZnVuY3Rpb24obXNnLCBub25jZSwga2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIG5vbmNlLCBrZXkpO1xuICBjaGVja0xlbmd0aHMoa2V5LCBub25jZSk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMgKyBtc2cubGVuZ3RoKTtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheShtLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSBtW2krY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVNdID0gbXNnW2ldO1xuICBjcnlwdG9fc2VjcmV0Ym94KGMsIG0sIG0ubGVuZ3RoLCBub25jZSwga2V5KTtcbiAgcmV0dXJuIGMuc3ViYXJyYXkoY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMpO1xufTtcblxubmFjbC5zZWNyZXRib3gub3BlbiA9IGZ1bmN0aW9uKGJveCwgbm9uY2UsIGtleSkge1xuICBjaGVja0FycmF5VHlwZXMoYm94LCBub25jZSwga2V5KTtcbiAgY2hlY2tMZW5ndGhzKGtleSwgbm9uY2UpO1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTICsgYm94Lmxlbmd0aCk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoYy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJveC5sZW5ndGg7IGkrKykgY1tpK2NyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTXSA9IGJveFtpXTtcbiAgaWYgKGMubGVuZ3RoIDwgMzIpIHJldHVybiBmYWxzZTtcbiAgaWYgKGNyeXB0b19zZWNyZXRib3hfb3BlbihtLCBjLCBjLmxlbmd0aCwgbm9uY2UsIGtleSkgIT09IDApIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIG0uc3ViYXJyYXkoY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMpO1xufTtcblxubmFjbC5zZWNyZXRib3gua2V5TGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUztcbm5hY2wuc2VjcmV0Ym94Lm5vbmNlTGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTO1xubmFjbC5zZWNyZXRib3gub3ZlcmhlYWRMZW5ndGggPSBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUztcblxubmFjbC5zY2FsYXJNdWx0ID0gZnVuY3Rpb24obiwgcCkge1xuICBjaGVja0FycmF5VHlwZXMobiwgcCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG4gc2l6ZScpO1xuICBpZiAocC5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwIHNpemUnKTtcbiAgdmFyIHEgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyk7XG4gIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIHApO1xuICByZXR1cm4gcTtcbn07XG5cbm5hY2wuc2NhbGFyTXVsdC5iYXNlID0gZnVuY3Rpb24obikge1xuICBjaGVja0FycmF5VHlwZXMobik7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG4gc2l6ZScpO1xuICB2YXIgcSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKTtcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZShxLCBuKTtcbiAgcmV0dXJuIHE7XG59O1xuXG5uYWNsLnNjYWxhck11bHQuc2NhbGFyTGVuZ3RoID0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM7XG5uYWNsLnNjYWxhck11bHQuZ3JvdXBFbGVtZW50TGVuZ3RoID0gY3J5cHRvX3NjYWxhcm11bHRfQllURVM7XG5cbm5hY2wuYm94ID0gZnVuY3Rpb24obXNnLCBub25jZSwgcHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgdmFyIGsgPSBuYWNsLmJveC5iZWZvcmUocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gbmFjbC5zZWNyZXRib3gobXNnLCBub25jZSwgayk7XG59O1xuXG5uYWNsLmJveC5iZWZvcmUgPSBmdW5jdGlvbihwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICBjaGVja0JveExlbmd0aHMocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyk7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgcHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gaztcbn07XG5cbm5hY2wuYm94LmFmdGVyID0gbmFjbC5zZWNyZXRib3g7XG5cbm5hY2wuYm94Lm9wZW4gPSBmdW5jdGlvbihtc2csIG5vbmNlLCBwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICB2YXIgayA9IG5hY2wuYm94LmJlZm9yZShwdWJsaWNLZXksIHNlY3JldEtleSk7XG4gIHJldHVybiBuYWNsLnNlY3JldGJveC5vcGVuKG1zZywgbm9uY2UsIGspO1xufTtcblxubmFjbC5ib3gub3Blbi5hZnRlciA9IG5hY2wuc2VjcmV0Ym94Lm9wZW47XG5cbm5hY2wuYm94LmtleVBhaXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpO1xuICBjcnlwdG9fYm94X2tleXBhaXIocGssIHNrKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuYm94LmtleVBhaXIuZnJvbVNlY3JldEtleSA9IGZ1bmN0aW9uKHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMoc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpO1xuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHBrLCBzZWNyZXRLZXkpO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogbmV3IFVpbnQ4QXJyYXkoc2VjcmV0S2V5KX07XG59O1xuXG5uYWNsLmJveC5wdWJsaWNLZXlMZW5ndGggPSBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTO1xubmFjbC5ib3guc2VjcmV0S2V5TGVuZ3RoID0gY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUztcbm5hY2wuYm94LnNoYXJlZEtleUxlbmd0aCA9IGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUztcbm5hY2wuYm94Lm5vbmNlTGVuZ3RoID0gY3J5cHRvX2JveF9OT05DRUJZVEVTO1xubmFjbC5ib3gub3ZlcmhlYWRMZW5ndGggPSBuYWNsLnNlY3JldGJveC5vdmVyaGVhZExlbmd0aDtcblxubmFjbC5zaWduID0gZnVuY3Rpb24obXNnLCBzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgc2lnbmVkTXNnID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMrbXNnLmxlbmd0aCk7XG4gIGNyeXB0b19zaWduKHNpZ25lZE1zZywgbXNnLCBtc2cubGVuZ3RoLCBzZWNyZXRLZXkpO1xuICByZXR1cm4gc2lnbmVkTXNnO1xufTtcblxubmFjbC5zaWduLm9wZW4gPSBmdW5jdGlvbihzaWduZWRNc2csIHB1YmxpY0tleSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25hY2wuc2lnbi5vcGVuIGFjY2VwdHMgMiBhcmd1bWVudHM7IGRpZCB5b3UgbWVhbiB0byB1c2UgbmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeT8nKTtcbiAgY2hlY2tBcnJheVR5cGVzKHNpZ25lZE1zZywgcHVibGljS2V5KTtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICB2YXIgdG1wID0gbmV3IFVpbnQ4QXJyYXkoc2lnbmVkTXNnLmxlbmd0aCk7XG4gIHZhciBtbGVuID0gY3J5cHRvX3NpZ25fb3Blbih0bXAsIHNpZ25lZE1zZywgc2lnbmVkTXNnLmxlbmd0aCwgcHVibGljS2V5KTtcbiAgaWYgKG1sZW4gPCAwKSByZXR1cm4gbnVsbDtcbiAgdmFyIG0gPSBuZXcgVWludDhBcnJheShtbGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSBtW2ldID0gdG1wW2ldO1xuICByZXR1cm4gbTtcbn07XG5cbm5hY2wuc2lnbi5kZXRhY2hlZCA9IGZ1bmN0aW9uKG1zZywgc2VjcmV0S2V5KSB7XG4gIHZhciBzaWduZWRNc2cgPSBuYWNsLnNpZ24obXNnLCBzZWNyZXRLZXkpO1xuICB2YXIgc2lnID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZy5sZW5ndGg7IGkrKykgc2lnW2ldID0gc2lnbmVkTXNnW2ldO1xuICByZXR1cm4gc2lnO1xufTtcblxubmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeSA9IGZ1bmN0aW9uKG1zZywgc2lnLCBwdWJsaWNLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgc2lnLCBwdWJsaWNLZXkpO1xuICBpZiAoc2lnLmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2lnbmF0dXJlIHNpemUnKTtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICB2YXIgc20gPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9CWVRFUyArIG1zZy5sZW5ndGgpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTICsgbXNnLmxlbmd0aCk7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgY3J5cHRvX3NpZ25fQllURVM7IGkrKykgc21baV0gPSBzaWdbaV07XG4gIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHNtW2krY3J5cHRvX3NpZ25fQllURVNdID0gbXNnW2ldO1xuICByZXR1cm4gKGNyeXB0b19zaWduX29wZW4obSwgc20sIHNtLmxlbmd0aCwgcHVibGljS2V5KSA+PSAwKTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgdmFyIHNrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpO1xuICBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzayk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VjcmV0S2V5ID0gZnVuY3Rpb24oc2VjcmV0S2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhzZWNyZXRLZXkpO1xuICBpZiAoc2VjcmV0S2V5Lmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBway5sZW5ndGg7IGkrKykgcGtbaV0gPSBzZWNyZXRLZXlbMzIraV07XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBuZXcgVWludDhBcnJheShzZWNyZXRLZXkpfTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkID0gZnVuY3Rpb24oc2VlZCkge1xuICBjaGVja0FycmF5VHlwZXMoc2VlZCk7XG4gIGlmIChzZWVkLmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VFREJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlZWQgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKSBza1tpXSA9IHNlZWRbaV07XG4gIGNyeXB0b19zaWduX2tleXBhaXIocGssIHNrLCB0cnVlKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuc2lnbi5wdWJsaWNLZXlMZW5ndGggPSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUztcbm5hY2wuc2lnbi5zZWNyZXRLZXlMZW5ndGggPSBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUztcbm5hY2wuc2lnbi5zZWVkTGVuZ3RoID0gY3J5cHRvX3NpZ25fU0VFREJZVEVTO1xubmFjbC5zaWduLnNpZ25hdHVyZUxlbmd0aCA9IGNyeXB0b19zaWduX0JZVEVTO1xuXG5uYWNsLmhhc2ggPSBmdW5jdGlvbihtc2cpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZyk7XG4gIHZhciBoID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2hhc2hfQllURVMpO1xuICBjcnlwdG9faGFzaChoLCBtc2csIG1zZy5sZW5ndGgpO1xuICByZXR1cm4gaDtcbn07XG5cbm5hY2wuaGFzaC5oYXNoTGVuZ3RoID0gY3J5cHRvX2hhc2hfQllURVM7XG5cbm5hY2wudmVyaWZ5ID0gZnVuY3Rpb24oeCwgeSkge1xuICBjaGVja0FycmF5VHlwZXMoeCwgeSk7XG4gIC8vIFplcm8gbGVuZ3RoIGFyZ3VtZW50cyBhcmUgY29uc2lkZXJlZCBub3QgZXF1YWwuXG4gIGlmICh4Lmxlbmd0aCA9PT0gMCB8fCB5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoeC5sZW5ndGggIT09IHkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAodm4oeCwgMCwgeSwgMCwgeC5sZW5ndGgpID09PSAwKSA/IHRydWUgOiBmYWxzZTtcbn07XG5cbm5hY2wuc2V0UFJORyA9IGZ1bmN0aW9uKGZuKSB7XG4gIHJhbmRvbWJ5dGVzID0gZm47XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIC8vIEluaXRpYWxpemUgUFJORyBpZiBlbnZpcm9ubWVudCBwcm92aWRlcyBDU1BSTkcuXG4gIC8vIElmIG5vdCwgbWV0aG9kcyBjYWxsaW5nIHJhbmRvbWJ5dGVzIHdpbGwgdGhyb3cuXG4gIHZhciBjcnlwdG8gPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyAoc2VsZi5jcnlwdG8gfHwgc2VsZi5tc0NyeXB0bykgOiBudWxsO1xuICBpZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBCcm93c2Vycy5cbiAgICB2YXIgUVVPVEEgPSA2NTUzNjtcbiAgICBuYWNsLnNldFBSTkcoZnVuY3Rpb24oeCwgbikge1xuICAgICAgdmFyIGksIHYgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpICs9IFFVT1RBKSB7XG4gICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModi5zdWJhcnJheShpLCBpICsgTWF0aC5taW4obiAtIGksIFFVT1RBKSkpO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeFtpXSA9IHZbaV07XG4gICAgICBjbGVhbnVwKHYpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vZGUuanMuXG4gICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgaWYgKGNyeXB0byAmJiBjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcbiAgICAgIG5hY2wuc2V0UFJORyhmdW5jdGlvbih4LCBuKSB7XG4gICAgICAgIHZhciBpLCB2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKG4pO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB4W2ldID0gdltpXTtcbiAgICAgICAgY2xlYW51cCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSkoKTtcblxufSkodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgPyBtb2R1bGUuZXhwb3J0cyA6IChzZWxmLm5hY2wgPSBzZWxmLm5hY2wgfHwge30pKTtcbiIsIi8vIENvcHlyaWdodCAoYykgMjAwNSAgVG9tIFd1XG4vLyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU2VlIFwiTElDRU5TRVwiIGZvciBkZXRhaWxzLlxuXG4vLyBCYXNpYyBKYXZhU2NyaXB0IEJOIGxpYnJhcnkgLSBzdWJzZXQgdXNlZnVsIGZvciBSU0EgZW5jcnlwdGlvbi5cblxuLy8gQml0cyBwZXIgZGlnaXRcbnZhciBkYml0cztcblxuLy8gSmF2YVNjcmlwdCBlbmdpbmUgYW5hbHlzaXNcbnZhciBjYW5hcnkgPSAweGRlYWRiZWVmY2FmZTtcbnZhciBqX2xtID0gKChjYW5hcnkmMHhmZmZmZmYpPT0weGVmY2FmZSk7XG5cbi8vIChwdWJsaWMpIENvbnN0cnVjdG9yXG5mdW5jdGlvbiBCaWdJbnRlZ2VyKGEsYixjKSB7XG4gIGlmKGEgIT0gbnVsbClcbiAgICBpZihcIm51bWJlclwiID09IHR5cGVvZiBhKSB0aGlzLmZyb21OdW1iZXIoYSxiLGMpO1xuICAgIGVsc2UgaWYoYiA9PSBudWxsICYmIFwic3RyaW5nXCIgIT0gdHlwZW9mIGEpIHRoaXMuZnJvbVN0cmluZyhhLDI1Nik7XG4gICAgZWxzZSB0aGlzLmZyb21TdHJpbmcoYSxiKTtcbn1cblxuLy8gcmV0dXJuIG5ldywgdW5zZXQgQmlnSW50ZWdlclxuZnVuY3Rpb24gbmJpKCkgeyByZXR1cm4gbmV3IEJpZ0ludGVnZXIobnVsbCk7IH1cblxuLy8gYW06IENvbXB1dGUgd19qICs9ICh4KnRoaXNfaSksIHByb3BhZ2F0ZSBjYXJyaWVzLFxuLy8gYyBpcyBpbml0aWFsIGNhcnJ5LCByZXR1cm5zIGZpbmFsIGNhcnJ5LlxuLy8gYyA8IDMqZHZhbHVlLCB4IDwgMipkdmFsdWUsIHRoaXNfaSA8IGR2YWx1ZVxuLy8gV2UgbmVlZCB0byBzZWxlY3QgdGhlIGZhc3Rlc3Qgb25lIHRoYXQgd29ya3MgaW4gdGhpcyBlbnZpcm9ubWVudC5cblxuLy8gU2V0IG1heCBkaWdpdCBiaXRzIHRvIDI4IHNpbmNlIHNvbWVcbi8vIGJyb3dzZXJzIHNsb3cgZG93biB3aGVuIGRlYWxpbmcgd2l0aCAzMi1iaXQgbnVtYmVycy5cbmZ1bmN0aW9uIGFtMyhpLHgsdyxqLGMsbikge1xuICB2YXIgeGwgPSB4JjB4M2ZmZiwgeGggPSB4Pj4xNDtcbiAgd2hpbGUoLS1uID49IDApIHtcbiAgICB2YXIgbCA9IHRoaXNbaV0mMHgzZmZmO1xuICAgIHZhciBoID0gdGhpc1tpKytdPj4xNDtcbiAgICB2YXIgbSA9IHhoKmwraCp4bDtcbiAgICBsID0geGwqbCsoKG0mMHgzZmZmKTw8MTQpK3dbal0rYztcbiAgICBjID0gKGw+PjI4KSsobT4+MTQpK3hoKmg7XG4gICAgd1tqKytdID0gbCYweGZmZmZmZmY7XG4gIH1cbiAgcmV0dXJuIGM7XG59XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5hbSA9IGFtMztcbmRiaXRzID0gMjg7XG5cbkJpZ0ludGVnZXIucHJvdG90eXBlLkRCID0gZGJpdHM7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5ETSA9ICgoMTw8ZGJpdHMpLTEpO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuRFYgPSAoMTw8ZGJpdHMpO1xuXG52YXIgQklfRlAgPSA1MjtcbkJpZ0ludGVnZXIucHJvdG90eXBlLkZWID0gTWF0aC5wb3coMixCSV9GUCk7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5GMSA9IEJJX0ZQLWRiaXRzO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuRjIgPSAyKmRiaXRzLUJJX0ZQO1xuXG4vLyBEaWdpdCBjb252ZXJzaW9uc1xudmFyIEJJX1JNID0gXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcbnZhciBCSV9SQyA9IG5ldyBBcnJheSgpO1xudmFyIHJyLHZ2O1xucnIgPSBcIjBcIi5jaGFyQ29kZUF0KDApO1xuZm9yKHZ2ID0gMDsgdnYgPD0gOTsgKyt2dikgQklfUkNbcnIrK10gPSB2djtcbnJyID0gXCJhXCIuY2hhckNvZGVBdCgwKTtcbmZvcih2diA9IDEwOyB2diA8IDM2OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2O1xucnIgPSBcIkFcIi5jaGFyQ29kZUF0KDApO1xuZm9yKHZ2ID0gMTA7IHZ2IDwgMzY7ICsrdnYpIEJJX1JDW3JyKytdID0gdnY7XG5cbmZ1bmN0aW9uIGludDJjaGFyKG4pIHsgcmV0dXJuIEJJX1JNLmNoYXJBdChuKTsgfVxuZnVuY3Rpb24gaW50QXQocyxpKSB7XG4gIHZhciBjID0gQklfUkNbcy5jaGFyQ29kZUF0KGkpXTtcbiAgcmV0dXJuIChjPT1udWxsKT8tMTpjO1xufVxuXG4vLyAocHJvdGVjdGVkKSBjb3B5IHRoaXMgdG8gclxuZnVuY3Rpb24gYm5wQ29weVRvKHIpIHtcbiAgZm9yKHZhciBpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByW2ldID0gdGhpc1tpXTtcbiAgci50ID0gdGhpcy50O1xuICByLnMgPSB0aGlzLnM7XG59XG5cbi8vIChwcm90ZWN0ZWQpIHNldCBmcm9tIGludGVnZXIgdmFsdWUgeCwgLURWIDw9IHggPCBEVlxuZnVuY3Rpb24gYm5wRnJvbUludCh4KSB7XG4gIHRoaXMudCA9IDE7XG4gIHRoaXMucyA9ICh4PDApPy0xOjA7XG4gIGlmKHggPiAwKSB0aGlzWzBdID0geDtcbiAgZWxzZSBpZih4IDwgLTEpIHRoaXNbMF0gPSB4K3RoaXMuRFY7XG4gIGVsc2UgdGhpcy50ID0gMDtcbn1cblxuLy8gcmV0dXJuIGJpZ2ludCBpbml0aWFsaXplZCB0byB2YWx1ZVxuZnVuY3Rpb24gbmJ2KGkpIHsgdmFyIHIgPSBuYmkoKTsgci5mcm9tSW50KGkpOyByZXR1cm4gcjsgfVxuXG4vLyAocHJvdGVjdGVkKSBzZXQgZnJvbSBzdHJpbmcgYW5kIHJhZGl4XG5mdW5jdGlvbiBibnBGcm9tU3RyaW5nKHMsYikge1xuICB2YXIgaztcbiAgaWYoYiA9PSAxNikgayA9IDQ7XG4gIGVsc2UgaWYoYiA9PSA4KSBrID0gMztcbiAgZWxzZSBpZihiID09IDI1NikgayA9IDg7IC8vIGJ5dGUgYXJyYXlcbiAgZWxzZSBpZihiID09IDIpIGsgPSAxO1xuICBlbHNlIGlmKGIgPT0gMzIpIGsgPSA1O1xuICBlbHNlIGlmKGIgPT0gNCkgayA9IDI7XG4gIGVsc2UgeyB0aGlzLmZyb21SYWRpeChzLGIpOyByZXR1cm47IH1cbiAgdGhpcy50ID0gMDtcbiAgdGhpcy5zID0gMDtcbiAgdmFyIGkgPSBzLmxlbmd0aCwgbWkgPSBmYWxzZSwgc2ggPSAwO1xuICB3aGlsZSgtLWkgPj0gMCkge1xuICAgIHZhciB4ID0gKGs9PTgpP3NbaV0mMHhmZjppbnRBdChzLGkpO1xuICAgIGlmKHggPCAwKSB7XG4gICAgICBpZihzLmNoYXJBdChpKSA9PSBcIi1cIikgbWkgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG1pID0gZmFsc2U7XG4gICAgaWYoc2ggPT0gMClcbiAgICAgIHRoaXNbdGhpcy50KytdID0geDtcbiAgICBlbHNlIGlmKHNoK2sgPiB0aGlzLkRCKSB7XG4gICAgICB0aGlzW3RoaXMudC0xXSB8PSAoeCYoKDE8PCh0aGlzLkRCLXNoKSktMSkpPDxzaDtcbiAgICAgIHRoaXNbdGhpcy50KytdID0gKHg+Pih0aGlzLkRCLXNoKSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgIHRoaXNbdGhpcy50LTFdIHw9IHg8PHNoO1xuICAgIHNoICs9IGs7XG4gICAgaWYoc2ggPj0gdGhpcy5EQikgc2ggLT0gdGhpcy5EQjtcbiAgfVxuICBpZihrID09IDggJiYgKHNbMF0mMHg4MCkgIT0gMCkge1xuICAgIHRoaXMucyA9IC0xO1xuICAgIGlmKHNoID4gMCkgdGhpc1t0aGlzLnQtMV0gfD0gKCgxPDwodGhpcy5EQi1zaCkpLTEpPDxzaDtcbiAgfVxuICB0aGlzLmNsYW1wKCk7XG4gIGlmKG1pKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyx0aGlzKTtcbn1cblxuLy8gKHByb3RlY3RlZCkgY2xhbXAgb2ZmIGV4Y2VzcyBoaWdoIHdvcmRzXG5mdW5jdGlvbiBibnBDbGFtcCgpIHtcbiAgdmFyIGMgPSB0aGlzLnMmdGhpcy5ETTtcbiAgd2hpbGUodGhpcy50ID4gMCAmJiB0aGlzW3RoaXMudC0xXSA9PSBjKSAtLXRoaXMudDtcbn1cblxuLy8gKHB1YmxpYykgcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBpbiBnaXZlbiByYWRpeFxuZnVuY3Rpb24gYm5Ub1N0cmluZyhiKSB7XG4gIGlmKHRoaXMucyA8IDApIHJldHVybiBcIi1cIit0aGlzLm5lZ2F0ZSgpLnRvU3RyaW5nKGIpO1xuICB2YXIgaztcbiAgaWYoYiA9PSAxNikgayA9IDQ7XG4gIGVsc2UgaWYoYiA9PSA4KSBrID0gMztcbiAgZWxzZSBpZihiID09IDIpIGsgPSAxO1xuICBlbHNlIGlmKGIgPT0gMzIpIGsgPSA1O1xuICBlbHNlIGlmKGIgPT0gNCkgayA9IDI7XG4gIGVsc2UgcmV0dXJuIHRoaXMudG9SYWRpeChiKTtcbiAgdmFyIGttID0gKDE8PGspLTEsIGQsIG0gPSBmYWxzZSwgciA9IFwiXCIsIGkgPSB0aGlzLnQ7XG4gIHZhciBwID0gdGhpcy5EQi0oaSp0aGlzLkRCKSVrO1xuICBpZihpLS0gPiAwKSB7XG4gICAgaWYocCA8IHRoaXMuREIgJiYgKGQgPSB0aGlzW2ldPj5wKSA+IDApIHsgbSA9IHRydWU7IHIgPSBpbnQyY2hhcihkKTsgfVxuICAgIHdoaWxlKGkgPj0gMCkge1xuICAgICAgaWYocCA8IGspIHtcbiAgICAgICAgZCA9ICh0aGlzW2ldJigoMTw8cCktMSkpPDwoay1wKTtcbiAgICAgICAgZCB8PSB0aGlzWy0taV0+PihwKz10aGlzLkRCLWspO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGQgPSAodGhpc1tpXT4+KHAtPWspKSZrbTtcbiAgICAgICAgaWYocCA8PSAwKSB7IHAgKz0gdGhpcy5EQjsgLS1pOyB9XG4gICAgICB9XG4gICAgICBpZihkID4gMCkgbSA9IHRydWU7XG4gICAgICBpZihtKSByICs9IGludDJjaGFyKGQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbT9yOlwiMFwiO1xufVxuXG4vLyAocHVibGljKSAtdGhpc1xuZnVuY3Rpb24gYm5OZWdhdGUoKSB7IHZhciByID0gbmJpKCk7IEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHIpOyByZXR1cm4gcjsgfVxuXG4vLyAocHVibGljKSB8dGhpc3xcbmZ1bmN0aW9uIGJuQWJzKCkgeyByZXR1cm4gKHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXM7IH1cblxuLy8gKHB1YmxpYykgcmV0dXJuICsgaWYgdGhpcyA+IGEsIC0gaWYgdGhpcyA8IGEsIDAgaWYgZXF1YWxcbmZ1bmN0aW9uIGJuQ29tcGFyZVRvKGEpIHtcbiAgdmFyIHIgPSB0aGlzLnMtYS5zO1xuICBpZihyICE9IDApIHJldHVybiByO1xuICB2YXIgaSA9IHRoaXMudDtcbiAgciA9IGktYS50O1xuICBpZihyICE9IDApIHJldHVybiAodGhpcy5zPDApPy1yOnI7XG4gIHdoaWxlKC0taSA+PSAwKSBpZigocj10aGlzW2ldLWFbaV0pICE9IDApIHJldHVybiByO1xuICByZXR1cm4gMDtcbn1cblxuLy8gcmV0dXJucyBiaXQgbGVuZ3RoIG9mIHRoZSBpbnRlZ2VyIHhcbmZ1bmN0aW9uIG5iaXRzKHgpIHtcbiAgdmFyIHIgPSAxLCB0O1xuICBpZigodD14Pj4+MTYpICE9IDApIHsgeCA9IHQ7IHIgKz0gMTY7IH1cbiAgaWYoKHQ9eD4+OCkgIT0gMCkgeyB4ID0gdDsgciArPSA4OyB9XG4gIGlmKCh0PXg+PjQpICE9IDApIHsgeCA9IHQ7IHIgKz0gNDsgfVxuICBpZigodD14Pj4yKSAhPSAwKSB7IHggPSB0OyByICs9IDI7IH1cbiAgaWYoKHQ9eD4+MSkgIT0gMCkgeyB4ID0gdDsgciArPSAxOyB9XG4gIHJldHVybiByO1xufVxuXG4vLyAocHVibGljKSByZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIGluIFwidGhpc1wiXG5mdW5jdGlvbiBibkJpdExlbmd0aCgpIHtcbiAgaWYodGhpcy50IDw9IDApIHJldHVybiAwO1xuICByZXR1cm4gdGhpcy5EQioodGhpcy50LTEpK25iaXRzKHRoaXNbdGhpcy50LTFdXih0aGlzLnMmdGhpcy5ETSkpO1xufVxuXG4vLyAocHJvdGVjdGVkKSByID0gdGhpcyA8PCBuKkRCXG5mdW5jdGlvbiBibnBETFNoaWZ0VG8obixyKSB7XG4gIHZhciBpO1xuICBmb3IoaSA9IHRoaXMudC0xOyBpID49IDA7IC0taSkgcltpK25dID0gdGhpc1tpXTtcbiAgZm9yKGkgPSBuLTE7IGkgPj0gMDsgLS1pKSByW2ldID0gMDtcbiAgci50ID0gdGhpcy50K247XG4gIHIucyA9IHRoaXMucztcbn1cblxuLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPj4gbipEQlxuZnVuY3Rpb24gYm5wRFJTaGlmdFRvKG4scikge1xuICBmb3IodmFyIGkgPSBuOyBpIDwgdGhpcy50OyArK2kpIHJbaS1uXSA9IHRoaXNbaV07XG4gIHIudCA9IE1hdGgubWF4KHRoaXMudC1uLDApO1xuICByLnMgPSB0aGlzLnM7XG59XG5cbi8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIDw8IG5cbmZ1bmN0aW9uIGJucExTaGlmdFRvKG4scikge1xuICB2YXIgYnMgPSBuJXRoaXMuREI7XG4gIHZhciBjYnMgPSB0aGlzLkRCLWJzO1xuICB2YXIgYm0gPSAoMTw8Y2JzKS0xO1xuICB2YXIgZHMgPSBNYXRoLmZsb29yKG4vdGhpcy5EQiksIGMgPSAodGhpcy5zPDxicykmdGhpcy5ETSwgaTtcbiAgZm9yKGkgPSB0aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHtcbiAgICByW2krZHMrMV0gPSAodGhpc1tpXT4+Y2JzKXxjO1xuICAgIGMgPSAodGhpc1tpXSZibSk8PGJzO1xuICB9XG4gIGZvcihpID0gZHMtMTsgaSA+PSAwOyAtLWkpIHJbaV0gPSAwO1xuICByW2RzXSA9IGM7XG4gIHIudCA9IHRoaXMudCtkcysxO1xuICByLnMgPSB0aGlzLnM7XG4gIHIuY2xhbXAoKTtcbn1cblxuLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPj4gblxuZnVuY3Rpb24gYm5wUlNoaWZ0VG8obixyKSB7XG4gIHIucyA9IHRoaXMucztcbiAgdmFyIGRzID0gTWF0aC5mbG9vcihuL3RoaXMuREIpO1xuICBpZihkcyA+PSB0aGlzLnQpIHsgci50ID0gMDsgcmV0dXJuOyB9XG4gIHZhciBicyA9IG4ldGhpcy5EQjtcbiAgdmFyIGNicyA9IHRoaXMuREItYnM7XG4gIHZhciBibSA9ICgxPDxicyktMTtcbiAgclswXSA9IHRoaXNbZHNdPj5icztcbiAgZm9yKHZhciBpID0gZHMrMTsgaSA8IHRoaXMudDsgKytpKSB7XG4gICAgcltpLWRzLTFdIHw9ICh0aGlzW2ldJmJtKTw8Y2JzO1xuICAgIHJbaS1kc10gPSB0aGlzW2ldPj5icztcbiAgfVxuICBpZihicyA+IDApIHJbdGhpcy50LWRzLTFdIHw9ICh0aGlzLnMmYm0pPDxjYnM7XG4gIHIudCA9IHRoaXMudC1kcztcbiAgci5jbGFtcCgpO1xufVxuXG4vLyAocHJvdGVjdGVkKSByID0gdGhpcyAtIGFcbmZ1bmN0aW9uIGJucFN1YlRvKGEscikge1xuICB2YXIgaSA9IDAsIGMgPSAwLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7XG4gIHdoaWxlKGkgPCBtKSB7XG4gICAgYyArPSB0aGlzW2ldLWFbaV07XG4gICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgIGMgPj49IHRoaXMuREI7XG4gIH1cbiAgaWYoYS50IDwgdGhpcy50KSB7XG4gICAgYyAtPSBhLnM7XG4gICAgd2hpbGUoaSA8IHRoaXMudCkge1xuICAgICAgYyArPSB0aGlzW2ldO1xuICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgYyA+Pj0gdGhpcy5EQjtcbiAgICB9XG4gICAgYyArPSB0aGlzLnM7XG4gIH1cbiAgZWxzZSB7XG4gICAgYyArPSB0aGlzLnM7XG4gICAgd2hpbGUoaSA8IGEudCkge1xuICAgICAgYyAtPSBhW2ldO1xuICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgYyA+Pj0gdGhpcy5EQjtcbiAgICB9XG4gICAgYyAtPSBhLnM7XG4gIH1cbiAgci5zID0gKGM8MCk/LTE6MDtcbiAgaWYoYyA8IC0xKSByW2krK10gPSB0aGlzLkRWK2M7XG4gIGVsc2UgaWYoYyA+IDApIHJbaSsrXSA9IGM7XG4gIHIudCA9IGk7XG4gIHIuY2xhbXAoKTtcbn1cblxuLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgKiBhLCByICE9IHRoaXMsYSAoSEFDIDE0LjEyKVxuLy8gXCJ0aGlzXCIgc2hvdWxkIGJlIHRoZSBsYXJnZXIgb25lIGlmIGFwcHJvcHJpYXRlLlxuZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhhLHIpIHtcbiAgdmFyIHggPSB0aGlzLmFicygpLCB5ID0gYS5hYnMoKTtcbiAgdmFyIGkgPSB4LnQ7XG4gIHIudCA9IGkreS50O1xuICB3aGlsZSgtLWkgPj0gMCkgcltpXSA9IDA7XG4gIGZvcihpID0gMDsgaSA8IHkudDsgKytpKSByW2kreC50XSA9IHguYW0oMCx5W2ldLHIsaSwwLHgudCk7XG4gIHIucyA9IDA7XG4gIHIuY2xhbXAoKTtcbiAgaWYodGhpcy5zICE9IGEucykgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHIscik7XG59XG5cbi8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzXjIsIHIgIT0gdGhpcyAoSEFDIDE0LjE2KVxuZnVuY3Rpb24gYm5wU3F1YXJlVG8ocikge1xuICB2YXIgeCA9IHRoaXMuYWJzKCk7XG4gIHZhciBpID0gci50ID0gMip4LnQ7XG4gIHdoaWxlKC0taSA+PSAwKSByW2ldID0gMDtcbiAgZm9yKGkgPSAwOyBpIDwgeC50LTE7ICsraSkge1xuICAgIHZhciBjID0geC5hbShpLHhbaV0sciwyKmksMCwxKTtcbiAgICBpZigocltpK3gudF0rPXguYW0oaSsxLDIqeFtpXSxyLDIqaSsxLGMseC50LWktMSkpID49IHguRFYpIHtcbiAgICAgIHJbaSt4LnRdIC09IHguRFY7XG4gICAgICByW2kreC50KzFdID0gMTtcbiAgICB9XG4gIH1cbiAgaWYoci50ID4gMCkgcltyLnQtMV0gKz0geC5hbShpLHhbaV0sciwyKmksMCwxKTtcbiAgci5zID0gMDtcbiAgci5jbGFtcCgpO1xufVxuXG4vLyAocHJvdGVjdGVkKSBkaXZpZGUgdGhpcyBieSBtLCBxdW90aWVudCBhbmQgcmVtYWluZGVyIHRvIHEsIHIgKEhBQyAxNC4yMClcbi8vIHIgIT0gcSwgdGhpcyAhPSBtLiAgcSBvciByIG1heSBiZSBudWxsLlxuZnVuY3Rpb24gYm5wRGl2UmVtVG8obSxxLHIpIHtcbiAgdmFyIHBtID0gbS5hYnMoKTtcbiAgaWYocG0udCA8PSAwKSByZXR1cm47XG4gIHZhciBwdCA9IHRoaXMuYWJzKCk7XG4gIGlmKHB0LnQgPCBwbS50KSB7XG4gICAgaWYocSAhPSBudWxsKSBxLmZyb21JbnQoMCk7XG4gICAgaWYociAhPSBudWxsKSB0aGlzLmNvcHlUbyhyKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYociA9PSBudWxsKSByID0gbmJpKCk7XG4gIHZhciB5ID0gbmJpKCksIHRzID0gdGhpcy5zLCBtcyA9IG0ucztcbiAgdmFyIG5zaCA9IHRoaXMuREItbmJpdHMocG1bcG0udC0xXSk7ICAgLy8gbm9ybWFsaXplIG1vZHVsdXNcbiAgaWYobnNoID4gMCkgeyBwbS5sU2hpZnRUbyhuc2gseSk7IHB0LmxTaGlmdFRvKG5zaCxyKTsgfVxuICBlbHNlIHsgcG0uY29weVRvKHkpOyBwdC5jb3B5VG8ocik7IH1cbiAgdmFyIHlzID0geS50O1xuICB2YXIgeTAgPSB5W3lzLTFdO1xuICBpZih5MCA9PSAwKSByZXR1cm47XG4gIHZhciB5dCA9IHkwKigxPDx0aGlzLkYxKSsoKHlzPjEpP3lbeXMtMl0+PnRoaXMuRjI6MCk7XG4gIHZhciBkMSA9IHRoaXMuRlYveXQsIGQyID0gKDE8PHRoaXMuRjEpL3l0LCBlID0gMTw8dGhpcy5GMjtcbiAgdmFyIGkgPSByLnQsIGogPSBpLXlzLCB0ID0gKHE9PW51bGwpP25iaSgpOnE7XG4gIHkuZGxTaGlmdFRvKGosdCk7XG4gIGlmKHIuY29tcGFyZVRvKHQpID49IDApIHtcbiAgICByW3IudCsrXSA9IDE7XG4gICAgci5zdWJUbyh0LHIpO1xuICB9XG4gIEJpZ0ludGVnZXIuT05FLmRsU2hpZnRUbyh5cyx0KTtcbiAgdC5zdWJUbyh5LHkpOyAgLy8gXCJuZWdhdGl2ZVwiIHkgc28gd2UgY2FuIHJlcGxhY2Ugc3ViIHdpdGggYW0gbGF0ZXJcbiAgd2hpbGUoeS50IDwgeXMpIHlbeS50KytdID0gMDtcbiAgd2hpbGUoLS1qID49IDApIHtcbiAgICAvLyBFc3RpbWF0ZSBxdW90aWVudCBkaWdpdFxuICAgIHZhciBxZCA9IChyWy0taV09PXkwKT90aGlzLkRNOk1hdGguZmxvb3IocltpXSpkMSsocltpLTFdK2UpKmQyKTtcbiAgICBpZigocltpXSs9eS5hbSgwLHFkLHIsaiwwLHlzKSkgPCBxZCkgeyAgIC8vIFRyeSBpdCBvdXRcbiAgICAgIHkuZGxTaGlmdFRvKGosdCk7XG4gICAgICByLnN1YlRvKHQscik7XG4gICAgICB3aGlsZShyW2ldIDwgLS1xZCkgci5zdWJUbyh0LHIpO1xuICAgIH1cbiAgfVxuICBpZihxICE9IG51bGwpIHtcbiAgICByLmRyU2hpZnRUbyh5cyxxKTtcbiAgICBpZih0cyAhPSBtcykgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHEscSk7XG4gIH1cbiAgci50ID0geXM7XG4gIHIuY2xhbXAoKTtcbiAgaWYobnNoID4gMCkgci5yU2hpZnRUbyhuc2gscik7IC8vIERlbm9ybWFsaXplIHJlbWFpbmRlclxuICBpZih0cyA8IDApIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyhyLHIpO1xufVxuXG4vLyAocHVibGljKSB0aGlzIG1vZCBhXG5mdW5jdGlvbiBibk1vZChhKSB7XG4gIHZhciByID0gbmJpKCk7XG4gIHRoaXMuYWJzKCkuZGl2UmVtVG8oYSxudWxsLHIpO1xuICBpZih0aGlzLnMgPCAwICYmIHIuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTykgPiAwKSBhLnN1YlRvKHIscik7XG4gIHJldHVybiByO1xufVxuXG4vLyBNb2R1bGFyIHJlZHVjdGlvbiB1c2luZyBcImNsYXNzaWNcIiBhbGdvcml0aG1cbmZ1bmN0aW9uIENsYXNzaWMobSkgeyB0aGlzLm0gPSBtOyB9XG5mdW5jdGlvbiBjQ29udmVydCh4KSB7XG4gIGlmKHgucyA8IDAgfHwgeC5jb21wYXJlVG8odGhpcy5tKSA+PSAwKSByZXR1cm4geC5tb2QodGhpcy5tKTtcbiAgZWxzZSByZXR1cm4geDtcbn1cbmZ1bmN0aW9uIGNSZXZlcnQoeCkgeyByZXR1cm4geDsgfVxuZnVuY3Rpb24gY1JlZHVjZSh4KSB7IHguZGl2UmVtVG8odGhpcy5tLG51bGwseCk7IH1cbmZ1bmN0aW9uIGNNdWxUbyh4LHkscikgeyB4Lm11bHRpcGx5VG8oeSxyKTsgdGhpcy5yZWR1Y2Uocik7IH1cbmZ1bmN0aW9uIGNTcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuQ2xhc3NpYy5wcm90b3R5cGUuY29udmVydCA9IGNDb252ZXJ0O1xuQ2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0ID0gY1JldmVydDtcbkNsYXNzaWMucHJvdG90eXBlLnJlZHVjZSA9IGNSZWR1Y2U7XG5DbGFzc2ljLnByb3RvdHlwZS5tdWxUbyA9IGNNdWxUbztcbkNsYXNzaWMucHJvdG90eXBlLnNxclRvID0gY1NxclRvO1xuXG4vLyAocHJvdGVjdGVkKSByZXR1cm4gXCItMS90aGlzICUgMl5EQlwiOyB1c2VmdWwgZm9yIE1vbnQuIHJlZHVjdGlvblxuLy8ganVzdGlmaWNhdGlvbjpcbi8vICAgICAgICAgeHkgPT0gMSAobW9kIG0pXG4vLyAgICAgICAgIHh5ID0gIDEra21cbi8vICAgeHkoMi14eSkgPSAoMStrbSkoMS1rbSlcbi8vIHhbeSgyLXh5KV0gPSAxLWteMm1eMlxuLy8geFt5KDIteHkpXSA9PSAxIChtb2QgbV4yKVxuLy8gaWYgeSBpcyAxL3ggbW9kIG0sIHRoZW4geSgyLXh5KSBpcyAxL3ggbW9kIG1eMlxuLy8gc2hvdWxkIHJlZHVjZSB4IGFuZCB5KDIteHkpIGJ5IG1eMiBhdCBlYWNoIHN0ZXAgdG8ga2VlcCBzaXplIGJvdW5kZWQuXG4vLyBKUyBtdWx0aXBseSBcIm92ZXJmbG93c1wiIGRpZmZlcmVudGx5IGZyb20gQy9DKyssIHNvIGNhcmUgaXMgbmVlZGVkIGhlcmUuXG5mdW5jdGlvbiBibnBJbnZEaWdpdCgpIHtcbiAgaWYodGhpcy50IDwgMSkgcmV0dXJuIDA7XG4gIHZhciB4ID0gdGhpc1swXTtcbiAgaWYoKHgmMSkgPT0gMCkgcmV0dXJuIDA7XG4gIHZhciB5ID0geCYzOyAgICAgICAvLyB5ID09IDEveCBtb2QgMl4yXG4gIHkgPSAoeSooMi0oeCYweGYpKnkpKSYweGY7IC8vIHkgPT0gMS94IG1vZCAyXjRcbiAgeSA9ICh5KigyLSh4JjB4ZmYpKnkpKSYweGZmOyAgIC8vIHkgPT0gMS94IG1vZCAyXjhcbiAgeSA9ICh5KigyLSgoKHgmMHhmZmZmKSp5KSYweGZmZmYpKSkmMHhmZmZmOyAgICAvLyB5ID09IDEveCBtb2QgMl4xNlxuICAvLyBsYXN0IHN0ZXAgLSBjYWxjdWxhdGUgaW52ZXJzZSBtb2QgRFYgZGlyZWN0bHk7XG4gIC8vIGFzc3VtZXMgMTYgPCBEQiA8PSAzMiBhbmQgYXNzdW1lcyBhYmlsaXR5IHRvIGhhbmRsZSA0OC1iaXQgaW50c1xuICB5ID0gKHkqKDIteCp5JXRoaXMuRFYpKSV0aGlzLkRWOyAgICAgICAvLyB5ID09IDEveCBtb2QgMl5kYml0c1xuICAvLyB3ZSByZWFsbHkgd2FudCB0aGUgbmVnYXRpdmUgaW52ZXJzZSwgYW5kIC1EViA8IHkgPCBEVlxuICByZXR1cm4gKHk+MCk/dGhpcy5EVi15Oi15O1xufVxuXG4vLyBNb250Z29tZXJ5IHJlZHVjdGlvblxuZnVuY3Rpb24gTW9udGdvbWVyeShtKSB7XG4gIHRoaXMubSA9IG07XG4gIHRoaXMubXAgPSBtLmludkRpZ2l0KCk7XG4gIHRoaXMubXBsID0gdGhpcy5tcCYweDdmZmY7XG4gIHRoaXMubXBoID0gdGhpcy5tcD4+MTU7XG4gIHRoaXMudW0gPSAoMTw8KG0uREItMTUpKS0xO1xuICB0aGlzLm10MiA9IDIqbS50O1xufVxuXG4vLyB4UiBtb2QgbVxuZnVuY3Rpb24gbW9udENvbnZlcnQoeCkge1xuICB2YXIgciA9IG5iaSgpO1xuICB4LmFicygpLmRsU2hpZnRUbyh0aGlzLm0udCxyKTtcbiAgci5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxyKTtcbiAgaWYoeC5zIDwgMCAmJiByLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pID4gMCkgdGhpcy5tLnN1YlRvKHIscik7XG4gIHJldHVybiByO1xufVxuXG4vLyB4L1IgbW9kIG1cbmZ1bmN0aW9uIG1vbnRSZXZlcnQoeCkge1xuICB2YXIgciA9IG5iaSgpO1xuICB4LmNvcHlUbyhyKTtcbiAgdGhpcy5yZWR1Y2Uocik7XG4gIHJldHVybiByO1xufVxuXG4vLyB4ID0geC9SIG1vZCBtIChIQUMgMTQuMzIpXG5mdW5jdGlvbiBtb250UmVkdWNlKHgpIHtcbiAgd2hpbGUoeC50IDw9IHRoaXMubXQyKSAvLyBwYWQgeCBzbyBhbSBoYXMgZW5vdWdoIHJvb20gbGF0ZXJcbiAgICB4W3gudCsrXSA9IDA7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm0udDsgKytpKSB7XG4gICAgLy8gZmFzdGVyIHdheSBvZiBjYWxjdWxhdGluZyB1MCA9IHhbaV0qbXAgbW9kIERWXG4gICAgdmFyIGogPSB4W2ldJjB4N2ZmZjtcbiAgICB2YXIgdTAgPSAoaip0aGlzLm1wbCsoKChqKnRoaXMubXBoKyh4W2ldPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJnguRE07XG4gICAgLy8gdXNlIGFtIHRvIGNvbWJpbmUgdGhlIG11bHRpcGx5LXNoaWZ0LWFkZCBpbnRvIG9uZSBjYWxsXG4gICAgaiA9IGkrdGhpcy5tLnQ7XG4gICAgeFtqXSArPSB0aGlzLm0uYW0oMCx1MCx4LGksMCx0aGlzLm0udCk7XG4gICAgLy8gcHJvcGFnYXRlIGNhcnJ5XG4gICAgd2hpbGUoeFtqXSA+PSB4LkRWKSB7IHhbal0gLT0geC5EVjsgeFsrK2pdKys7IH1cbiAgfVxuICB4LmNsYW1wKCk7XG4gIHguZHJTaGlmdFRvKHRoaXMubS50LHgpO1xuICBpZih4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHguc3ViVG8odGhpcy5tLHgpO1xufVxuXG4vLyByID0gXCJ4XjIvUiBtb2QgbVwiOyB4ICE9IHJcbmZ1bmN0aW9uIG1vbnRTcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuLy8gciA9IFwieHkvUiBtb2QgbVwiOyB4LHkgIT0gclxuZnVuY3Rpb24gbW9udE11bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG5Nb250Z29tZXJ5LnByb3RvdHlwZS5jb252ZXJ0ID0gbW9udENvbnZlcnQ7XG5Nb250Z29tZXJ5LnByb3RvdHlwZS5yZXZlcnQgPSBtb250UmV2ZXJ0O1xuTW9udGdvbWVyeS5wcm90b3R5cGUucmVkdWNlID0gbW9udFJlZHVjZTtcbk1vbnRnb21lcnkucHJvdG90eXBlLm11bFRvID0gbW9udE11bFRvO1xuTW9udGdvbWVyeS5wcm90b3R5cGUuc3FyVG8gPSBtb250U3FyVG87XG5cbi8vIChwcm90ZWN0ZWQpIHRydWUgaWZmIHRoaXMgaXMgZXZlblxuZnVuY3Rpb24gYm5wSXNFdmVuKCkgeyByZXR1cm4gKCh0aGlzLnQ+MCk/KHRoaXNbMF0mMSk6dGhpcy5zKSA9PSAwOyB9XG5cbi8vIChwcm90ZWN0ZWQpIHRoaXNeZSwgZSA8IDJeMzIsIGRvaW5nIHNxciBhbmQgbXVsIHdpdGggXCJyXCIgKEhBQyAxNC43OSlcbmZ1bmN0aW9uIGJucEV4cChlLHopIHtcbiAgaWYoZSA+IDB4ZmZmZmZmZmYgfHwgZSA8IDEpIHJldHVybiBCaWdJbnRlZ2VyLk9ORTtcbiAgdmFyIHIgPSBuYmkoKSwgcjIgPSBuYmkoKSwgZyA9IHouY29udmVydCh0aGlzKSwgaSA9IG5iaXRzKGUpLTE7XG4gIGcuY29weVRvKHIpO1xuICB3aGlsZSgtLWkgPj0gMCkge1xuICAgIHouc3FyVG8ocixyMik7XG4gICAgaWYoKGUmKDE8PGkpKSA+IDApIHoubXVsVG8ocjIsZyxyKTtcbiAgICBlbHNlIHsgdmFyIHQgPSByOyByID0gcjI7IHIyID0gdDsgfVxuICB9XG4gIHJldHVybiB6LnJldmVydChyKTtcbn1cblxuLy8gKHB1YmxpYykgdGhpc15lICUgbSwgMCA8PSBlIDwgMl4zMlxuZnVuY3Rpb24gYm5Nb2RQb3dJbnQoZSxtKSB7XG4gIHZhciB6O1xuICBpZihlIDwgMjU2IHx8IG0uaXNFdmVuKCkpIHogPSBuZXcgQ2xhc3NpYyhtKTsgZWxzZSB6ID0gbmV3IE1vbnRnb21lcnkobSk7XG4gIHJldHVybiB0aGlzLmV4cChlLHopO1xufVxuXG4vLyBwcm90ZWN0ZWRcbkJpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbyA9IGJucENvcHlUbztcbkJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21JbnQgPSBibnBGcm9tSW50O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbVN0cmluZyA9IGJucEZyb21TdHJpbmc7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGFtcCA9IGJucENsYW1wO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuZGxTaGlmdFRvID0gYm5wRExTaGlmdFRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuZHJTaGlmdFRvID0gYm5wRFJTaGlmdFRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG8gPSBibnBMU2hpZnRUbztcbkJpZ0ludGVnZXIucHJvdG90eXBlLnJTaGlmdFRvID0gYm5wUlNoaWZ0VG87XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5zdWJUbyA9IGJucFN1YlRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbyA9IGJucE11bHRpcGx5VG87XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmVUbyA9IGJucFNxdWFyZVRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2UmVtVG8gPSBibnBEaXZSZW1UbztcbkJpZ0ludGVnZXIucHJvdG90eXBlLmludkRpZ2l0ID0gYm5wSW52RGlnaXQ7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5pc0V2ZW4gPSBibnBJc0V2ZW47XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5leHAgPSBibnBFeHA7XG5cbi8vIHB1YmxpY1xuQmlnSW50ZWdlci5wcm90b3R5cGUudG9TdHJpbmcgPSBiblRvU3RyaW5nO1xuQmlnSW50ZWdlci5wcm90b3R5cGUubmVnYXRlID0gYm5OZWdhdGU7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5hYnMgPSBibkFicztcbkJpZ0ludGVnZXIucHJvdG90eXBlLmNvbXBhcmVUbyA9IGJuQ29tcGFyZVRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuYml0TGVuZ3RoID0gYm5CaXRMZW5ndGg7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2QgPSBibk1vZDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvd0ludCA9IGJuTW9kUG93SW50O1xuXG4vLyBcImNvbnN0YW50c1wiXG5CaWdJbnRlZ2VyLlpFUk8gPSBuYnYoMCk7XG5CaWdJbnRlZ2VyLk9ORSA9IG5idigxKTtcblxuLy8gQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgIFRvbSBXdVxuLy8gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNlZSBcIkxJQ0VOU0VcIiBmb3IgZGV0YWlscy5cblxuLy8gRXh0ZW5kZWQgSmF2YVNjcmlwdCBCTiBmdW5jdGlvbnMsIHJlcXVpcmVkIGZvciBSU0EgcHJpdmF0ZSBvcHMuXG5cbi8vIFZlcnNpb24gMS4xOiBuZXcgQmlnSW50ZWdlcihcIjBcIiwgMTApIHJldHVybnMgXCJwcm9wZXJcIiB6ZXJvXG4vLyBWZXJzaW9uIDEuMjogc3F1YXJlKCkgQVBJLCBpc1Byb2JhYmxlUHJpbWUgZml4XG5cbi8vIChwdWJsaWMpXG5mdW5jdGlvbiBibkNsb25lKCkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmNvcHlUbyhyKTsgcmV0dXJuIHI7IH1cblxuLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIGludGVnZXJcbmZ1bmN0aW9uIGJuSW50VmFsdWUoKSB7XG4gIGlmKHRoaXMucyA8IDApIHtcbiAgICBpZih0aGlzLnQgPT0gMSkgcmV0dXJuIHRoaXNbMF0tdGhpcy5EVjtcbiAgICBlbHNlIGlmKHRoaXMudCA9PSAwKSByZXR1cm4gLTE7XG4gIH1cbiAgZWxzZSBpZih0aGlzLnQgPT0gMSkgcmV0dXJuIHRoaXNbMF07XG4gIGVsc2UgaWYodGhpcy50ID09IDApIHJldHVybiAwO1xuICAvLyBhc3N1bWVzIDE2IDwgREIgPCAzMlxuICByZXR1cm4gKCh0aGlzWzFdJigoMTw8KDMyLXRoaXMuREIpKS0xKSk8PHRoaXMuREIpfHRoaXNbMF07XG59XG5cbi8vIChwdWJsaWMpIHJldHVybiB2YWx1ZSBhcyBieXRlXG5mdW5jdGlvbiBibkJ5dGVWYWx1ZSgpIHsgcmV0dXJuICh0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNDsgfVxuXG4vLyAocHVibGljKSByZXR1cm4gdmFsdWUgYXMgc2hvcnQgKGFzc3VtZXMgREI+PTE2KVxuZnVuY3Rpb24gYm5TaG9ydFZhbHVlKCkgeyByZXR1cm4gKHRoaXMudD09MCk/dGhpcy5zOih0aGlzWzBdPDwxNik+PjE2OyB9XG5cbi8vIChwcm90ZWN0ZWQpIHJldHVybiB4IHMudC4gcl54IDwgRFZcbmZ1bmN0aW9uIGJucENodW5rU2l6ZShyKSB7IHJldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2cocikpOyB9XG5cbi8vIChwdWJsaWMpIDAgaWYgdGhpcyA9PSAwLCAxIGlmIHRoaXMgPiAwXG5mdW5jdGlvbiBiblNpZ051bSgpIHtcbiAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIC0xO1xuICBlbHNlIGlmKHRoaXMudCA8PSAwIHx8ICh0aGlzLnQgPT0gMSAmJiB0aGlzWzBdIDw9IDApKSByZXR1cm4gMDtcbiAgZWxzZSByZXR1cm4gMTtcbn1cblxuLy8gKHByb3RlY3RlZCkgY29udmVydCB0byByYWRpeCBzdHJpbmdcbmZ1bmN0aW9uIGJucFRvUmFkaXgoYikge1xuICBpZihiID09IG51bGwpIGIgPSAxMDtcbiAgaWYodGhpcy5zaWdudW0oKSA9PSAwIHx8IGIgPCAyIHx8IGIgPiAzNikgcmV0dXJuIFwiMFwiO1xuICB2YXIgY3MgPSB0aGlzLmNodW5rU2l6ZShiKTtcbiAgdmFyIGEgPSBNYXRoLnBvdyhiLGNzKTtcbiAgdmFyIGQgPSBuYnYoYSksIHkgPSBuYmkoKSwgeiA9IG5iaSgpLCByID0gXCJcIjtcbiAgdGhpcy5kaXZSZW1UbyhkLHkseik7XG4gIHdoaWxlKHkuc2lnbnVtKCkgPiAwKSB7XG4gICAgciA9IChhK3ouaW50VmFsdWUoKSkudG9TdHJpbmcoYikuc3Vic3RyKDEpICsgcjtcbiAgICB5LmRpdlJlbVRvKGQseSx6KTtcbiAgfVxuICByZXR1cm4gei5pbnRWYWx1ZSgpLnRvU3RyaW5nKGIpICsgcjtcbn1cblxuLy8gKHByb3RlY3RlZCkgY29udmVydCBmcm9tIHJhZGl4IHN0cmluZ1xuZnVuY3Rpb24gYm5wRnJvbVJhZGl4KHMsYikge1xuICB0aGlzLmZyb21JbnQoMCk7XG4gIGlmKGIgPT0gbnVsbCkgYiA9IDEwO1xuICB2YXIgY3MgPSB0aGlzLmNodW5rU2l6ZShiKTtcbiAgdmFyIGQgPSBNYXRoLnBvdyhiLGNzKSwgbWkgPSBmYWxzZSwgaiA9IDAsIHcgPSAwO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7ICsraSkge1xuICAgIHZhciB4ID0gaW50QXQocyxpKTtcbiAgICBpZih4IDwgMCkge1xuICAgICAgaWYocy5jaGFyQXQoaSkgPT0gXCItXCIgJiYgdGhpcy5zaWdudW0oKSA9PSAwKSBtaSA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdyA9IGIqdyt4O1xuICAgIGlmKCsraiA+PSBjcykge1xuICAgICAgdGhpcy5kTXVsdGlwbHkoZCk7XG4gICAgICB0aGlzLmRBZGRPZmZzZXQodywwKTtcbiAgICAgIGogPSAwO1xuICAgICAgdyA9IDA7XG4gICAgfVxuICB9XG4gIGlmKGogPiAwKSB7XG4gICAgdGhpcy5kTXVsdGlwbHkoTWF0aC5wb3coYixqKSk7XG4gICAgdGhpcy5kQWRkT2Zmc2V0KHcsMCk7XG4gIH1cbiAgaWYobWkpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpO1xufVxuXG4vLyAocHJvdGVjdGVkKSBhbHRlcm5hdGUgY29uc3RydWN0b3JcbmZ1bmN0aW9uIGJucEZyb21OdW1iZXIoYSxiLGMpIHtcbiAgaWYoXCJudW1iZXJcIiA9PSB0eXBlb2YgYikge1xuICAgIC8vIG5ldyBCaWdJbnRlZ2VyKGludCxpbnQsUk5HKVxuICAgIGlmKGEgPCAyKSB0aGlzLmZyb21JbnQoMSk7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmZyb21OdW1iZXIoYSxjKTtcbiAgICAgIGlmKCF0aGlzLnRlc3RCaXQoYS0xKSkgIC8vIGZvcmNlIE1TQiBzZXRcbiAgICAgICAgdGhpcy5iaXR3aXNlVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGEtMSksb3Bfb3IsdGhpcyk7XG4gICAgICBpZih0aGlzLmlzRXZlbigpKSB0aGlzLmRBZGRPZmZzZXQoMSwwKTsgLy8gZm9yY2Ugb2RkXG4gICAgICB3aGlsZSghdGhpcy5pc1Byb2JhYmxlUHJpbWUoYikpIHtcbiAgICAgICAgdGhpcy5kQWRkT2Zmc2V0KDIsMCk7XG4gICAgICAgIGlmKHRoaXMuYml0TGVuZ3RoKCkgPiBhKSB0aGlzLnN1YlRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChhLTEpLHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBuZXcgQmlnSW50ZWdlcihpbnQsUk5HKVxuICAgIHZhciB4ID0gbmV3IEFycmF5KCksIHQgPSBhJjc7XG4gICAgeC5sZW5ndGggPSAoYT4+MykrMTtcbiAgICBiLm5leHRCeXRlcyh4KTtcbiAgICBpZih0ID4gMCkgeFswXSAmPSAoKDE8PHQpLTEpOyBlbHNlIHhbMF0gPSAwO1xuICAgIHRoaXMuZnJvbVN0cmluZyh4LDI1Nik7XG4gIH1cbn1cblxuLy8gKHB1YmxpYykgY29udmVydCB0byBiaWdlbmRpYW4gYnl0ZSBhcnJheVxuZnVuY3Rpb24gYm5Ub0J5dGVBcnJheSgpIHtcbiAgdmFyIGkgPSB0aGlzLnQsIHIgPSBuZXcgQXJyYXkoKTtcbiAgclswXSA9IHRoaXMucztcbiAgdmFyIHAgPSB0aGlzLkRCLShpKnRoaXMuREIpJTgsIGQsIGsgPSAwO1xuICBpZihpLS0gPiAwKSB7XG4gICAgaWYocCA8IHRoaXMuREIgJiYgKGQgPSB0aGlzW2ldPj5wKSAhPSAodGhpcy5zJnRoaXMuRE0pPj5wKVxuICAgICAgcltrKytdID0gZHwodGhpcy5zPDwodGhpcy5EQi1wKSk7XG4gICAgd2hpbGUoaSA+PSAwKSB7XG4gICAgICBpZihwIDwgOCkge1xuICAgICAgICBkID0gKHRoaXNbaV0mKCgxPDxwKS0xKSk8PCg4LXApO1xuICAgICAgICBkIHw9IHRoaXNbLS1pXT4+KHArPXRoaXMuREItOCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZCA9ICh0aGlzW2ldPj4ocC09OCkpJjB4ZmY7XG4gICAgICAgIGlmKHAgPD0gMCkgeyBwICs9IHRoaXMuREI7IC0taTsgfVxuICAgICAgfVxuICAgICAgaWYoKGQmMHg4MCkgIT0gMCkgZCB8PSAtMjU2O1xuICAgICAgaWYoayA9PSAwICYmICh0aGlzLnMmMHg4MCkgIT0gKGQmMHg4MCkpICsraztcbiAgICAgIGlmKGsgPiAwIHx8IGQgIT0gdGhpcy5zKSByW2srK10gPSBkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gYm5FcXVhbHMoYSkgeyByZXR1cm4odGhpcy5jb21wYXJlVG8oYSk9PTApOyB9XG5mdW5jdGlvbiBibk1pbihhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKTwwKT90aGlzOmE7IH1cbmZ1bmN0aW9uIGJuTWF4KGEpIHsgcmV0dXJuKHRoaXMuY29tcGFyZVRvKGEpPjApP3RoaXM6YTsgfVxuXG4vLyAocHJvdGVjdGVkKSByID0gdGhpcyBvcCBhIChiaXR3aXNlKVxuZnVuY3Rpb24gYm5wQml0d2lzZVRvKGEsb3Ascikge1xuICB2YXIgaSwgZiwgbSA9IE1hdGgubWluKGEudCx0aGlzLnQpO1xuICBmb3IoaSA9IDA7IGkgPCBtOyArK2kpIHJbaV0gPSBvcCh0aGlzW2ldLGFbaV0pO1xuICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICBmID0gYS5zJnRoaXMuRE07XG4gICAgZm9yKGkgPSBtOyBpIDwgdGhpcy50OyArK2kpIHJbaV0gPSBvcCh0aGlzW2ldLGYpO1xuICAgIHIudCA9IHRoaXMudDtcbiAgfVxuICBlbHNlIHtcbiAgICBmID0gdGhpcy5zJnRoaXMuRE07XG4gICAgZm9yKGkgPSBtOyBpIDwgYS50OyArK2kpIHJbaV0gPSBvcChmLGFbaV0pO1xuICAgIHIudCA9IGEudDtcbiAgfVxuICByLnMgPSBvcCh0aGlzLnMsYS5zKTtcbiAgci5jbGFtcCgpO1xufVxuXG4vLyAocHVibGljKSB0aGlzICYgYVxuZnVuY3Rpb24gb3BfYW5kKHgseSkgeyByZXR1cm4geCZ5OyB9XG5mdW5jdGlvbiBibkFuZChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3BfYW5kLHIpOyByZXR1cm4gcjsgfVxuXG4vLyAocHVibGljKSB0aGlzIHwgYVxuZnVuY3Rpb24gb3Bfb3IoeCx5KSB7IHJldHVybiB4fHk7IH1cbmZ1bmN0aW9uIGJuT3IoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX29yLHIpOyByZXR1cm4gcjsgfVxuXG4vLyAocHVibGljKSB0aGlzIF4gYVxuZnVuY3Rpb24gb3BfeG9yKHgseSkgeyByZXR1cm4geF55OyB9XG5mdW5jdGlvbiBiblhvcihhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3BfeG9yLHIpOyByZXR1cm4gcjsgfVxuXG4vLyAocHVibGljKSB0aGlzICYgfmFcbmZ1bmN0aW9uIG9wX2FuZG5vdCh4LHkpIHsgcmV0dXJuIHgmfnk7IH1cbmZ1bmN0aW9uIGJuQW5kTm90KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNlVG8oYSxvcF9hbmRub3Qscik7IHJldHVybiByOyB9XG5cbi8vIChwdWJsaWMpIH50aGlzXG5mdW5jdGlvbiBibk5vdCgpIHtcbiAgdmFyIHIgPSBuYmkoKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKSByW2ldID0gdGhpcy5ETSZ+dGhpc1tpXTtcbiAgci50ID0gdGhpcy50O1xuICByLnMgPSB+dGhpcy5zO1xuICByZXR1cm4gcjtcbn1cblxuLy8gKHB1YmxpYykgdGhpcyA8PCBuXG5mdW5jdGlvbiBiblNoaWZ0TGVmdChuKSB7XG4gIHZhciByID0gbmJpKCk7XG4gIGlmKG4gPCAwKSB0aGlzLnJTaGlmdFRvKC1uLHIpOyBlbHNlIHRoaXMubFNoaWZ0VG8obixyKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIChwdWJsaWMpIHRoaXMgPj4gblxuZnVuY3Rpb24gYm5TaGlmdFJpZ2h0KG4pIHtcbiAgdmFyIHIgPSBuYmkoKTtcbiAgaWYobiA8IDApIHRoaXMubFNoaWZ0VG8oLW4scik7IGVsc2UgdGhpcy5yU2hpZnRUbyhuLHIpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gcmV0dXJuIGluZGV4IG9mIGxvd2VzdCAxLWJpdCBpbiB4LCB4IDwgMl4zMVxuZnVuY3Rpb24gbGJpdCh4KSB7XG4gIGlmKHggPT0gMCkgcmV0dXJuIC0xO1xuICB2YXIgciA9IDA7XG4gIGlmKCh4JjB4ZmZmZikgPT0gMCkgeyB4ID4+PSAxNjsgciArPSAxNjsgfVxuICBpZigoeCYweGZmKSA9PSAwKSB7IHggPj49IDg7IHIgKz0gODsgfVxuICBpZigoeCYweGYpID09IDApIHsgeCA+Pj0gNDsgciArPSA0OyB9XG4gIGlmKCh4JjMpID09IDApIHsgeCA+Pj0gMjsgciArPSAyOyB9XG4gIGlmKCh4JjEpID09IDApICsrcjtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIChwdWJsaWMpIHJldHVybnMgaW5kZXggb2YgbG93ZXN0IDEtYml0IChvciAtMSBpZiBub25lKVxuZnVuY3Rpb24gYm5HZXRMb3dlc3RTZXRCaXQoKSB7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnQ7ICsraSlcbiAgICBpZih0aGlzW2ldICE9IDApIHJldHVybiBpKnRoaXMuREIrbGJpdCh0aGlzW2ldKTtcbiAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIHRoaXMudCp0aGlzLkRCO1xuICByZXR1cm4gLTE7XG59XG5cbi8vIHJldHVybiBudW1iZXIgb2YgMSBiaXRzIGluIHhcbmZ1bmN0aW9uIGNiaXQoeCkge1xuICB2YXIgciA9IDA7XG4gIHdoaWxlKHggIT0gMCkgeyB4ICY9IHgtMTsgKytyOyB9XG4gIHJldHVybiByO1xufVxuXG4vLyAocHVibGljKSByZXR1cm4gbnVtYmVyIG9mIHNldCBiaXRzXG5mdW5jdGlvbiBibkJpdENvdW50KCkge1xuICB2YXIgciA9IDAsIHggPSB0aGlzLnMmdGhpcy5ETTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKSByICs9IGNiaXQodGhpc1tpXV54KTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIChwdWJsaWMpIHRydWUgaWZmIG50aCBiaXQgaXMgc2V0XG5mdW5jdGlvbiBiblRlc3RCaXQobikge1xuICB2YXIgaiA9IE1hdGguZmxvb3Iobi90aGlzLkRCKTtcbiAgaWYoaiA+PSB0aGlzLnQpIHJldHVybih0aGlzLnMhPTApO1xuICByZXR1cm4oKHRoaXNbal0mKDE8PChuJXRoaXMuREIpKSkhPTApO1xufVxuXG4vLyAocHJvdGVjdGVkKSB0aGlzIG9wICgxPDxuKVxuZnVuY3Rpb24gYm5wQ2hhbmdlQml0KG4sb3ApIHtcbiAgdmFyIHIgPSBCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQobik7XG4gIHRoaXMuYml0d2lzZVRvKHIsb3Ascik7XG4gIHJldHVybiByO1xufVxuXG4vLyAocHVibGljKSB0aGlzIHwgKDE8PG4pXG5mdW5jdGlvbiBiblNldEJpdChuKSB7IHJldHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX29yKTsgfVxuXG4vLyAocHVibGljKSB0aGlzICYgfigxPDxuKVxuZnVuY3Rpb24gYm5DbGVhckJpdChuKSB7IHJldHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX2FuZG5vdCk7IH1cblxuLy8gKHB1YmxpYykgdGhpcyBeICgxPDxuKVxuZnVuY3Rpb24gYm5GbGlwQml0KG4pIHsgcmV0dXJuIHRoaXMuY2hhbmdlQml0KG4sb3BfeG9yKTsgfVxuXG4vLyAocHJvdGVjdGVkKSByID0gdGhpcyArIGFcbmZ1bmN0aW9uIGJucEFkZFRvKGEscikge1xuICB2YXIgaSA9IDAsIGMgPSAwLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7XG4gIHdoaWxlKGkgPCBtKSB7XG4gICAgYyArPSB0aGlzW2ldK2FbaV07XG4gICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgIGMgPj49IHRoaXMuREI7XG4gIH1cbiAgaWYoYS50IDwgdGhpcy50KSB7XG4gICAgYyArPSBhLnM7XG4gICAgd2hpbGUoaSA8IHRoaXMudCkge1xuICAgICAgYyArPSB0aGlzW2ldO1xuICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgYyA+Pj0gdGhpcy5EQjtcbiAgICB9XG4gICAgYyArPSB0aGlzLnM7XG4gIH1cbiAgZWxzZSB7XG4gICAgYyArPSB0aGlzLnM7XG4gICAgd2hpbGUoaSA8IGEudCkge1xuICAgICAgYyArPSBhW2ldO1xuICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgYyA+Pj0gdGhpcy5EQjtcbiAgICB9XG4gICAgYyArPSBhLnM7XG4gIH1cbiAgci5zID0gKGM8MCk/LTE6MDtcbiAgaWYoYyA+IDApIHJbaSsrXSA9IGM7XG4gIGVsc2UgaWYoYyA8IC0xKSByW2krK10gPSB0aGlzLkRWK2M7XG4gIHIudCA9IGk7XG4gIHIuY2xhbXAoKTtcbn1cblxuLy8gKHB1YmxpYykgdGhpcyArIGFcbmZ1bmN0aW9uIGJuQWRkKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5hZGRUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4vLyAocHVibGljKSB0aGlzIC0gYVxuZnVuY3Rpb24gYm5TdWJ0cmFjdChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuc3ViVG8oYSxyKTsgcmV0dXJuIHI7IH1cblxuLy8gKHB1YmxpYykgdGhpcyAqIGFcbmZ1bmN0aW9uIGJuTXVsdGlwbHkoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLm11bHRpcGx5VG8oYSxyKTsgcmV0dXJuIHI7IH1cblxuLy8gKHB1YmxpYykgdGhpc14yXG5mdW5jdGlvbiBiblNxdWFyZSgpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5zcXVhcmVUbyhyKTsgcmV0dXJuIHI7IH1cblxuLy8gKHB1YmxpYykgdGhpcyAvIGFcbmZ1bmN0aW9uIGJuRGl2aWRlKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5kaXZSZW1UbyhhLHIsbnVsbCk7IHJldHVybiByOyB9XG5cbi8vIChwdWJsaWMpIHRoaXMgJSBhXG5mdW5jdGlvbiBiblJlbWFpbmRlcihhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuZGl2UmVtVG8oYSxudWxsLHIpOyByZXR1cm4gcjsgfVxuXG4vLyAocHVibGljKSBbdGhpcy9hLHRoaXMlYV1cbmZ1bmN0aW9uIGJuRGl2aWRlQW5kUmVtYWluZGVyKGEpIHtcbiAgdmFyIHEgPSBuYmkoKSwgciA9IG5iaSgpO1xuICB0aGlzLmRpdlJlbVRvKGEscSxyKTtcbiAgcmV0dXJuIG5ldyBBcnJheShxLHIpO1xufVxuXG4vLyAocHJvdGVjdGVkKSB0aGlzICo9IG4sIHRoaXMgPj0gMCwgMSA8IG4gPCBEVlxuZnVuY3Rpb24gYm5wRE11bHRpcGx5KG4pIHtcbiAgdGhpc1t0aGlzLnRdID0gdGhpcy5hbSgwLG4tMSx0aGlzLDAsMCx0aGlzLnQpO1xuICArK3RoaXMudDtcbiAgdGhpcy5jbGFtcCgpO1xufVxuXG4vLyAocHJvdGVjdGVkKSB0aGlzICs9IG4gPDwgdyB3b3JkcywgdGhpcyA+PSAwXG5mdW5jdGlvbiBibnBEQWRkT2Zmc2V0KG4sdykge1xuICBpZihuID09IDApIHJldHVybjtcbiAgd2hpbGUodGhpcy50IDw9IHcpIHRoaXNbdGhpcy50KytdID0gMDtcbiAgdGhpc1t3XSArPSBuO1xuICB3aGlsZSh0aGlzW3ddID49IHRoaXMuRFYpIHtcbiAgICB0aGlzW3ddIC09IHRoaXMuRFY7XG4gICAgaWYoKyt3ID49IHRoaXMudCkgdGhpc1t0aGlzLnQrK10gPSAwO1xuICAgICsrdGhpc1t3XTtcbiAgfVxufVxuXG4vLyBBIFwibnVsbFwiIHJlZHVjZXJcbmZ1bmN0aW9uIE51bGxFeHAoKSB7fVxuZnVuY3Rpb24gbk5vcCh4KSB7IHJldHVybiB4OyB9XG5mdW5jdGlvbiBuTXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IH1cbmZ1bmN0aW9uIG5TcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgfVxuXG5OdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0ID0gbk5vcDtcbk51bGxFeHAucHJvdG90eXBlLnJldmVydCA9IG5Ob3A7XG5OdWxsRXhwLnByb3RvdHlwZS5tdWxUbyA9IG5NdWxUbztcbk51bGxFeHAucHJvdG90eXBlLnNxclRvID0gblNxclRvO1xuXG4vLyAocHVibGljKSB0aGlzXmVcbmZ1bmN0aW9uIGJuUG93KGUpIHsgcmV0dXJuIHRoaXMuZXhwKGUsbmV3IE51bGxFeHAoKSk7IH1cblxuLy8gKHByb3RlY3RlZCkgciA9IGxvd2VyIG4gd29yZHMgb2YgXCJ0aGlzICogYVwiLCBhLnQgPD0gblxuLy8gXCJ0aGlzXCIgc2hvdWxkIGJlIHRoZSBsYXJnZXIgb25lIGlmIGFwcHJvcHJpYXRlLlxuZnVuY3Rpb24gYm5wTXVsdGlwbHlMb3dlclRvKGEsbixyKSB7XG4gIHZhciBpID0gTWF0aC5taW4odGhpcy50K2EudCxuKTtcbiAgci5zID0gMDsgLy8gYXNzdW1lcyBhLHRoaXMgPj0gMFxuICByLnQgPSBpO1xuICB3aGlsZShpID4gMCkgclstLWldID0gMDtcbiAgdmFyIGo7XG4gIGZvcihqID0gci50LXRoaXMudDsgaSA8IGo7ICsraSkgcltpK3RoaXMudF0gPSB0aGlzLmFtKDAsYVtpXSxyLGksMCx0aGlzLnQpO1xuICBmb3IoaiA9IE1hdGgubWluKGEudCxuKTsgaSA8IGo7ICsraSkgdGhpcy5hbSgwLGFbaV0scixpLDAsbi1pKTtcbiAgci5jbGFtcCgpO1xufVxuXG4vLyAocHJvdGVjdGVkKSByID0gXCJ0aGlzICogYVwiIHdpdGhvdXQgbG93ZXIgbiB3b3JkcywgbiA+IDBcbi8vIFwidGhpc1wiIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG9uZSBpZiBhcHByb3ByaWF0ZS5cbmZ1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhhLG4scikge1xuICAtLW47XG4gIHZhciBpID0gci50ID0gdGhpcy50K2EudC1uO1xuICByLnMgPSAwOyAvLyBhc3N1bWVzIGEsdGhpcyA+PSAwXG4gIHdoaWxlKC0taSA+PSAwKSByW2ldID0gMDtcbiAgZm9yKGkgPSBNYXRoLm1heChuLXRoaXMudCwwKTsgaSA8IGEudDsgKytpKVxuICAgIHJbdGhpcy50K2ktbl0gPSB0aGlzLmFtKG4taSxhW2ldLHIsMCwwLHRoaXMudCtpLW4pO1xuICByLmNsYW1wKCk7XG4gIHIuZHJTaGlmdFRvKDEscik7XG59XG5cbi8vIEJhcnJldHQgbW9kdWxhciByZWR1Y3Rpb25cbmZ1bmN0aW9uIEJhcnJldHQobSkge1xuICAvLyBzZXR1cCBCYXJyZXR0XG4gIHRoaXMucjIgPSBuYmkoKTtcbiAgdGhpcy5xMyA9IG5iaSgpO1xuICBCaWdJbnRlZ2VyLk9ORS5kbFNoaWZ0VG8oMiptLnQsdGhpcy5yMik7XG4gIHRoaXMubXUgPSB0aGlzLnIyLmRpdmlkZShtKTtcbiAgdGhpcy5tID0gbTtcbn1cblxuZnVuY3Rpb24gYmFycmV0dENvbnZlcnQoeCkge1xuICBpZih4LnMgPCAwIHx8IHgudCA+IDIqdGhpcy5tLnQpIHJldHVybiB4Lm1vZCh0aGlzLm0pO1xuICBlbHNlIGlmKHguY29tcGFyZVRvKHRoaXMubSkgPCAwKSByZXR1cm4geDtcbiAgZWxzZSB7IHZhciByID0gbmJpKCk7IHguY29weVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgcmV0dXJuIHI7IH1cbn1cblxuZnVuY3Rpb24gYmFycmV0dFJldmVydCh4KSB7IHJldHVybiB4OyB9XG5cbi8vIHggPSB4IG1vZCBtIChIQUMgMTQuNDIpXG5mdW5jdGlvbiBiYXJyZXR0UmVkdWNlKHgpIHtcbiAgeC5kclNoaWZ0VG8odGhpcy5tLnQtMSx0aGlzLnIyKTtcbiAgaWYoeC50ID4gdGhpcy5tLnQrMSkgeyB4LnQgPSB0aGlzLm0udCsxOyB4LmNsYW1wKCk7IH1cbiAgdGhpcy5tdS5tdWx0aXBseVVwcGVyVG8odGhpcy5yMix0aGlzLm0udCsxLHRoaXMucTMpO1xuICB0aGlzLm0ubXVsdGlwbHlMb3dlclRvKHRoaXMucTMsdGhpcy5tLnQrMSx0aGlzLnIyKTtcbiAgd2hpbGUoeC5jb21wYXJlVG8odGhpcy5yMikgPCAwKSB4LmRBZGRPZmZzZXQoMSx0aGlzLm0udCsxKTtcbiAgeC5zdWJUbyh0aGlzLnIyLHgpO1xuICB3aGlsZSh4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHguc3ViVG8odGhpcy5tLHgpO1xufVxuXG4vLyByID0geF4yIG1vZCBtOyB4ICE9IHJcbmZ1bmN0aW9uIGJhcnJldHRTcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuLy8gciA9IHgqeSBtb2QgbTsgeCx5ICE9IHJcbmZ1bmN0aW9uIGJhcnJldHRNdWxUbyh4LHkscikgeyB4Lm11bHRpcGx5VG8oeSxyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuQmFycmV0dC5wcm90b3R5cGUuY29udmVydCA9IGJhcnJldHRDb252ZXJ0O1xuQmFycmV0dC5wcm90b3R5cGUucmV2ZXJ0ID0gYmFycmV0dFJldmVydDtcbkJhcnJldHQucHJvdG90eXBlLnJlZHVjZSA9IGJhcnJldHRSZWR1Y2U7XG5CYXJyZXR0LnByb3RvdHlwZS5tdWxUbyA9IGJhcnJldHRNdWxUbztcbkJhcnJldHQucHJvdG90eXBlLnNxclRvID0gYmFycmV0dFNxclRvO1xuXG4vLyAocHVibGljKSB0aGlzXmUgJSBtIChIQUMgMTQuODUpXG5mdW5jdGlvbiBibk1vZFBvdyhlLG0pIHtcbiAgdmFyIGkgPSBlLmJpdExlbmd0aCgpLCBrLCByID0gbmJ2KDEpLCB6O1xuICBpZihpIDw9IDApIHJldHVybiByO1xuICBlbHNlIGlmKGkgPCAxOCkgayA9IDE7XG4gIGVsc2UgaWYoaSA8IDQ4KSBrID0gMztcbiAgZWxzZSBpZihpIDwgMTQ0KSBrID0gNDtcbiAgZWxzZSBpZihpIDwgNzY4KSBrID0gNTtcbiAgZWxzZSBrID0gNjtcbiAgaWYoaSA8IDgpXG4gICAgeiA9IG5ldyBDbGFzc2ljKG0pO1xuICBlbHNlIGlmKG0uaXNFdmVuKCkpXG4gICAgeiA9IG5ldyBCYXJyZXR0KG0pO1xuICBlbHNlXG4gICAgeiA9IG5ldyBNb250Z29tZXJ5KG0pO1xuXG4gIC8vIHByZWNvbXB1dGF0aW9uXG4gIHZhciBnID0gbmV3IEFycmF5KCksIG4gPSAzLCBrMSA9IGstMSwga20gPSAoMTw8ayktMTtcbiAgZ1sxXSA9IHouY29udmVydCh0aGlzKTtcbiAgaWYoayA+IDEpIHtcbiAgICB2YXIgZzIgPSBuYmkoKTtcbiAgICB6LnNxclRvKGdbMV0sZzIpO1xuICAgIHdoaWxlKG4gPD0ga20pIHtcbiAgICAgIGdbbl0gPSBuYmkoKTtcbiAgICAgIHoubXVsVG8oZzIsZ1tuLTJdLGdbbl0pO1xuICAgICAgbiArPSAyO1xuICAgIH1cbiAgfVxuXG4gIHZhciBqID0gZS50LTEsIHcsIGlzMSA9IHRydWUsIHIyID0gbmJpKCksIHQ7XG4gIGkgPSBuYml0cyhlW2pdKS0xO1xuICB3aGlsZShqID49IDApIHtcbiAgICBpZihpID49IGsxKSB3ID0gKGVbal0+PihpLWsxKSkma207XG4gICAgZWxzZSB7XG4gICAgICB3ID0gKGVbal0mKCgxPDwoaSsxKSktMSkpPDwoazEtaSk7XG4gICAgICBpZihqID4gMCkgdyB8PSBlW2otMV0+Pih0aGlzLkRCK2ktazEpO1xuICAgIH1cblxuICAgIG4gPSBrO1xuICAgIHdoaWxlKCh3JjEpID09IDApIHsgdyA+Pj0gMTsgLS1uOyB9XG4gICAgaWYoKGkgLT0gbikgPCAwKSB7IGkgKz0gdGhpcy5EQjsgLS1qOyB9XG4gICAgaWYoaXMxKSB7ICAvLyByZXQgPT0gMSwgZG9uJ3QgYm90aGVyIHNxdWFyaW5nIG9yIG11bHRpcGx5aW5nIGl0XG4gICAgICBnW3ddLmNvcHlUbyhyKTtcbiAgICAgIGlzMSA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHdoaWxlKG4gPiAxKSB7IHouc3FyVG8ocixyMik7IHouc3FyVG8ocjIscik7IG4gLT0gMjsgfVxuICAgICAgaWYobiA+IDApIHouc3FyVG8ocixyMik7IGVsc2UgeyB0ID0gcjsgciA9IHIyOyByMiA9IHQ7IH1cbiAgICAgIHoubXVsVG8ocjIsZ1t3XSxyKTtcbiAgICB9XG5cbiAgICB3aGlsZShqID49IDAgJiYgKGVbal0mKDE8PGkpKSA9PSAwKSB7XG4gICAgICB6LnNxclRvKHIscjIpOyB0ID0gcjsgciA9IHIyOyByMiA9IHQ7XG4gICAgICBpZigtLWkgPCAwKSB7IGkgPSB0aGlzLkRCLTE7IC0tajsgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gei5yZXZlcnQocik7XG59XG5cbi8vIChwdWJsaWMpIGdjZCh0aGlzLGEpIChIQUMgMTQuNTQpXG5mdW5jdGlvbiBibkdDRChhKSB7XG4gIHZhciB4ID0gKHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXMuY2xvbmUoKTtcbiAgdmFyIHkgPSAoYS5zPDApP2EubmVnYXRlKCk6YS5jbG9uZSgpO1xuICBpZih4LmNvbXBhcmVUbyh5KSA8IDApIHsgdmFyIHQgPSB4OyB4ID0geTsgeSA9IHQ7IH1cbiAgdmFyIGkgPSB4LmdldExvd2VzdFNldEJpdCgpLCBnID0geS5nZXRMb3dlc3RTZXRCaXQoKTtcbiAgaWYoZyA8IDApIHJldHVybiB4O1xuICBpZihpIDwgZykgZyA9IGk7XG4gIGlmKGcgPiAwKSB7XG4gICAgeC5yU2hpZnRUbyhnLHgpO1xuICAgIHkuclNoaWZ0VG8oZyx5KTtcbiAgfVxuICB3aGlsZSh4LnNpZ251bSgpID4gMCkge1xuICAgIGlmKChpID0geC5nZXRMb3dlc3RTZXRCaXQoKSkgPiAwKSB4LnJTaGlmdFRvKGkseCk7XG4gICAgaWYoKGkgPSB5LmdldExvd2VzdFNldEJpdCgpKSA+IDApIHkuclNoaWZ0VG8oaSx5KTtcbiAgICBpZih4LmNvbXBhcmVUbyh5KSA+PSAwKSB7XG4gICAgICB4LnN1YlRvKHkseCk7XG4gICAgICB4LnJTaGlmdFRvKDEseCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgeS5zdWJUbyh4LHkpO1xuICAgICAgeS5yU2hpZnRUbygxLHkpO1xuICAgIH1cbiAgfVxuICBpZihnID4gMCkgeS5sU2hpZnRUbyhnLHkpO1xuICByZXR1cm4geTtcbn1cblxuLy8gKHByb3RlY3RlZCkgdGhpcyAlIG4sIG4gPCAyXjI2XG5mdW5jdGlvbiBibnBNb2RJbnQobikge1xuICBpZihuIDw9IDApIHJldHVybiAwO1xuICB2YXIgZCA9IHRoaXMuRFYlbiwgciA9ICh0aGlzLnM8MCk/bi0xOjA7XG4gIGlmKHRoaXMudCA+IDApXG4gICAgaWYoZCA9PSAwKSByID0gdGhpc1swXSVuO1xuICAgIGVsc2UgZm9yKHZhciBpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByID0gKGQqcit0aGlzW2ldKSVuO1xuICByZXR1cm4gcjtcbn1cblxuLy8gKHB1YmxpYykgMS90aGlzICUgbSAoSEFDIDE0LjYxKVxuZnVuY3Rpb24gYm5Nb2RJbnZlcnNlKG0pIHtcbiAgdmFyIGFjID0gbS5pc0V2ZW4oKTtcbiAgaWYoKHRoaXMuaXNFdmVuKCkgJiYgYWMpIHx8IG0uc2lnbnVtKCkgPT0gMCkgcmV0dXJuIEJpZ0ludGVnZXIuWkVSTztcbiAgdmFyIHUgPSBtLmNsb25lKCksIHYgPSB0aGlzLmNsb25lKCk7XG4gIHZhciBhID0gbmJ2KDEpLCBiID0gbmJ2KDApLCBjID0gbmJ2KDApLCBkID0gbmJ2KDEpO1xuICB3aGlsZSh1LnNpZ251bSgpICE9IDApIHtcbiAgICB3aGlsZSh1LmlzRXZlbigpKSB7XG4gICAgICB1LnJTaGlmdFRvKDEsdSk7XG4gICAgICBpZihhYykge1xuICAgICAgICBpZighYS5pc0V2ZW4oKSB8fCAhYi5pc0V2ZW4oKSkgeyBhLmFkZFRvKHRoaXMsYSk7IGIuc3ViVG8obSxiKTsgfVxuICAgICAgICBhLnJTaGlmdFRvKDEsYSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKCFiLmlzRXZlbigpKSBiLnN1YlRvKG0sYik7XG4gICAgICBiLnJTaGlmdFRvKDEsYik7XG4gICAgfVxuICAgIHdoaWxlKHYuaXNFdmVuKCkpIHtcbiAgICAgIHYuclNoaWZ0VG8oMSx2KTtcbiAgICAgIGlmKGFjKSB7XG4gICAgICAgIGlmKCFjLmlzRXZlbigpIHx8ICFkLmlzRXZlbigpKSB7IGMuYWRkVG8odGhpcyxjKTsgZC5zdWJUbyhtLGQpOyB9XG4gICAgICAgIGMuclNoaWZ0VG8oMSxjKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoIWQuaXNFdmVuKCkpIGQuc3ViVG8obSxkKTtcbiAgICAgIGQuclNoaWZ0VG8oMSxkKTtcbiAgICB9XG4gICAgaWYodS5jb21wYXJlVG8odikgPj0gMCkge1xuICAgICAgdS5zdWJUbyh2LHUpO1xuICAgICAgaWYoYWMpIGEuc3ViVG8oYyxhKTtcbiAgICAgIGIuc3ViVG8oZCxiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2LnN1YlRvKHUsdik7XG4gICAgICBpZihhYykgYy5zdWJUbyhhLGMpO1xuICAgICAgZC5zdWJUbyhiLGQpO1xuICAgIH1cbiAgfVxuICBpZih2LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgIT0gMCkgcmV0dXJuIEJpZ0ludGVnZXIuWkVSTztcbiAgaWYoZC5jb21wYXJlVG8obSkgPj0gMCkgcmV0dXJuIGQuc3VidHJhY3QobSk7XG4gIGlmKGQuc2lnbnVtKCkgPCAwKSBkLmFkZFRvKG0sZCk7IGVsc2UgcmV0dXJuIGQ7XG4gIGlmKGQuc2lnbnVtKCkgPCAwKSByZXR1cm4gZC5hZGQobSk7IGVsc2UgcmV0dXJuIGQ7XG59XG5cbnZhciBsb3dwcmltZXMgPSBbMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3XTtcbnZhciBscGxpbSA9ICgxPDwyNikvbG93cHJpbWVzW2xvd3ByaW1lcy5sZW5ndGgtMV07XG5cbi8vIChwdWJsaWMpIHRlc3QgcHJpbWFsaXR5IHdpdGggY2VydGFpbnR5ID49IDEtLjVedFxuZnVuY3Rpb24gYm5Jc1Byb2JhYmxlUHJpbWUodCkge1xuICB2YXIgaSwgeCA9IHRoaXMuYWJzKCk7XG4gIGlmKHgudCA9PSAxICYmIHhbMF0gPD0gbG93cHJpbWVzW2xvd3ByaW1lcy5sZW5ndGgtMV0pIHtcbiAgICBmb3IoaSA9IDA7IGkgPCBsb3dwcmltZXMubGVuZ3RoOyArK2kpXG4gICAgICBpZih4WzBdID09IGxvd3ByaW1lc1tpXSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmKHguaXNFdmVuKCkpIHJldHVybiBmYWxzZTtcbiAgaSA9IDE7XG4gIHdoaWxlKGkgPCBsb3dwcmltZXMubGVuZ3RoKSB7XG4gICAgdmFyIG0gPSBsb3dwcmltZXNbaV0sIGogPSBpKzE7XG4gICAgd2hpbGUoaiA8IGxvd3ByaW1lcy5sZW5ndGggJiYgbSA8IGxwbGltKSBtICo9IGxvd3ByaW1lc1tqKytdO1xuICAgIG0gPSB4Lm1vZEludChtKTtcbiAgICB3aGlsZShpIDwgaikgaWYobSVsb3dwcmltZXNbaSsrXSA9PSAwKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHgubWlsbGVyUmFiaW4odCk7XG59XG5cbi8vIChwcm90ZWN0ZWQpIHRydWUgaWYgcHJvYmFibHkgcHJpbWUgKEhBQyA0LjI0LCBNaWxsZXItUmFiaW4pXG5mdW5jdGlvbiBibnBNaWxsZXJSYWJpbih0KSB7XG4gIHZhciBuMSA9IHRoaXMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpO1xuICB2YXIgayA9IG4xLmdldExvd2VzdFNldEJpdCgpO1xuICBpZihrIDw9IDApIHJldHVybiBmYWxzZTtcbiAgdmFyIHIgPSBuMS5zaGlmdFJpZ2h0KGspO1xuICB0ID0gKHQrMSk+PjE7XG4gIGlmKHQgPiBsb3dwcmltZXMubGVuZ3RoKSB0ID0gbG93cHJpbWVzLmxlbmd0aDtcbiAgdmFyIGEgPSBuYmkoKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IHQ7ICsraSkge1xuICAgIC8vUGljayBiYXNlcyBhdCByYW5kb20sIGluc3RlYWQgb2Ygc3RhcnRpbmcgYXQgMlxuICAgIGEuZnJvbUludChsb3dwcmltZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxvd3ByaW1lcy5sZW5ndGgpXSk7XG4gICAgdmFyIHkgPSBhLm1vZFBvdyhyLHRoaXMpO1xuICAgIGlmKHkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSAhPSAwICYmIHkuY29tcGFyZVRvKG4xKSAhPSAwKSB7XG4gICAgICB2YXIgaiA9IDE7XG4gICAgICB3aGlsZShqKysgPCBrICYmIHkuY29tcGFyZVRvKG4xKSAhPSAwKSB7XG4gICAgICAgIHkgPSB5Lm1vZFBvd0ludCgyLHRoaXMpO1xuICAgICAgICBpZih5LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYoeS5jb21wYXJlVG8objEpICE9IDApIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIHByb3RlY3RlZFxuQmlnSW50ZWdlci5wcm90b3R5cGUuY2h1bmtTaXplID0gYm5wQ2h1bmtTaXplO1xuQmlnSW50ZWdlci5wcm90b3R5cGUudG9SYWRpeCA9IGJucFRvUmFkaXg7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tUmFkaXggPSBibnBGcm9tUmFkaXg7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tTnVtYmVyID0gYm5wRnJvbU51bWJlcjtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbyA9IGJucEJpdHdpc2VUbztcbkJpZ0ludGVnZXIucHJvdG90eXBlLmNoYW5nZUJpdCA9IGJucENoYW5nZUJpdDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmFkZFRvID0gYm5wQWRkVG87XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5kTXVsdGlwbHkgPSBibnBETXVsdGlwbHk7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5kQWRkT2Zmc2V0ID0gYm5wREFkZE9mZnNldDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5TG93ZXJUbyA9IGJucE11bHRpcGx5TG93ZXJUbztcbkJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbyA9IGJucE11bHRpcGx5VXBwZXJUbztcbkJpZ0ludGVnZXIucHJvdG90eXBlLm1vZEludCA9IGJucE1vZEludDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLm1pbGxlclJhYmluID0gYm5wTWlsbGVyUmFiaW47XG5cbi8vIHB1YmxpY1xuQmlnSW50ZWdlci5wcm90b3R5cGUuY2xvbmUgPSBibkNsb25lO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuaW50VmFsdWUgPSBibkludFZhbHVlO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlID0gYm5CeXRlVmFsdWU7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5zaG9ydFZhbHVlID0gYm5TaG9ydFZhbHVlO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuc2lnbnVtID0gYm5TaWdOdW07XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheSA9IGJuVG9CeXRlQXJyYXk7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5lcXVhbHMgPSBibkVxdWFscztcbkJpZ0ludGVnZXIucHJvdG90eXBlLm1pbiA9IGJuTWluO1xuQmlnSW50ZWdlci5wcm90b3R5cGUubWF4ID0gYm5NYXg7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmQgPSBibkFuZDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLm9yID0gYm5PcjtcbkJpZ0ludGVnZXIucHJvdG90eXBlLnhvciA9IGJuWG9yO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuYW5kTm90ID0gYm5BbmROb3Q7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5ub3QgPSBibk5vdDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdCA9IGJuU2hpZnRMZWZ0O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuc2hpZnRSaWdodCA9IGJuU2hpZnRSaWdodDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmdldExvd2VzdFNldEJpdCA9IGJuR2V0TG93ZXN0U2V0Qml0O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQgPSBibkJpdENvdW50O1xuQmlnSW50ZWdlci5wcm90b3R5cGUudGVzdEJpdCA9IGJuVGVzdEJpdDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLnNldEJpdCA9IGJuU2V0Qml0O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQgPSBibkNsZWFyQml0O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuZmxpcEJpdCA9IGJuRmxpcEJpdDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmFkZCA9IGJuQWRkO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3QgPSBiblN1YnRyYWN0O1xuQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHkgPSBibk11bHRpcGx5O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlID0gYm5EaXZpZGU7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5yZW1haW5kZXIgPSBiblJlbWFpbmRlcjtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmRpdmlkZUFuZFJlbWFpbmRlciA9IGJuRGl2aWRlQW5kUmVtYWluZGVyO1xuQmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93ID0gYm5Nb2RQb3c7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNlID0gYm5Nb2RJbnZlcnNlO1xuQmlnSW50ZWdlci5wcm90b3R5cGUucG93ID0gYm5Qb3c7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5nY2QgPSBibkdDRDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJvYmFibGVQcmltZSA9IGJuSXNQcm9iYWJsZVByaW1lO1xuXG4vLyBKU0JOLXNwZWNpZmljIGV4dGVuc2lvblxuQmlnSW50ZWdlci5wcm90b3R5cGUuc3F1YXJlID0gYm5TcXVhcmU7XG5cbi8vIEV4cG9zZSB0aGUgQmFycmV0dCBmdW5jdGlvblxuQmlnSW50ZWdlci5wcm90b3R5cGUuQmFycmV0dCA9IEJhcnJldHRcblxuLy8gQmlnSW50ZWdlciBpbnRlcmZhY2VzIG5vdCBpbXBsZW1lbnRlZCBpbiBqc2JuOlxuXG4vLyBCaWdJbnRlZ2VyKGludCBzaWdudW0sIGJ5dGVbXSBtYWduaXR1ZGUpXG4vLyBkb3VibGUgZG91YmxlVmFsdWUoKVxuLy8gZmxvYXQgZmxvYXRWYWx1ZSgpXG4vLyBpbnQgaGFzaENvZGUoKVxuLy8gbG9uZyBsb25nVmFsdWUoKVxuLy8gc3RhdGljIEJpZ0ludGVnZXIgdmFsdWVPZihsb25nIHZhbClcblxubW9kdWxlLmV4cG9ydHMgPSBCaWdJbnRlZ2VyO1xuXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgndXRpbCcpLmluc3BlY3Q7XG5cbmZ1bmN0aW9uIGFzc2VydCh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAoIXZhbHVlKVxuICAgIHRocm93IG5ldyBFUlJfSU5URVJOQUxfQVNTRVJUSU9OKG1lc3NhZ2UpO1xufVxuYXNzZXJ0LmZhaWwgPSBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgdGhyb3cgbmV3IEVSUl9JTlRFUk5BTF9BU1NFUlRJT04obWVzc2FnZSk7XG59O1xuXG4vLyBPbmx5IHVzZSB0aGlzIGZvciBpbnRlZ2VycyEgRGVjaW1hbCBudW1iZXJzIGRvIG5vdCB3b3JrIHdpdGggdGhpcyBmdW5jdGlvbi5cbmZ1bmN0aW9uIGFkZE51bWVyaWNhbFNlcGFyYXRvcih2YWwpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgaSA9IHZhbC5sZW5ndGg7XG4gIHZhciBzdGFydCA9IHZhbFswXSA9PT0gJy0nID8gMSA6IDA7XG4gIGZvciAoOyBpID49IHN0YXJ0ICsgNDsgaSAtPSAzKVxuICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWA7XG4gIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaSl9JHtyZXN9YDtcbn1cblxuZnVuY3Rpb24gb25lT2YoZXhwZWN0ZWQsIHRoaW5nKSB7XG4gIGFzc2VydCh0eXBlb2YgdGhpbmcgPT09ICdzdHJpbmcnLCAnYHRoaW5nYCBoYXMgdG8gYmUgb2YgdHlwZSBzdHJpbmcnKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpKSB7XG4gICAgdmFyIGxlbiA9IGV4cGVjdGVkLmxlbmd0aDtcbiAgICBhc3NlcnQobGVuID4gMCwgJ0F0IGxlYXN0IG9uZSBleHBlY3RlZCB2YWx1ZSBuZWVkcyB0byBiZSBzcGVjaWZpZWQnKTtcbiAgICBleHBlY3RlZCA9IGV4cGVjdGVkLm1hcCgoaSkgPT4gU3RyaW5nKGkpKTtcbiAgICBpZiAobGVuID4gMikge1xuICAgICAgcmV0dXJuIGBvbmUgb2YgJHt0aGluZ30gJHtleHBlY3RlZC5zbGljZSgwLCBsZW4gLSAxKS5qb2luKCcsICcpfSwgb3IgYFxuICAgICAgICAgICAgICArIGV4cGVjdGVkW2xlbiAtIDFdO1xuICAgIH0gZWxzZSBpZiAobGVuID09PSAyKSB7XG4gICAgICByZXR1cm4gYG9uZSBvZiAke3RoaW5nfSAke2V4cGVjdGVkWzBdfSBvciAke2V4cGVjdGVkWzFdfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgb2YgJHt0aGluZ30gJHtleHBlY3RlZFswXX1gO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYG9mICR7dGhpbmd9ICR7U3RyaW5nKGV4cGVjdGVkKX1gO1xuICB9XG59XG5cblxuXG5leHBvcnRzLkVSUl9JTlRFUk5BTF9BU1NFUlRJT04gPSBjbGFzcyBFUlJfSU5URVJOQUxfQVNTRVJUSU9OIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIoKTtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBFUlJfSU5URVJOQUxfQVNTRVJUSU9OKTtcblxuICAgIHZhciBzdWZmaXggPSAnVGhpcyBpcyBjYXVzZWQgYnkgZWl0aGVyIGEgYnVnIGluIHNzaDItc3RyZWFtcyAnXG4gICAgICAgICAgICAgICAgICsgJ29yIGluY29ycmVjdCB1c2FnZSBvZiBzc2gyLXN0cmVhbXMgaW50ZXJuYWxzLlxcbidcbiAgICAgICAgICAgICAgICAgKyAnUGxlYXNlIG9wZW4gYW4gaXNzdWUgd2l0aCB0aGlzIHN0YWNrIHRyYWNlIGF0ICdcbiAgICAgICAgICAgICAgICAgKyAnaHR0cHM6Ly9naXRodWIuY29tL21zY2RleC9zc2gyLXN0cmVhbXMvaXNzdWVzXFxuJztcblxuICAgIHRoaXMubWVzc2FnZSA9IChtZXNzYWdlID09PSB1bmRlZmluZWQgPyBzdWZmaXggOiBgJHttZXNzYWdlfVxcbiR7c3VmZml4fWApO1xuICB9XG59O1xuXG52YXIgTUFYXzMyQklUX0lOVCA9IE1hdGgucG93KDIsIDMyKTtcbnZhciBNQVhfMzJCSVRfQklHSU5UID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oJ3JldHVybiAybiAqKiAzMm4nKSgpO1xuICB9IGNhdGNoIChleCkge31cbn0pKCk7XG5leHBvcnRzLkVSUl9PVVRfT0ZfUkFOR0UgPSBjbGFzcyBFUlJfT1VUX09GX1JBTkdFIGV4dGVuZHMgUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHN0ciwgcmFuZ2UsIGlucHV0LCByZXBsYWNlRGVmYXVsdEJvb2xlYW4pIHtcbiAgICBzdXBlcigpO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEVSUl9PVVRfT0ZfUkFOR0UpO1xuXG4gICAgYXNzZXJ0KHJhbmdlLCAnTWlzc2luZyBcInJhbmdlXCIgYXJndW1lbnQnKTtcbiAgICB2YXIgbXNnID0gKHJlcGxhY2VEZWZhdWx0Qm9vbGVhblxuICAgICAgICAgICAgICAgPyBzdHJcbiAgICAgICAgICAgICAgIDogYFRoZSB2YWx1ZSBvZiBcIiR7c3RyfVwiIGlzIG91dCBvZiByYW5nZS5gKTtcbiAgICB2YXIgcmVjZWl2ZWQ7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IE1BWF8zMkJJVF9JTlQpIHtcbiAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnYmlnaW50Jykge1xuICAgICAgcmVjZWl2ZWQgPSBTdHJpbmcoaW5wdXQpO1xuICAgICAgaWYgKGlucHV0ID4gTUFYXzMyQklUX0JJR0lOVCB8fCBpbnB1dCA8IC1NQVhfMzJCSVRfQklHSU5UKVxuICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihyZWNlaXZlZCk7XG4gICAgICByZWNlaXZlZCArPSAnbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY2VpdmVkID0gaW5zcGVjdChpbnB1dCk7XG4gICAgfVxuICAgIG1zZyArPSBgIEl0IG11c3QgYmUgJHtyYW5nZX0uIFJlY2VpdmVkICR7cmVjZWl2ZWR9YDtcblxuICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgfVxufTtcblxuZXhwb3J0cy5FUlJfSU5WQUxJRF9BUkdfVFlQRSA9IGNsYXNzIEVSUl9JTlZBTElEX0FSR19UWVBFIGV4dGVuZHMgVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IobmFtZSwgZXhwZWN0ZWQsIGFjdHVhbCkge1xuICAgIHN1cGVyKCk7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRVJSX0lOVkFMSURfQVJHX1RZUEUpO1xuXG4gICAgYXNzZXJ0KHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJywgYCduYW1lJyBtdXN0IGJlIGEgc3RyaW5nYCk7XG5cbiAgICAvLyBkZXRlcm1pbmVyOiAnbXVzdCBiZScgb3IgJ211c3Qgbm90IGJlJ1xuICAgIHZhciBkZXRlcm1pbmVyO1xuICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnICYmIGV4cGVjdGVkLnN0YXJ0c1dpdGgoJ25vdCAnKSkge1xuICAgICAgZGV0ZXJtaW5lciA9ICdtdXN0IG5vdCBiZSc7XG4gICAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnJlcGxhY2UoL15ub3QgLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXRlcm1pbmVyID0gJ211c3QgYmUnO1xuICAgIH1cblxuICAgIHZhciBtc2c7XG4gICAgaWYgKG5hbWUuZW5kc1dpdGgoJyBhcmd1bWVudCcpKSB7XG4gICAgICAvLyBGb3IgY2FzZXMgbGlrZSAnZmlyc3QgYXJndW1lbnQnXG4gICAgICBtc2cgPSBgVGhlICR7bmFtZX0gJHtkZXRlcm1pbmVyfSAke29uZU9mKGV4cGVjdGVkLCAndHlwZScpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0eXBlID0gKG5hbWUuaW5jbHVkZXMoJy4nKSA/ICdwcm9wZXJ0eScgOiAnYXJndW1lbnQnKTtcbiAgICAgIG1zZyA9IGBUaGUgXCIke25hbWV9XCIgJHt0eXBlfSAke2RldGVybWluZXJ9ICR7b25lT2YoZXhwZWN0ZWQsICd0eXBlJyl9YDtcbiAgICB9XG5cbiAgICBtc2cgKz0gYC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBhY3R1YWx9YDtcblxuICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgfVxufTtcblxuZXhwb3J0cy52YWxpZGF0ZU51bWJlciA9IGZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyKHZhbHVlLCBuYW1lKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKVxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpO1xufTtcblxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRm9sbG93aW5nIGNvZGUgaXMgb25seSBuZWVkZWQgdG8gc3VwcG9ydCBub2RlIHY2LnggLi4uLlxuXG4vLyBVbmRvY3VtZW50ZWQgY2IoKSBBUEksIG5lZWRlZCBmb3IgY29yZSwgbm90IGZvciBwdWJsaWMgQVBJXG5leHBvcnRzLmRlc3Ryb3lJbXBsID0gZnVuY3Rpb24gZGVzdHJveShlcnIsIGNiKSB7XG4gIGNvbnN0IHJlYWRhYmxlRGVzdHJveWVkID0gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJlxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICBjb25zdCB3cml0YWJsZURlc3Ryb3llZCA9IHRoaXMuX3dyaXRhYmxlU3RhdGUgJiZcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcblxuICBpZiAocmVhZGFibGVEZXN0cm95ZWQgfHwgd3JpdGFibGVEZXN0cm95ZWQpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV2Ugc2V0IGRlc3Ryb3llZCB0byB0cnVlIGJlZm9yZSBmaXJpbmcgZXJyb3IgY2FsbGJhY2tzIGluIG9yZGVyXG4gIC8vIHRvIG1ha2UgaXQgcmUtZW50cmFuY2Ugc2FmZSBpbiBjYXNlIGRlc3Ryb3koKSBpcyBjYWxsZWQgd2l0aGluIGNhbGxiYWNrc1xuXG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgLy8gSWYgdGhpcyBpcyBhIGR1cGxleCBzdHJlYW0gbWFyayB0aGUgd3JpdGFibGUgcGFydCBhcyBkZXN0cm95ZWQgYXMgd2VsbFxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHRoaXMuX2Rlc3Ryb3koZXJyIHx8IG51bGwsIChlcnIpID0+IHtcbiAgICBpZiAoIWNiICYmIGVycikge1xuICAgICAgaWYgKCF0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQW5kQ2xvc2VOVCwgdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JBbmRDbG9zZU5ULCB0aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgdGhpcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYikge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgdGhpcyk7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCB0aGlzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZW1pdEVycm9yQW5kQ2xvc2VOVChzZWxmLCBlcnIpIHtcbiAgZW1pdEVycm9yTlQoc2VsZiwgZXJyKTtcbiAgZW1pdENsb3NlTlQoc2VsZik7XG59XG5cbmZ1bmN0aW9uIGVtaXRDbG9zZU5UKHNlbGYpIHtcbiAgaWYgKHNlbGYuX3dyaXRhYmxlU3RhdGUgJiYgIXNlbGYuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlKVxuICAgIHJldHVybjtcbiAgaWYgKHNlbGYuX3JlYWRhYmxlU3RhdGUgJiYgIXNlbGYuX3JlYWRhYmxlU3RhdGUuZW1pdENsb3NlKVxuICAgIHJldHVybjtcbiAgc2VsZi5lbWl0KCdjbG9zZScpO1xufVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsIi8vIFRPRE86ICogQXV0b21hdGljIHJlLWtleSBldmVyeSAoY29uZmlndXJhYmxlKSBuIGJ5dGVzIG9yIGxlbmd0aCBvZiB0aW1lXG4vLyAgICAgICAgIC0gUkZDIHN1Z2dlc3RzIGV2ZXJ5IDFHQiBvZiB0cmFuc21pdHRlZCBkYXRhIG9yIDEgaG91ciwgd2hpY2hldmVyXG4vLyAgICAgICAgICAgY29tZXMgc29vbmVyXG4vLyAgICAgICAqIEZpbHRlciBjb250cm9sIGNvZGVzIGZyb20gc3RyaW5nc1xuLy8gICAgICAgICAoYXMgcGVyIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQyNTEjc2VjdGlvbi05LjIpXG5cbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgndXRpbCcpLmluc3BlY3Q7XG5cbnZhciBTdHJlYW1TZWFyY2ggPSByZXF1aXJlKCdzdHJlYW1zZWFyY2gnKTtcbnZhciBCZXIgPSByZXF1aXJlKCdhc24xJykuQmVyO1xuXG52YXIgcmVhZFVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLnJlYWRVSW50MzJCRTtcbnZhciB3cml0ZVVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLndyaXRlVUludDMyQkU7XG52YXIgY29uc3RzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBpdl9pbmMgPSB1dGlscy5pdl9pbmM7XG52YXIgcmVhZFN0cmluZyA9IHV0aWxzLnJlYWRTdHJpbmc7XG52YXIgcmVhZEludCA9IHV0aWxzLnJlYWRJbnQ7XG52YXIgRFNBU2lnQkVSVG9CYXJlID0gdXRpbHMuRFNBU2lnQkVSVG9CYXJlO1xudmFyIEVDRFNBU2lnQVNOMVRvU1NIID0gdXRpbHMuRUNEU0FTaWdBU04xVG9TU0g7XG52YXIgc2lnU1NIVG9BU04xID0gdXRpbHMuc2lnU1NIVG9BU04xO1xudmFyIHBhcnNlREVSS2V5ID0gcmVxdWlyZSgnLi9rZXlQYXJzZXInKS5wYXJzZURFUktleTtcblxudmFyIENJUEhFUl9JTkZPID0gY29uc3RzLkNJUEhFUl9JTkZPO1xudmFyIEhNQUNfSU5GTyA9IGNvbnN0cy5ITUFDX0lORk87XG52YXIgTUVTU0FHRSA9IGNvbnN0cy5NRVNTQUdFO1xudmFyIERZTkFNSUNfS0VYREhfTUVTU0FHRSA9IGNvbnN0cy5EWU5BTUlDX0tFWERIX01FU1NBR0U7XG52YXIgS0VYREhfTUVTU0FHRSA9IGNvbnN0cy5LRVhESF9NRVNTQUdFO1xudmFyIEFMR09SSVRITVMgPSBjb25zdHMuQUxHT1JJVEhNUztcbnZhciBESVNDT05ORUNUX1JFQVNPTiA9IGNvbnN0cy5ESVNDT05ORUNUX1JFQVNPTjtcbnZhciBDSEFOTkVMX09QRU5fRkFJTFVSRSA9IGNvbnN0cy5DSEFOTkVMX09QRU5fRkFJTFVSRTtcbnZhciBTU0hfVE9fT1BFTlNTTCA9IGNvbnN0cy5TU0hfVE9fT1BFTlNTTDtcbnZhciBURVJNSU5BTF9NT0RFID0gY29uc3RzLlRFUk1JTkFMX01PREU7XG52YXIgU0lHTkFMUyA9IGNvbnN0cy5TSUdOQUxTO1xudmFyIEVERFNBX1NVUFBPUlRFRCA9IGNvbnN0cy5FRERTQV9TVVBQT1JURUQ7XG52YXIgQ1VSVkUyNTUxOV9TVVBQT1JURUQgPSBjb25zdHMuQ1VSVkUyNTUxOV9TVVBQT1JURUQ7XG52YXIgQlVHUyA9IGNvbnN0cy5CVUdTO1xudmFyIEJVR0dZX0lNUExTID0gY29uc3RzLkJVR0dZX0lNUExTO1xudmFyIEJVR0dZX0lNUExTX0xFTiA9IEJVR0dZX0lNUExTLmxlbmd0aDtcbnZhciBNT0RVTEVfVkVSID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbnZhciBJID0gMDtcbnZhciBJTl9JTklUID0gSSsrO1xudmFyIElOX0dSRUVUSU5HID0gSSsrO1xudmFyIElOX0hFQURFUiA9IEkrKztcbnZhciBJTl9QQUNLRVRCRUZPUkUgPSBJKys7XG52YXIgSU5fUEFDS0VUID0gSSsrO1xudmFyIElOX1BBQ0tFVERBVEEgPSBJKys7XG52YXIgSU5fUEFDS0VUREFUQVZFUklGWSA9IEkrKztcbnZhciBJTl9QQUNLRVREQVRBQUZURVIgPSBJKys7XG52YXIgT1VUX0lOSVQgPSBJKys7XG52YXIgT1VUX1JFQURZID0gSSsrO1xudmFyIE9VVF9SRUtFWUlORyA9IEkrKztcbnZhciBNQVhfU0VRTk8gPSA0Mjk0OTY3Mjk1O1xudmFyIE1BWF9QQUNLRVRfU0laRSA9IDM1MDAwO1xudmFyIE1BWF9QQUNLRVRTX1JFS0VZSU5HID0gNTA7XG52YXIgRVhQX1RZUEVfSEVBREVSID0gMDtcbnZhciBFWFBfVFlQRV9MRiA9IDE7XG52YXIgRVhQX1RZUEVfQllURVMgPSAyOyAvLyBXYWl0cyB1bnRpbCBuIGJ5dGVzIGhhdmUgYmVlbiBzZWVuXG52YXIgWl9QQVJUSUFMX0ZMVVNIID0gemxpYi5aX1BBUlRJQUxfRkxVU0g7XG52YXIgWkxJQl9PUFRTID0geyBmbHVzaDogWl9QQVJUSUFMX0ZMVVNIIH07XG5cbnZhciBSRV9OVUxMID0gL1xceDAwL2c7XG5cbnZhciBJREVOVF9QUkVGSVhfQlVGRkVSID0gQnVmZmVyLmZyb20oJ1NTSC0nKTtcbnZhciBFTVBUWV9CVUZGRVIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMCk7XG52YXIgSE1BQ19DT01QVVRFID0gQnVmZmVyLmFsbG9jVW5zYWZlKDkpO1xudmFyIFBJTkdfUEFDS0VUID0gQnVmZmVyLmZyb20oW1xuICBNRVNTQUdFLkdMT0JBTF9SRVFVRVNULFxuICAvLyBcImtlZXBhbGl2ZUBvcGVuc3NoLmNvbVwiXG4gIDAsIDAsIDAsIDIxLFxuICAgIDEwNywgMTAxLCAxMDEsIDExMiwgOTcsIDEwOCwgMTA1LCAxMTgsIDEwMSwgNjQsIDExMSwgMTEyLCAxMDEsIDExMCwgMTE1LFxuICAgIDExNSwgMTA0LCA0NiwgOTksIDExMSwgMTA5LFxuICAvLyBSZXF1ZXN0IGEgcmVwbHlcbiAgMVxuXSk7XG52YXIgTkVXS0VZU19QQUNLRVQgPSBCdWZmZXIuZnJvbShbTUVTU0FHRS5ORVdLRVlTXSk7XG52YXIgVVNFUkFVVEhfU1VDQ0VTU19QQUNLRVQgPSBCdWZmZXIuZnJvbShbTUVTU0FHRS5VU0VSQVVUSF9TVUNDRVNTXSk7XG52YXIgUkVRVUVTVF9TVUNDRVNTX1BBQ0tFVCA9IEJ1ZmZlci5mcm9tKFtNRVNTQUdFLlJFUVVFU1RfU1VDQ0VTU10pO1xudmFyIFJFUVVFU1RfRkFJTFVSRV9QQUNLRVQgPSBCdWZmZXIuZnJvbShbTUVTU0FHRS5SRVFVRVNUX0ZBSUxVUkVdKTtcbnZhciBOT19URVJNSU5BTF9NT0RFU19CVUZGRVIgPSBCdWZmZXIuZnJvbShbVEVSTUlOQUxfTU9ERS5UVFlfT1BfRU5EXSk7XG52YXIgS0VYREhfR0VYX1JFUV9QQUNLRVQgPSBCdWZmZXIuZnJvbShbXG4gIE1FU1NBR0UuS0VYREhfR0VYX1JFUVVFU1QsXG4gIC8vIE1pbmltYWwgc2l6ZSBpbiBiaXRzIG9mIGFuIGFjY2VwdGFibGUgZ3JvdXBcbiAgMCwgMCwgNCwgMCwgLy8gMTAyNCwgbW9kcDJcbiAgLy8gUHJlZmVycmVkIHNpemUgaW4gYml0cyBvZiB0aGUgZ3JvdXAgdGhlIHNlcnZlciB3aWxsIHNlbmRcbiAgMCwgMCwgMTYsIDAsIC8vIDQwOTYsIG1vZHAxNlxuICAvLyBNYXhpbWFsIHNpemUgaW4gYml0cyBvZiBhbiBhY2NlcHRhYmxlIGdyb3VwXG4gIDAsIDAsIDMyLCAwIC8vIDgxOTIsIG1vZHAxOFxuXSk7XG5cbmZ1bmN0aW9uIERFQlVHX05PT1AobXNnKSB7fVxuXG5mdW5jdGlvbiBTU0gyU3RyZWFtKGNmZykge1xuICBpZiAodHlwZW9mIGNmZyAhPT0gJ29iamVjdCcgfHwgY2ZnID09PSBudWxsKVxuICAgIGNmZyA9IHt9O1xuXG4gIFRyYW5zZm9ybVN0cmVhbS5jYWxsKHRoaXMsIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAodHlwZW9mIGNmZy5oaWdoV2F0ZXJNYXJrID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICA/IGNmZy5oaWdoV2F0ZXJNYXJrXG4gICAgICAgICAgICAgICAgICAgIDogMzIgKiAxMDI0KVxuICB9KTtcblxuICB0aGlzLl9uZWVkQ29udGludWUgPSBmYWxzZTtcbiAgdGhpcy5ieXRlc1NlbnQgPSB0aGlzLmJ5dGVzUmVjZWl2ZWQgPSAwO1xuICB0aGlzLmRlYnVnID0gKHR5cGVvZiBjZmcuZGVidWcgPT09ICdmdW5jdGlvbicgPyBjZmcuZGVidWcgOiBERUJVR19OT09QKTtcbiAgdGhpcy5zZXJ2ZXIgPSAoY2ZnLnNlcnZlciA9PT0gdHJ1ZSk7XG4gIHRoaXMubWF4UGFja2V0U2l6ZSA9ICh0eXBlb2YgY2ZnLm1heFBhY2tldFNpemUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNmZy5tYXhQYWNrZXRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICA6IE1BWF9QQUNLRVRfU0laRSk7XG4gIC8vIEJpdG1hcCB0aGF0IGluZGljYXRlcyBhbnkgYnVncyB0aGUgcmVtb3RlIHNpZGUgaGFzLiBUaGlzIGlzIGRldGVybWluZWRcbiAgLy8gYnkgdGhlIHJlcG9ydGVkIHNvZnR3YXJlIHZlcnNpb24uXG4gIHRoaXMucmVtb3RlQnVncyA9IDA7XG5cbiAgaWYgKHRoaXMuc2VydmVyKSB7XG4gICAgLy8gVE9ETzogUmVtb3ZlIHdoZW4gd2Ugc3VwcG9ydCBncm91cCBleGNoYW5nZSBmb3Igc2VydmVyIGltcGxlbWVudGF0aW9uXG4gICAgdGhpcy5yZW1vdGVCdWdzID0gQlVHUy5CQURfREhHRVg7XG4gIH1cblxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGhvc3RLZXlzID0gY2ZnLmhvc3RLZXlzO1xuICBpZiAodGhpcy5zZXJ2ZXIgJiYgKHR5cGVvZiBob3N0S2V5cyAhPT0gJ29iamVjdCcgfHwgaG9zdEtleXMgPT09IG51bGwpKVxuICAgIHRocm93IG5ldyBFcnJvcignaG9zdEtleXMgbXVzdCBiZSBhbiBvYmplY3Qga2V5ZWQgb24gaG9zdCBrZXkgdHlwZScpO1xuXG4gIHRoaXMuY29uZmlnID0ge1xuICAgIC8vIFNlcnZlclxuICAgIGhvc3RLZXlzOiBob3N0S2V5cywgLy8gQWxsIGtleXMgc3VwcG9ydGVkIGJ5IHNlcnZlclxuXG4gICAgLy8gQ2xpZW50L1NlcnZlclxuICAgIGlkZW50OiAnU1NILTIuMC0nXG4gICAgICAgICAgICsgKGNmZy5pZGVudFxuICAgICAgICAgICAgICB8fCAoJ3NzaDJqcycgKyBNT0RVTEVfVkVSICsgKHRoaXMuc2VydmVyID8gJ3NydicgOiAnJykpKSxcbiAgICBhbGdvcml0aG1zOiB7XG4gICAgICBrZXg6IEFMR09SSVRITVMuS0VYLFxuICAgICAga2V4QnVmOiBBTEdPUklUSE1TLktFWF9CVUYsXG4gICAgICBzZXJ2ZXJIb3N0S2V5OiBBTEdPUklUSE1TLlNFUlZFUl9IT1NUX0tFWSxcbiAgICAgIHNlcnZlckhvc3RLZXlCdWY6IEFMR09SSVRITVMuU0VSVkVSX0hPU1RfS0VZX0JVRixcbiAgICAgIGNpcGhlcjogQUxHT1JJVEhNUy5DSVBIRVIsXG4gICAgICBjaXBoZXJCdWY6IEFMR09SSVRITVMuQ0lQSEVSX0JVRixcbiAgICAgIGhtYWM6IEFMR09SSVRITVMuSE1BQyxcbiAgICAgIGhtYWNCdWY6IEFMR09SSVRITVMuSE1BQ19CVUYsXG4gICAgICBjb21wcmVzczogQUxHT1JJVEhNUy5DT01QUkVTUyxcbiAgICAgIGNvbXByZXNzQnVmOiBBTEdPUklUSE1TLkNPTVBSRVNTX0JVRlxuICAgIH1cbiAgfTtcbiAgLy8gUkZDIDQyNTMgc3RhdGVzIHRoZSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgbXVzdCBub3QgY29udGFpbiBOVUxMXG4gIHRoaXMuY29uZmlnLmlkZW50LnJlcGxhY2UoUkVfTlVMTCwgJycpO1xuXG4gIGlmICh0aGlzLmNvbmZpZy5pZGVudC5sZW5ndGggKyAyIC8qIEFjY291bnQgZm9yIFwiXFxyXFxuXCIgKi8gPiAyNTUpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpZGVudCB0b28gbG9uZycpO1xuXG4gIGlmICh0eXBlb2YgY2ZnLmFsZ29yaXRobXMgPT09ICdvYmplY3QnICYmIGNmZy5hbGdvcml0aG1zICE9PSBudWxsKSB7XG4gICAgdmFyIGFsZ29zID0gY2ZnLmFsZ29yaXRobXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb3Mua2V4KSAmJiBhbGdvcy5rZXgubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb25maWcuYWxnb3JpdGhtcy5rZXggPSBhbGdvcy5rZXg7XG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhbGdvcy5rZXhCdWYpKVxuICAgICAgICBhbGdvcy5rZXhCdWYgPSBCdWZmZXIuZnJvbShhbGdvcy5rZXguam9pbignLCcpLCAnYXNjaWknKTtcbiAgICAgIHRoaXMuY29uZmlnLmFsZ29yaXRobXMua2V4QnVmID0gYWxnb3Mua2V4QnVmO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbGdvcy5zZXJ2ZXJIb3N0S2V5KSAmJiBhbGdvcy5zZXJ2ZXJIb3N0S2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29uZmlnLmFsZ29yaXRobXMuc2VydmVySG9zdEtleSA9IGFsZ29zLnNlcnZlckhvc3RLZXk7XG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhbGdvcy5zZXJ2ZXJIb3N0S2V5QnVmKSkge1xuICAgICAgICBhbGdvcy5zZXJ2ZXJIb3N0S2V5QnVmID0gQnVmZmVyLmZyb20oYWxnb3Muc2VydmVySG9zdEtleS5qb2luKCcsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNjaWknKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlnLmFsZ29yaXRobXMuc2VydmVySG9zdEtleUJ1ZiA9IGFsZ29zLnNlcnZlckhvc3RLZXlCdWY7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGFsZ29zLmNpcGhlcikgJiYgYWxnb3MuY2lwaGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29uZmlnLmFsZ29yaXRobXMuY2lwaGVyID0gYWxnb3MuY2lwaGVyO1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYWxnb3MuY2lwaGVyQnVmKSlcbiAgICAgICAgYWxnb3MuY2lwaGVyQnVmID0gQnVmZmVyLmZyb20oYWxnb3MuY2lwaGVyLmpvaW4oJywnKSwgJ2FzY2lpJyk7XG4gICAgICB0aGlzLmNvbmZpZy5hbGdvcml0aG1zLmNpcGhlckJ1ZiA9IGFsZ29zLmNpcGhlckJ1ZjtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb3MuaG1hYykgJiYgYWxnb3MuaG1hYy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbmZpZy5hbGdvcml0aG1zLmhtYWMgPSBhbGdvcy5obWFjO1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYWxnb3MuaG1hY0J1ZikpXG4gICAgICAgIGFsZ29zLmhtYWNCdWYgPSBCdWZmZXIuZnJvbShhbGdvcy5obWFjLmpvaW4oJywnKSwgJ2FzY2lpJyk7XG4gICAgICB0aGlzLmNvbmZpZy5hbGdvcml0aG1zLmhtYWNCdWYgPSBhbGdvcy5obWFjQnVmO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbGdvcy5jb21wcmVzcykgJiYgYWxnb3MuY29tcHJlc3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb25maWcuYWxnb3JpdGhtcy5jb21wcmVzcyA9IGFsZ29zLmNvbXByZXNzO1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYWxnb3MuY29tcHJlc3NCdWYpKVxuICAgICAgICBhbGdvcy5jb21wcmVzc0J1ZiA9IEJ1ZmZlci5mcm9tKGFsZ29zLmNvbXByZXNzLmpvaW4oJywnKSwgJ2FzY2lpJyk7XG4gICAgICB0aGlzLmNvbmZpZy5hbGdvcml0aG1zLmNvbXByZXNzQnVmID0gYWxnb3MuY29tcHJlc3NCdWY7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5yZXNldCh0cnVlKTtcblxuICAvLyBDb21tb24gZXZlbnRzXG4gIHRoaXMub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIC8vIExldCBHQyBjb2xsZWN0IGFueSBCdWZmZXJzIHdlIHdlcmUgcHJldmlvdXNseSBzdG9yaW5nXG4gICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHNlbGYuX3N0YXRlID0gdW5kZWZpbmVkO1xuICAgIHNlbGYucmVzZXQoKTtcbiAgICBzZWxmLl9zdGF0ZS5vdXRnb2luZy5idWZTZXFubyA9IHVuZGVmaW5lZDtcbiAgfSk7XG4gIHRoaXMub24oJ0RJU0NPTk5FQ1QnLCBmdW5jdGlvbihyZWFzb24sIGNvZGUsIGRlc2MsIGxhbmcpIHtcbiAgICBvbkRJU0NPTk5FQ1Qoc2VsZiwgcmVhc29uLCBjb2RlLCBkZXNjLCBsYW5nKTtcbiAgfSk7XG4gIHRoaXMub24oJ0tFWElOSVQnLCBmdW5jdGlvbihpbml0LCBmaXJzdEZvbGxvd3MpIHtcbiAgICBvbktFWElOSVQoc2VsZiwgaW5pdCwgZmlyc3RGb2xsb3dzKTtcbiAgfSk7XG4gIHRoaXMub24oJ05FV0tFWVMnLCBmdW5jdGlvbigpIHsgb25ORVdLRVlTKHNlbGYpOyB9KTtcblxuICBpZiAodGhpcy5zZXJ2ZXIpIHtcbiAgICAvLyBTZXJ2ZXItc3BlY2lmaWMgZXZlbnRzXG4gICAgdGhpcy5vbignS0VYREhfSU5JVCcsIGZ1bmN0aW9uKGUpIHsgb25LRVhESF9JTklUKHNlbGYsIGUpOyB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDbGllbnQtc3BlY2lmaWMgZXZlbnRzXG4gICAgdGhpcy5vbignS0VYREhfUkVQTFknLCBmdW5jdGlvbihpbmZvKSB7IG9uS0VYREhfUkVQTFkoc2VsZiwgaW5mbyk7IH0pXG4gICAgICAgIC5vbignS0VYREhfR0VYX0dST1VQJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uKHByaW1lLCBnZW4pIHsgb25LRVhESF9HRVhfR1JPVVAoc2VsZiwgcHJpbWUsIGdlbik7IH0pO1xuICB9XG5cbiAgaWYgKHRoaXMuc2VydmVyKSB7XG4gICAgLy8gR3JlZXRpbmcgZGlzcGxheWVkIGJlZm9yZSB0aGUgc3NoIGlkZW50aWZpY2F0aW9uIHN0cmluZyBpcyBzZW50LCB0aGlzIGlzXG4gICAgLy8gdXN1YWxseSBpZ25vcmVkIGJ5IG1vc3QgY2xpZW50c1xuICAgIGlmICh0eXBlb2YgY2ZnLmdyZWV0aW5nID09PSAnc3RyaW5nJyAmJiBjZmcuZ3JlZXRpbmcubGVuZ3RoKSB7XG4gICAgICBpZiAoY2ZnLmdyZWV0aW5nLnNsaWNlKC0yKSA9PT0gJ1xcclxcbicpXG4gICAgICAgIHRoaXMucHVzaChjZmcuZ3JlZXRpbmcpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnB1c2goY2ZnLmdyZWV0aW5nICsgJ1xcclxcbicpO1xuICAgIH1cbiAgICAvLyBCYW5uZXIgc2hvd24gYWZ0ZXIgdGhlIGhhbmRzaGFrZSBjb21wbGV0ZXMsIGJ1dCBiZWZvcmUgdXNlclxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIGJlZ2luc1xuICAgIGlmICh0eXBlb2YgY2ZnLmJhbm5lciA9PT0gJ3N0cmluZycgJiYgY2ZnLmJhbm5lci5sZW5ndGgpIHtcbiAgICAgIGlmIChjZmcuYmFubmVyLnNsaWNlKC0yKSA9PT0gJ1xcclxcbicpXG4gICAgICAgIHRoaXMuYmFubmVyID0gY2ZnLmJhbm5lcjtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5iYW5uZXIgPSBjZmcuYmFubmVyICsgJ1xcclxcbic7XG4gICAgfVxuICB9XG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBMb2NhbCBpZGVudDogJyArIGluc3BlY3QodGhpcy5jb25maWcuaWRlbnQpKTtcbiAgdGhpcy5wdXNoKHRoaXMuY29uZmlnLmlkZW50ICsgJ1xcclxcbicpO1xuXG4gIHRoaXMuX3N0YXRlLmluY29taW5nLmV4cGVjdGVkUGFja2V0ID0gJ0tFWElOSVQnO1xufVxuaW5oZXJpdHMoU1NIMlN0cmVhbSwgVHJhbnNmb3JtU3RyZWFtKTtcblxuU1NIMlN0cmVhbS5wcm90b3R5cGUuX19yZWFkID0gVHJhbnNmb3JtU3RyZWFtLnByb3RvdHlwZS5fcmVhZDtcblNTSDJTdHJlYW0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24obikge1xuICBpZiAodGhpcy5fbmVlZENvbnRpbnVlKSB7XG4gICAgdGhpcy5fbmVlZENvbnRpbnVlID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdjb250aW51ZScpO1xuICB9XG4gIHJldHVybiB0aGlzLl9fcmVhZChuKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5fX3B1c2ggPSBUcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlLnB1c2g7XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciByZXQgPSB0aGlzLl9fcHVzaChjaHVuaywgZW5jb2RpbmcpO1xuICB0aGlzLl9uZWVkQ29udGludWUgPSAocmV0ID09PSBmYWxzZSk7XG4gIHJldHVybiByZXQ7XG59O1xuXG5TU0gyU3RyZWFtLnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHRoaXMucmVzZXQoKTtcbiAgdGhpcy5kZWJ1ZygnREVCVUc6IFBhcnNlcjogTWFsZm9ybWVkIHBhY2tldCcpO1xuICBjYWxsYmFjayAmJiBjYWxsYmFjayhuZXcgRXJyb3IoJ01hbGZvcm1lZCBwYWNrZXQnKSk7XG59O1xuXG5TU0gyU3RyZWFtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaywgZGVjb21wKSB7XG4gIHZhciBza2lwRGVjcnlwdCA9IGZhbHNlO1xuICB2YXIgZGVjcnlwdEF1dGhNb2RlID0gZmFsc2U7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuICB2YXIgaW5zdGF0ZSA9IHN0YXRlLmluY29taW5nO1xuICB2YXIgb3V0c3RhdGUgPSBzdGF0ZS5vdXRnb2luZztcbiAgdmFyIGV4cGVjdCA9IGluc3RhdGUuZXhwZWN0O1xuICB2YXIgZGVjcnlwdCA9IGluc3RhdGUuZGVjcnlwdDtcbiAgdmFyIGRlY29tcHJlc3MgPSBpbnN0YXRlLmRlY29tcHJlc3M7XG4gIHZhciBjaGxlbiA9IGNodW5rLmxlbmd0aDtcbiAgdmFyIGNobGVmdCA9IDA7XG4gIHZhciBkZWJ1ZyA9IHRoaXMuZGVidWc7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGkgPSAwO1xuICB2YXIgcCA9IGk7XG4gIHZhciBibG9ja0xlbjtcbiAgdmFyIGJ1ZmZlcjtcbiAgdmFyIGJ1ZjtcbiAgdmFyIHI7XG5cbiAgdGhpcy5ieXRlc1JlY2VpdmVkICs9IGNobGVuO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGV4cGVjdC50eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpID49IGNobGVuKVxuICAgICAgICBicmVhaztcbiAgICAgIGlmIChleHBlY3QudHlwZSA9PT0gRVhQX1RZUEVfQllURVMpIHtcbiAgICAgICAgY2hsZWZ0ID0gKGNobGVuIC0gaSk7XG4gICAgICAgIHZhciBwa3RMZWZ0ID0gKGV4cGVjdC5idWYubGVuZ3RoIC0gZXhwZWN0LnB0cik7XG4gICAgICAgIGlmIChwa3RMZWZ0IDw9IGNobGVmdCkge1xuICAgICAgICAgIGNodW5rLmNvcHkoZXhwZWN0LmJ1ZiwgZXhwZWN0LnB0ciwgaSwgaSArIHBrdExlZnQpO1xuICAgICAgICAgIGkgKz0gcGt0TGVmdDtcbiAgICAgICAgICBidWZmZXIgPSBleHBlY3QuYnVmO1xuICAgICAgICAgIGV4cGVjdC5idWYgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZXhwZWN0LnB0ciA9IDA7XG4gICAgICAgICAgZXhwZWN0LnR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2h1bmsuY29weShleHBlY3QuYnVmLCBleHBlY3QucHRyLCBpKTtcbiAgICAgICAgICBleHBlY3QucHRyICs9IGNobGVmdDtcbiAgICAgICAgICBpICs9IGNobGVmdDtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoZXhwZWN0LnR5cGUgPT09IEVYUF9UWVBFX0hFQURFUikge1xuICAgICAgICBpICs9IGluc3RhdGUuc2VhcmNoLnB1c2goY2h1bmspO1xuICAgICAgICBpZiAoZXhwZWN0LnR5cGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoZXhwZWN0LnR5cGUgPT09IEVYUF9UWVBFX0xGKSB7XG4gICAgICAgIGlmICgrK2V4cGVjdC5wdHIgKyA0IC8qIEFjY291bnQgZm9yIFwiU1NILVwiICovID4gMjU1KSB7XG4gICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBJZGVudGlmaWNhdGlvbiBzdHJpbmcgZXhjZWVkZWQgMjU1IGNoYXJhY3RlcnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdNYXggaWRlbnRpZmljYXRpb24gc3RyaW5nIHNpemUgZXhjZWVkZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNodW5rW2ldID09PSAweDBBKSB7XG4gICAgICAgICAgZXhwZWN0LnR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHAgPCBpKSB7XG4gICAgICAgICAgICBpZiAoZXhwZWN0LmJ1ZiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBleHBlY3QuYnVmID0gY2h1bmsudG9TdHJpbmcoJ2FzY2lpJywgcCwgaSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGV4cGVjdC5idWYgKz0gY2h1bmsudG9TdHJpbmcoJ2FzY2lpJywgcCwgaSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1ZmZlciA9IGV4cGVjdC5idWY7XG4gICAgICAgICAgZXhwZWN0LmJ1ZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICArK2k7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCsraSA9PT0gY2hsZW4gJiYgcCA8IGkpIHtcbiAgICAgICAgICAgIGlmIChleHBlY3QuYnVmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGV4cGVjdC5idWYgPSBjaHVuay50b1N0cmluZygnYXNjaWknLCBwLCBpKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgZXhwZWN0LmJ1ZiArPSBjaHVuay50b1N0cmluZygnYXNjaWknLCBwLCBpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5zdGF0ZS5zdGF0dXMgPT09IElOX0lOSVQpIHtcbiAgICAgIGlmICghdGhpcy5yZWFkYWJsZSlcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICBpZiAodGhpcy5zZXJ2ZXIpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgd2hhdCBzaG91bGQgYmUgdGhlIHN0YXJ0IG9mIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGV4Y2hhbmdlXG4gICAgICAgIGlmICghYnVmZmVyKSB7XG4gICAgICAgICAgZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX0lOSVQgKHdhaXRpbmcgZm9yIGlkZW50aWZpY2F0aW9uIGJlZ2luKScpO1xuICAgICAgICAgIGV4cGVjdERhdGEodGhpcywgRVhQX1RZUEVfQllURVMsIDQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChidWZmZXJbMF0gPT09IDB4NTMgICAgICAgLy8gU1xuICAgICAgICAgICAgICAmJiBidWZmZXJbMV0gPT09IDB4NTMgICAgLy8gU1xuICAgICAgICAgICAgICAmJiBidWZmZXJbMl0gPT09IDB4NDggICAgLy8gSFxuICAgICAgICAgICAgICAmJiBidWZmZXJbM10gPT09IDB4MkQpIHsgLy8gLVxuICAgICAgICAgICAgaW5zdGF0ZS5zdGF0dXMgPSBJTl9HUkVFVElORztcbiAgICAgICAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9JTklUICh3YWl0aW5nIGZvciByZXN0IG9mIGlkZW50aWZpY2F0aW9uKScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogQmFkIGlkZW50aWZpY2F0aW9uIHN0YXJ0Jyk7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdCYWQgaWRlbnRpZmljYXRpb24gc3RhcnQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fSU5JVCcpO1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbnkgYnl0ZXMgdGhhdCBtYXkgY29tZSBiZWZvcmUgdGhlIHByb3RvY29sIHZlcnNpb24gZXhjaGFuZ2VcbiAgICAgICAgdmFyIHNzID0gaW5zdGF0ZS5zZWFyY2ggPSBuZXcgU3RyZWFtU2VhcmNoKElERU5UX1BSRUZJWF9CVUZGRVIpO1xuICAgICAgICBzcy5vbignaW5mbycsIGZ1bmN0aW9uIG9uSW5mbyhtYXRjaGVkLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChpbnN0YXRlLmdyZWV0aW5nID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGluc3RhdGUuZ3JlZXRpbmcgPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgaW5zdGF0ZS5ncmVldGluZyArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgIGV4cGVjdC50eXBlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaW5zdGF0ZS5zZWFyY2gucmVtb3ZlTGlzdGVuZXIoJ2luZm8nLCBvbkluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNzLm1heE1hdGNoZXMgPSAxO1xuICAgICAgICBleHBlY3REYXRhKHRoaXMsIEVYUF9UWVBFX0hFQURFUik7XG4gICAgICAgIGluc3RhdGUuc3RhdHVzID0gSU5fR1JFRVRJTkc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbnN0YXRlLnN0YXR1cyA9PT0gSU5fR1JFRVRJTkcpIHtcbiAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9HUkVFVElORycpO1xuICAgICAgaW5zdGF0ZS5zZWFyY2ggPSB1bmRlZmluZWQ7XG4gICAgICAvLyBSZXRyaWV2ZSB0aGUgaWRlbnRpZmljYXRpb24gYnl0ZXMgYWZ0ZXIgdGhlIFwiU1NILVwiIGhlYWRlclxuICAgICAgcCA9IGk7XG4gICAgICBleHBlY3REYXRhKHRoaXMsIEVYUF9UWVBFX0xGKTtcbiAgICAgIGluc3RhdGUuc3RhdHVzID0gSU5fSEVBREVSO1xuICAgIH0gZWxzZSBpZiAoaW5zdGF0ZS5zdGF0dXMgPT09IElOX0hFQURFUikge1xuICAgICAgZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX0hFQURFUicpO1xuICAgICAgaWYgKGJ1ZmZlci5jaGFyQ29kZUF0KGJ1ZmZlci5sZW5ndGggLSAxKSA9PT0gMTMpXG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgwLCAtMSk7XG4gICAgICB2YXIgaWR4RGFzaCA9IGJ1ZmZlci5pbmRleE9mKCctJyk7XG4gICAgICB2YXIgaWR4U3BhY2UgPSBidWZmZXIuaW5kZXhPZignICcpO1xuICAgICAgdmFyIGhlYWRlciA9IHtcbiAgICAgICAgLy8gUkZDIHNheXMgZ3JlZXRpbmcgU0hPVUxEIGJlIHV0ZjhcbiAgICAgICAgZ3JlZXRpbmc6IGluc3RhdGUuZ3JlZXRpbmcsXG4gICAgICAgIGlkZW50UmF3OiAnU1NILScgKyBidWZmZXIsXG4gICAgICAgIHZlcnNpb25zOiB7XG4gICAgICAgICAgcHJvdG9jb2w6IGJ1ZmZlci5zdWJzdHIoMCwgaWR4RGFzaCksXG4gICAgICAgICAgc29mdHdhcmU6IChpZHhTcGFjZSA9PT0gLTFcbiAgICAgICAgICAgICAgICAgICAgID8gYnVmZmVyLnN1YnN0cmluZyhpZHhEYXNoICsgMSlcbiAgICAgICAgICAgICAgICAgICAgIDogYnVmZmVyLnN1YnN0cmluZyhpZHhEYXNoICsgMSwgaWR4U3BhY2UpKVxuICAgICAgICB9LFxuICAgICAgICBjb21tZW50czogKGlkeFNwYWNlID4gLTEgPyBidWZmZXIuc3Vic3RyaW5nKGlkeFNwYWNlICsgMSkgOiB1bmRlZmluZWQpXG4gICAgICB9O1xuICAgICAgaW5zdGF0ZS5ncmVldGluZyA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGhlYWRlci52ZXJzaW9ucy5wcm90b2NvbCAhPT0gJzEuOTknXG4gICAgICAgICAgJiYgaGVhZGVyLnZlcnNpb25zLnByb3RvY29sICE9PSAnMi4wJykge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBwcm90b2NvbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQ6ICdcbiAgICAgICAgICAgICAgKyBoZWFkZXIudmVyc2lvbnMucHJvdG9jb2wpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdQcm90b2NvbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoaW5zdGF0ZS5zdGF0dXMgPT09IElOX0lOSVQpIHtcbiAgICAgICAgLy8gV2UgcmVzZXQgZnJvbSBhbiBldmVudCBoYW5kbGVyLCBwb3NzaWJseSBkdWUgdG8gYW4gdW5zdXBwb3J0ZWQgU1NIXG4gICAgICAgIC8vIHByb3RvY29sIHZlcnNpb24/XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGlkZW50UmF3ID0gaGVhZGVyLmlkZW50UmF3O1xuICAgICAgdmFyIHNvZnR3YXJlID0gaGVhZGVyLnZlcnNpb25zLnNvZnR3YXJlO1xuICAgICAgdGhpcy5kZWJ1ZygnREVCVUc6IFJlbW90ZSBpZGVudDogJyArIGluc3BlY3QoaWRlbnRSYXcpKTtcbiAgICAgIGZvciAodmFyIGogPSAwLCBydWxlOyBqIDwgQlVHR1lfSU1QTFNfTEVOOyArK2opIHtcbiAgICAgICAgcnVsZSA9IEJVR0dZX0lNUExTW2pdO1xuICAgICAgICBpZiAodHlwZW9mIHJ1bGVbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHNvZnR3YXJlID09PSBydWxlWzBdKVxuICAgICAgICAgICAgdGhpcy5yZW1vdGVCdWdzIHw9IHJ1bGVbMV07XG4gICAgICAgIH0gZWxzZSBpZiAocnVsZVswXS50ZXN0KHNvZnR3YXJlKSlcbiAgICAgICAgICB0aGlzLnJlbW90ZUJ1Z3MgfD0gcnVsZVsxXTtcbiAgICAgIH1cbiAgICAgIGluc3RhdGUuaWRlbnRSYXcgPSBpZGVudFJhdztcbiAgICAgIC8vIEFkanVzdCBieXRlc1JlY2VpdmVkIGZpcnN0IG90aGVyd2lzZSBpdCB3aWxsIGhhdmUgYW4gaW5jb3JyZWN0bHkgbGFyZ2VyXG4gICAgICAvLyB0b3RhbCB3aGVuIHdlIGNhbGwgYmFjayBpbnRvIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgY29tcGxldGluZyBLRVhJTklUXG4gICAgICB0aGlzLmJ5dGVzUmVjZWl2ZWQgLT0gKGNobGVuIC0gaSk7XG4gICAgICBLRVhJTklUKHRoaXMsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoaSA9PT0gY2hsZW4pXG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHNlbGYuX3RyYW5zZm9ybShjaHVuay5zbGljZShpKSwgZW5jb2RpbmcsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgaW5zdGF0ZS5zdGF0dXMgPSBJTl9QQUNLRVRCRUZPUkU7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChpbnN0YXRlLnN0YXR1cyA9PT0gSU5fUEFDS0VUQkVGT1JFKSB7XG4gICAgICBibG9ja0xlbiA9IChkZWNyeXB0Lmluc3RhbmNlID8gZGVjcnlwdC5pbmZvLmJsb2NrTGVuIDogOCk7XG4gICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUQkVGT1JFIChleHBlY3RpbmcgJyArIGJsb2NrTGVuICsgJyknKTtcbiAgICAgIC8vIFdhaXQgZm9yIHRoZSByaWdodCBudW1iZXIgb2YgYnl0ZXMgc28gd2UgY2FuIGRldGVybWluZSB0aGUgaW5jb21pbmdcbiAgICAgIC8vIHBhY2tldCBsZW5ndGhcbiAgICAgIGV4cGVjdERhdGEodGhpcywgRVhQX1RZUEVfQllURVMsIGJsb2NrTGVuLCBkZWNyeXB0LmJ1Zik7XG4gICAgICBpbnN0YXRlLnN0YXR1cyA9IElOX1BBQ0tFVDtcbiAgICB9IGVsc2UgaWYgKGluc3RhdGUuc3RhdHVzID09PSBJTl9QQUNLRVQpIHtcbiAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVQnKTtcbiAgICAgIGlmIChkZWNyeXB0Lmluc3RhbmNlKSB7XG4gICAgICAgIGRlY3J5cHRBdXRoTW9kZSA9IChkZWNyeXB0LmluZm8uYXV0aExlbiA+IDApO1xuICAgICAgICBpZiAoIWRlY3J5cHRBdXRoTW9kZSlcbiAgICAgICAgICBidWZmZXIgPSBkZWNyeXB0RGF0YSh0aGlzLCBidWZmZXIpO1xuICAgICAgICBibG9ja0xlbiA9IGRlY3J5cHQuaW5mby5ibG9ja0xlbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlY3J5cHRBdXRoTW9kZSA9IGZhbHNlO1xuICAgICAgICBibG9ja0xlbiA9IDg7XG4gICAgICB9XG5cbiAgICAgIHIgPSByZWFkSW50KGJ1ZmZlciwgMCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgaWYgKHIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm47XG4gICAgICB2YXIgaG1hY0luZm8gPSBpbnN0YXRlLmhtYWMuaW5mbztcbiAgICAgIHZhciBtYWNTaXplO1xuICAgICAgaWYgKGhtYWNJbmZvKVxuICAgICAgICBtYWNTaXplID0gaG1hY0luZm8uYWN0dWFsTGVuO1xuICAgICAgZWxzZVxuICAgICAgICBtYWNTaXplID0gMDtcbiAgICAgIHZhciBmdWxsUGFja2V0TGVuID0gciArIDQgKyBtYWNTaXplO1xuICAgICAgdmFyIG1heFBheWxvYWRMZW4gPSB0aGlzLm1heFBhY2tldFNpemU7XG4gICAgICBpZiAoZGVjb21wcmVzcy5pbnN0YW5jZSkge1xuICAgICAgICAvLyBBY2NvdW50IGZvciBjb21wcmVzc2VkIHBheWxvYWRzXG4gICAgICAgIC8vIFRoaXMgZm9ybXVsYSBpcyB0YWtlbiBmcm9tIGRyb3BiZWFyIHdoaWNoIGRlcml2ZXMgaXQgZnJvbSB6bGliJ3NcbiAgICAgICAgLy8gZG9jdW1lbnRhdGlvbi4gRXhwbGFuYXRpb24gZnJvbSBkcm9wYmVhcjpcbiAgICAgICAgLyogRm9yIGV4YWN0IGRldGFpbHMgc2VlIGh0dHA6Ly93d3cuemxpYi5uZXQvemxpYl90ZWNoLmh0bWxcbiAgICAgICAgICogNSBieXRlcyBwZXIgMTZrQiBibG9jaywgcGx1cyA2IGJ5dGVzIGZvciB0aGUgc3RyZWFtLlxuICAgICAgICAgKiBXZSBtaWdodCBhbGxvY2F0ZSA1IHVubmVjZXNzYXJ5IGJ5dGVzIGhlcmUgaWYgaXQncyBhblxuICAgICAgICAgKiBleGFjdCBtdWx0aXBsZS4gKi9cbiAgICAgICAgbWF4UGF5bG9hZExlbiArPSAoKCh0aGlzLm1heFBhY2tldFNpemUgLyAxNjM4NCkgKyAxKSAqIDUgKyA2KTtcbiAgICAgIH1cbiAgICAgIGlmIChyID4gbWF4UGF5bG9hZExlblxuICAgICAgICAgIC8vIFRPRE86IENoYW5nZSAxNiB0byBcIk1BWCgxNiwgZGVjcnlwdC5pbmZvLmJsb2NrTGVuKVwiIHdoZW4vaWYgU1NIMlxuICAgICAgICAgIC8vIGFkb3B0cyA1MTItYml0IGNpcGhlcnNcbiAgICAgICAgICB8fCBmdWxsUGFja2V0TGVuIDwgKDE2ICsgbWFjU2l6ZSlcbiAgICAgICAgICB8fCAoKHIgKyAoZGVjcnlwdEF1dGhNb2RlID8gMCA6IDQpKSAlIGJsb2NrTGVuKSAhPT0gMCkge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uUFJPVE9DT0xfRVJST1IpO1xuICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogQmFkIHBhY2tldCBsZW5ndGggKCcgKyBmdWxsUGFja2V0TGVuICsgJyknKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignQmFkIHBhY2tldCBsZW5ndGgnKSk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhdGUucGt0TGVuID0gcjtcbiAgICAgIHZhciByZW1haW5MZW4gPSBpbnN0YXRlLnBrdExlbiArIDQgLSBibG9ja0xlbjtcbiAgICAgIGlmIChkZWNyeXB0QXV0aE1vZGUpIHtcbiAgICAgICAgZGVjcnlwdC5pbnN0YW5jZS5zZXRBQUQoYnVmZmVyLnNsaWNlKDAsIDQpKTtcbiAgICAgICAgZGVidWcoJ0RFQlVHOiBQYXJzZXI6IHBrdExlbjonXG4gICAgICAgICAgICAgICsgaW5zdGF0ZS5wa3RMZW5cbiAgICAgICAgICAgICAgKyAnLHJlbWFpbkxlbjonXG4gICAgICAgICAgICAgICsgcmVtYWluTGVuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhdGUucGFkTGVuID0gYnVmZmVyWzRdO1xuICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogcGt0TGVuOidcbiAgICAgICAgICAgICAgKyBpbnN0YXRlLnBrdExlblxuICAgICAgICAgICAgICArICcscGFkTGVuOidcbiAgICAgICAgICAgICAgKyBpbnN0YXRlLnBhZExlblxuICAgICAgICAgICAgICArICcscmVtYWluTGVuOidcbiAgICAgICAgICAgICAgKyByZW1haW5MZW4pO1xuICAgICAgfVxuICAgICAgaWYgKHJlbWFpbkxlbiA+IDApIHtcbiAgICAgICAgaWYgKGRlY3J5cHRBdXRoTW9kZSlcbiAgICAgICAgICBpbnN0YXRlLnBrdEV4dHJhID0gYnVmZmVyLnNsaWNlKDQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgaW5zdGF0ZS5wa3RFeHRyYSA9IGJ1ZmZlci5zbGljZSg1KTtcbiAgICAgICAgLy8gR3JhYiB0aGUgcmVzdCBvZiB0aGUgcGFja2V0XG4gICAgICAgIGV4cGVjdERhdGEodGhpcywgRVhQX1RZUEVfQllURVMsIHJlbWFpbkxlbik7XG4gICAgICAgIGluc3RhdGUuc3RhdHVzID0gSU5fUEFDS0VUREFUQTtcbiAgICAgIH0gZWxzZSBpZiAocmVtYWluTGVuIDwgMClcbiAgICAgICAgaW5zdGF0ZS5zdGF0dXMgPSBJTl9QQUNLRVRCRUZPUkU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gRW50aXJlIG1lc3NhZ2UgZml0IGludG8gb25lIGJsb2NrXG4gICAgICAgIHNraXBEZWNyeXB0ID0gdHJ1ZTtcbiAgICAgICAgaW5zdGF0ZS5zdGF0dXMgPSBJTl9QQUNLRVREQVRBO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluc3RhdGUuc3RhdHVzID09PSBJTl9QQUNLRVREQVRBKSB7XG4gICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQScpO1xuICAgICAgaWYgKGRlY3J5cHQuaW5zdGFuY2UpIHtcbiAgICAgICAgZGVjcnlwdEF1dGhNb2RlID0gKGRlY3J5cHQuaW5mby5hdXRoTGVuID4gMCk7XG4gICAgICAgIGlmICghc2tpcERlY3J5cHQpIHtcbiAgICAgICAgICBpZiAoIWRlY3J5cHRBdXRoTW9kZSlcbiAgICAgICAgICAgIGJ1ZmZlciA9IGRlY3J5cHREYXRhKHRoaXMsIGJ1ZmZlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2tpcERlY3J5cHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVjcnlwdEF1dGhNb2RlID0gZmFsc2U7XG4gICAgICAgIHNraXBEZWNyeXB0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcGFkU3RhcnQgPSBpbnN0YXRlLnBrdExlbiAtIGluc3RhdGUucGFkTGVuIC0gMTtcbiAgICAgIC8vIFRPRE86IEFsbG9jYXRlIGEgQnVmZmVyIG9uY2UgdGhhdCBpcyBzbGlnaHRseSBsYXJnZXIgdGhhbiBtYXhQYWNrZXRTaXplXG4gICAgICAvLyAodG8gYWNjb21tb2RhdGUgZm9yIHBhY2tldCBsZW5ndGggZmllbGQgYW5kIE1BQykgYW5kIHJlLXVzZSB0aGF0XG4gICAgICAvLyBpbnN0ZWFkXG4gICAgICBpZiAoaW5zdGF0ZS5wa3RFeHRyYSkge1xuICAgICAgICBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoaW5zdGF0ZS5wa3RFeHRyYS5sZW5ndGggKyBidWZmZXIubGVuZ3RoKTtcbiAgICAgICAgaW5zdGF0ZS5wa3RFeHRyYS5jb3B5KGJ1Zik7XG4gICAgICAgIGJ1ZmZlci5jb3B5KGJ1ZiwgaW5zdGF0ZS5wa3RFeHRyYS5sZW5ndGgpO1xuICAgICAgICBpbnN0YXRlLnBheWxvYWQgPSBidWYuc2xpY2UoMCwgcGFkU3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRW50aXJlIG1lc3NhZ2UgZml0IGludG8gb25lIGJsb2NrXG4gICAgICAgIGlmIChkZWNyeXB0QXV0aE1vZGUpXG4gICAgICAgICAgYnVmID0gYnVmZmVyLnNsaWNlKDQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYnVmID0gYnVmZmVyLnNsaWNlKDUpO1xuICAgICAgICBpbnN0YXRlLnBheWxvYWQgPSBidWZmZXIuc2xpY2UoNSwgNSArIHBhZFN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YXRlLmhtYWMuaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFdhaXQgZm9yIGhtYWMgaGFzaFxuICAgICAgICB2YXIgaW5ITUFDU2l6ZSA9IGRlY3J5cHQuaW5mby5hdXRoTGVuIHx8IGluc3RhdGUuaG1hYy5pbmZvLmFjdHVhbExlbjtcbiAgICAgICAgZGVidWcoJ0RFQlVHOiBQYXJzZXI6IEhNQUMgc2l6ZTonICsgaW5ITUFDU2l6ZSk7XG4gICAgICAgIGV4cGVjdERhdGEodGhpcywgRVhQX1RZUEVfQllURVMsIGluSE1BQ1NpemUsIGluc3RhdGUuaG1hYy5idWYpO1xuICAgICAgICBpbnN0YXRlLnN0YXR1cyA9IElOX1BBQ0tFVERBVEFWRVJJRlk7XG4gICAgICAgIGluc3RhdGUucGFja2V0ID0gYnVmO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGluc3RhdGUuc3RhdHVzID0gSU5fUEFDS0VUREFUQUFGVEVSO1xuICAgICAgaW5zdGF0ZS5wa3RFeHRyYSA9IHVuZGVmaW5lZDtcbiAgICAgIGJ1ZiA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKGluc3RhdGUuc3RhdHVzID09PSBJTl9QQUNLRVREQVRBVkVSSUZZKSB7XG4gICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQVZFUklGWScpO1xuICAgICAgLy8gVmVyaWZ5IHBhY2tldCBkYXRhIGludGVncml0eVxuICAgICAgaWYgKGhtYWNWZXJpZnkodGhpcywgYnVmZmVyKSkge1xuICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQVZFUklGWSAoVmFsaWQgSE1BQyknKTtcbiAgICAgICAgaW5zdGF0ZS5zdGF0dXMgPSBJTl9QQUNLRVREQVRBQUZURVI7XG4gICAgICAgIGluc3RhdGUucGFja2V0ID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQVZFUklGWSAoSW52YWxpZCBITUFDKScpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdJbnZhbGlkIEhNQUMnKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbnN0YXRlLnN0YXR1cyA9PT0gSU5fUEFDS0VUREFUQUFGVEVSKSB7XG4gICAgICBpZiAoZGVjb21wcmVzcy5pbnN0YW5jZSkge1xuICAgICAgICBpZiAoIWRlY29tcCkge1xuICAgICAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBEZWNvbXByZXNzaW5nJyk7XG4gICAgICAgICAgZGVjb21wcmVzcy5pbnN0YW5jZS53cml0ZShpbnN0YXRlLnBheWxvYWQpO1xuICAgICAgICAgIHZhciBkZWNvbXBCdWYgPSBbXTtcbiAgICAgICAgICB2YXIgZGVjb21wQnVmTGVuID0gMDtcbiAgICAgICAgICBkZWNvbXByZXNzLmluc3RhbmNlLm9uKCdyZWFkYWJsZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGJ1ZjtcbiAgICAgICAgICAgIHdoaWxlIChidWYgPSB0aGlzLnJlYWQoKSkge1xuICAgICAgICAgICAgICBkZWNvbXBCdWYucHVzaChidWYpO1xuICAgICAgICAgICAgICBkZWNvbXBCdWZMZW4gKz0gYnVmLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5mbHVzaChaX1BBUlRJQUxfRkxVU0gsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZGVjb21wcmVzcy5pbnN0YW5jZS5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoZGVjb21wQnVmLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgaW5zdGF0ZS5wYXlsb2FkID0gZGVjb21wQnVmWzBdO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBpbnN0YXRlLnBheWxvYWQgPSBCdWZmZXIuY29uY2F0KGRlY29tcEJ1ZiwgZGVjb21wQnVmTGVuKTtcbiAgICAgICAgICAgIGRlY29tcEJ1ZiA9IG51bGw7XG4gICAgICAgICAgICB2YXIgbmV4dFNsaWNlO1xuICAgICAgICAgICAgaWYgKGkgPT09IGNobGVuKVxuICAgICAgICAgICAgICBuZXh0U2xpY2UgPSBFTVBUWV9CVUZGRVI7IC8vIEF2b2lkIHNsaWNpbmcgYSB6ZXJvLWxlbmd0aCBidWZmZXJcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbmV4dFNsaWNlID0gY2h1bmsuc2xpY2UoaSk7XG4gICAgICAgICAgICBzZWxmLl90cmFuc2Zvcm0obmV4dFNsaWNlLCBlbmNvZGluZywgY2FsbGJhY2ssIHRydWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgcmVzZXQgdGhpcyBhZnRlciB0aGlzIGZpcnN0IHRpbWUgaW4gdGhlIGxvb3AsXG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCB0cnlpbmcgdG8gaW50ZXJwcmV0IGFzLWlzIGFub3RoZXJcbiAgICAgICAgICAvLyBjb21wcmVzc2VkIHBhY2tldCB0aGF0IGlzIHdpdGhpbiB0aGUgc2FtZSBjaHVua1xuICAgICAgICAgIGRlY29tcCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdCgncGFja2V0Jyk7XG5cbiAgICAgIHZhciBwdHlwZSA9IGluc3RhdGUucGF5bG9hZFswXTtcblxuICAgICAgaWYgKGRlYnVnICE9PSBERUJVR19OT09QKSB7XG4gICAgICAgIHZhciBtc2dQYWNrZXQgPSAnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6ICc7XG4gICAgICAgIHZhciBhdXRoTWV0aG9kID0gc3RhdGUuYXV0aHNRdWV1ZVswXTtcbiAgICAgICAgdmFyIG1zZ1BrdFR5cGUgPSBudWxsO1xuXG4gICAgICAgIGlmIChvdXRzdGF0ZS5zdGF0dXMgPT09IE9VVF9SRUtFWUlOR1xuICAgICAgICAgICAgJiYgIShwdHlwZSA8PSA0IHx8IChwdHlwZSA+PSAyMCAmJiBwdHlwZSA8PSA0OSkpKVxuICAgICAgICAgIG1zZ1BhY2tldCArPSAnKGVucXVldWVkKSAnO1xuXG4gICAgICAgIGlmIChwdHlwZSA9PT0gTUVTU0FHRS5LRVhESF9JTklUKSB7XG4gICAgICAgICAgc3dpdGNoIChzdGF0ZS5rZXgudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgICBtc2dQa3RUeXBlID0gJ0tFWERIX0lOSVQnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwZXgnOlxuICAgICAgICAgICAgICBtc2dQa3RUeXBlID0gJ0tFWERIX0dFWF9SRVFVRVNUJztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBtc2dQa3RUeXBlID0gJ0tFWEVDREhfSU5JVCc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHB0eXBlID09PSBNRVNTQUdFLktFWERIX1JFUExZKSB7XG4gICAgICAgICAgc3dpdGNoIChzdGF0ZS5rZXgudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgICBtc2dQa3RUeXBlID0gJ0tFWERIX1JFUExZJztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncm91cGV4JzpcbiAgICAgICAgICAgICAgbXNnUGt0VHlwZSA9ICdLRVhESF9HRVhfR1JPVVAnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIG1zZ1BrdFR5cGUgPSAnS0VYRUNESF9SRVBMWSc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHB0eXBlID09PSBNRVNTQUdFLktFWERIX0dFWF9HUk9VUCkge1xuICAgICAgICAgIG1zZ1BrdFR5cGUgPSAnS0VYREhfR0VYX0dST1VQJztcbiAgICAgICAgfSBlbHNlIGlmIChwdHlwZSA9PT0gTUVTU0FHRS5LRVhESF9HRVhfUkVQTFkpIHtcbiAgICAgICAgICBtc2dQa3RUeXBlID0gJ0tFWERIX0dFWF9SRVBMWSc7XG4gICAgICAgIH0gZWxzZSBpZiAocHR5cGUgPT09IDYwKSB7XG4gICAgICAgICAgaWYgKGF1dGhNZXRob2QgPT09ICdwYXNzd29yZCcpXG4gICAgICAgICAgICBtc2dQa3RUeXBlID0gJ1VTRVJBVVRIX1BBU1NXRF9DSEFOR0VSRVEnO1xuICAgICAgICAgIGVsc2UgaWYgKGF1dGhNZXRob2QgPT09ICdrZXlib2FyZC1pbnRlcmFjdGl2ZScpXG4gICAgICAgICAgICBtc2dQa3RUeXBlID0gJ1VTRVJBVVRIX0lORk9fUkVRVUVTVCc7XG4gICAgICAgICAgZWxzZSBpZiAoYXV0aE1ldGhvZCA9PT0gJ3B1YmxpY2tleScpXG4gICAgICAgICAgICBtc2dQa3RUeXBlID0gJ1VTRVJBVVRIX1BLX09LJztcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBtc2dQa3RUeXBlID0gJ1VOS05PV04gUEFDS0VUIDYwJztcbiAgICAgICAgfSBlbHNlIGlmIChwdHlwZSA9PT0gNjEpIHtcbiAgICAgICAgICBpZiAoYXV0aE1ldGhvZCA9PT0gJ2tleWJvYXJkLWludGVyYWN0aXZlJylcbiAgICAgICAgICAgIG1zZ1BrdFR5cGUgPSAnVVNFUkFVVEhfSU5GT19SRVNQT05TRSc7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXNnUGt0VHlwZSA9ICdVTktOT1dOIFBBQ0tFVCA2MSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobXNnUGt0VHlwZSA9PT0gbnVsbClcbiAgICAgICAgICBtc2dQa3RUeXBlID0gTUVTU0FHRVtwdHlwZV07XG5cbiAgICAgICAgLy8gRG9uJ3Qgd3JpdGUgZGVidWcgb3V0cHV0IGZvciBtZXNzYWdlcyB3ZSBjdXN0b20gbWFrZSBpbiBwYXJzZVBhY2tldCgpXG4gICAgICAgIGlmIChwdHlwZSAhPT0gTUVTU0FHRS5DSEFOTkVMX09QRU5cbiAgICAgICAgICAgICYmIHB0eXBlICE9PSBNRVNTQUdFLkNIQU5ORUxfUkVRVUVTVFxuICAgICAgICAgICAgJiYgcHR5cGUgIT09IE1FU1NBR0UuQ0hBTk5FTF9TVUNDRVNTXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5DSEFOTkVMX0ZBSUxVUkVcbiAgICAgICAgICAgICYmIHB0eXBlICE9PSBNRVNTQUdFLkNIQU5ORUxfRU9GXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5DSEFOTkVMX0NMT1NFXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5DSEFOTkVMX0RBVEFcbiAgICAgICAgICAgICYmIHB0eXBlICE9PSBNRVNTQUdFLkNIQU5ORUxfRVhURU5ERURfREFUQVxuICAgICAgICAgICAgJiYgcHR5cGUgIT09IE1FU1NBR0UuQ0hBTk5FTF9XSU5ET1dfQURKVVNUXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5ESVNDT05ORUNUXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5VU0VSQVVUSF9SRVFVRVNUXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5HTE9CQUxfUkVRVUVTVClcbiAgICAgICAgICBkZWJ1Zyhtc2dQYWNrZXQgKyBtc2dQa3RUeXBlKTtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBwYXJzZSBwYWNrZXQgaWYgd2UgYXJlIG5vdCByZS1rZXlpbmcgb3IgdGhlIHBhY2tldCBpcyBub3QgYVxuICAgICAgLy8gdHJhbnNwb3J0IGxheWVyIHBhY2tldCBuZWVkZWQgZm9yIHJlLWtleWluZ1xuICAgICAgaWYgKG91dHN0YXRlLnN0YXR1cyA9PT0gT1VUX1JFQURZXG4gICAgICAgICAgfHwgcHR5cGUgPD0gNFxuICAgICAgICAgIHx8IChwdHlwZSA+PSAyMCAmJiBwdHlwZSA8PSA0OSkpIHtcbiAgICAgICAgaWYgKHBhcnNlUGFja2V0KHRoaXMsIGNhbGxiYWNrKSA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmIChpbnN0YXRlLnN0YXR1cyA9PT0gSU5fSU5JVCkge1xuICAgICAgICAgIC8vIFdlIHdlcmUgcmVzZXQgZHVlIHRvIHNvbWUgZXJyb3IvZGlzYWdyZWVtZW50ID9cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob3V0c3RhdGUuc3RhdHVzID09PSBPVVRfUkVLRVlJTkcpIHtcbiAgICAgICAgaWYgKGluc3RhdGUucmVrZXlRdWV1ZS5sZW5ndGggPT09IE1BWF9QQUNLRVRTX1JFS0VZSU5HKSB7XG4gICAgICAgICAgZGVidWcoJ0RFQlVHOiBQYXJzZXI6IE1heCBpbmNvbWluZyByZS1rZXkgcXVldWUgbGVuZ3RoIHJlYWNoZWQnKTtcbiAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uUFJPVE9DT0xfRVJST1IpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgICAgICAgIG5ldyBFcnJvcignSW5jb21pbmcgcmUta2V5IHF1ZXVlIGxlbmd0aCBsaW1pdCByZWFjaGVkJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHJlY29yZCB0aGUgc2VxdWVuY2UgbnVtYmVyIGluIGNhc2Ugd2UgbmVlZCBpdCBsYXRlciBvblxuICAgICAgICAvLyB3aGVuIHdlIGRyYWluIHRoZSBxdWV1ZSAoZS5nLiB1bmtub3duIHBhY2tldClcbiAgICAgICAgdmFyIHNlcW5vID0gaW5zdGF0ZS5zZXFubztcbiAgICAgICAgaWYgKCsraW5zdGF0ZS5zZXFubyA+IE1BWF9TRVFOTylcbiAgICAgICAgICBpbnN0YXRlLnNlcW5vID0gMDtcblxuICAgICAgICBpbnN0YXRlLnJla2V5UXVldWUucHVzaChbc2Vxbm8sIGluc3RhdGUucGF5bG9hZF0pO1xuICAgICAgfVxuXG4gICAgICBpbnN0YXRlLnN0YXR1cyA9IElOX1BBQ0tFVEJFRk9SRTtcbiAgICAgIGluc3RhdGUucGF5bG9hZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGJ1ZmZlciAhPT0gdW5kZWZpbmVkKVxuICAgICAgYnVmZmVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY2FsbGJhY2soKTtcbn07XG5cblNTSDJTdHJlYW0ucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24obm9lbmQpIHtcbiAgaWYgKHRoaXMuX3N0YXRlKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG4gICAgc3RhdGUuaW5jb21pbmcuc3RhdHVzID0gSU5fSU5JVDtcbiAgICBzdGF0ZS5vdXRnb2luZy5zdGF0dXMgPSBPVVRfSU5JVDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHtcbiAgICAgIGF1dGhzUXVldWU6IFtdLFxuICAgICAgaG9zdGtleUZvcm1hdDogdW5kZWZpbmVkLFxuICAgICAga2V4OiB1bmRlZmluZWQsXG5cbiAgICAgIGluY29taW5nOiB7XG4gICAgICAgIHN0YXR1czogSU5fSU5JVCxcbiAgICAgICAgZXhwZWN0ZWRQYWNrZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VhcmNoOiB1bmRlZmluZWQsXG4gICAgICAgIGdyZWV0aW5nOiB1bmRlZmluZWQsXG4gICAgICAgIHNlcW5vOiAwLFxuICAgICAgICBwa3RMZW46IHVuZGVmaW5lZCxcbiAgICAgICAgcGFkTGVuOiB1bmRlZmluZWQsXG4gICAgICAgIHBrdEV4dHJhOiB1bmRlZmluZWQsXG4gICAgICAgIHBheWxvYWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgcGFja2V0OiB1bmRlZmluZWQsXG4gICAgICAgIGtleGluaXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgaWRlbnRSYXc6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVrZXlRdWV1ZTogW10sXG4gICAgICAgIGlnbm9yZU5leHQ6IGZhbHNlLFxuXG4gICAgICAgIGV4cGVjdDoge1xuICAgICAgICAgIGFtb3VudDogdW5kZWZpbmVkLFxuICAgICAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwdHI6IDAsXG4gICAgICAgICAgYnVmOiB1bmRlZmluZWRcbiAgICAgICAgfSxcblxuICAgICAgICBkZWNyeXB0OiB7XG4gICAgICAgICAgaW5zdGFuY2U6IGZhbHNlLFxuICAgICAgICAgIGluZm86IHVuZGVmaW5lZCxcbiAgICAgICAgICBpdjogdW5kZWZpbmVkLFxuICAgICAgICAgIGtleTogdW5kZWZpbmVkLFxuICAgICAgICAgIGJ1ZjogdW5kZWZpbmVkLFxuICAgICAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuXG4gICAgICAgIGhtYWM6IHtcbiAgICAgICAgICBpbmZvOiB1bmRlZmluZWQsXG4gICAgICAgICAga2V5OiB1bmRlZmluZWQsXG4gICAgICAgICAgYnVmOiB1bmRlZmluZWQsXG4gICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgfSxcblxuICAgICAgICBkZWNvbXByZXNzOiB7XG4gICAgICAgICAgaW5zdGFuY2U6IGZhbHNlLFxuICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG91dGdvaW5nOiB7XG4gICAgICAgIHN0YXR1czogT1VUX0lOSVQsXG4gICAgICAgIHNlcW5vOiAwLFxuICAgICAgICBidWZTZXFubzogQnVmZmVyLmFsbG9jVW5zYWZlKDQpLFxuICAgICAgICByZWtleVF1ZXVlOiBbXSxcbiAgICAgICAga2V4aW5pdDogdW5kZWZpbmVkLFxuICAgICAgICBrZXhzZWNyZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgcHVia2V5OiB1bmRlZmluZWQsXG4gICAgICAgIGV4Y2hhbmdlSGFzaDogdW5kZWZpbmVkLFxuICAgICAgICBzZXNzaW9uSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VudE5FV0tFWVM6IGZhbHNlLFxuXG4gICAgICAgIGVuY3J5cHQ6IHtcbiAgICAgICAgICBpbnN0YW5jZTogZmFsc2UsXG4gICAgICAgICAgaW5mbzogdW5kZWZpbmVkLFxuICAgICAgICAgIGl2OiB1bmRlZmluZWQsXG4gICAgICAgICAga2V5OiB1bmRlZmluZWQsXG4gICAgICAgICAgdHlwZTogdW5kZWZpbmVkXG4gICAgICAgIH0sXG5cbiAgICAgICAgaG1hYzoge1xuICAgICAgICAgIGluZm86IHVuZGVmaW5lZCxcbiAgICAgICAgICBrZXk6IHVuZGVmaW5lZCxcbiAgICAgICAgICBidWY6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXByZXNzOiB7XG4gICAgICAgICAgaW5zdGFuY2U6IGZhbHNlLFxuICAgICAgICAgIHR5cGU6IGZhbHNlLFxuICAgICAgICAgIHF1ZXVlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGlmICghbm9lbmQpIHtcbiAgICBpZiAodGhpcy5yZWFkYWJsZSlcbiAgICAgIHRoaXMucHVzaChudWxsKTtcbiAgfVxufTtcblxuLy8gQ29tbW9uIG1ldGhvZHNcbi8vIEdsb2JhbFxuU1NIMlN0cmVhbS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uKHJlYXNvbikge1xuICAvKlxuICAgIGJ5dGUgICAgICBTU0hfTVNHX0RJU0NPTk5FQ1RcbiAgICB1aW50MzIgICAgcmVhc29uIGNvZGVcbiAgICBzdHJpbmcgICAgZGVzY3JpcHRpb24gaW4gSVNPLTEwNjQ2IFVURi04IGVuY29kaW5nXG4gICAgc3RyaW5nICAgIGxhbmd1YWdlIHRhZ1xuICAqL1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKDEgKyA0ICsgNCArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuRElTQ09OTkVDVDtcblxuICBpZiAoRElTQ09OTkVDVF9SRUFTT05bcmVhc29uXSA9PT0gdW5kZWZpbmVkKVxuICAgIHJlYXNvbiA9IERJU0NPTk5FQ1RfUkVBU09OLkJZX0FQUExJQ0FUSU9OO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVhc29uLCAxKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgRElTQ09OTkVDVCAoJ1xuICAgICAgICAgICAgICsgRElTQ09OTkVDVF9SRUFTT05bcmVhc29uXVxuICAgICAgICAgICAgICsgJyknKTtcbiAgc2VuZCh0aGlzLCBidWYpO1xuICB0aGlzLnJlc2V0KCk7XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLnBpbmcgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIHBpbmcgKEdMT0JBTF9SRVFVRVNUOiBrZWVwYWxpdmVAb3BlbnNzaC5jb20pJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIFBJTkdfUEFDS0VUKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5yZWtleSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RhdHVzID0gdGhpcy5fc3RhdGUub3V0Z29pbmcuc3RhdHVzO1xuICBpZiAoc3RhdHVzID09PSBPVVRfUkVLRVlJTkcpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIHJlLWtleSBpcyBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gIGVsc2UgaWYgKHN0YXR1cyAhPT0gT1VUX1JFQURZKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlLWtleSB5ZXQnKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFN0YXJ0aW5nIHJlLWtleScpO1xuICByZXR1cm4gS0VYSU5JVCh0aGlzKTtcbn07XG5cbi8vICdzc2gtY29ubmVjdGlvbicgc2VydmljZS1zcGVjaWZpY1xuU1NIMlN0cmVhbS5wcm90b3R5cGUucmVxdWVzdFN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHZhciBidWY7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIGRhdGEubGVuZ3RoKTtcblxuICAgIGJ1ZlswXSA9IE1FU1NBR0UuUkVRVUVTVF9TVUNDRVNTO1xuXG4gICAgZGF0YS5jb3B5KGJ1ZiwgMSk7XG4gIH0gZWxzZVxuICAgIGJ1ZiA9IFJFUVVFU1RfU1VDQ0VTU19QQUNLRVQ7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFJFUVVFU1RfU1VDQ0VTUycpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLnJlcXVlc3RGYWlsdXJlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBSRVFVRVNUX0ZBSUxVUkUnKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgUkVRVUVTVF9GQUlMVVJFX1BBQ0tFVCk7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbFN1Y2Nlc3MgPSBmdW5jdGlvbihjaGFuKSB7XG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9TVUNDRVNTO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9TVUNDRVNTICgnICsgY2hhbiArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbEZhaWx1cmUgPSBmdW5jdGlvbihjaGFuKSB7XG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9GQUlMVVJFO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9GQUlMVVJFICgnICsgY2hhbiArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbEVPRiA9IGZ1bmN0aW9uKGNoYW4pIHtcbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX0VPRjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2hhbiwgMSk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfRU9GICgnICsgY2hhbiArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbENsb3NlID0gZnVuY3Rpb24oY2hhbikge1xuICAvLyBEb2VzIG5vdCBjb25zdW1lIHdpbmRvdyBzcGFjZVxuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfQ0xPU0U7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX0NMT1NFICgnICsgY2hhbiArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbFdpbmRvd0FkanVzdCA9IGZ1bmN0aW9uKGNoYW4sIGFtb3VudCkge1xuICAvLyBEb2VzIG5vdCBjb25zdW1lIHdpbmRvdyBzcGFjZVxuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgNCk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX1dJTkRPV19BREpVU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBhbW91bnQsIDUpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1dJTkRPV19BREpVU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsICdcbiAgICAgICAgICAgICArIGFtb3VudFxuICAgICAgICAgICAgICsgJyknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5jaGFubmVsRGF0YSA9IGZ1bmN0aW9uKGNoYW4sIGRhdGEpIHtcbiAgdmFyIGRhdGFJc0J1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcihkYXRhKTtcbiAgdmFyIGRhdGFMZW4gPSAoZGF0YUlzQnVmZmVyID8gZGF0YS5sZW5ndGggOiBCdWZmZXIuYnl0ZUxlbmd0aChkYXRhKSk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgZGF0YUxlbik7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX0RBVEE7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBkYXRhTGVuLCA1KTtcbiAgaWYgKGRhdGFJc0J1ZmZlcilcbiAgICBkYXRhLmNvcHkoYnVmLCA5KTtcbiAgZWxzZVxuICAgIGJ1Zi53cml0ZShkYXRhLCA5LCBkYXRhTGVuLCAndXRmOCcpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX0RBVEEgKCcgKyBjaGFuICsgJyknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5jaGFubmVsRXh0RGF0YSA9IGZ1bmN0aW9uKGNoYW4sIGRhdGEsIHR5cGUpIHtcbiAgdmFyIGRhdGFJc0J1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcihkYXRhKTtcbiAgdmFyIGRhdGFMZW4gPSAoZGF0YUlzQnVmZmVyID8gZGF0YS5sZW5ndGggOiBCdWZmZXIuYnl0ZUxlbmd0aChkYXRhKSk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgNCArIGRhdGFMZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9FWFRFTkRFRF9EQVRBO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgdHlwZSwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGRhdGFMZW4sIDkpO1xuICBpZiAoZGF0YUlzQnVmZmVyKVxuICAgIGRhdGEuY29weShidWYsIDEzKTtcbiAgZWxzZVxuICAgIGJ1Zi53cml0ZShkYXRhLCAxMywgZGF0YUxlbiwgJ3V0ZjgnKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9FWFRFTkRFRF9EQVRBICgnICsgY2hhbiArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbE9wZW5Db25maXJtID0gZnVuY3Rpb24ocmVtb3RlQ2hhbiwgbG9jYWxDaGFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFdpbmRvdywgbWF4UGFja2V0KSB7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgNCArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9PUEVOX0NPTkZJUk1BVElPTjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVtb3RlQ2hhbiwgMSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGxvY2FsQ2hhbiwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGluaXRXaW5kb3csIDkpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBtYXhQYWNrZXQsIDEzKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9PUEVOX0NPTkZJUk1BVElPTiAocjonXG4gICAgICAgICAgICAgKyByZW1vdGVDaGFuXG4gICAgICAgICAgICAgKyAnLCBsOidcbiAgICAgICAgICAgICArIGxvY2FsQ2hhblxuICAgICAgICAgICAgICsgJyknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5jaGFubmVsT3BlbkZhaWwgPSBmdW5jdGlvbihyZW1vdGVDaGFuLCByZWFzb24sIGRlc2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nKSB7XG4gIGlmICh0eXBlb2YgZGVzYyAhPT0gJ3N0cmluZycpXG4gICAgZGVzYyA9ICcnO1xuICBpZiAodHlwZW9mIGxhbmcgIT09ICdzdHJpbmcnKVxuICAgIGxhbmcgPSAnJztcblxuICB2YXIgZGVzY0xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGRlc2MpO1xuICB2YXIgbGFuZ0xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGxhbmcpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgNCArIGRlc2NMZW4gKyA0ICsgbGFuZ0xlbik7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX09QRU5fRkFJTFVSRTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVtb3RlQ2hhbiwgMSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHJlYXNvbiwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGRlc2NMZW4sIHApO1xuICBwICs9IDQ7XG4gIGlmIChkZXNjTGVuKSB7XG4gICAgYnVmLndyaXRlKGRlc2MsIHAsIGRlc2NMZW4sICd1dGY4Jyk7XG4gICAgcCArPSBkZXNjTGVuO1xuICB9XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGxhbmdMZW4sIHApO1xuICBpZiAobGFuZ0xlbilcbiAgICBidWYud3JpdGUobGFuZywgcCArPSA0LCBsYW5nTGVuLCAnYXNjaWknKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9PUEVOX0ZBSUxVUkUgKCdcbiAgICAgICAgICAgICArIHJlbW90ZUNoYW5cbiAgICAgICAgICAgICArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuXG4vLyBDbGllbnQtc3BlY2lmaWMgbWV0aG9kc1xuLy8gR2xvYmFsXG5TU0gyU3RyZWFtLnByb3RvdHlwZS5zZXJ2aWNlID0gZnVuY3Rpb24oc3ZjTmFtZSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHN2Y05hbWVMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChzdmNOYW1lKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIHN2Y05hbWVMZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuU0VSVklDRV9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBzdmNOYW1lTGVuLCAxKTtcbiAgYnVmLndyaXRlKHN2Y05hbWUsIDUsIHN2Y05hbWVMZW4sICdhc2NpaScpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBTRVJWSUNFX1JFUVVFU1QgKCcgKyBzdmNOYW1lICsgJyknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG4vLyAnc3NoLWNvbm5lY3Rpb24nIHNlcnZpY2Utc3BlY2lmaWNcblNTSDJTdHJlYW0ucHJvdG90eXBlLnRjcGlwRm9yd2FyZCA9IGZ1bmN0aW9uKGJpbmRBZGRyLCBiaW5kUG9ydCwgd2FudFJlcGx5KSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgYWRkcmxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGJpbmRBZGRyKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDEzICsgMSArIDQgKyBhZGRybGVuICsgNCk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5HTE9CQUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTMsIDEpO1xuICBidWYud3JpdGUoJ3RjcGlwLWZvcndhcmQnLCA1LCAxMywgJ2FzY2lpJyk7XG5cbiAgYnVmWzE4XSA9ICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZCB8fCB3YW50UmVwbHkgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGFkZHJsZW4sIDE5KTtcbiAgYnVmLndyaXRlKGJpbmRBZGRyLCAyMywgYWRkcmxlbiwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJpbmRQb3J0LCAyMyArIGFkZHJsZW4pO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBHTE9CQUxfUkVRVUVTVCAodGNwaXAtZm9yd2FyZCknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5jYW5jZWxUY3BpcEZvcndhcmQgPSBmdW5jdGlvbihiaW5kQWRkciwgYmluZFBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50UmVwbHkpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBhZGRybGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoYmluZEFkZHIpO1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgMjAgKyAxICsgNCArIGFkZHJsZW4gKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkdMT0JBTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAyMCwgMSk7XG4gIGJ1Zi53cml0ZSgnY2FuY2VsLXRjcGlwLWZvcndhcmQnLCA1LCAyMCwgJ2FzY2lpJyk7XG5cbiAgYnVmWzI1XSA9ICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZCB8fCB3YW50UmVwbHkgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGFkZHJsZW4sIDI2KTtcbiAgYnVmLndyaXRlKGJpbmRBZGRyLCAzMCwgYWRkcmxlbiwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJpbmRQb3J0LCAzMCArIGFkZHJsZW4pO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBHTE9CQUxfUkVRVUVTVCAoY2FuY2VsLXRjcGlwLWZvcndhcmQpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUub3BlbnNzaF9zdHJlYW1Mb2NhbEZvcndhcmQgPSBmdW5jdGlvbihzb2NrZXRQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50UmVwbHkpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBwYXRobGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoc29ja2V0UGF0aCk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyAzMSArIDEgKyA0ICsgcGF0aGxlbik7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5HTE9CQUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMzEsIDEpO1xuICBidWYud3JpdGUoJ3N0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20nLCA1LCAzMSwgJ2FzY2lpJyk7XG5cbiAgYnVmWzM2XSA9ICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZCB8fCB3YW50UmVwbHkgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBhdGhsZW4sIDM3KTtcbiAgYnVmLndyaXRlKHNvY2tldFBhdGgsIDQxLCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBHTE9CQUxfUkVRVUVTVCAoc3RyZWFtbG9jYWwtZm9yd2FyZEBvcGVuc3NoLmNvbSknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5vcGVuc3NoX2NhbmNlbFN0cmVhbUxvY2FsRm9yd2FyZCA9IGZ1bmN0aW9uKHNvY2tldFBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHBhdGhsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChzb2NrZXRQYXRoKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDM4ICsgMSArIDQgKyBwYXRobGVuKTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkdMT0JBTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAzOCwgMSk7XG4gIGJ1Zi53cml0ZSgnY2FuY2VsLXN0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20nLCA1LCAzOCwgJ2FzY2lpJyk7XG5cbiAgYnVmWzQzXSA9ICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZCB8fCB3YW50UmVwbHkgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBhdGhsZW4sIDQ0KTtcbiAgYnVmLndyaXRlKHNvY2tldFBhdGgsIDQ4LCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBHTE9CQUxfUkVRVUVTVCAoY2FuY2VsLXN0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20pJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuZGlyZWN0VGNwaXAgPSBmdW5jdGlvbihjaGFuLCBpbml0V2luZG93LCBtYXhQYWNrZXQsIGNmZykge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHNyY2xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNmZy5zcmNJUCk7XG4gIHZhciBkc3RsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChjZmcuZHN0SVApO1xuICB2YXIgcCA9IDI5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgMTIgKyA0ICsgNCArIDQgKyA0ICsgc3JjbGVuICsgNCArIDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGRzdGxlbiArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9PUEVOO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAxMiwgMSk7XG4gIGJ1Zi53cml0ZSgnZGlyZWN0LXRjcGlwJywgNSwgMTIsICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxNyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGluaXRXaW5kb3csIDIxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbWF4UGFja2V0LCAyNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGRzdGxlbiwgcCk7XG4gIGJ1Zi53cml0ZShjZmcuZHN0SVAsIHAgKz0gNCwgZHN0bGVuLCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2ZnLmRzdFBvcnQsIHAgKz0gZHN0bGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgc3JjbGVuLCBwICs9IDQpO1xuICBidWYud3JpdGUoY2ZnLnNyY0lQLCBwICs9IDQsIHNyY2xlbiwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNmZy5zcmNQb3J0LCBwICs9IHNyY2xlbik7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfT1BFTiAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgZGlyZWN0LXRjcGlwKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLm9wZW5zc2hfZGlyZWN0U3RyZWFtTG9jYWwgPSBmdW5jdGlvbihjaGFuLCBpbml0V2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFBhY2tldCwgY2ZnKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNmZy5zb2NrZXRQYXRoKTtcbiAgdmFyIHAgPSA0NztcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDMwICsgNCArIDQgKyA0ICsgNCArIHBhdGhsZW4gKyA0ICsgNCk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX09QRU47XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDMwLCAxKTtcbiAgYnVmLndyaXRlKCdkaXJlY3Qtc3RyZWFtbG9jYWxAb3BlbnNzaC5jb20nLCA1LCAzMCwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDM1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaW5pdFdpbmRvdywgMzkpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBtYXhQYWNrZXQsIDQzKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcGF0aGxlbiwgcCk7XG4gIGJ1Zi53cml0ZShjZmcuc29ja2V0UGF0aCwgcCArPSA0LCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIC8vIHJlc2VydmVkIGZpZWxkcyAoc3RyaW5nIGFuZCB1aW50MzIpXG4gIGJ1Zi5maWxsKDAsIGJ1Zi5sZW5ndGggLSA4KTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9PUEVOICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCBkaXJlY3Qtc3RyZWFtbG9jYWxAb3BlbnNzaC5jb20pJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUub3BlbnNzaF9ub01vcmVTZXNzaW9ucyA9IGZ1bmN0aW9uKHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDI4ICsgMSk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5HTE9CQUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMjgsIDEpO1xuICBidWYud3JpdGUoJ25vLW1vcmUtc2Vzc2lvbnNAb3BlbnNzaC5jb20nLCA1LCAyOCwgJ2FzY2lpJyk7XG5cbiAgYnVmWzMzXSA9ICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZCB8fCB3YW50UmVwbHkgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIEdMT0JBTF9SRVFVRVNUIChuby1tb3JlLXNlc3Npb25zQG9wZW5zc2guY29tKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLnNlc3Npb24gPSBmdW5jdGlvbihjaGFuLCBpbml0V2luZG93LCBtYXhQYWNrZXQpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA3ICsgNCArIDQgKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfT1BFTjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgNywgMSk7XG4gIGJ1Zi53cml0ZSgnc2Vzc2lvbicsIDUsIDcsICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxMik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGluaXRXaW5kb3csIDE2KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbWF4UGFja2V0LCAyMCk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfT1BFTiAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgc2Vzc2lvbiknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS53aW5kb3dDaGFuZ2UgPSBmdW5jdGlvbihjaGFuLCByb3dzLCBjb2xzLCBoZWlnaHQsIHdpZHRoKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICAvLyBEb2VzIG5vdCBjb25zdW1lIHdpbmRvdyBzcGFjZVxuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgNCArIDEzICsgMSArIDQgKyA0ICsgNCArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTMsIDUpO1xuICBidWYud3JpdGUoJ3dpbmRvdy1jaGFuZ2UnLCA5LCAxMywgJ2FzY2lpJyk7XG5cbiAgYnVmWzIyXSA9IDA7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNvbHMsIDIzKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgcm93cywgMjcpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCB3aWR0aCwgMzEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBoZWlnaHQsIDM1KTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9SRVFVRVNUICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCB3aW5kb3ctY2hhbmdlKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLnB0eSA9IGZ1bmN0aW9uKGNoYW4sIHJvd3MsIGNvbHMsIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCB0ZXJtLCBtb2Rlcywgd2FudFJlcGx5KSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICAvLyBEb2VzIG5vdCBjb25zdW1lIHdpbmRvdyBzcGFjZVxuICBpZiAoIXRlcm0gfHwgIXRlcm0ubGVuZ3RoKVxuICAgIHRlcm0gPSAndnQxMDAnO1xuICBpZiAobW9kZXNcbiAgICAgICYmICFCdWZmZXIuaXNCdWZmZXIobW9kZXMpXG4gICAgICAmJiAhQXJyYXkuaXNBcnJheShtb2RlcylcbiAgICAgICYmIHR5cGVvZiBtb2RlcyA9PT0gJ29iamVjdCcpXG4gICAgbW9kZXMgPSBtb2Rlc1RvQnl0ZXMobW9kZXMpO1xuICBpZiAoIW1vZGVzIHx8ICFtb2Rlcy5sZW5ndGgpXG4gICAgbW9kZXMgPSBOT19URVJNSU5BTF9NT0RFU19CVUZGRVI7XG5cbiAgdmFyIHRlcm1MZW4gPSB0ZXJtLmxlbmd0aDtcbiAgdmFyIG1vZGVzTGVuID0gbW9kZXMubGVuZ3RoO1xuICB2YXIgcCA9IDIxO1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgNCArIDcgKyAxICsgNCArIHRlcm1MZW4gKyA0ICsgNCArIDQgKyA0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgbW9kZXNMZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgNywgNSk7XG4gIGJ1Zi53cml0ZSgncHR5LXJlcScsIDksIDcsICdhc2NpaScpO1xuXG4gIGJ1ZlsxNl0gPSAod2FudFJlcGx5ID09PSB1bmRlZmluZWQgfHwgd2FudFJlcGx5ID09PSB0cnVlID8gMSA6IDApO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCB0ZXJtTGVuLCAxNyk7XG4gIGJ1Zi53cml0ZSh0ZXJtLCAyMSwgdGVybUxlbiwgJ3V0ZjgnKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY29scywgcCArPSB0ZXJtTGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgcm93cywgcCArPSA0KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgd2lkdGgsIHAgKz0gNCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGhlaWdodCwgcCArPSA0KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbW9kZXNMZW4sIHAgKz0gNCk7XG4gIHAgKz0gNDtcbiAgaWYgKEFycmF5LmlzQXJyYXkobW9kZXMpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2Rlc0xlbjsgKytpKVxuICAgICAgYnVmW3ArK10gPSBtb2Rlc1tpXTtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIobW9kZXMpKSB7XG4gICAgbW9kZXMuY29weShidWYsIHApO1xuICB9XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfUkVRVUVTVCAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgcHR5LXJlcSknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5zaGVsbCA9IGZ1bmN0aW9uKGNoYW4sIHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyA1ICsgMSk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCA1LCA1KTtcbiAgYnVmLndyaXRlKCdzaGVsbCcsIDksIDUsICdhc2NpaScpO1xuXG4gIGJ1ZlsxNF0gPSAod2FudFJlcGx5ID09PSB1bmRlZmluZWQgfHwgd2FudFJlcGx5ID09PSB0cnVlID8gMSA6IDApO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1JFUVVFU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIHNoZWxsKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbihjaGFuLCBjbWQsIHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGNtZGxlbiA9IChCdWZmZXIuaXNCdWZmZXIoY21kKSA/IGNtZC5sZW5ndGggOiBCdWZmZXIuYnl0ZUxlbmd0aChjbWQpKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyA0ICsgMSArIDQgKyBjbWRsZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgNCwgNSk7XG4gIGJ1Zi53cml0ZSgnZXhlYycsIDksIDQsICdhc2NpaScpO1xuXG4gIGJ1ZlsxM10gPSAod2FudFJlcGx5ID09PSB1bmRlZmluZWQgfHwgd2FudFJlcGx5ID09PSB0cnVlID8gMSA6IDApO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjbWRsZW4sIDE0KTtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjbWQpKVxuICAgIGNtZC5jb3B5KGJ1ZiwgMTgpO1xuICBlbHNlXG4gICAgYnVmLndyaXRlKGNtZCwgMTgsIGNtZGxlbiwgJ3V0ZjgnKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9SRVFVRVNUICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCBleGVjKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0aW9uKGNoYW4sIHNpZ25hbCkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgc2lnbmFsID0gc2lnbmFsLnRvVXBwZXJDYXNlKCk7XG4gIGlmIChzaWduYWwuc2xpY2UoMCwgMykgPT09ICdTSUcnKVxuICAgIHNpZ25hbCA9IHNpZ25hbC5zdWJzdHJpbmcoMyk7XG5cbiAgaWYgKFNJR05BTFMuaW5kZXhPZihzaWduYWwpID09PSAtMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2lnbmFsOiAnICsgc2lnbmFsKTtcblxuICB2YXIgc2lnbmFsTGVuID0gc2lnbmFsLmxlbmd0aDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyA2ICsgMSArIDQgKyBzaWduYWxMZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgNiwgNSk7XG4gIGJ1Zi53cml0ZSgnc2lnbmFsJywgOSwgNiwgJ2FzY2lpJyk7XG5cbiAgYnVmWzE1XSA9IDA7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHNpZ25hbExlbiwgMTYpO1xuICBidWYud3JpdGUoc2lnbmFsLCAyMCwgc2lnbmFsTGVuLCAnYXNjaWknKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9SRVFVRVNUICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCBzaWduYWwpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuZW52ID0gZnVuY3Rpb24oY2hhbiwga2V5LCB2YWwsIHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGtleUxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGtleSk7XG4gIHZhciB2YWxMZW4gPSAoQnVmZmVyLmlzQnVmZmVyKHZhbCkgPyB2YWwubGVuZ3RoIDogQnVmZmVyLmJ5dGVMZW5ndGgodmFsKSk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgMyArIDEgKyA0ICsga2V5TGVuICsgNCArIHZhbExlbik7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAzLCA1KTtcbiAgYnVmLndyaXRlKCdlbnYnLCA5LCAzLCAnYXNjaWknKTtcblxuICBidWZbMTJdID0gKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkIHx8IHdhbnRSZXBseSA9PT0gdHJ1ZSA/IDEgOiAwKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwga2V5TGVuLCAxMyk7XG4gIGJ1Zi53cml0ZShrZXksIDE3LCBrZXlMZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCB2YWxMZW4sIDE3ICsga2V5TGVuKTtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKVxuICAgIHZhbC5jb3B5KGJ1ZiwgMTcgKyBrZXlMZW4gKyA0KTtcbiAgZWxzZVxuICAgIGJ1Zi53cml0ZSh2YWwsIDE3ICsga2V5TGVuICsgNCwgdmFsTGVuLCAndXRmOCcpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1JFUVVFU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIGVudiknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS54MTFGb3J3YXJkID0gZnVuY3Rpb24oY2hhbiwgY2ZnLCB3YW50UmVwbHkpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBwcm90b2xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNmZy5wcm90b2NvbCk7XG4gIHZhciBjb29raWVsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChjZmcuY29va2llKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyA3ICsgMSArIDEgKyA0ICsgcHJvdG9sZW4gKyA0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb29raWVsZW4gKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2hhbiwgMSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDcsIDUpO1xuICBidWYud3JpdGUoJ3gxMS1yZXEnLCA5LCA3LCAnYXNjaWknKTtcblxuICBidWZbMTZdID0gKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkIHx8IHdhbnRSZXBseSA9PT0gdHJ1ZSA/IDEgOiAwKTtcblxuICBidWZbMTddID0gKGNmZy5zaW5nbGUgPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHByb3RvbGVuLCAxOCk7XG4gIHZhciBicCA9IDIyO1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNmZy5wcm90b2NvbCkpXG4gICAgY2ZnLnByb3RvY29sLmNvcHkoYnVmLCBicCk7XG4gIGVsc2VcbiAgICBidWYud3JpdGUoY2ZnLnByb3RvY29sLCBicCwgcHJvdG9sZW4sICd1dGY4Jyk7XG4gIGJwICs9IHByb3RvbGVuO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjb29raWVsZW4sIGJwKTtcbiAgYnAgKz0gNDtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjZmcuY29va2llKSlcbiAgICBjZmcuY29va2llLmNvcHkoYnVmLCBicCk7XG4gIGVsc2VcbiAgICBidWYud3JpdGUoY2ZnLmNvb2tpZSwgYnAsIGNvb2tpZWxlbiwgJ2JpbmFyeScpO1xuICBicCArPSBjb29raWVsZW47XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIChjZmcuc2NyZWVuIHx8IDApLCBicCk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfUkVRVUVTVCAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgeDExLXJlcSknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5zdWJzeXN0ZW0gPSBmdW5jdGlvbihjaGFuLCBuYW1lLCB3YW50UmVwbHkpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBuYW1lTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobmFtZSk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgOSArIDEgKyA0ICsgbmFtZUxlbik7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCA5LCA1KTtcbiAgYnVmLndyaXRlKCdzdWJzeXN0ZW0nLCA5LCA5LCAnYXNjaWknKTtcblxuICBidWZbMThdID0gKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkIHx8IHdhbnRSZXBseSA9PT0gdHJ1ZSA/IDEgOiAwKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbmFtZUxlbiwgMTkpO1xuICBidWYud3JpdGUobmFtZSwgMjMsIG5hbWVMZW4sICdhc2NpaScpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1JFUVVFU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIHN1YnN5c3RlbTogJ1xuICAgICAgICAgICAgICsgbmFtZVxuICAgICAgICAgICAgICsgJyknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5vcGVuc3NoX2FnZW50Rm9yd2FyZCA9IGZ1bmN0aW9uKGNoYW4sIHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyAyNiArIDEpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMjYsIDUpO1xuICBidWYud3JpdGUoJ2F1dGgtYWdlbnQtcmVxQG9wZW5zc2guY29tJywgOSwgMjYsICdhc2NpaScpO1xuXG4gIGJ1ZlszNV0gPSAod2FudFJlcGx5ID09PSB1bmRlZmluZWQgfHwgd2FudFJlcGx5ID09PSB0cnVlID8gMSA6IDApO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1JFUVVFU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIGF1dGgtYWdlbnQtcmVxQG9wZW5zc2guY29tKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcbi8vICdzc2gtdXNlcmF1dGgnIHNlcnZpY2Utc3BlY2lmaWNcblNTSDJTdHJlYW0ucHJvdG90eXBlLmF1dGhQYXNzd29yZCA9IGZ1bmN0aW9uKHVzZXJuYW1lLCBwYXNzd29yZCkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHVzZXJMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aCh1c2VybmFtZSk7XG4gIHZhciBwYXNzTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocGFzc3dvcmQpO1xuICB2YXIgcCA9IDA7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIHVzZXJMZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyAxNCAvLyBcInNzaC1jb25uZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyA4IC8vIFwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIHBhc3NMZW4pO1xuXG4gIGJ1ZltwXSA9IE1FU1NBR0UuVVNFUkFVVEhfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgdXNlckxlbiwgKytwKTtcbiAgYnVmLndyaXRlKHVzZXJuYW1lLCBwICs9IDQsIHVzZXJMZW4sICd1dGY4Jyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDE0LCBwICs9IHVzZXJMZW4pO1xuICBidWYud3JpdGUoJ3NzaC1jb25uZWN0aW9uJywgcCArPSA0LCAxNCwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDgsIHAgKz0gMTQpO1xuICBidWYud3JpdGUoJ3Bhc3N3b3JkJywgcCArPSA0LCA4LCAnYXNjaWknKTtcblxuICBidWZbcCArPSA4XSA9IDA7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBhc3NMZW4sICsrcCk7XG4gIGJ1Zi53cml0ZShwYXNzd29yZCwgcCArPSA0LCBwYXNzTGVuLCAndXRmOCcpO1xuXG4gIHRoaXMuX3N0YXRlLmF1dGhzUXVldWUucHVzaCgncGFzc3dvcmQnKTtcbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1JFUVVFU1QgKHBhc3N3b3JkKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLmF1dGhQSyA9IGZ1bmN0aW9uKHVzZXJuYW1lLCBwdWJLZXksIGNiU2lnbikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3V0c3RhdGUgPSB0aGlzLl9zdGF0ZS5vdXRnb2luZztcbiAgdmFyIGtleVR5cGU7XG5cbiAgaWYgKHR5cGVvZiBwdWJLZXkuZ2V0UHVibGljU1NIID09PSAnZnVuY3Rpb24nKSB7XG4gICAga2V5VHlwZSA9IHB1YktleS50eXBlO1xuICAgIHB1YktleSA9IHB1YktleS5nZXRQdWJsaWNTU0goKTtcbiAgfSBlbHNlIHtcbiAgICBrZXlUeXBlID0gcHViS2V5LnRvU3RyaW5nKCdhc2NpaScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArIHJlYWRVSW50MzJCRShwdWJLZXksIDApKTtcbiAgfVxuXG4gIHZhciB1c2VyTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgodXNlcm5hbWUpO1xuICB2YXIgYWxnb0xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGtleVR5cGUpO1xuICB2YXIgcHViS2V5TGVuID0gcHViS2V5Lmxlbmd0aDtcbiAgdmFyIHNlc0xlbiA9IG91dHN0YXRlLnNlc3Npb25JZC5sZW5ndGg7XG4gIHZhciBwID0gMDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgoY2JTaWduID8gNCArIHNlc0xlbiA6IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgdXNlckxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDE0IC8vIFwic3NoLWNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDkgLy8gXCJwdWJsaWNrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIGFsZ29MZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBwdWJLZXlMZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgaWYgKGNiU2lnbikge1xuICAgIHdyaXRlVUludDMyQkUoYnVmLCBzZXNMZW4sIHApO1xuICAgIG91dHN0YXRlLnNlc3Npb25JZC5jb3B5KGJ1ZiwgcCArPSA0KTtcbiAgICBidWZbcCArPSBzZXNMZW5dID0gTUVTU0FHRS5VU0VSQVVUSF9SRVFVRVNUO1xuICB9IGVsc2Uge1xuICAgIGJ1ZltwXSA9IE1FU1NBR0UuVVNFUkFVVEhfUkVRVUVTVDtcbiAgfVxuXG4gIHdyaXRlVUludDMyQkUoYnVmLCB1c2VyTGVuLCArK3ApO1xuICBidWYud3JpdGUodXNlcm5hbWUsIHAgKz0gNCwgdXNlckxlbiwgJ3V0ZjgnKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTQsIHAgKz0gdXNlckxlbik7XG4gIGJ1Zi53cml0ZSgnc3NoLWNvbm5lY3Rpb24nLCBwICs9IDQsIDE0LCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgOSwgcCArPSAxNCk7XG4gIGJ1Zi53cml0ZSgncHVibGlja2V5JywgcCArPSA0LCA5LCAnYXNjaWknKTtcblxuICBidWZbcCArPSA5XSA9IChjYlNpZ24gPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGFsZ29MZW4sICsrcCk7XG4gIGJ1Zi53cml0ZShrZXlUeXBlLCBwICs9IDQsIGFsZ29MZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwdWJLZXlMZW4sIHAgKz0gYWxnb0xlbik7XG4gIHB1YktleS5jb3B5KGJ1ZiwgcCArPSA0KTtcblxuICBpZiAoIWNiU2lnbikge1xuICAgIHRoaXMuX3N0YXRlLmF1dGhzUXVldWUucHVzaCgncHVibGlja2V5Jyk7XG4gICAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1JFUVVFU1QgKHB1YmxpY2tleSAtLSBjaGVjayknKTtcbiAgICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xuICB9XG5cbiAgY2JTaWduKGJ1ZiwgZnVuY3Rpb24oc2lnbmF0dXJlKSB7XG4gICAgc2lnbmF0dXJlID0gY29udmVydFNpZ25hdHVyZShzaWduYXR1cmUsIGtleVR5cGUpO1xuICAgIGlmIChzaWduYXR1cmUgPT09IGZhbHNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciB3aGlsZSBjb252ZXJ0aW5nIGhhbmRzaGFrZSBzaWduYXR1cmUnKTtcblxuICAgIHZhciBzaWdMZW4gPSBzaWduYXR1cmUubGVuZ3RoO1xuICAgIHZhciBzaWdidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgdXNlckxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgMTQgLy8gXCJzc2gtY29ubmVjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyA5IC8vIFwicHVibGlja2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgYWxnb0xlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgcHViS2V5TGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgLy8gNCArIGFsZ29MZW4gKyA0ICsgc2lnTGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBhbGdvTGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBzaWdMZW4pO1xuXG4gICAgcCA9IDA7XG5cbiAgICBzaWdidWZbcF0gPSBNRVNTQUdFLlVTRVJBVVRIX1JFUVVFU1Q7XG5cbiAgICB3cml0ZVVJbnQzMkJFKHNpZ2J1ZiwgdXNlckxlbiwgKytwKTtcbiAgICBzaWdidWYud3JpdGUodXNlcm5hbWUsIHAgKz0gNCwgdXNlckxlbiwgJ3V0ZjgnKTtcblxuICAgIHdyaXRlVUludDMyQkUoc2lnYnVmLCAxNCwgcCArPSB1c2VyTGVuKTtcbiAgICBzaWdidWYud3JpdGUoJ3NzaC1jb25uZWN0aW9uJywgcCArPSA0LCAxNCwgJ2FzY2lpJyk7XG5cbiAgICB3cml0ZVVJbnQzMkJFKHNpZ2J1ZiwgOSwgcCArPSAxNCk7XG4gICAgc2lnYnVmLndyaXRlKCdwdWJsaWNrZXknLCBwICs9IDQsIDksICdhc2NpaScpO1xuXG4gICAgc2lnYnVmW3AgKz0gOV0gPSAxO1xuXG4gICAgd3JpdGVVSW50MzJCRShzaWdidWYsIGFsZ29MZW4sICsrcCk7XG4gICAgc2lnYnVmLndyaXRlKGtleVR5cGUsIHAgKz0gNCwgYWxnb0xlbiwgJ2FzY2lpJyk7XG5cbiAgICB3cml0ZVVJbnQzMkJFKHNpZ2J1ZiwgcHViS2V5TGVuLCBwICs9IGFsZ29MZW4pO1xuICAgIHB1YktleS5jb3B5KHNpZ2J1ZiwgcCArPSA0KTtcbiAgICB3cml0ZVVJbnQzMkJFKHNpZ2J1ZiwgNCArIGFsZ29MZW4gKyA0ICsgc2lnTGVuLCBwICs9IHB1YktleUxlbik7XG4gICAgd3JpdGVVSW50MzJCRShzaWdidWYsIGFsZ29MZW4sIHAgKz0gNCk7XG4gICAgc2lnYnVmLndyaXRlKGtleVR5cGUsIHAgKz0gNCwgYWxnb0xlbiwgJ2FzY2lpJyk7XG4gICAgd3JpdGVVSW50MzJCRShzaWdidWYsIHNpZ0xlbiwgcCArPSBhbGdvTGVuKTtcbiAgICBzaWduYXR1cmUuY29weShzaWdidWYsIHAgKz0gNCk7XG5cbiAgICAvLyBTZXJ2ZXJzIHNob3VsZG4ndCBzZW5kIHBhY2tldCB0eXBlIDYwIGluIHJlc3BvbnNlIHRvIHNpZ25lZCBwdWJsaWNrZXlcbiAgICAvLyBhdHRlbXB0cywgYnV0IGlmIHRoZXkgZG8sIGludGVycHJldCBhcyB0eXBlIDYwLlxuICAgIHNlbGYuX3N0YXRlLmF1dGhzUXVldWUucHVzaCgncHVibGlja2V5Jyk7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1JFUVVFU1QgKHB1YmxpY2tleSknKTtcbiAgICByZXR1cm4gc2VuZChzZWxmLCBzaWdidWYpO1xuICB9KTtcbiAgcmV0dXJuIHRydWU7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuYXV0aEhvc3RiYXNlZCA9IGZ1bmN0aW9uKHVzZXJuYW1lLCBwdWJLZXksIGhvc3RuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJsb2NhbCwgY2JTaWduKSB7XG4gIC8vIFRPRE86IE1ha2UgRFJZIGJ5IHNoYXJpbmcgc2ltaWxhciBjb2RlIHdpdGggYXV0aFBLKClcblxuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3V0c3RhdGUgPSB0aGlzLl9zdGF0ZS5vdXRnb2luZztcbiAgdmFyIGtleVR5cGU7XG5cbiAgaWYgKHR5cGVvZiBwdWJLZXkuZ2V0UHVibGljU1NIID09PSAnZnVuY3Rpb24nKSB7XG4gICAga2V5VHlwZSA9IHB1YktleS50eXBlO1xuICAgIHB1YktleSA9IHB1YktleS5nZXRQdWJsaWNTU0goKTtcbiAgfSBlbHNlIHtcbiAgICBrZXlUeXBlID0gcHViS2V5LnRvU3RyaW5nKCdhc2NpaScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArIHJlYWRVSW50MzJCRShwdWJLZXksIDApKTtcbiAgfVxuXG4gIHZhciB1c2VyTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgodXNlcm5hbWUpO1xuICB2YXIgYWxnb0xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGtleVR5cGUpO1xuICB2YXIgcHViS2V5TGVuID0gcHViS2V5Lmxlbmd0aDtcbiAgdmFyIHNlc0xlbiA9IG91dHN0YXRlLnNlc3Npb25JZC5sZW5ndGg7XG4gIHZhciBob3N0bmFtZUxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGhvc3RuYW1lKTtcbiAgdmFyIHVzZXJsb2NhbExlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHVzZXJsb2NhbCk7XG4gIHZhciBwID0gMDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgc2VzTGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgdXNlckxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDE0IC8vIFwic3NoLWNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDkgLy8gXCJob3N0YmFzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIGFsZ29MZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBwdWJLZXlMZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBob3N0bmFtZUxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIHVzZXJsb2NhbExlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgc2VzTGVuLCBwKTtcbiAgb3V0c3RhdGUuc2Vzc2lvbklkLmNvcHkoYnVmLCBwICs9IDQpO1xuXG4gIGJ1ZltwICs9IHNlc0xlbl0gPSBNRVNTQUdFLlVTRVJBVVRIX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHVzZXJMZW4sICsrcCk7XG4gIGJ1Zi53cml0ZSh1c2VybmFtZSwgcCArPSA0LCB1c2VyTGVuLCAndXRmOCcpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAxNCwgcCArPSB1c2VyTGVuKTtcbiAgYnVmLndyaXRlKCdzc2gtY29ubmVjdGlvbicsIHAgKz0gNCwgMTQsICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCA5LCBwICs9IDE0KTtcbiAgYnVmLndyaXRlKCdob3N0YmFzZWQnLCBwICs9IDQsIDksICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBhbGdvTGVuLCBwICs9IDkpO1xuICBidWYud3JpdGUoa2V5VHlwZSwgcCArPSA0LCBhbGdvTGVuLCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcHViS2V5TGVuLCBwICs9IGFsZ29MZW4pO1xuICBwdWJLZXkuY29weShidWYsIHAgKz0gNCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGhvc3RuYW1lTGVuLCBwICs9IHB1YktleUxlbik7XG4gIGJ1Zi53cml0ZShob3N0bmFtZSwgcCArPSA0LCBob3N0bmFtZUxlbiwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHVzZXJsb2NhbExlbiwgcCArPSBob3N0bmFtZUxlbik7XG4gIGJ1Zi53cml0ZSh1c2VybG9jYWwsIHAgKz0gNCwgdXNlcmxvY2FsTGVuLCAndXRmOCcpO1xuXG4gIGNiU2lnbihidWYsIGZ1bmN0aW9uKHNpZ25hdHVyZSkge1xuICAgIHNpZ25hdHVyZSA9IGNvbnZlcnRTaWduYXR1cmUoc2lnbmF0dXJlLCBrZXlUeXBlKTtcbiAgICBpZiAoc2lnbmF0dXJlID09PSBmYWxzZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3Igd2hpbGUgY29udmVydGluZyBoYW5kc2hha2Ugc2lnbmF0dXJlJyk7XG5cbiAgICB2YXIgc2lnTGVuID0gc2lnbmF0dXJlLmxlbmd0aDtcbiAgICB2YXIgc2lnYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKChidWYubGVuZ3RoIC0gc2VzTGVuKSArIHNpZ0xlbik7XG5cbiAgICBidWYuY29weShzaWdidWYsIDAsIDQgKyBzZXNMZW4pO1xuICAgIHdyaXRlVUludDMyQkUoc2lnYnVmLCBzaWdMZW4sIHNpZ2J1Zi5sZW5ndGggLSBzaWdMZW4gLSA0KTtcbiAgICBzaWduYXR1cmUuY29weShzaWdidWYsIHNpZ2J1Zi5sZW5ndGggLSBzaWdMZW4pO1xuXG4gICAgc2VsZi5fc3RhdGUuYXV0aHNRdWV1ZS5wdXNoKCdob3N0YmFzZWQnKTtcbiAgICBzZWxmLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgVVNFUkFVVEhfUkVRVUVTVCAoaG9zdGJhc2VkKScpO1xuICAgIHJldHVybiBzZW5kKHNlbGYsIHNpZ2J1Zik7XG4gIH0pO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5hdXRoS2V5Ym9hcmQgPSBmdW5jdGlvbih1c2VybmFtZSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHVzZXJMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aCh1c2VybmFtZSk7XG4gIHZhciBwID0gMDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgdXNlckxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDE0IC8vIFwic3NoLWNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDIwIC8vIFwia2V5Ym9hcmQtaW50ZXJhY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCAvLyBubyBsYW5ndWFnZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgLy8gbm8gc3VibWV0aG9kc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICBidWZbcF0gPSBNRVNTQUdFLlVTRVJBVVRIX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHVzZXJMZW4sICsrcCk7XG4gIGJ1Zi53cml0ZSh1c2VybmFtZSwgcCArPSA0LCB1c2VyTGVuLCAndXRmOCcpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAxNCwgcCArPSB1c2VyTGVuKTtcbiAgYnVmLndyaXRlKCdzc2gtY29ubmVjdGlvbicsIHAgKz0gNCwgMTQsICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAyMCwgcCArPSAxNCk7XG4gIGJ1Zi53cml0ZSgna2V5Ym9hcmQtaW50ZXJhY3RpdmUnLCBwICs9IDQsIDIwLCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMCwgcCArPSAyMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDAsIHAgKz0gNCk7XG5cbiAgdGhpcy5fc3RhdGUuYXV0aHNRdWV1ZS5wdXNoKCdrZXlib2FyZC1pbnRlcmFjdGl2ZScpO1xuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgVVNFUkFVVEhfUkVRVUVTVCAoa2V5Ym9hcmQtaW50ZXJhY3RpdmUpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuYXV0aE5vbmUgPSBmdW5jdGlvbih1c2VybmFtZSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHVzZXJMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aCh1c2VybmFtZSk7XG4gIHZhciBwID0gMDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgdXNlckxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDE0IC8vIFwic3NoLWNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDQgLy8gXCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgYnVmW3BdID0gTUVTU0FHRS5VU0VSQVVUSF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCB1c2VyTGVuLCArK3ApO1xuICBidWYud3JpdGUodXNlcm5hbWUsIHAgKz0gNCwgdXNlckxlbiwgJ3V0ZjgnKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTQsIHAgKz0gdXNlckxlbik7XG4gIGJ1Zi53cml0ZSgnc3NoLWNvbm5lY3Rpb24nLCBwICs9IDQsIDE0LCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgNCwgcCArPSAxNCk7XG4gIGJ1Zi53cml0ZSgnbm9uZScsIHAgKz0gNCwgNCwgJ2FzY2lpJyk7XG5cbiAgdGhpcy5fc3RhdGUuYXV0aHNRdWV1ZS5wdXNoKCdub25lJyk7XG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBVU0VSQVVUSF9SRVFVRVNUIChub25lKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLmF1dGhJbmZvUmVzID0gZnVuY3Rpb24ocmVzcG9uc2VzKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgcmVzcG9uc2VzTGVuID0gMDtcbiAgdmFyIHAgPSAwO1xuICB2YXIgcmVzTGVuO1xuICB2YXIgbGVuO1xuICB2YXIgaTtcblxuICBpZiAocmVzcG9uc2VzKSB7XG4gICAgZm9yIChpID0gMCwgbGVuID0gcmVzcG9uc2VzLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICAgICAgcmVzcG9uc2VzTGVuICs9IDQgKyBCdWZmZXIuYnl0ZUxlbmd0aChyZXNwb25zZXNbaV0pO1xuICB9XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyByZXNwb25zZXNMZW4pO1xuXG4gIGJ1ZltwKytdID0gTUVTU0FHRS5VU0VSQVVUSF9JTkZPX1JFU1BPTlNFO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXNwb25zZXMgPyByZXNwb25zZXMubGVuZ3RoIDogMCwgcCk7XG4gIGlmIChyZXNwb25zZXMpIHtcbiAgICBwICs9IDQ7XG4gICAgZm9yIChpID0gMCwgbGVuID0gcmVzcG9uc2VzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICByZXNMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChyZXNwb25zZXNbaV0pO1xuICAgICAgd3JpdGVVSW50MzJCRShidWYsIHJlc0xlbiwgcCk7XG4gICAgICBwICs9IDQ7XG4gICAgICBpZiAocmVzTGVuKSB7XG4gICAgICAgIGJ1Zi53cml0ZShyZXNwb25zZXNbaV0sIHAsIHJlc0xlbiwgJ3V0ZjgnKTtcbiAgICAgICAgcCArPSByZXNMZW47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX0lORk9fUkVTUE9OU0UnKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5cbi8vIFNlcnZlci1zcGVjaWZpYyBtZXRob2RzXG4vLyBHbG9iYWxcblNTSDJTdHJlYW0ucHJvdG90eXBlLnNlcnZpY2VBY2NlcHQgPSBmdW5jdGlvbihzdmNOYW1lKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgdmFyIHN2Y05hbWVMZW4gPSBzdmNOYW1lLmxlbmd0aDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIHN2Y05hbWVMZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuU0VSVklDRV9BQ0NFUFQ7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHN2Y05hbWVMZW4sIDEpO1xuICBidWYud3JpdGUoc3ZjTmFtZSwgNSwgc3ZjTmFtZUxlbiwgJ2FzY2lpJyk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFNFUlZJQ0VfQUNDRVBUICgnICsgc3ZjTmFtZSArICcpJyk7XG4gIHNlbmQodGhpcywgYnVmKTtcblxuICBpZiAodGhpcy5zZXJ2ZXIgJiYgdGhpcy5iYW5uZXIgJiYgc3ZjTmFtZSA9PT0gJ3NzaC11c2VyYXV0aCcpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfQkFOTkVSXG4gICAgICBzdHJpbmcgICAgbWVzc2FnZSBpbiBJU08tMTA2NDYgVVRGLTggZW5jb2RpbmdcbiAgICAgIHN0cmluZyAgICBsYW5ndWFnZSB0YWdcbiAgICAqL1xuICAgIHZhciBiYW5uZXJMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aCh0aGlzLmJhbm5lcik7XG4gICAgdmFyIHBhY2tldExlbiA9IDEgKyA0ICsgYmFubmVyTGVuICsgNDtcbiAgICB2YXIgcGFja2V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBhY2tldExlbik7XG4gICAgcGFja2V0WzBdID0gTUVTU0FHRS5VU0VSQVVUSF9CQU5ORVI7XG4gICAgd3JpdGVVSW50MzJCRShwYWNrZXQsIGJhbm5lckxlbiwgMSk7XG4gICAgcGFja2V0LndyaXRlKHRoaXMuYmFubmVyLCA1LCBiYW5uZXJMZW4sICd1dGY4Jyk7XG4gICAgcGFja2V0LmZpbGwoMCwgcGFja2V0TGVuIC0gNCk7IC8vIEVtcHR5IGxhbmd1YWdlIHRhZ1xuICAgIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBVU0VSQVVUSF9CQU5ORVInKTtcbiAgICBzZW5kKHRoaXMsIHBhY2tldCk7XG4gICAgdGhpcy5iYW5uZXIgPSB1bmRlZmluZWQ7IC8vIFByZXZlbnQgYmFubmVyIGZyb20gYmVpbmcgZGlzcGxheWVkIGFnYWluXG4gIH1cbn07XG4vLyAnc3NoLWNvbm5lY3Rpb24nIHNlcnZpY2Utc3BlY2lmaWNcblNTSDJTdHJlYW0ucHJvdG90eXBlLmZvcndhcmRlZFRjcGlwID0gZnVuY3Rpb24oY2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcpIHtcbiAgaWYgKCF0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlci1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gY2xpZW50IG1vZGUnKTtcblxuICB2YXIgYm91bmRBZGRyTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2ZnLmJvdW5kQWRkcik7XG4gIHZhciByZW1vdGVBZGRyTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2ZnLnJlbW90ZUFkZHIpO1xuICB2YXIgcCA9IDM2ICsgYm91bmRBZGRyTGVuO1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgMTUgKyA0ICsgNCArIDQgKyA0ICsgYm91bmRBZGRyTGVuICsgNCArIDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJlbW90ZUFkZHJMZW4gKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfT1BFTjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTUsIDEpO1xuICBidWYud3JpdGUoJ2ZvcndhcmRlZC10Y3BpcCcsIDUsIDE1LCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2hhbiwgMjApO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBpbml0V2luZG93LCAyNCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG1heFBhY2tldCwgMjgpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBib3VuZEFkZHJMZW4sIDMyKTtcbiAgYnVmLndyaXRlKGNmZy5ib3VuZEFkZHIsIDM2LCBib3VuZEFkZHJMZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjZmcuYm91bmRQb3J0LCBwKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVtb3RlQWRkckxlbiwgcCArPSA0KTtcbiAgYnVmLndyaXRlKGNmZy5yZW1vdGVBZGRyLCBwICs9IDQsIHJlbW90ZUFkZHJMZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjZmcucmVtb3RlUG9ydCwgcCArPSByZW1vdGVBZGRyTGVuKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9PUEVOICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCBmb3J3YXJkZWQtdGNwaXApJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUueDExID0gZnVuY3Rpb24oY2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0LCBjZmcpIHtcbiAgaWYgKCF0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlci1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gY2xpZW50IG1vZGUnKTtcblxuICB2YXIgYWRkckxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNmZy5vcmlnaW5BZGRyKTtcbiAgdmFyIHAgPSAyNCArIGFkZHJMZW47XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyAzICsgNCArIDQgKyA0ICsgNCArIGFkZHJMZW4gKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfT1BFTjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMywgMSk7XG4gIGJ1Zi53cml0ZSgneDExJywgNSwgMywgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDgpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBpbml0V2luZG93LCAxMik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG1heFBhY2tldCwgMTYpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBhZGRyTGVuLCAyMCk7XG4gIGJ1Zi53cml0ZShjZmcub3JpZ2luQWRkciwgMjQsIGFkZHJMZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjZmcub3JpZ2luUG9ydCwgcCk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfT1BFTiAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgeDExKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLm9wZW5zc2hfYXV0aEFnZW50ID0gZnVuY3Rpb24oY2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0KSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDIyICsgNCArIDQgKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfT1BFTjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMjIsIDEpO1xuICBidWYud3JpdGUoJ2F1dGgtYWdlbnRAb3BlbnNzaC5jb20nLCA1LCAyMiwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDI3KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaW5pdFdpbmRvdywgMzEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBtYXhQYWNrZXQsIDM1KTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9PUEVOICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCBhdXRoLWFnZW50QG9wZW5zc2guY29tKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLm9wZW5zc2hfZm9yd2FyZGVkU3RyZWFtTG9jYWwgPSBmdW5jdGlvbihjaGFuLCBpbml0V2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFBhY2tldCwgY2ZnKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgdmFyIHBhdGhsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChjZmcuc29ja2V0UGF0aCk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyAzMyArIDQgKyA0ICsgNCArIDQgKyBwYXRobGVuICsgNCk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX09QRU47XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDMzLCAxKTtcbiAgYnVmLndyaXRlKCdmb3J3YXJkZWQtc3RyZWFtbG9jYWxAb3BlbnNzaC5jb20nLCA1LCAzMywgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDM4KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaW5pdFdpbmRvdywgNDIpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBtYXhQYWNrZXQsIDQ2KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcGF0aGxlbiwgNTApO1xuICBidWYud3JpdGUoY2ZnLnNvY2tldFBhdGgsIDU0LCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAwLCA1NCArIHBhdGhsZW4pO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX09QRU4gKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIGZvcndhcmRlZC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbSknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5leGl0U3RhdHVzID0gZnVuY3Rpb24oY2hhbiwgc3RhdHVzKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyAxMSArIDEgKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2hhbiwgMSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDExLCA1KTtcbiAgYnVmLndyaXRlKCdleGl0LXN0YXR1cycsIDksIDExLCAnYXNjaWknKTtcblxuICBidWZbMjBdID0gMDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgc3RhdHVzLCAyMSk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfUkVRVUVTVCAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgZXhpdC1zdGF0dXMpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuZXhpdFNpZ25hbCA9IGZ1bmN0aW9uKGNoYW4sIG5hbWUsIGNvcmVEdW1wZWQsIG1zZykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBuYW1lTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobmFtZSk7XG4gIHZhciBtc2dMZW4gPSAobXNnID8gQnVmZmVyLmJ5dGVMZW5ndGgobXNnKSA6IDApO1xuICB2YXIgcCA9IDI1ICsgbmFtZUxlbjtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyAxMSArIDEgKyA0ICsgbmFtZUxlbiArIDEgKyA0ICsgbXNnTGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2hhbiwgMSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDExLCA1KTtcbiAgYnVmLndyaXRlKCdleGl0LXNpZ25hbCcsIDksIDExLCAnYXNjaWknKTtcblxuICBidWZbMjBdID0gMDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbmFtZUxlbiwgMjEpO1xuICBidWYud3JpdGUobmFtZSwgMjUsIG5hbWVMZW4sICd1dGY4Jyk7XG5cbiAgYnVmW3ArK10gPSAoY29yZUR1bXBlZCA/IDEgOiAwKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbXNnTGVuLCBwKTtcbiAgcCArPSA0O1xuICBpZiAobXNnTGVuKSB7XG4gICAgYnVmLndyaXRlKG1zZywgcCwgbXNnTGVuLCAndXRmOCcpO1xuICAgIHAgKz0gbXNnTGVuO1xuICB9XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDAsIHApO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1JFUVVFU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIGV4aXQtc2lnbmFsKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcbi8vICdzc2gtdXNlcmF1dGgnIHNlcnZpY2Utc3BlY2lmaWNcblNTSDJTdHJlYW0ucHJvdG90eXBlLmF1dGhGYWlsdXJlID0gZnVuY3Rpb24oYXV0aE1ldGhvZHMsIGlzUGFydGlhbCkge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIHZhciBhdXRoc1F1ZXVlID0gdGhpcy5fc3RhdGUuYXV0aHNRdWV1ZTtcbiAgaWYgKCFhdXRoc1F1ZXVlLmxlbmd0aClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGF1dGggaW4gcHJvZ3Jlc3MnKTtcblxuICB2YXIgbWV0aG9kcztcblxuICBpZiAodHlwZW9mIGF1dGhNZXRob2RzID09PSAnYm9vbGVhbicpIHtcbiAgICBpc1BhcnRpYWwgPSBhdXRoTWV0aG9kcztcbiAgICBhdXRoTWV0aG9kcyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChhdXRoTWV0aG9kcykge1xuICAgIG1ldGhvZHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXV0aE1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIGlmIChhdXRoTWV0aG9kc1tpXS50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgbWV0aG9kcy5wdXNoKGF1dGhNZXRob2RzW2ldKTtcbiAgICB9XG4gICAgbWV0aG9kcyA9IG1ldGhvZHMuam9pbignLCcpO1xuICB9IGVsc2VcbiAgICBtZXRob2RzID0gJyc7XG5cbiAgdmFyIG1ldGhvZHNMZW4gPSBtZXRob2RzLmxlbmd0aDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIG1ldGhvZHNMZW4gKyAxKTtcblxuICBidWZbMF0gPSBNRVNTQUdFLlVTRVJBVVRIX0ZBSUxVUkU7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG1ldGhvZHNMZW4sIDEpO1xuICBidWYud3JpdGUobWV0aG9kcywgNSwgbWV0aG9kc0xlbiwgJ2FzY2lpJyk7XG5cbiAgYnVmWzUgKyBtZXRob2RzTGVuXSA9IChpc1BhcnRpYWwgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgdGhpcy5fc3RhdGUuYXV0aHNRdWV1ZS5zaGlmdCgpO1xuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgVVNFUkFVVEhfRkFJTFVSRScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLmF1dGhTdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgdmFyIGF1dGhzUXVldWUgPSB0aGlzLl9zdGF0ZS5hdXRoc1F1ZXVlO1xuICBpZiAoIWF1dGhzUXVldWUubGVuZ3RoKVxuICAgIHRocm93IG5ldyBFcnJvcignTm8gYXV0aCBpbiBwcm9ncmVzcycpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuICB2YXIgb3V0c3RhdGUgPSBzdGF0ZS5vdXRnb2luZztcbiAgdmFyIGluc3RhdGUgPSBzdGF0ZS5pbmNvbWluZztcblxuICBzdGF0ZS5hdXRoc1F1ZXVlLnNoaWZ0KCk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1NVQ0NFU1MnKTtcbiAgdmFyIHJldCA9IHNlbmQodGhpcywgVVNFUkFVVEhfU1VDQ0VTU19QQUNLRVQpO1xuXG4gIGlmIChvdXRzdGF0ZS5jb21wcmVzcy50eXBlID09PSAnemxpYkBvcGVuc3NoLmNvbScpIHtcbiAgICBvdXRzdGF0ZS5jb21wcmVzcy5pbnN0YW5jZSA9IHpsaWIuY3JlYXRlRGVmbGF0ZShaTElCX09QVFMpO1xuICAgIG91dHN0YXRlLmNvbXByZXNzLnF1ZXVlID0gW107XG4gIH1cbiAgaWYgKGluc3RhdGUuZGVjb21wcmVzcy50eXBlID09PSAnemxpYkBvcGVuc3NoLmNvbScpXG4gICAgaW5zdGF0ZS5kZWNvbXByZXNzLmluc3RhbmNlID0gemxpYi5jcmVhdGVJbmZsYXRlKFpMSUJfT1BUUyk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5hdXRoUEtPSyA9IGZ1bmN0aW9uKGtleUFsZ28sIGtleSkge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIHZhciBhdXRoc1F1ZXVlID0gdGhpcy5fc3RhdGUuYXV0aHNRdWV1ZTtcbiAgaWYgKCFhdXRoc1F1ZXVlLmxlbmd0aCB8fCBhdXRoc1F1ZXVlWzBdICE9PSAncHVibGlja2V5JylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicHVibGlja2V5XCIgYXV0aCBub3QgaW4gcHJvZ3Jlc3MnKTtcblxuICB2YXIga2V5QWxnb0xlbiA9IGtleUFsZ28ubGVuZ3RoO1xuICB2YXIga2V5TGVuID0ga2V5Lmxlbmd0aDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIGtleUFsZ29MZW4gKyA0ICsga2V5TGVuKTtcblxuICBidWZbMF0gPSBNRVNTQUdFLlVTRVJBVVRIX1BLX09LO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBrZXlBbGdvTGVuLCAxKTtcbiAgYnVmLndyaXRlKGtleUFsZ28sIDUsIGtleUFsZ29MZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBrZXlMZW4sIDUgKyBrZXlBbGdvTGVuKTtcbiAga2V5LmNvcHkoYnVmLCA1ICsga2V5QWxnb0xlbiArIDQpO1xuXG4gIHRoaXMuX3N0YXRlLmF1dGhzUXVldWUuc2hpZnQoKTtcbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1BLX09LJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuYXV0aFBhc3N3ZENoZyA9IGZ1bmN0aW9uKHByb21wdCwgbGFuZykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIHZhciBwcm9tcHRMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChwcm9tcHQpO1xuICB2YXIgbGFuZ0xlbiA9IGxhbmcgPyBsYW5nLmxlbmd0aCA6IDA7XG4gIHZhciBwID0gMDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIHByb21wdExlbiArIDQgKyBsYW5nTGVuKTtcblxuICBidWZbcF0gPSBNRVNTQUdFLlVTRVJBVVRIX1BBU1NXRF9DSEFOR0VSRVE7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHByb21wdExlbiwgKytwKTtcbiAgYnVmLndyaXRlKHByb21wdCwgcCArPSA0LCBwcm9tcHRMZW4sICd1dGY4Jyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGxhbmdMZW4sIHAgKz0gcHJvbXB0TGVuKTtcbiAgaWYgKGxhbmdMZW4pXG4gICAgYnVmLndyaXRlKGxhbmcsIHAgKz0gNCwgbGFuZ0xlbiwgJ2FzY2lpJyk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1BBU1NXRF9DSEFOR0VSRVEnKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5hdXRoSW5mb1JlcSA9IGZ1bmN0aW9uKG5hbWUsIGluc3RydWN0aW9ucywgcHJvbXB0cykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIHZhciBwcm9tcHRzTGVuID0gMDtcbiAgdmFyIG5hbWVMZW4gPSBuYW1lID8gQnVmZmVyLmJ5dGVMZW5ndGgobmFtZSkgOiAwO1xuICB2YXIgaW5zdHJMZW4gPSBpbnN0cnVjdGlvbnMgPyBCdWZmZXIuYnl0ZUxlbmd0aChpbnN0cnVjdGlvbnMpIDogMDtcbiAgdmFyIHAgPSAwO1xuICB2YXIgcHJvbXB0TGVuO1xuICB2YXIgcHJvbXB0O1xuICB2YXIgbGVuO1xuICB2YXIgaTtcblxuICBmb3IgKGkgPSAwLCBsZW4gPSBwcm9tcHRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICAgIHByb21wdHNMZW4gKz0gNCArIEJ1ZmZlci5ieXRlTGVuZ3RoKHByb21wdHNbaV0ucHJvbXB0KSArIDE7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyBuYW1lTGVuICsgNCArIGluc3RyTGVuICsgNCArIDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHByb21wdHNMZW4pO1xuXG4gIGJ1ZltwKytdID0gTUVTU0FHRS5VU0VSQVVUSF9JTkZPX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG5hbWVMZW4sIHApO1xuICBwICs9IDQ7XG4gIGlmIChuYW1lKSB7XG4gICAgYnVmLndyaXRlKG5hbWUsIHAsIG5hbWVMZW4sICd1dGY4Jyk7XG4gICAgcCArPSBuYW1lTGVuO1xuICB9XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGluc3RyTGVuLCBwKTtcbiAgcCArPSA0O1xuICBpZiAoaW5zdHJ1Y3Rpb25zKSB7XG4gICAgYnVmLndyaXRlKGluc3RydWN0aW9ucywgcCwgaW5zdHJMZW4sICd1dGY4Jyk7XG4gICAgcCArPSBpbnN0ckxlbjtcbiAgfVxuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAwLCBwKTtcbiAgcCArPSA0O1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwcm9tcHRzLmxlbmd0aCwgcCk7XG4gIHAgKz0gNDtcbiAgZm9yIChpID0gMCwgbGVuID0gcHJvbXB0cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHByb21wdCA9IHByb21wdHNbaV07XG4gICAgcHJvbXB0TGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocHJvbXB0LnByb21wdCk7XG4gICAgd3JpdGVVSW50MzJCRShidWYsIHByb21wdExlbiwgcCk7XG4gICAgcCArPSA0O1xuICAgIGlmIChwcm9tcHRMZW4pIHtcbiAgICAgIGJ1Zi53cml0ZShwcm9tcHQucHJvbXB0LCBwLCBwcm9tcHRMZW4sICd1dGY4Jyk7XG4gICAgICBwICs9IHByb21wdExlbjtcbiAgICB9XG4gICAgYnVmW3ArK10gPSAocHJvbXB0LmVjaG8gPyAxIDogMCk7XG4gIH1cblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgVVNFUkFVVEhfSU5GT19SRVFVRVNUJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuXG4vLyBTaGFyZWQgaW5jb21pbmcvcGFyc2VyIGZ1bmN0aW9uc1xuZnVuY3Rpb24gb25ESVNDT05ORUNUKHNlbGYsIHJlYXNvbiwgY29kZSwgZGVzYywgbGFuZykgeyAvLyBDbGllbnQvU2VydmVyXG4gIGlmIChjb2RlICE9PSBESVNDT05ORUNUX1JFQVNPTi5CWV9BUFBMSUNBVElPTikge1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoZGVzYyB8fCByZWFzb24pO1xuICAgIGVyci5jb2RlID0gY29kZTtcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuICBzZWxmLnJlc2V0KCk7XG59XG5cbmZ1bmN0aW9uIG9uS0VYSU5JVChzZWxmLCBpbml0LCBmaXJzdEZvbGxvd3MpIHsgLy8gQ2xpZW50L1NlcnZlclxuICB2YXIgc3RhdGUgPSBzZWxmLl9zdGF0ZTtcbiAgdmFyIG91dHN0YXRlID0gc3RhdGUub3V0Z29pbmc7XG5cbiAgaWYgKG91dHN0YXRlLnN0YXR1cyA9PT0gT1VUX1JFQURZKSB7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IFJlY2VpdmVkIHJlLWtleSByZXF1ZXN0Jyk7XG4gICAgb3V0c3RhdGUuc3RhdHVzID0gT1VUX1JFS0VZSU5HO1xuICAgIG91dHN0YXRlLmtleGluaXQgPSB1bmRlZmluZWQ7XG4gICAgS0VYSU5JVChzZWxmLCBjaGVjayk7XG4gIH0gZWxzZSB7XG4gICAgY2hlY2soKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrKCkge1xuICAgIGlmIChjaGVja19LRVhJTklUKHNlbGYsIGluaXQsIGZpcnN0Rm9sbG93cykgPT09IHRydWUpIHtcbiAgICAgIGlmICghc2VsZi5zZXJ2ZXIpIHtcbiAgICAgICAgaWYgKHN0YXRlLmtleC50eXBlID09PSAnZ3JvdXBleCcpXG4gICAgICAgICAgS0VYREhfR0VYX1JFUShzZWxmKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIEtFWERIX0lOSVQoc2VsZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5pbmNvbWluZy5leHBlY3RlZFBhY2tldCA9IHN0YXRlLmtleC5wa3RJbml0O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja19LRVhJTklUKHNlbGYsIGluaXQsIGZpcnN0Rm9sbG93cykge1xuICB2YXIgc3RhdGUgPSBzZWxmLl9zdGF0ZTtcbiAgdmFyIGluc3RhdGUgPSBzdGF0ZS5pbmNvbWluZztcbiAgdmFyIG91dHN0YXRlID0gc3RhdGUub3V0Z29pbmc7XG4gIHZhciBkZWJ1ZyA9IHNlbGYuZGVidWc7XG4gIHZhciBzZXJ2ZXJMaXN0O1xuICB2YXIgY2xpZW50TGlzdDtcbiAgdmFyIHZhbDtcbiAgdmFyIGxlbjtcbiAgdmFyIGk7XG5cbiAgZGVidWcoJ0RFQlVHOiBDb21wYXJpbmcgS0VYSU5JVHMgLi4uJyk7XG5cbiAgdmFyIGFsZ29zID0gc2VsZi5jb25maWcuYWxnb3JpdGhtcztcblxuICB2YXIga2V4TGlzdCA9IGFsZ29zLmtleDtcbiAgaWYgKHNlbGYucmVtb3RlQnVncyAmIEJVR1MuQkFEX0RIR0VYKSB7XG4gICAgdmFyIGNvcGllZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGogPSBrZXhMaXN0Lmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgICBpZiAoa2V4TGlzdFtqXS5pbmRleE9mKCdncm91cC1leGNoYW5nZScpICE9PSAtMSkge1xuICAgICAgICBpZiAoIWNvcGllZCkge1xuICAgICAgICAgIGtleExpc3QgPSBrZXhMaXN0LnNsaWNlKCk7XG4gICAgICAgICAgY29waWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBrZXhMaXN0LnNwbGljZShqLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZWJ1ZygnREVCVUc6IChsb2NhbCkgS0VYIGFsZ29yaXRobXM6ICcgKyBrZXhMaXN0KTtcbiAgZGVidWcoJ0RFQlVHOiAocmVtb3RlKSBLRVggYWxnb3JpdGhtczogJyArIGluaXQuYWxnb3JpdGhtcy5rZXgpO1xuICBpZiAoc2VsZi5zZXJ2ZXIpIHtcbiAgICBzZXJ2ZXJMaXN0ID0ga2V4TGlzdDtcbiAgICBjbGllbnRMaXN0ID0gaW5pdC5hbGdvcml0aG1zLmtleDtcbiAgfSBlbHNlIHtcbiAgICBzZXJ2ZXJMaXN0ID0gaW5pdC5hbGdvcml0aG1zLmtleDtcbiAgICBjbGllbnRMaXN0ID0ga2V4TGlzdDtcbiAgfVxuICAvLyBDaGVjayBmb3IgYWdyZWVhYmxlIGtleSBleGNoYW5nZSBhbGdvcml0aG1cbiAgZm9yIChpID0gMCwgbGVuID0gY2xpZW50TGlzdC5sZW5ndGg7XG4gICAgICAgaSA8IGxlbiAmJiBzZXJ2ZXJMaXN0LmluZGV4T2YoY2xpZW50TGlzdFtpXSkgPT09IC0xO1xuICAgICAgICsraSk7XG4gIGlmIChpID09PSBsZW4pIHtcbiAgICAvLyBObyBzdWl0YWJsZSBtYXRjaCBmb3VuZCFcbiAgICBkZWJ1ZygnREVCVUc6IE5vIG1hdGNoaW5nIGtleSBleGNoYW5nZSBhbGdvcml0aG0nKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBubyBtYXRjaGluZyBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtJyk7XG4gICAgZXJyLmxldmVsID0gJ2hhbmRzaGFrZSc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLktFWV9FWENIQU5HRV9GQUlMRUQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXhfYWxnb3JpdGhtID0gY2xpZW50TGlzdFtpXTtcbiAgZGVidWcoJ0RFQlVHOiBLRVggYWxnb3JpdGhtOiAnICsga2V4X2FsZ29yaXRobSk7XG4gIGlmIChmaXJzdEZvbGxvd3NcbiAgICAgICYmICghaW5pdC5hbGdvcml0aG1zLmtleC5sZW5ndGhcbiAgICAgICAgICB8fCBrZXhfYWxnb3JpdGhtICE9PSBpbml0LmFsZ29yaXRobXMua2V4WzBdKSkge1xuICAgIC8vIElnbm9yZSBuZXh0IGluY29taW5nIHBhY2tldCwgaXQgd2FzIGEgd3JvbmcgZmlyc3QgZ3Vlc3MgYXQgS0VYIGFsZ29yaXRobVxuICAgIGluc3RhdGUuaWdub3JlTmV4dCA9IHRydWU7XG4gIH1cblxuICBkZWJ1ZygnREVCVUc6IChsb2NhbCkgSG9zdCBrZXkgZm9ybWF0czogJyArIGFsZ29zLnNlcnZlckhvc3RLZXkpO1xuICBkZWJ1ZygnREVCVUc6IChyZW1vdGUpIEhvc3Qga2V5IGZvcm1hdHM6ICcgKyBpbml0LmFsZ29yaXRobXMuc3J2SG9zdEtleSk7XG4gIGlmIChzZWxmLnNlcnZlcikge1xuICAgIHNlcnZlckxpc3QgPSBhbGdvcy5zZXJ2ZXJIb3N0S2V5O1xuICAgIGNsaWVudExpc3QgPSBpbml0LmFsZ29yaXRobXMuc3J2SG9zdEtleTtcbiAgfSBlbHNlIHtcbiAgICBzZXJ2ZXJMaXN0ID0gaW5pdC5hbGdvcml0aG1zLnNydkhvc3RLZXk7XG4gICAgY2xpZW50TGlzdCA9IGFsZ29zLnNlcnZlckhvc3RLZXk7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGFncmVlYWJsZSBzZXJ2ZXIgaG9zdCBrZXkgZm9ybWF0XG4gIGZvciAoaSA9IDAsIGxlbiA9IGNsaWVudExpc3QubGVuZ3RoO1xuICAgICAgIGkgPCBsZW4gJiYgc2VydmVyTGlzdC5pbmRleE9mKGNsaWVudExpc3RbaV0pID09PSAtMTtcbiAgICAgICArK2kpO1xuICBpZiAoaSA9PT0gbGVuKSB7XG4gICAgLy8gTm8gc3VpdGFibGUgbWF0Y2ggZm91bmQhXG4gICAgZGVidWcoJ0RFQlVHOiBObyBtYXRjaGluZyBob3N0IGtleSBmb3JtYXQnKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBubyBtYXRjaGluZyBob3N0IGtleSBmb3JtYXQnKTtcbiAgICBlcnIubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUuaG9zdGtleUZvcm1hdCA9IGNsaWVudExpc3RbaV07XG4gIGRlYnVnKCdERUJVRzogSG9zdCBrZXkgZm9ybWF0OiAnICsgc3RhdGUuaG9zdGtleUZvcm1hdCk7XG5cbiAgZGVidWcoJ0RFQlVHOiAobG9jYWwpIENsaWVudC0+U2VydmVyIGNpcGhlcnM6ICcgKyBhbGdvcy5jaXBoZXIpO1xuICBkZWJ1ZygnREVCVUc6IChyZW1vdGUpIENsaWVudC0+U2VydmVyIGNpcGhlcnM6ICdcbiAgICAgICAgKyBpbml0LmFsZ29yaXRobXMuY3MuZW5jcnlwdCk7XG4gIGlmIChzZWxmLnNlcnZlcikge1xuICAgIHNlcnZlckxpc3QgPSBhbGdvcy5jaXBoZXI7XG4gICAgY2xpZW50TGlzdCA9IGluaXQuYWxnb3JpdGhtcy5jcy5lbmNyeXB0O1xuICB9IGVsc2Uge1xuICAgIHNlcnZlckxpc3QgPSBpbml0LmFsZ29yaXRobXMuY3MuZW5jcnlwdDtcbiAgICBjbGllbnRMaXN0ID0gYWxnb3MuY2lwaGVyO1xuICB9XG4gIC8vIENoZWNrIGZvciBhZ3JlZWFibGUgY2xpZW50LT5zZXJ2ZXIgY2lwaGVyXG4gIGZvciAoaSA9IDAsIGxlbiA9IGNsaWVudExpc3QubGVuZ3RoO1xuICAgICAgIGkgPCBsZW4gJiYgc2VydmVyTGlzdC5pbmRleE9mKGNsaWVudExpc3RbaV0pID09PSAtMTtcbiAgICAgICArK2kpO1xuICBpZiAoaSA9PT0gbGVuKSB7XG4gICAgLy8gTm8gc3VpdGFibGUgbWF0Y2ggZm91bmQhXG4gICAgZGVidWcoJ0RFQlVHOiBObyBtYXRjaGluZyBDbGllbnQtPlNlcnZlciBjaXBoZXInKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBubyBtYXRjaGluZyBjbGllbnQtPnNlcnZlciBjaXBoZXInKTtcbiAgICBlcnIubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHNlbGYuc2VydmVyKVxuICAgIHZhbCA9IGluc3RhdGUuZGVjcnlwdC50eXBlID0gY2xpZW50TGlzdFtpXTtcbiAgZWxzZVxuICAgIHZhbCA9IG91dHN0YXRlLmVuY3J5cHQudHlwZSA9IGNsaWVudExpc3RbaV07XG4gIGRlYnVnKCdERUJVRzogQ2xpZW50LT5TZXJ2ZXIgQ2lwaGVyOiAnICsgdmFsKTtcblxuICBkZWJ1ZygnREVCVUc6IChsb2NhbCkgU2VydmVyLT5DbGllbnQgY2lwaGVyczogJyArIGFsZ29zLmNpcGhlcik7XG4gIGRlYnVnKCdERUJVRzogKHJlbW90ZSkgU2VydmVyLT5DbGllbnQgY2lwaGVyczogJ1xuICAgICAgICArIChpbml0LmFsZ29yaXRobXMuc2MuZW5jcnlwdCkpO1xuICBpZiAoc2VsZi5zZXJ2ZXIpIHtcbiAgICBzZXJ2ZXJMaXN0ID0gYWxnb3MuY2lwaGVyO1xuICAgIGNsaWVudExpc3QgPSBpbml0LmFsZ29yaXRobXMuc2MuZW5jcnlwdDtcbiAgfSBlbHNlIHtcbiAgICBzZXJ2ZXJMaXN0ID0gaW5pdC5hbGdvcml0aG1zLnNjLmVuY3J5cHQ7XG4gICAgY2xpZW50TGlzdCA9IGFsZ29zLmNpcGhlcjtcbiAgfVxuICAvLyBDaGVjayBmb3IgYWdyZWVhYmxlIHNlcnZlci0+Y2xpZW50IGNpcGhlclxuICBmb3IgKGkgPSAwLCBsZW4gPSBjbGllbnRMaXN0Lmxlbmd0aDtcbiAgICAgICBpIDwgbGVuICYmIHNlcnZlckxpc3QuaW5kZXhPZihjbGllbnRMaXN0W2ldKSA9PT0gLTE7XG4gICAgICAgKytpKTtcbiAgaWYgKGkgPT09IGxlbikge1xuICAgIC8vIE5vIHN1aXRhYmxlIG1hdGNoIGZvdW5kIVxuICAgIGRlYnVnKCdERUJVRzogTm8gbWF0Y2hpbmcgU2VydmVyLT5DbGllbnQgY2lwaGVyJyk7XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignSGFuZHNoYWtlIGZhaWxlZDogbm8gbWF0Y2hpbmcgc2VydmVyLT5jbGllbnQgY2lwaGVyJyk7XG4gICAgZXJyLmxldmVsID0gJ2hhbmRzaGFrZSc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLktFWV9FWENIQU5HRV9GQUlMRUQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzZWxmLnNlcnZlcilcbiAgICB2YWwgPSBvdXRzdGF0ZS5lbmNyeXB0LnR5cGUgPSBjbGllbnRMaXN0W2ldO1xuICBlbHNlXG4gICAgdmFsID0gaW5zdGF0ZS5kZWNyeXB0LnR5cGUgPSBjbGllbnRMaXN0W2ldO1xuICBkZWJ1ZygnREVCVUc6IFNlcnZlci0+Q2xpZW50IENpcGhlcjogJyArIHZhbCk7XG5cbiAgZGVidWcoJ0RFQlVHOiAobG9jYWwpIENsaWVudC0+U2VydmVyIEhNQUMgYWxnb3JpdGhtczogJyArIGFsZ29zLmhtYWMpO1xuICBkZWJ1ZygnREVCVUc6IChyZW1vdGUpIENsaWVudC0+U2VydmVyIEhNQUMgYWxnb3JpdGhtczogJ1xuICAgICAgICArIGluaXQuYWxnb3JpdGhtcy5jcy5tYWMpO1xuICBpZiAoc2VsZi5zZXJ2ZXIpIHtcbiAgICBzZXJ2ZXJMaXN0ID0gYWxnb3MuaG1hYztcbiAgICBjbGllbnRMaXN0ID0gaW5pdC5hbGdvcml0aG1zLmNzLm1hYztcbiAgfSBlbHNlIHtcbiAgICBzZXJ2ZXJMaXN0ID0gaW5pdC5hbGdvcml0aG1zLmNzLm1hYztcbiAgICBjbGllbnRMaXN0ID0gYWxnb3MuaG1hYztcbiAgfVxuICAvLyBDaGVjayBmb3IgYWdyZWVhYmxlIGNsaWVudC0+c2VydmVyIGhtYWMgYWxnb3JpdGhtXG4gIGZvciAoaSA9IDAsIGxlbiA9IGNsaWVudExpc3QubGVuZ3RoO1xuICAgICAgIGkgPCBsZW4gJiYgc2VydmVyTGlzdC5pbmRleE9mKGNsaWVudExpc3RbaV0pID09PSAtMTtcbiAgICAgICArK2kpO1xuICBpZiAoaSA9PT0gbGVuKSB7XG4gICAgLy8gTm8gc3VpdGFibGUgbWF0Y2ggZm91bmQhXG4gICAgZGVidWcoJ0RFQlVHOiBObyBtYXRjaGluZyBDbGllbnQtPlNlcnZlciBITUFDIGFsZ29yaXRobScpO1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0hhbmRzaGFrZSBmYWlsZWQ6IG5vIG1hdGNoaW5nIGNsaWVudC0+c2VydmVyIEhNQUMnKTtcbiAgICBlcnIubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHNlbGYuc2VydmVyKVxuICAgIHZhbCA9IGluc3RhdGUuaG1hYy50eXBlID0gY2xpZW50TGlzdFtpXTtcbiAgZWxzZVxuICAgIHZhbCA9IG91dHN0YXRlLmhtYWMudHlwZSA9IGNsaWVudExpc3RbaV07XG4gIGRlYnVnKCdERUJVRzogQ2xpZW50LT5TZXJ2ZXIgSE1BQyBhbGdvcml0aG06ICcgKyB2YWwpO1xuXG4gIGRlYnVnKCdERUJVRzogKGxvY2FsKSBTZXJ2ZXItPkNsaWVudCBITUFDIGFsZ29yaXRobXM6ICcgKyBhbGdvcy5obWFjKTtcbiAgZGVidWcoJ0RFQlVHOiAocmVtb3RlKSBTZXJ2ZXItPkNsaWVudCBITUFDIGFsZ29yaXRobXM6ICdcbiAgICAgICAgKyBpbml0LmFsZ29yaXRobXMuc2MubWFjKTtcbiAgaWYgKHNlbGYuc2VydmVyKSB7XG4gICAgc2VydmVyTGlzdCA9IGFsZ29zLmhtYWM7XG4gICAgY2xpZW50TGlzdCA9IGluaXQuYWxnb3JpdGhtcy5zYy5tYWM7XG4gIH0gZWxzZSB7XG4gICAgc2VydmVyTGlzdCA9IGluaXQuYWxnb3JpdGhtcy5zYy5tYWM7XG4gICAgY2xpZW50TGlzdCA9IGFsZ29zLmhtYWM7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGFncmVlYWJsZSBzZXJ2ZXItPmNsaWVudCBobWFjIGFsZ29yaXRobVxuICBmb3IgKGkgPSAwLCBsZW4gPSBjbGllbnRMaXN0Lmxlbmd0aDtcbiAgICAgICBpIDwgbGVuICYmIHNlcnZlckxpc3QuaW5kZXhPZihjbGllbnRMaXN0W2ldKSA9PT0gLTE7XG4gICAgICAgKytpKTtcbiAgaWYgKGkgPT09IGxlbikge1xuICAgIC8vIE5vIHN1aXRhYmxlIG1hdGNoIGZvdW5kIVxuICAgIGRlYnVnKCdERUJVRzogTm8gbWF0Y2hpbmcgU2VydmVyLT5DbGllbnQgSE1BQyBhbGdvcml0aG0nKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBubyBtYXRjaGluZyBzZXJ2ZXItPmNsaWVudCBITUFDJyk7XG4gICAgZXJyLmxldmVsID0gJ2hhbmRzaGFrZSc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLktFWV9FWENIQU5HRV9GQUlMRUQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzZWxmLnNlcnZlcilcbiAgICB2YWwgPSBvdXRzdGF0ZS5obWFjLnR5cGUgPSBjbGllbnRMaXN0W2ldO1xuICBlbHNlXG4gICAgdmFsID0gaW5zdGF0ZS5obWFjLnR5cGUgPSBjbGllbnRMaXN0W2ldO1xuICBkZWJ1ZygnREVCVUc6IFNlcnZlci0+Q2xpZW50IEhNQUMgYWxnb3JpdGhtOiAnICsgdmFsKTtcblxuICBkZWJ1ZygnREVCVUc6IChsb2NhbCkgQ2xpZW50LT5TZXJ2ZXIgY29tcHJlc3Npb24gYWxnb3JpdGhtczogJ1xuICAgICAgICArIGFsZ29zLmNvbXByZXNzKTtcbiAgZGVidWcoJ0RFQlVHOiAocmVtb3RlKSBDbGllbnQtPlNlcnZlciBjb21wcmVzc2lvbiBhbGdvcml0aG1zOiAnXG4gICAgICAgICsgaW5pdC5hbGdvcml0aG1zLmNzLmNvbXByZXNzKTtcbiAgaWYgKHNlbGYuc2VydmVyKSB7XG4gICAgc2VydmVyTGlzdCA9IGFsZ29zLmNvbXByZXNzO1xuICAgIGNsaWVudExpc3QgPSBpbml0LmFsZ29yaXRobXMuY3MuY29tcHJlc3M7XG4gIH0gZWxzZSB7XG4gICAgc2VydmVyTGlzdCA9IGluaXQuYWxnb3JpdGhtcy5jcy5jb21wcmVzcztcbiAgICBjbGllbnRMaXN0ID0gYWxnb3MuY29tcHJlc3M7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGFncmVlYWJsZSBjbGllbnQtPnNlcnZlciBjb21wcmVzc2lvbiBhbGdvcml0aG1cbiAgZm9yIChpID0gMCwgbGVuID0gY2xpZW50TGlzdC5sZW5ndGg7XG4gICAgICAgaSA8IGxlbiAmJiBzZXJ2ZXJMaXN0LmluZGV4T2YoY2xpZW50TGlzdFtpXSkgPT09IC0xO1xuICAgICAgICsraSk7XG4gIGlmIChpID09PSBsZW4pIHtcbiAgICAvLyBObyBzdWl0YWJsZSBtYXRjaCBmb3VuZCFcbiAgICBkZWJ1ZygnREVCVUc6IE5vIG1hdGNoaW5nIENsaWVudC0+U2VydmVyIGNvbXByZXNzaW9uIGFsZ29yaXRobScpO1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0hhbmRzaGFrZSBmYWlsZWQ6IG5vIG1hdGNoaW5nIGNsaWVudC0+c2VydmVyICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJ2NvbXByZXNzaW9uIGFsZ29yaXRobScpO1xuICAgIGVyci5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIHNlbGYuZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5LRVlfRVhDSEFOR0VfRkFJTEVEKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc2VsZi5zZXJ2ZXIpXG4gICAgdmFsID0gaW5zdGF0ZS5kZWNvbXByZXNzLnR5cGUgPSBjbGllbnRMaXN0W2ldO1xuICBlbHNlXG4gICAgdmFsID0gb3V0c3RhdGUuY29tcHJlc3MudHlwZSA9IGNsaWVudExpc3RbaV07XG4gIGRlYnVnKCdERUJVRzogQ2xpZW50LT5TZXJ2ZXIgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAnICsgdmFsKTtcblxuICBkZWJ1ZygnREVCVUc6IChsb2NhbCkgU2VydmVyLT5DbGllbnQgY29tcHJlc3Npb24gYWxnb3JpdGhtczogJ1xuICAgICAgICArIGFsZ29zLmNvbXByZXNzKTtcbiAgZGVidWcoJ0RFQlVHOiAocmVtb3RlKSBTZXJ2ZXItPkNsaWVudCBjb21wcmVzc2lvbiBhbGdvcml0aG1zOiAnXG4gICAgICAgICsgaW5pdC5hbGdvcml0aG1zLnNjLmNvbXByZXNzKTtcbiAgaWYgKHNlbGYuc2VydmVyKSB7XG4gICAgc2VydmVyTGlzdCA9IGFsZ29zLmNvbXByZXNzO1xuICAgIGNsaWVudExpc3QgPSBpbml0LmFsZ29yaXRobXMuc2MuY29tcHJlc3M7XG4gIH0gZWxzZSB7XG4gICAgc2VydmVyTGlzdCA9IGluaXQuYWxnb3JpdGhtcy5zYy5jb21wcmVzcztcbiAgICBjbGllbnRMaXN0ID0gYWxnb3MuY29tcHJlc3M7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGFncmVlYWJsZSBzZXJ2ZXItPmNsaWVudCBjb21wcmVzc2lvbiBhbGdvcml0aG1cbiAgZm9yIChpID0gMCwgbGVuID0gY2xpZW50TGlzdC5sZW5ndGg7XG4gICAgICAgaSA8IGxlbiAmJiBzZXJ2ZXJMaXN0LmluZGV4T2YoY2xpZW50TGlzdFtpXSkgPT09IC0xO1xuICAgICAgICsraSk7XG4gIGlmIChpID09PSBsZW4pIHtcbiAgICAvLyBObyBzdWl0YWJsZSBtYXRjaCBmb3VuZCFcbiAgICBkZWJ1ZygnREVCVUc6IE5vIG1hdGNoaW5nIFNlcnZlci0+Q2xpZW50IGNvbXByZXNzaW9uIGFsZ29yaXRobScpO1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0hhbmRzaGFrZSBmYWlsZWQ6IG5vIG1hdGNoaW5nIHNlcnZlci0+Y2xpZW50ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJ2NvbXByZXNzaW9uIGFsZ29yaXRobScpO1xuICAgIGVyci5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIHNlbGYuZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5LRVlfRVhDSEFOR0VfRkFJTEVEKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc2VsZi5zZXJ2ZXIpXG4gICAgdmFsID0gb3V0c3RhdGUuY29tcHJlc3MudHlwZSA9IGNsaWVudExpc3RbaV07XG4gIGVsc2VcbiAgICB2YWwgPSBpbnN0YXRlLmRlY29tcHJlc3MudHlwZSA9IGNsaWVudExpc3RbaV07XG4gIGRlYnVnKCdERUJVRzogU2VydmVyLT5DbGllbnQgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAnICsgdmFsKTtcblxuICBzdGF0ZS5rZXggPSBuZXcgS2V5RXhjaGFuZ2Uoa2V4X2FsZ29yaXRobSk7XG4gIHN0YXRlLmtleC5nZW5lcmF0ZUtleXMoKTtcbiAgb3V0c3RhdGUucHVia2V5ID0gc3RhdGUua2V4LmdldFB1YmxpY0tleSgpO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvbktFWERIX0dFWF9HUk9VUChzZWxmLCBwcmltZSwgZ2VuKSB7XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3N0YXRlO1xuICB2YXIgb3V0c3RhdGUgPSBzdGF0ZS5vdXRnb2luZztcblxuICBzdGF0ZS5rZXguc2V0REhQYXJhbXMocHJpbWUsIGdlbik7XG4gIHN0YXRlLmtleC5nZW5lcmF0ZUtleXMoKTtcbiAgb3V0c3RhdGUucHVia2V5ID0gc3RhdGUua2V4LmdldFB1YmxpY0tleSgpO1xuXG4gIEtFWERIX0lOSVQoc2VsZik7XG59XG5cbmZ1bmN0aW9uIG9uS0VYREhfSU5JVChzZWxmLCBlKSB7IC8vIFNlcnZlclxuICBLRVhESF9SRVBMWShzZWxmLCBlKTtcbn1cblxuZnVuY3Rpb24gb25LRVhESF9SRVBMWShzZWxmLCBpbmZvLCB2ZXJpZmllZEhvc3QpIHsgLy8gQ2xpZW50XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3N0YXRlO1xuICB2YXIgaW5zdGF0ZSA9IHN0YXRlLmluY29taW5nO1xuICB2YXIgb3V0c3RhdGUgPSBzdGF0ZS5vdXRnb2luZztcbiAgdmFyIGRlYnVnID0gc2VsZi5kZWJ1ZztcbiAgdmFyIGxlbjtcbiAgdmFyIGk7XG5cbiAgaWYgKHZlcmlmaWVkSG9zdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaW5zdGF0ZS5leHBlY3RlZFBhY2tldCA9ICdORVdLRVlTJztcbiAgICBvdXRzdGF0ZS5zZW50TkVXS0VZUyA9IGZhbHNlO1xuXG4gICAgZGVidWcoJ0RFQlVHOiBDaGVja2luZyBob3N0IGtleSBmb3JtYXQnKTtcbiAgICAvLyBFbnN1cmUgYWxsIGhvc3Qga2V5IGZvcm1hdHMgYWdyZWVcbiAgICB2YXIgaG9zdGtleV9mb3JtYXQgPSByZWFkU3RyaW5nKGluZm8uaG9zdGtleSwgMCwgJ2FzY2lpJywgc2VsZik7XG4gICAgaWYgKGhvc3RrZXlfZm9ybWF0ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5mby5ob3N0a2V5X2Zvcm1hdCAhPT0gc3RhdGUuaG9zdGtleUZvcm1hdFxuICAgICAgICB8fCBpbmZvLmhvc3RrZXlfZm9ybWF0ICE9PSBob3N0a2V5X2Zvcm1hdCkge1xuICAgICAgLy8gRXhwZWN0ZWQgYW5kIGFjdHVhbCBzZXJ2ZXIgaG9zdCBrZXkgZm9ybWF0IGRvIG5vdCBtYXRjaCFcbiAgICAgIGRlYnVnKCdERUJVRzogSG9zdCBrZXkgZm9ybWF0IG1pc21hdGNoJyk7XG4gICAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgICBzZWxmLnJlc2V0KCk7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBob3N0IGtleSBmb3JtYXQgbWlzbWF0Y2gnKTtcbiAgICAgIGVyci5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZGVidWcoJ0RFQlVHOiBDaGVja2luZyBzaWduYXR1cmUgZm9ybWF0Jyk7XG4gICAgLy8gRW5zdXJlIHNpZ25hdHVyZSBmb3JtYXRzIGFncmVlXG4gICAgdmFyIHNpZ19mb3JtYXQgPSByZWFkU3RyaW5nKGluZm8uc2lnLCAwLCAnYXNjaWknLCBzZWxmKTtcbiAgICBpZiAoc2lnX2Zvcm1hdCA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGluZm8uc2lnX2Zvcm1hdCAhPT0gc2lnX2Zvcm1hdCkge1xuICAgICAgZGVidWcoJ0RFQlVHOiBTaWduYXR1cmUgZm9ybWF0IG1pc21hdGNoJyk7XG4gICAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgICBzZWxmLnJlc2V0KCk7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBzaWduYXR1cmUgZm9ybWF0IG1pc21hdGNoJyk7XG4gICAgICBlcnIubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZlcmlmeSB0aGUgaG9zdCBmaW5nZXJwcmludCBmaXJzdCBpZiBuZWVkZWRcbiAgaWYgKG91dHN0YXRlLnN0YXR1cyA9PT0gT1VUX0lOSVQpIHtcbiAgICBpZiAodmVyaWZpZWRIb3N0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlYnVnKCdERUJVRzogVmVyaWZ5aW5nIGhvc3QgZmluZ2VycHJpbnQnKTtcbiAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgIHZhciBlbWl0dGVkID0gc2VsZi5lbWl0KCdmaW5nZXJwcmludCcsIGluZm8uaG9zdGtleSwgZnVuY3Rpb24ocGVybWl0dGVkKSB7XG4gICAgICAgIC8vIFByZXZlbnQgbXVsdGlwbGUgY2FsbHMgdG8gdGhpcyBjYWxsYmFja1xuICAgICAgICBpZiAodmVyaWZpZWRIb3N0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2ZXJpZmllZEhvc3QgPSAhIXBlcm1pdHRlZDtcbiAgICAgICAgaWYgKCFzeW5jKSB7XG4gICAgICAgICAgLy8gQ29udGludWUgZXhlY3V0aW9uIGJ5IHJlLWVudHJ5XG4gICAgICAgICAgb25LRVhESF9SRVBMWShzZWxmLCBpbmZvLCB2ZXJpZmllZEhvc3QpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgIC8vIFN1cHBvcnQgYXN5bmMgY2FsbGluZyBvZiB2ZXJpZmljYXRpb24gY2FsbGJhY2tcbiAgICAgIGlmIChlbWl0dGVkICYmIHZlcmlmaWVkSG9zdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2ZXJpZmllZEhvc3QgPT09IHVuZGVmaW5lZClcbiAgICAgIGRlYnVnKCdERUJVRzogSG9zdCBhY2NlcHRlZCBieSBkZWZhdWx0IChubyB2ZXJpZmljYXRpb24pJyk7XG4gICAgZWxzZSBpZiAodmVyaWZpZWRIb3N0ID09PSB0cnVlKVxuICAgICAgZGVidWcoJ0RFQlVHOiBIb3N0IGFjY2VwdGVkICh2ZXJpZmllZCknKTtcbiAgICBlbHNlIHtcbiAgICAgIGRlYnVnKCdERUJVRzogSG9zdCBkZW5pZWQgdmlhIGZpbmdlcnByaW50IHZlcmlmaWNhdGlvbicpO1xuICAgICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLktFWV9FWENIQU5HRV9GQUlMRUQpO1xuICAgICAgc2VsZi5yZXNldCgpO1xuICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignSGFuZHNoYWtlIGZhaWxlZDogJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArICdob3N0IGZpbmdlcnByaW50IHZlcmlmaWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgIGVyci5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaW5mby5wdWJrZXkgPSBzdGF0ZS5rZXguY29udmVydFB1YmxpY0tleShpbmZvLnB1YmtleSk7XG5cbiAgaW5mby5zZWNyZXQgPSBzdGF0ZS5rZXguY29tcHV0ZVNlY3JldChpbmZvLnB1YmtleSk7XG5cbiAgaWYgKGluZm8uc2VjcmV0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBpbmZvLnNlY3JldC5tZXNzYWdlID0gJ0Vycm9yIHdoaWxlIGNvbXB1dGluZyBESCBzZWNyZXQgKCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdGF0ZS5rZXgudHlwZSArICcpOiAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgaW5mby5zZWNyZXQubWVzc2FnZTtcbiAgICBpbmZvLnNlY3JldC5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBpbmZvLnNlY3JldCk7XG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLktFWV9FWENIQU5HRV9GQUlMRUQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goc3RhdGUua2V4Lmhhc2gpO1xuXG4gIHZhciBsZW5faWRlbnQgPSBCdWZmZXIuYnl0ZUxlbmd0aChzZWxmLmNvbmZpZy5pZGVudCk7XG4gIHZhciBsZW5fc2lkZW50ID0gQnVmZmVyLmJ5dGVMZW5ndGgoaW5zdGF0ZS5pZGVudFJhdyk7XG4gIHZhciBsZW5faW5pdCA9IG91dHN0YXRlLmtleGluaXQubGVuZ3RoO1xuICB2YXIgbGVuX3Npbml0ID0gaW5zdGF0ZS5rZXhpbml0Lmxlbmd0aDtcbiAgdmFyIGxlbl9ob3N0a2V5ID0gaW5mby5ob3N0a2V5Lmxlbmd0aDtcbiAgdmFyIGxlbl9wdWJrZXkgPSBvdXRzdGF0ZS5wdWJrZXkubGVuZ3RoO1xuICB2YXIgbGVuX3NwdWJrZXkgPSBpbmZvLnB1YmtleS5sZW5ndGg7XG4gIHZhciBsZW5fc2VjcmV0ID0gaW5mby5zZWNyZXQubGVuZ3RoO1xuXG4gIHZhciBleGNoYW5nZUJ1ZkxlbiA9IGxlbl9pZGVudFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zaWRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgKyBsZW5faW5pdFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zaW5pdFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9ob3N0a2V5XG4gICAgICAgICAgICAgICAgICAgICAgICsgbGVuX3B1YmtleVxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zcHVia2V5XG4gICAgICAgICAgICAgICAgICAgICAgICsgbGVuX3NlY3JldFxuICAgICAgICAgICAgICAgICAgICAgICArICg0ICogOCk7IC8vIExlbmd0aCBmaWVsZHMgZm9yIGFib3ZlIHZhbHVlc1xuXG4gIC8vIEdyb3VwIGV4Y2hhbmdlLXJlbGF0ZWRcbiAgdmFyIGxlbl9nZXhfcHJpbWU7XG4gIHZhciBsZW5fZ2V4X2dlbjtcbiAgdmFyIGdleF9wcmltZTtcbiAgdmFyIGdleF9nZW47XG4gIHZhciBkaFBhcmFtcyA9IHN0YXRlLmtleC5nZXRESFBhcmFtcygpO1xuICBpZiAoZGhQYXJhbXMpIHtcbiAgICBnZXhfcHJpbWUgPSBkaFBhcmFtcy5wcmltZTtcbiAgICBnZXhfZ2VuID0gZGhQYXJhbXMuZ2VuZXJhdG9yO1xuICAgIGxlbl9nZXhfcHJpbWUgPSBnZXhfcHJpbWUubGVuZ3RoO1xuICAgIGxlbl9nZXhfZ2VuID0gZ2V4X2dlbi5sZW5ndGg7XG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gKDQgKiAzKTsgLy8gbWluLCBuLCBtYXggdmFsdWVzXG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gKDQgKiAyKTsgLy8gcHJpbWUsIGdlbmVyYXRvciBsZW5ndGggZmllbGRzXG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gbGVuX2dleF9wcmltZTtcbiAgICBleGNoYW5nZUJ1ZkxlbiArPSBsZW5fZ2V4X2dlbjtcbiAgfVxuXG4gIHZhciBicCA9IDA7XG4gIHZhciBleGNoYW5nZUJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShleGNoYW5nZUJ1Zkxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX2lkZW50LCBicCk7XG4gIGJwICs9IDQ7XG4gIGV4Y2hhbmdlQnVmLndyaXRlKHNlbGYuY29uZmlnLmlkZW50LCBicCwgJ3V0ZjgnKTsgLy8gVl9DXG4gIGJwICs9IGxlbl9pZGVudDtcblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5fc2lkZW50LCBicCk7XG4gIGJwICs9IDQ7XG4gIGV4Y2hhbmdlQnVmLndyaXRlKGluc3RhdGUuaWRlbnRSYXcsIGJwLCAndXRmOCcpOyAvLyBWX1NcbiAgYnAgKz0gbGVuX3NpZGVudDtcblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5faW5pdCwgYnApO1xuICBicCArPSA0O1xuICBvdXRzdGF0ZS5rZXhpbml0LmNvcHkoZXhjaGFuZ2VCdWYsIGJwKTsgLy8gSV9DXG4gIGJwICs9IGxlbl9pbml0O1xuICBvdXRzdGF0ZS5rZXhpbml0ID0gdW5kZWZpbmVkO1xuXG4gIHdyaXRlVUludDMyQkUoZXhjaGFuZ2VCdWYsIGxlbl9zaW5pdCwgYnApO1xuICBicCArPSA0O1xuICBpbnN0YXRlLmtleGluaXQuY29weShleGNoYW5nZUJ1ZiwgYnApOyAvLyBJX1NcbiAgYnAgKz0gbGVuX3Npbml0O1xuICBpbnN0YXRlLmtleGluaXQgPSB1bmRlZmluZWQ7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX2hvc3RrZXksIGJwKTtcbiAgYnAgKz0gNDtcbiAgaW5mby5ob3N0a2V5LmNvcHkoZXhjaGFuZ2VCdWYsIGJwKTsgLy8gS19TXG4gIGJwICs9IGxlbl9ob3N0a2V5O1xuXG4gIGlmIChkaFBhcmFtcykge1xuICAgIEtFWERIX0dFWF9SRVFfUEFDS0VULnNsaWNlKDEpLmNvcHkoZXhjaGFuZ2VCdWYsIGJwKTsgLy8gbWluLCBuLCBtYXhcbiAgICBicCArPSAoNCAqIDMpOyAvLyBTa2lwIG92ZXIgYnl0ZXMganVzdCBjb3BpZWRcblxuICAgIHdyaXRlVUludDMyQkUoZXhjaGFuZ2VCdWYsIGxlbl9nZXhfcHJpbWUsIGJwKTtcbiAgICBicCArPSA0O1xuICAgIGdleF9wcmltZS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIHBcbiAgICBicCArPSBsZW5fZ2V4X3ByaW1lO1xuXG4gICAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX2dleF9nZW4sIGJwKTtcbiAgICBicCArPSA0O1xuICAgIGdleF9nZW4uY29weShleGNoYW5nZUJ1ZiwgYnApOyAvLyBnXG4gICAgYnAgKz0gbGVuX2dleF9nZW47XG4gIH1cblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5fcHVia2V5LCBicCk7XG4gIGJwICs9IDQ7XG4gIG91dHN0YXRlLnB1YmtleS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIGVcbiAgYnAgKz0gbGVuX3B1YmtleTtcblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5fc3B1YmtleSwgYnApO1xuICBicCArPSA0O1xuICBpbmZvLnB1YmtleS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIGZcbiAgYnAgKz0gbGVuX3NwdWJrZXk7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX3NlY3JldCwgYnApO1xuICBicCArPSA0O1xuICBpbmZvLnNlY3JldC5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIEtcblxuICBvdXRzdGF0ZS5leGNoYW5nZUhhc2ggPSBoYXNoLnVwZGF0ZShleGNoYW5nZUJ1ZikuZGlnZXN0KCk7IC8vIEhcblxuICB2YXIgcmF3c2lnID0gcmVhZFN0cmluZyhpbmZvLnNpZywgaW5mby5zaWcuX3Bvcywgc2VsZik7IC8vIHNcbiAgaWYgKHJhd3NpZyA9PT0gZmFsc2VcbiAgICAgIHx8ICEocmF3c2lnID0gc2lnU1NIVG9BU04xKHJhd3NpZywgaW5mby5zaWdfZm9ybWF0LCBzZWxmKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgaG9zdFB1YktleSA9IHBhcnNlREVSS2V5KGluZm8uaG9zdGtleSwgaW5mby5zaWdfZm9ybWF0KTtcbiAgaWYgKGhvc3RQdWJLZXkgaW5zdGFuY2VvZiBFcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgZGVidWcoJ0RFQlVHOiBWZXJpZnlpbmcgc2lnbmF0dXJlJyk7XG5cbiAgaWYgKGhvc3RQdWJLZXkudmVyaWZ5KG91dHN0YXRlLmV4Y2hhbmdlSGFzaCwgcmF3c2lnKSAhPT0gdHJ1ZSkge1xuICAgIGRlYnVnKCdERUJVRzogU2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQnKTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgc2VsZi5yZXNldCgpO1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0hhbmRzaGFrZSBmYWlsZWQ6IHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkJyk7XG4gICAgZXJyLmxldmVsID0gJ2hhbmRzaGFrZSc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG91dHN0YXRlLnNlc3Npb25JZCA9PT0gdW5kZWZpbmVkKVxuICAgIG91dHN0YXRlLnNlc3Npb25JZCA9IG91dHN0YXRlLmV4Y2hhbmdlSGFzaDtcbiAgb3V0c3RhdGUua2V4c2VjcmV0ID0gaW5mby5zZWNyZXQ7XG5cbiAgZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBORVdLRVlTJyk7XG4gIGlmIChvdXRzdGF0ZS5zdGF0dXMgPT09IE9VVF9SRUtFWUlORylcbiAgICBzZW5kKHNlbGYsIE5FV0tFWVNfUEFDS0VULCB1bmRlZmluZWQsIHRydWUpO1xuICBlbHNlXG4gICAgc2VuZChzZWxmLCBORVdLRVlTX1BBQ0tFVCk7XG4gIG91dHN0YXRlLnNlbnRORVdLRVlTID0gdHJ1ZTtcblxuICBpZiAodmVyaWZpZWRIb3N0ICE9PSB1bmRlZmluZWQgJiYgaW5zdGF0ZS5leHBlY3RlZFBhY2tldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gV2UgcmVjZWl2ZWQgTkVXS0VZUyB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcgZm9yIHRoZSBmaW5nZXJwcmludFxuICAgIC8vIHZlcmlmaWNhdGlvbiBjYWxsYmFjayB0byBiZSBjYWxsZWQuIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHJlLWV4ZWN1dGVcbiAgICAvLyBvbk5FV0tFWVMgdG8gZmluaXNoIHRoZSBoYW5kc2hha2UuXG4gICAgb25ORVdLRVlTKHNlbGYpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uTkVXS0VZUyhzZWxmKSB7IC8vIENsaWVudC9TZXJ2ZXJcbiAgdmFyIHN0YXRlID0gc2VsZi5fc3RhdGU7XG4gIHZhciBvdXRzdGF0ZSA9IHN0YXRlLm91dGdvaW5nO1xuICB2YXIgaW5zdGF0ZSA9IHN0YXRlLmluY29taW5nO1xuXG4gIGluc3RhdGUuZXhwZWN0ZWRQYWNrZXQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKCFvdXRzdGF0ZS5zZW50TkVXS0VZUylcbiAgICByZXR1cm47XG5cbiAgdmFyIGxlbiA9IG91dHN0YXRlLmtleHNlY3JldC5sZW5ndGg7XG5cbiAgdmFyIG91dENpcGhlckluZm8gPSBvdXRzdGF0ZS5lbmNyeXB0LmluZm8gPSBDSVBIRVJfSU5GT1tvdXRzdGF0ZS5lbmNyeXB0LnR5cGVdO1xuICB2YXIgcCA9IDA7XG5cbiAgdmFyIGRoSGFzaEFsZ28gPSBzdGF0ZS5rZXguaGFzaDtcblxuICB2YXIgc2VjcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyBsZW4pO1xuICB2YXIgaXY7XG4gIHZhciBrZXk7XG5cbiAgLy8gV2hlbmV2ZXIgdGhlIGNsaWVudCBzZW5kcyBhIG5ldyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LCBpdCBpcyBlbnF1ZXVlZFxuICAvLyBoZXJlLiAgT25jZSB0aGUgcmVxdWVzdCBpcyByZXNvbHZlZCAoc3VjY2VzcywgZmFpbCwgb3IgUEtfT0spLFxuICAvLyBkZXF1ZXVlLiAgV2hhdGV2ZXIgaXMgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSBkZXRlcm1pbmVzIGhvdyB3ZVxuICAvLyBpbnRlcnByZXQgcGFja2V0IHR5cGUgNjAuXG4gIHN0YXRlLmF1dGhzUXVldWUgPSBbXTtcblxuICB3cml0ZVVJbnQzMkJFKHNlY3JldCwgbGVuLCBwKTtcbiAgcCArPSA0O1xuICBvdXRzdGF0ZS5rZXhzZWNyZXQuY29weShzZWNyZXQsIHApO1xuICBvdXRzdGF0ZS5rZXhzZWNyZXQgPSB1bmRlZmluZWQ7XG4gIGlmICghb3V0Q2lwaGVySW5mby5zdHJlYW0pIHtcbiAgICBpdiA9IGNyeXB0by5jcmVhdGVIYXNoKGRoSGFzaEFsZ28pXG4gICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgLnVwZGF0ZSghc2VsZi5zZXJ2ZXIgPyAnQScgOiAnQicsICdhc2NpaScpXG4gICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLnNlc3Npb25JZClcbiAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICB3aGlsZSAoaXYubGVuZ3RoIDwgb3V0Q2lwaGVySW5mby5pdkxlbikge1xuICAgICAgaXYgPSBCdWZmZXIuY29uY2F0KFtpdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3J5cHRvLmNyZWF0ZUhhc2goZGhIYXNoQWxnbylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShzZWNyZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKGl2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlnZXN0KCldKTtcbiAgICB9XG4gICAgaWYgKGl2Lmxlbmd0aCA+IG91dENpcGhlckluZm8uaXZMZW4pXG4gICAgICBpdiA9IGl2LnNsaWNlKDAsIG91dENpcGhlckluZm8uaXZMZW4pO1xuICB9IGVsc2Uge1xuICAgIGl2ID0gRU1QVFlfQlVGRkVSOyAvLyBTdHJlYW1pbmcgY2lwaGVycyBkb24ndCB1c2UgYW4gSVYgdXBmcm9udFxuICB9XG5cbiAga2V5ID0gY3J5cHRvLmNyZWF0ZUhhc2goZGhIYXNoQWxnbylcbiAgICAgICAgICAgICAgLnVwZGF0ZShzZWNyZXQpXG4gICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAudXBkYXRlKCFzZWxmLnNlcnZlciA/ICdDJyA6ICdEJywgJ2FzY2lpJylcbiAgICAgICAgICAgICAgLnVwZGF0ZShvdXRzdGF0ZS5zZXNzaW9uSWQpXG4gICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgd2hpbGUgKGtleS5sZW5ndGggPCBvdXRDaXBoZXJJbmZvLmtleUxlbikge1xuICAgIGtleSA9IEJ1ZmZlci5jb25jYXQoW2tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBjcnlwdG8uY3JlYXRlSGFzaChkaEhhc2hBbGdvKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoc2VjcmV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoa2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWdlc3QoKV0pO1xuICB9XG4gIGlmIChrZXkubGVuZ3RoID4gb3V0Q2lwaGVySW5mby5rZXlMZW4pXG4gICAga2V5ID0ga2V5LnNsaWNlKDAsIG91dENpcGhlckluZm8ua2V5TGVuKTtcblxuICBpZiAob3V0Q2lwaGVySW5mby5hdXRoTGVuID4gMCkge1xuICAgIG91dHN0YXRlLmVuY3J5cHQuaXYgPSBpdjtcbiAgICBvdXRzdGF0ZS5lbmNyeXB0LmtleSA9IGtleTtcbiAgICBvdXRzdGF0ZS5lbmNyeXB0Lmluc3RhbmNlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY2lwaGVyQWxnbyA9IFNTSF9UT19PUEVOU1NMW291dHN0YXRlLmVuY3J5cHQudHlwZV07XG4gICAgb3V0c3RhdGUuZW5jcnlwdC5pbnN0YW5jZSA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihjaXBoZXJBbGdvLCBrZXksIGl2KTtcbiAgICBvdXRzdGF0ZS5lbmNyeXB0Lmluc3RhbmNlLnNldEF1dG9QYWRkaW5nKGZhbHNlKTtcbiAgfVxuXG4gIC8vIEFuZCBub3cgZm9yIGRlY3J5cHRpbmcgLi4uXG5cbiAgdmFyIGluQ2lwaGVySW5mbyA9IGluc3RhdGUuZGVjcnlwdC5pbmZvID0gQ0lQSEVSX0lORk9baW5zdGF0ZS5kZWNyeXB0LnR5cGVdO1xuICBpZiAoIWluQ2lwaGVySW5mby5zdHJlYW0pIHtcbiAgICBpdiA9IGNyeXB0by5jcmVhdGVIYXNoKGRoSGFzaEFsZ28pXG4gICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgLnVwZGF0ZSghc2VsZi5zZXJ2ZXIgPyAnQicgOiAnQScsICdhc2NpaScpXG4gICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLnNlc3Npb25JZClcbiAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICB3aGlsZSAoaXYubGVuZ3RoIDwgaW5DaXBoZXJJbmZvLml2TGVuKSB7XG4gICAgICBpdiA9IEJ1ZmZlci5jb25jYXQoW2l2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjcnlwdG8uY3JlYXRlSGFzaChkaEhhc2hBbGdvKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShvdXRzdGF0ZS5leGNoYW5nZUhhc2gpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoaXYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWdlc3QoKV0pO1xuICAgIH1cbiAgICBpZiAoaXYubGVuZ3RoID4gaW5DaXBoZXJJbmZvLml2TGVuKVxuICAgICAgaXYgPSBpdi5zbGljZSgwLCBpbkNpcGhlckluZm8uaXZMZW4pO1xuICB9IGVsc2Uge1xuICAgIGl2ID0gRU1QVFlfQlVGRkVSOyAvLyBTdHJlYW1pbmcgY2lwaGVycyBkb24ndCB1c2UgYW4gSVYgdXBmcm9udFxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgcmV1c2FibGUgYnVmZmVyIGZvciBkZWNyeXB0aW9uIHB1cnBvc2VzXG4gIGluc3RhdGUuZGVjcnlwdC5idWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoaW5DaXBoZXJJbmZvLmJsb2NrTGVuKTtcblxuICBrZXkgPSBjcnlwdG8uY3JlYXRlSGFzaChkaEhhc2hBbGdvKVxuICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgLnVwZGF0ZShvdXRzdGF0ZS5leGNoYW5nZUhhc2gpXG4gICAgICAgICAgICAgIC51cGRhdGUoIXNlbGYuc2VydmVyID8gJ0QnIDogJ0MnLCAnYXNjaWknKVxuICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLnNlc3Npb25JZClcbiAgICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICB3aGlsZSAoa2V5Lmxlbmd0aCA8IGluQ2lwaGVySW5mby5rZXlMZW4pIHtcbiAgICBrZXkgPSBCdWZmZXIuY29uY2F0KFtrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgY3J5cHRvLmNyZWF0ZUhhc2goZGhIYXNoQWxnbylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLmV4Y2hhbmdlSGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlnZXN0KCldKTtcbiAgfVxuICBpZiAoa2V5Lmxlbmd0aCA+IGluQ2lwaGVySW5mby5rZXlMZW4pXG4gICAga2V5ID0ga2V5LnNsaWNlKDAsIGluQ2lwaGVySW5mby5rZXlMZW4pO1xuXG4gIHZhciBkZWNpcGhlckFsZ28gPSBTU0hfVE9fT1BFTlNTTFtpbnN0YXRlLmRlY3J5cHQudHlwZV07XG4gIGluc3RhdGUuZGVjcnlwdC5pbnN0YW5jZSA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGRlY2lwaGVyQWxnbywga2V5LCBpdik7XG4gIGluc3RhdGUuZGVjcnlwdC5pbnN0YW5jZS5zZXRBdXRvUGFkZGluZyhmYWxzZSk7XG4gIGluc3RhdGUuZGVjcnlwdC5pdiA9IGl2O1xuICBpbnN0YXRlLmRlY3J5cHQua2V5ID0ga2V5O1xuXG4gIHZhciBlbXB0eUJ1ZjtcbiAgaWYgKG91dENpcGhlckluZm8uZGlzY2FyZExlbiA+IDApIHtcbiAgICBlbXB0eUJ1ZiA9IEJ1ZmZlci5hbGxvYyhvdXRDaXBoZXJJbmZvLmRpc2NhcmRMZW4pO1xuICAgIG91dHN0YXRlLmVuY3J5cHQuaW5zdGFuY2UudXBkYXRlKGVtcHR5QnVmKTtcbiAgfVxuICBpZiAoaW5DaXBoZXJJbmZvLmRpc2NhcmRMZW4gPiAwKSB7XG4gICAgaWYgKCFlbXB0eUJ1ZiB8fCBlbXB0eUJ1Zi5sZW5ndGggIT09IGluQ2lwaGVySW5mby5kaXNjYXJkTGVuKVxuICAgICAgZW1wdHlCdWYgPSBCdWZmZXIuYWxsb2Mob3V0Q2lwaGVySW5mby5kaXNjYXJkTGVuKTtcbiAgICBpbnN0YXRlLmRlY3J5cHQuaW5zdGFuY2UudXBkYXRlKGVtcHR5QnVmKTtcbiAgfVxuXG4gIHZhciBvdXRITUFDSW5mbyA9IG91dHN0YXRlLmhtYWMuaW5mbyA9IEhNQUNfSU5GT1tvdXRzdGF0ZS5obWFjLnR5cGVdO1xuICB2YXIgaW5ITUFDSW5mbyA9IGluc3RhdGUuaG1hYy5pbmZvID0gSE1BQ19JTkZPW2luc3RhdGUuaG1hYy50eXBlXTtcblxuICBpZiAob3V0Q2lwaGVySW5mby5hdXRoTGVuID09PSAwKSB7XG4gICAga2V5ID0gY3J5cHRvLmNyZWF0ZUhhc2goZGhIYXNoQWxnbylcbiAgICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLmV4Y2hhbmdlSGFzaClcbiAgICAgICAgICAgICAgICAudXBkYXRlKCFzZWxmLnNlcnZlciA/ICdFJyA6ICdGJywgJ2FzY2lpJylcbiAgICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLnNlc3Npb25JZClcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgd2hpbGUgKGtleS5sZW5ndGggPCBvdXRITUFDSW5mby5sZW4pIHtcbiAgICAgIGtleSA9IEJ1ZmZlci5jb25jYXQoW2tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyeXB0by5jcmVhdGVIYXNoKGRoSGFzaEFsZ28pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlnZXN0KCldKTtcbiAgICB9XG4gICAgaWYgKGtleS5sZW5ndGggPiBvdXRITUFDSW5mby5sZW4pXG4gICAgICBrZXkgPSBrZXkuc2xpY2UoMCwgb3V0SE1BQ0luZm8ubGVuKTtcbiAgICBvdXRzdGF0ZS5obWFjLmtleSA9IGtleTtcbiAgfSBlbHNlIHtcbiAgICBvdXRzdGF0ZS5obWFjLmtleSA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaW5DaXBoZXJJbmZvLmF1dGhMZW4gPT09IDApIHtcbiAgICBrZXkgPSBjcnlwdG8uY3JlYXRlSGFzaChkaEhhc2hBbGdvKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoc2VjcmV0KVxuICAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoIXNlbGYuc2VydmVyID8gJ0YnIDogJ0UnLCAnYXNjaWknKVxuICAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICB3aGlsZSAoa2V5Lmxlbmd0aCA8IGluSE1BQ0luZm8ubGVuKSB7XG4gICAgICBrZXkgPSBCdWZmZXIuY29uY2F0KFtrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjcnlwdG8uY3JlYXRlSGFzaChkaEhhc2hBbGdvKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShzZWNyZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLmV4Y2hhbmdlSGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoa2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRpZ2VzdCgpXSk7XG4gICAgfVxuICAgIGlmIChrZXkubGVuZ3RoID4gaW5ITUFDSW5mby5sZW4pXG4gICAgICBrZXkgPSBrZXkuc2xpY2UoMCwgaW5ITUFDSW5mby5sZW4pO1xuICAgIGluc3RhdGUuaG1hYy5rZXkgPSBrZXk7XG4gIH0gZWxzZSB7XG4gICAgaW5zdGF0ZS5obWFjLmtleSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIHJldXNhYmxlIGJ1ZmZlciBmb3IgbWVzc2FnZSB2ZXJpZmljYXRpb24gcHVycG9zZXNcbiAgdmFyIGluSE1BQ1NpemUgPSBpbkNpcGhlckluZm8uYXV0aExlbiB8fCBpbnN0YXRlLmhtYWMuaW5mby5hY3R1YWxMZW47XG4gIGlmICghaW5zdGF0ZS5obWFjLmJ1ZlxuICAgICAgfHwgaW5zdGF0ZS5obWFjLmJ1Zi5sZW5ndGggIT09IGluSE1BQ1NpemUpIHtcbiAgICBpbnN0YXRlLmhtYWMuYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKGluSE1BQ1NpemUpO1xuICB9XG5cbiAgb3V0c3RhdGUuZXhjaGFuZ2VIYXNoID0gdW5kZWZpbmVkO1xuXG4gIGlmIChvdXRzdGF0ZS5jb21wcmVzcy50eXBlID09PSAnemxpYicpIHtcbiAgICBvdXRzdGF0ZS5jb21wcmVzcy5pbnN0YW5jZSA9IHpsaWIuY3JlYXRlRGVmbGF0ZShaTElCX09QVFMpO1xuICAgIG91dHN0YXRlLmNvbXByZXNzLnF1ZXVlID0gW107XG4gIH0gZWxzZSBpZiAob3V0c3RhdGUuY29tcHJlc3MudHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgb3V0c3RhdGUuY29tcHJlc3MuaW5zdGFuY2UgPSBmYWxzZTtcbiAgICBvdXRzdGF0ZS5jb21wcmVzcy5xdWV1ZSA9IG51bGw7XG4gIH1cbiAgaWYgKGluc3RhdGUuZGVjb21wcmVzcy50eXBlID09PSAnemxpYicpXG4gICAgaW5zdGF0ZS5kZWNvbXByZXNzLmluc3RhbmNlID0gemxpYi5jcmVhdGVJbmZsYXRlKFpMSUJfT1BUUyk7XG4gIGVsc2UgaWYgKGluc3RhdGUuZGVjb21wcmVzcy50eXBlID09PSAnbm9uZScpXG4gICAgaW5zdGF0ZS5kZWNvbXByZXNzLmluc3RhbmNlID0gZmFsc2U7XG5cbiAgc2VsZi5ieXRlc1NlbnQgPSBzZWxmLmJ5dGVzUmVjZWl2ZWQgPSAwO1xuXG4gIGlmIChvdXRzdGF0ZS5zdGF0dXMgPT09IE9VVF9SRUtFWUlORykge1xuICAgIG91dHN0YXRlLnN0YXR1cyA9IE9VVF9SRUFEWTtcblxuICAgIC8vIEVtcHR5IG91ciBvdXRib3VuZCBidWZmZXIgb2YgYW55IGRhdGEgd2UgdHJpZWQgdG8gc2VuZCBkdXJpbmcgdGhlXG4gICAgLy8gcmUta2V5aW5nIHByb2Nlc3NcbiAgICB2YXIgcXVldWUgPSBvdXRzdGF0ZS5yZWtleVF1ZXVlO1xuICAgIHZhciBxbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHZhciBxID0gMDtcblxuICAgIG91dHN0YXRlLnJla2V5UXVldWUgPSBbXTtcblxuICAgIGZvciAoOyBxIDwgcWxlbjsgKytxKSB7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHF1ZXVlW3FdKSlcbiAgICAgICAgc2VuZChzZWxmLCBxdWV1ZVtxXSk7XG4gICAgICBlbHNlXG4gICAgICAgIHNlbmQoc2VsZiwgcXVldWVbcV1bMF0sIHF1ZXVlW3FdWzFdKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgZW1wdHkgb3VyIGluYm91bmQgYnVmZmVyIG9mIGFueSBub24tdHJhbnNwb3J0IGxheWVyIHBhY2tldHMgd2VcbiAgICAvLyByZWNlaXZlZCBkdXJpbmcgdGhlIHJlLWtleWluZyBwcm9jZXNzXG4gICAgcXVldWUgPSBpbnN0YXRlLnJla2V5UXVldWU7XG4gICAgcWxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICBxID0gMDtcblxuICAgIGluc3RhdGUucmVrZXlRdWV1ZSA9IFtdO1xuXG4gICAgdmFyIGN1clNlcW5vID0gaW5zdGF0ZS5zZXFubztcbiAgICBmb3IgKDsgcSA8IHFsZW47ICsrcSkge1xuICAgICAgaW5zdGF0ZS5zZXFubyA9IHF1ZXVlW3FdWzBdO1xuICAgICAgaW5zdGF0ZS5wYXlsb2FkID0gcXVldWVbcV1bMV07XG4gICAgICBpZiAocGFyc2VQYWNrZXQoc2VsZikgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGlmIChpbnN0YXRlLnN0YXR1cyA9PT0gSU5fSU5JVCkge1xuICAgICAgICAvLyBXZSB3ZXJlIHJlc2V0IGR1ZSB0byBzb21lIGVycm9yL2Rpc2FncmVlbWVudCA/XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaW5zdGF0ZS5zZXFubyA9IGN1clNlcW5vO1xuICB9IGVsc2Uge1xuICAgIG91dHN0YXRlLnN0YXR1cyA9IE9VVF9SRUFEWTtcbiAgICBpZiAoaW5zdGF0ZS5zdGF0dXMgPT09IElOX1BBQ0tFVCkge1xuICAgICAgLy8gRXhwbGljaXRseSB1cGRhdGUgaW5jb21pbmcgcGFja2V0IHBhcnNlciBzdGF0dXMgaW4gb3JkZXIgdG8gZ2V0IHRoZVxuICAgICAgLy8gY29ycmVjdCBkZWNpcGhlciwgaG1hYywgZXRjLiBzdGF0ZXMuXG5cbiAgICAgIC8vIFdlIG9ubHkgZ2V0IGhlcmUgaWYgdGhlIGhvc3QgZmluZ2VycHJpbnQgY2FsbGJhY2sgd2FzIGNhbGxlZFxuICAgICAgLy8gYXN5bmNocm9ub3VzbHkgYW5kIHRoZSBpbmNvbWluZyBwYWNrZXQgcGFyc2VyIGlzIHN0aWxsIGV4cGVjdGluZyBhblxuICAgICAgLy8gdW5lbmNyeXB0ZWQgcGFja2V0LCBldGMuXG5cbiAgICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX1BBQ0tFVEJFRk9SRSAodXBkYXRlKSAoZXhwZWN0aW5nICdcbiAgICAgICAgICAgICAgICAgKyBpbkNpcGhlckluZm8uYmxvY2tMZW4gKyAnKScpO1xuICAgICAgLy8gV2FpdCBmb3IgdGhlIHJpZ2h0IG51bWJlciBvZiBieXRlcyBzbyB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBpbmNvbWluZ1xuICAgICAgLy8gcGFja2V0IGxlbmd0aFxuICAgICAgZXhwZWN0RGF0YShzZWxmLFxuICAgICAgICAgICAgICAgICBFWFBfVFlQRV9CWVRFUyxcbiAgICAgICAgICAgICAgICAgaW5DaXBoZXJJbmZvLmJsb2NrTGVuLFxuICAgICAgICAgICAgICAgICBpbnN0YXRlLmRlY3J5cHQuYnVmKTtcbiAgICB9XG4gICAgc2VsZi5lbWl0KCdyZWFkeScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBhY2tldFR5cGUoc2VsZiwgcGt0VHlwZSkge1xuICB2YXIga2V4ID0gc2VsZi5fc3RhdGUua2V4O1xuICBpZiAoa2V4KSB7XG4gICAgLy8gRGlzYW1iaWd1YXRlXG4gICAgc3dpdGNoIChwa3RUeXBlKSB7XG4gICAgICBjYXNlIDMwOlxuICAgICAgICByZXR1cm4ga2V4LnBrdEluaXQ7XG4gICAgICBjYXNlIDMxOlxuICAgICAgICBzd2l0Y2ggKGtleC50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgcmV0dXJuICdLRVhESF9SRVBMWSc7XG4gICAgICAgICAgY2FzZSAnZ3JvdXBleCc6XG4gICAgICAgICAgICByZXR1cm4gJ0tFWERIX0dFWF9HUk9VUCc7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAnS0VYRUNESF9SRVBMWSc7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDMzOlxuICAgICAgICBpZiAoa2V4LnR5cGUgPT09ICdncm91cGV4JylcbiAgICAgICAgICByZXR1cm4gJ0tFWERIX0dFWF9SRVBMWSc7XG4gICAgfVxuICB9XG4gIHJldHVybiBNRVNTQUdFW3BrdFR5cGVdO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhY2tldChzZWxmLCBjYWxsYmFjaykge1xuICB2YXIgaW5zdGF0ZSA9IHNlbGYuX3N0YXRlLmluY29taW5nO1xuICB2YXIgb3V0c3RhdGUgPSBzZWxmLl9zdGF0ZS5vdXRnb2luZztcbiAgdmFyIHBheWxvYWQgPSBpbnN0YXRlLnBheWxvYWQ7XG4gIHZhciBzZXFubyA9IGluc3RhdGUuc2Vxbm87XG4gIHZhciBzZXJ2aWNlTmFtZTtcbiAgdmFyIGxhbmc7XG4gIHZhciBtZXNzYWdlO1xuICB2YXIgaW5mbztcbiAgdmFyIGNoYW47XG4gIHZhciBkYXRhO1xuICB2YXIgc3JjSVA7XG4gIHZhciBzcmNQb3J0O1xuICB2YXIgc2VuZGVyO1xuICB2YXIgd2luZG93O1xuICB2YXIgcGFja2V0U2l6ZTtcbiAgdmFyIHJlY2lwaWVudDtcbiAgdmFyIGRlc2NyaXB0aW9uO1xuICB2YXIgc29ja2V0UGF0aDtcblxuICBpZiAoKytpbnN0YXRlLnNlcW5vID4gTUFYX1NFUU5PKVxuICAgIGluc3RhdGUuc2Vxbm8gPSAwO1xuXG4gIGlmIChpbnN0YXRlLmlnbm9yZU5leHQpIHtcbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBQYWNrZXQgaWdub3JlZCcpO1xuICAgIGluc3RhdGUuaWdub3JlTmV4dCA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0eXBlID0gcGF5bG9hZFswXTtcbiAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgd2UgcmVjZWl2ZSBhIHBhY2tldCBkdXJpbmcgaGFuZHNoYWtlIHRoYXQgaXMgbm90IHRoZSBleHBlY3RlZCBwYWNrZXRcbiAgLy8gYW5kIGl0IGlzIG5vdCBvbmUgb2Y6IERJU0NPTk5FQ1QsIElHTk9SRSwgVU5JTVBMRU1FTlRFRCwgb3IgREVCVUcsIHRoZW4gd2VcbiAgLy8gY2xvc2UgdGhlIHN0cmVhbVxuICBpZiAob3V0c3RhdGUuc3RhdHVzICE9PSBPVVRfUkVBRFlcbiAgICAgICYmIGdldFBhY2tldFR5cGUoc2VsZiwgdHlwZSkgIT09IGluc3RhdGUuZXhwZWN0ZWRQYWNrZXRcbiAgICAgICYmIHR5cGUgPCAxXG4gICAgICAmJiB0eXBlID4gNCkge1xuICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX1BBQ0tFVERBVEFBRlRFUiwgZXhwZWN0ZWQ6ICdcbiAgICAgICAgICAgICAgICsgaW5zdGF0ZS5leHBlY3RlZFBhY2tldFxuICAgICAgICAgICAgICAgKyAnIGJ1dCBnb3Q6ICdcbiAgICAgICAgICAgICAgICsgZ2V0UGFja2V0VHlwZShzZWxmLCB0eXBlKSk7XG4gICAgLy8gWFhYOiBQb3RlbnRpYWwgaXNzdWUgd2hlcmUgdGhlIG1vZHVsZSB1c2VyIGRlY2lkZXMgdG8gaW5pdGlhdGUgYSByZWtleVxuICAgIC8vIHZpYSBLRVhJTklUKCkgKHdoaWNoIHNldHMgYGV4cGVjdGVkUGFja2V0YCkgYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0XG4gICAgLy8gYW5kIHRoZXJlIGlzIHN0aWxsIGFub3RoZXIgcGFja2V0IGFscmVhZHkgd2FpdGluZyB0byBiZSBwYXJzZWQgYXQgdGhlXG4gICAgLy8gdGltZSB0aGUgS0VYSU5JVCBpcyB3cml0dGVuLiB0aGlzIHdpbGwgY2F1c2UgYW4gdW5leHBlY3RlZCBkaXNjb25uZWN0Li4uXG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLlBST1RPQ09MX0VSUk9SKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdSZWNlaXZlZCB1bmV4cGVjdGVkIHBhY2tldCcpO1xuICAgIGVyci5sZXZlbCA9ICdwcm90b2NvbCc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGUgPT09IE1FU1NBR0UuQ0hBTk5FTF9EQVRBKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfREFUQVxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICBzdHJpbmcgICAgZGF0YVxuICAgICovXG4gICAgY2hhbiA9IHJlYWRJbnQocGF5bG9hZCwgMSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChjaGFuID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBUT0RPOiBNQVhfQ0hBTl9EQVRBX0xFTiBoZXJlIHNob3VsZCByZWFsbHkgYmUgZGVwZW5kZW50IHVwb24gdGhlXG4gICAgLy8gICAgICAgY2hhbm5lbCdzIHBhY2tldCBzaXplLiBUaGUgc3NoMiBtb2R1bGUgdXNlcyAzMktCLCBzbyB3ZSdsbCBoYXJkXG4gICAgLy8gICAgICAgY29kZSB0aGlzIGZvciBub3cgLi4uXG4gICAgZGF0YSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgNSwgc2VsZiwgY2FsbGJhY2ssIDMyNzY4KTtcbiAgICBpZiAoZGF0YSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6IENIQU5ORUxfREFUQSAoJ1xuICAgICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgICArICcpJyk7XG4gICAgc2VsZi5lbWl0KCdDSEFOTkVMX0RBVEE6JyArIGNoYW4sIGRhdGEpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NBR0UuQ0hBTk5FTF9FWFRFTkRFRF9EQVRBKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfRVhURU5ERURfREFUQVxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICB1aW50MzIgICAgZGF0YV90eXBlX2NvZGVcbiAgICAgIHN0cmluZyAgICBkYXRhXG4gICAgKi9cbiAgICBjaGFuID0gcmVhZEludChwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNoYW4gPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBkYXRhVHlwZSA9IHJlYWRJbnQocGF5bG9hZCwgNSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChkYXRhVHlwZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgZGF0YSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgOSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChkYXRhID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIHBhY2tldDogJ1xuICAgICAgICAgICAgICAgKyAnQ0hBTk5FTF9FWFRFTkRFRF9EQVRBICgnXG4gICAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICAgICsgJyknKTtcbiAgICBzZWxmLmVtaXQoJ0NIQU5ORUxfRVhURU5ERURfREFUQTonICsgY2hhbiwgZGF0YVR5cGUsIGRhdGEpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NBR0UuQ0hBTk5FTF9XSU5ET1dfQURKVVNUKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfV0lORE9XX0FESlVTVFxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICB1aW50MzIgICAgYnl0ZXMgdG8gYWRkXG4gICAgKi9cbiAgICBjaGFuID0gcmVhZEludChwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNoYW4gPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBieXRlc1RvQWRkID0gcmVhZEludChwYXlsb2FkLCA1LCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGJ5dGVzVG9BZGQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX1BBQ0tFVERBVEFBRlRFUiwgcGFja2V0OiAnXG4gICAgICAgICAgICAgICArICdDSEFOTkVMX1dJTkRPV19BREpVU1QgKCdcbiAgICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICAgKyAnLCAnXG4gICAgICAgICAgICAgICArIGJ5dGVzVG9BZGRcbiAgICAgICAgICAgICAgICsgJyknKTtcbiAgICBzZWxmLmVtaXQoJ0NIQU5ORUxfV0lORE9XX0FESlVTVDonICsgY2hhbiwgYnl0ZXNUb0FkZCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5DSEFOTkVMX1NVQ0NFU1MpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9TVUNDRVNTXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAqL1xuICAgIGNoYW4gPSByZWFkSW50KHBheWxvYWQsIDEsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoY2hhbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6IENIQU5ORUxfU1VDQ0VTUyAoJ1xuICAgICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgICArICcpJyk7XG4gICAgc2VsZi5lbWl0KCdDSEFOTkVMX1NVQ0NFU1M6JyArIGNoYW4pO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NBR0UuQ0hBTk5FTF9GQUlMVVJFKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfRkFJTFVSRVxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgKi9cbiAgICBjaGFuID0gcmVhZEludChwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNoYW4gPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX1BBQ0tFVERBVEFBRlRFUiwgcGFja2V0OiBDSEFOTkVMX0ZBSUxVUkUgKCdcbiAgICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICAgKyAnKScpO1xuICAgIHNlbGYuZW1pdCgnQ0hBTk5FTF9GQUlMVVJFOicgKyBjaGFuKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLkNIQU5ORUxfRU9GKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfRU9GXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAqL1xuICAgIGNoYW4gPSByZWFkSW50KHBheWxvYWQsIDEsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoY2hhbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6IENIQU5ORUxfRU9GICgnXG4gICAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICAgICsgJyknKTtcbiAgICBzZWxmLmVtaXQoJ0NIQU5ORUxfRU9GOicgKyBjaGFuKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLkNIQU5ORUxfT1BFTikge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX09QRU5cbiAgICAgIHN0cmluZyAgICBjaGFubmVsIHR5cGUgaW4gVVMtQVNDSUkgb25seVxuICAgICAgdWludDMyICAgIHNlbmRlciBjaGFubmVsXG4gICAgICB1aW50MzIgICAgaW5pdGlhbCB3aW5kb3cgc2l6ZVxuICAgICAgdWludDMyICAgIG1heGltdW0gcGFja2V0IHNpemVcbiAgICAgIC4uLi4gICAgICBjaGFubmVsIHR5cGUgc3BlY2lmaWMgZGF0YSBmb2xsb3dzXG4gICAgKi9cbiAgICB2YXIgY2hhblR5cGUgPSByZWFkU3RyaW5nKHBheWxvYWQsIDEsICdhc2NpaScsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoY2hhblR5cGUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHNlbmRlciA9IHJlYWRJbnQocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHNlbmRlciA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2luZG93ID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh3aW5kb3cgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHBhY2tldFNpemUgPSByZWFkSW50KHBheWxvYWQsIHBheWxvYWQuX3BvcyArPSA0LCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHBhY2tldFNpemUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBjaGFubmVsO1xuXG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6IENIQU5ORUxfT1BFTiAoJ1xuICAgICAgICAgICAgICAgKyBzZW5kZXJcbiAgICAgICAgICAgICAgICsgJywgJ1xuICAgICAgICAgICAgICAgKyBjaGFuVHlwZVxuICAgICAgICAgICAgICAgKyAnKScpO1xuXG4gICAgaWYgKGNoYW5UeXBlID09PSAnZm9yd2FyZGVkLXRjcGlwJyAvLyBTZXJ2ZXItPkNsaWVudFxuICAgICAgICB8fCBjaGFuVHlwZSA9PT0gJ2RpcmVjdC10Y3BpcCcpIHsgLy8gQ2xpZW50LT5TZXJ2ZXJcbiAgICAgIC8qXG4gICAgICAgIHN0cmluZyAgICBhZGRyZXNzIHRoYXQgd2FzIGNvbm5lY3RlZCAvIGhvc3QgdG8gY29ubmVjdFxuICAgICAgICB1aW50MzIgICAgcG9ydCB0aGF0IHdhcyBjb25uZWN0ZWQgLyBwb3J0IHRvIGNvbm5lY3RcbiAgICAgICAgc3RyaW5nICAgIG9yaWdpbmF0b3IgSVAgYWRkcmVzc1xuICAgICAgICB1aW50MzIgICAgb3JpZ2luYXRvciBwb3J0XG4gICAgICAqL1xuICAgICAgdmFyIGRlc3RJUCA9IHJlYWRTdHJpbmcocGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuX3BvcyArPSA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzY2lpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICBpZiAoZGVzdElQID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGRlc3RQb3J0ID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChkZXN0UG9ydCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIHNyY0lQID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKHNyY0lQID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgc3JjUG9ydCA9IHJlYWRJbnQocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAoc3JjUG9ydCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNoYW5uZWwgPSB7XG4gICAgICAgIHR5cGU6IGNoYW5UeXBlLFxuICAgICAgICBzZW5kZXI6IHNlbmRlcixcbiAgICAgICAgd2luZG93OiB3aW5kb3csXG4gICAgICAgIHBhY2tldFNpemU6IHBhY2tldFNpemUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBkZXN0SVA6IGRlc3RJUCxcbiAgICAgICAgICBkZXN0UG9ydDogZGVzdFBvcnQsXG4gICAgICAgICAgc3JjSVA6IHNyY0lQLFxuICAgICAgICAgIHNyY1BvcnQ6IHNyY1BvcnRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKC8vIFNlcnZlci0+Q2xpZW50XG4gICAgICAgICAgICAgICBjaGFuVHlwZSA9PT0gJ2ZvcndhcmRlZC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbSdcbiAgICAgICAgICAgICAgIC8vIENsaWVudC0+U2VydmVyXG4gICAgICAgICAgICAgICB8fCBjaGFuVHlwZSA9PT0gJ2RpcmVjdC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbScpIHtcbiAgICAgIC8qXG4gICAgICAgIHN0cmluZyAgICBzb2NrZXQgcGF0aFxuICAgICAgICBzdHJpbmcgICAgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAgICAgICovXG4gICAgICBzb2NrZXRQYXRoID0gcmVhZFN0cmluZyhwYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5fcG9zICs9IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmOCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgaWYgKHNvY2tldFBhdGggPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjaGFubmVsID0ge1xuICAgICAgICB0eXBlOiBjaGFuVHlwZSxcbiAgICAgICAgc2VuZGVyOiBzZW5kZXIsXG4gICAgICAgIHdpbmRvdzogd2luZG93LFxuICAgICAgICBwYWNrZXRTaXplOiBwYWNrZXRTaXplLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc29ja2V0UGF0aDogc29ja2V0UGF0aCxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNoYW5UeXBlID09PSAneDExJykgeyAvLyBTZXJ2ZXItPkNsaWVudFxuICAgICAgLypcbiAgICAgICAgc3RyaW5nICAgIG9yaWdpbmF0b3IgYWRkcmVzcyAoZS5nLiwgXCIxOTIuMTY4LjcuMzhcIilcbiAgICAgICAgdWludDMyICAgIG9yaWdpbmF0b3IgcG9ydFxuICAgICAgKi9cbiAgICAgIHNyY0lQID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKHNyY0lQID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgc3JjUG9ydCA9IHJlYWRJbnQocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAoc3JjUG9ydCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNoYW5uZWwgPSB7XG4gICAgICAgIHR5cGU6IGNoYW5UeXBlLFxuICAgICAgICBzZW5kZXI6IHNlbmRlcixcbiAgICAgICAgd2luZG93OiB3aW5kb3csXG4gICAgICAgIHBhY2tldFNpemU6IHBhY2tldFNpemUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBzcmNJUDogc3JjSVAsXG4gICAgICAgICAgc3JjUG9ydDogc3JjUG9ydFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAnc2Vzc2lvbicgKENsaWVudC0+U2VydmVyKSwgJ2F1dGgtYWdlbnRAb3BlbnNzaC5jb20nIChTZXJ2ZXItPkNsaWVudClcbiAgICAgIGNoYW5uZWwgPSB7XG4gICAgICAgIHR5cGU6IGNoYW5UeXBlLFxuICAgICAgICBzZW5kZXI6IHNlbmRlcixcbiAgICAgICAgd2luZG93OiB3aW5kb3csXG4gICAgICAgIHBhY2tldFNpemU6IHBhY2tldFNpemUsXG4gICAgICAgIGRhdGE6IHt9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHNlbGYuZW1pdCgnQ0hBTk5FTF9PUEVOJywgY2hhbm5lbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5DSEFOTkVMX09QRU5fQ09ORklSTUFUSU9OKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfT1BFTl9DT05GSVJNQVRJT05cbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgdWludDMyICAgIHNlbmRlciBjaGFubmVsXG4gICAgICB1aW50MzIgICAgaW5pdGlhbCB3aW5kb3cgc2l6ZVxuICAgICAgdWludDMyICAgIG1heGltdW0gcGFja2V0IHNpemVcbiAgICAgIC4uLi4gICAgICBjaGFubmVsIHR5cGUgc3BlY2lmaWMgZGF0YSBmb2xsb3dzXG4gICAgKi9cbiAgICAvLyBcIlRoZSAncmVjaXBpZW50IGNoYW5uZWwnIGlzIHRoZSBjaGFubmVsIG51bWJlciBnaXZlbiBpbiB0aGVcbiAgICAvLyBvcmlnaW5hbCBvcGVuIHJlcXVlc3QsIGFuZCAnc2VuZGVyIGNoYW5uZWwnIGlzIHRoZSBjaGFubmVsIG51bWJlclxuICAgIC8vIGFsbG9jYXRlZCBieSB0aGUgb3RoZXIgc2lkZS5cIlxuICAgIHJlY2lwaWVudCA9IHJlYWRJbnQocGF5bG9hZCwgMSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChyZWNpcGllbnQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHNlbmRlciA9IHJlYWRJbnQocGF5bG9hZCwgNSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChzZW5kZXIgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHdpbmRvdyA9IHJlYWRJbnQocGF5bG9hZCwgOSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh3aW5kb3cgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHBhY2tldFNpemUgPSByZWFkSW50KHBheWxvYWQsIDEzLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHBhY2tldFNpemUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaW5mbyA9IHtcbiAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50LFxuICAgICAgc2VuZGVyOiBzZW5kZXIsXG4gICAgICB3aW5kb3c6IHdpbmRvdyxcbiAgICAgIHBhY2tldFNpemU6IHBhY2tldFNpemVcbiAgICB9O1xuXG4gICAgaWYgKHBheWxvYWQubGVuZ3RoID4gMTcpXG4gICAgICBpbmZvLmRhdGEgPSBwYXlsb2FkLnNsaWNlKDE3KTtcblxuICAgIHNlbGYuZW1pdCgnQ0hBTk5FTF9PUEVOX0NPTkZJUk1BVElPTjonICsgaW5mby5yZWNpcGllbnQsIGluZm8pO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NBR0UuQ0hBTk5FTF9PUEVOX0ZBSUxVUkUpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9PUEVOX0ZBSUxVUkVcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgdWludDMyICAgIHJlYXNvbiBjb2RlXG4gICAgICBzdHJpbmcgICAgZGVzY3JpcHRpb24gaW4gSVNPLTEwNjQ2IFVURi04IGVuY29kaW5nXG4gICAgICBzdHJpbmcgICAgbGFuZ3VhZ2UgdGFnXG4gICAgKi9cbiAgICByZWNpcGllbnQgPSByZWFkSW50KHBheWxvYWQsIDEsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAocmVjaXBpZW50ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVhc29uQ29kZSA9IHJlYWRJbnQocGF5bG9hZCwgNSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChyZWFzb25Db2RlID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBkZXNjcmlwdGlvbiA9IHJlYWRTdHJpbmcocGF5bG9hZCwgOSwgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsYW5nID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChsYW5nID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBwYXlsb2FkLl9wb3MgPSA5O1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlYXNvbkNvZGU6IHJlYXNvbkNvZGUsXG4gICAgICByZWFzb246IENIQU5ORUxfT1BFTl9GQUlMVVJFW3JlYXNvbkNvZGVdLFxuICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgbGFuZzogbGFuZ1xuICAgIH07XG5cbiAgICBzZWxmLmVtaXQoJ0NIQU5ORUxfT1BFTl9GQUlMVVJFOicgKyBpbmZvLnJlY2lwaWVudCwgaW5mbyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5DSEFOTkVMX0NMT1NFKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfQ0xPU0VcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICovXG4gICAgY2hhbiA9IHJlYWRJbnQocGF5bG9hZCwgMSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChjaGFuID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIHBhY2tldDogQ0hBTk5FTF9DTE9TRSAoJ1xuICAgICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgICArICcpJyk7XG4gICAgc2VsZi5lbWl0KCdDSEFOTkVMX0NMT1NFOicgKyBjaGFuKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLklHTk9SRSkge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19JR05PUkVcbiAgICAgIHN0cmluZyAgICBkYXRhXG4gICAgKi9cbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLkRJU0NPTk5FQ1QpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfRElTQ09OTkVDVFxuICAgICAgdWludDMyICAgIHJlYXNvbiBjb2RlXG4gICAgICBzdHJpbmcgICAgZGVzY3JpcHRpb24gaW4gSVNPLTEwNjQ2IFVURi04IGVuY29kaW5nXG4gICAgICBzdHJpbmcgICAgbGFuZ3VhZ2UgdGFnXG4gICAgKi9cbiAgICB2YXIgcmVhc29uID0gcmVhZEludChwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHJlYXNvbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlYXNvblRleHQgPSBESVNDT05ORUNUX1JFQVNPTltyZWFzb25dO1xuICAgIGRlc2NyaXB0aW9uID0gcmVhZFN0cmluZyhwYXlsb2FkLCA1LCAndXRmOCcsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoZGVzY3JpcHRpb24gPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHBheWxvYWQuX3BvcyA8IHBheWxvYWQubGVuZ3RoKVxuICAgICAgbGFuZyA9IHJlYWRTdHJpbmcocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCAnYXNjaWknLCBzZWxmLCBjYWxsYmFjayk7XG5cbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIHBhY2tldDogRElTQ09OTkVDVCAoJ1xuICAgICAgICAgICAgICAgKyByZWFzb25UZXh0XG4gICAgICAgICAgICAgICArICcpJyk7XG5cbiAgICBzZWxmLmVtaXQoJ0RJU0NPTk5FQ1QnLCByZWFzb25UZXh0LCByZWFzb24sIGRlc2NyaXB0aW9uLCBsYW5nKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLkRFQlVHKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0RFQlVHXG4gICAgICBib29sZWFuICAgYWx3YXlzX2Rpc3BsYXlcbiAgICAgIHN0cmluZyAgICBtZXNzYWdlIGluIElTTy0xMDY0NiBVVEYtOCBlbmNvZGluZ1xuICAgICAgc3RyaW5nICAgIGxhbmd1YWdlIHRhZ1xuICAgICovXG4gICAgbWVzc2FnZSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgMiwgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKG1lc3NhZ2UgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxhbmcgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChsYW5nID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHNlbGYuZW1pdCgnREVCVUcnLCBtZXNzYWdlLCBsYW5nKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLk5FV0tFWVMpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfTkVXX0tFWVNcbiAgICAqL1xuICAgIHNlbGYuZW1pdCgnTkVXS0VZUycpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NBR0UuU0VSVklDRV9SRVFVRVNUKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX1NFUlZJQ0VfUkVRVUVTVFxuICAgICAgc3RyaW5nICAgIHNlcnZpY2UgbmFtZVxuICAgICovXG4gICAgc2VydmljZU5hbWUgPSByZWFkU3RyaW5nKHBheWxvYWQsIDEsICdhc2NpaScsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoc2VydmljZU5hbWUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgc2VsZi5lbWl0KCdTRVJWSUNFX1JFUVVFU1QnLCBzZXJ2aWNlTmFtZSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5TRVJWSUNFX0FDQ0VQVCkge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19TRVJWSUNFX0FDQ0VQVFxuICAgICAgc3RyaW5nICAgIHNlcnZpY2UgbmFtZVxuICAgICovXG4gICAgc2VydmljZU5hbWUgPSByZWFkU3RyaW5nKHBheWxvYWQsIDEsICdhc2NpaScsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoc2VydmljZU5hbWUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgc2VsZi5lbWl0KCdTRVJWSUNFX0FDQ0VQVCcsIHNlcnZpY2VOYW1lKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLlVTRVJBVVRIX1JFUVVFU1QpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfUkVRVUVTVFxuICAgICAgc3RyaW5nICAgIHVzZXIgbmFtZSBpbiBJU08tMTA2NDYgVVRGLTggZW5jb2RpbmcgW1JGQzM2MjldXG4gICAgICBzdHJpbmcgICAgc2VydmljZSBuYW1lIGluIFVTLUFTQ0lJXG4gICAgICBzdHJpbmcgICAgbWV0aG9kIG5hbWUgaW4gVVMtQVNDSUlcbiAgICAgIC4uLi4gICAgICBtZXRob2Qgc3BlY2lmaWMgZmllbGRzXG4gICAgKi9cbiAgICB2YXIgdXNlcm5hbWUgPSByZWFkU3RyaW5nKHBheWxvYWQsIDEsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh1c2VybmFtZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHN2Y05hbWUgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChzdmNOYW1lID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgbWV0aG9kID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICdhc2NpaScsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAobWV0aG9kID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBtZXRob2REYXRhO1xuICAgIHZhciBtZXRob2REZXNjO1xuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgbWV0aG9kRGF0YSA9IHJlYWRTdHJpbmcocGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuX3BvcyArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmOCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgaWYgKG1ldGhvZERhdGEgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdwdWJsaWNrZXknIHx8IG1ldGhvZCA9PT0gJ2hvc3RiYXNlZCcpIHtcbiAgICAgIHZhciBwa1NpZ25lZDtcbiAgICAgIHZhciBrZXlBbGdvO1xuICAgICAgdmFyIGtleTtcbiAgICAgIHZhciBzaWduYXR1cmU7XG4gICAgICB2YXIgYmxvYjtcbiAgICAgIHZhciBob3N0bmFtZTtcbiAgICAgIHZhciB1c2VybG9jYWw7XG4gICAgICBpZiAobWV0aG9kID09PSAncHVibGlja2V5Jykge1xuICAgICAgICBwa1NpZ25lZCA9IHBheWxvYWRbcGF5bG9hZC5fcG9zKytdO1xuICAgICAgICBpZiAocGtTaWduZWQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHBrU2lnbmVkID0gKHBrU2lnbmVkICE9PSAwKTtcbiAgICAgIH1cbiAgICAgIGtleUFsZ28gPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKGtleUFsZ28gPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBrZXkgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3Bvcywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKGtleSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgaWYgKHBrU2lnbmVkIHx8IG1ldGhvZCA9PT0gJ2hvc3RiYXNlZCcpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2hvc3RiYXNlZCcpIHtcbiAgICAgICAgICBob3N0bmFtZSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCAnYXNjaWknLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKGhvc3RuYW1lID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB1c2VybG9jYWwgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKHVzZXJsb2NhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYmxvYkVuZCA9IHBheWxvYWQuX3BvcztcbiAgICAgICAgc2lnbmF0dXJlID0gcmVhZFN0cmluZyhwYXlsb2FkLCBibG9iRW5kLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICAgIGlmIChzaWduYXR1cmUgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAoc2lnbmF0dXJlLmxlbmd0aCA+ICg0ICsga2V5QWxnby5sZW5ndGggKyA0KVxuICAgICAgICAgICAgJiYgc2lnbmF0dXJlLnRvU3RyaW5nKCdhc2NpaScsIDQsIDQgKyBrZXlBbGdvLmxlbmd0aCkgPT09IGtleUFsZ28pIHtcbiAgICAgICAgICAvLyBTa2lwIGFsZ29MZW4gKyBhbGdvICsgc2lnTGVuXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlLnNsaWNlKDQgKyBrZXlBbGdvLmxlbmd0aCArIDQpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2lnbmF0dXJlID0gc2lnU1NIVG9BU04xKHNpZ25hdHVyZSwga2V5QWxnbywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgICBpZiAoc2lnbmF0dXJlID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgYmxvYiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgb3V0c3RhdGUuc2Vzc2lvbklkLmxlbmd0aCArIGJsb2JFbmQpO1xuICAgICAgICB3cml0ZVVJbnQzMkJFKGJsb2IsIG91dHN0YXRlLnNlc3Npb25JZC5sZW5ndGgsIDApO1xuICAgICAgICBvdXRzdGF0ZS5zZXNzaW9uSWQuY29weShibG9iLCA0KTtcbiAgICAgICAgcGF5bG9hZC5jb3B5KGJsb2IsIDQgKyBvdXRzdGF0ZS5zZXNzaW9uSWQubGVuZ3RoLCAwLCBibG9iRW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1ldGhvZERlc2MgPSAncHVibGlja2V5IC0tIGNoZWNrJztcbiAgICAgIH1cblxuICAgICAgbWV0aG9kRGF0YSA9IHtcbiAgICAgICAga2V5QWxnbzoga2V5QWxnbyxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlLFxuICAgICAgICBibG9iOiBibG9iLFxuICAgICAgICBsb2NhbEhvc3RuYW1lOiBob3N0bmFtZSxcbiAgICAgICAgbG9jYWxVc2VybmFtZTogdXNlcmxvY2FsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAna2V5Ym9hcmQtaW50ZXJhY3RpdmUnKSB7XG4gICAgICAvLyBTa2lwIGxhbmd1YWdlLCBpdCdzIGRlcHJlY2F0ZWRcbiAgICAgIHZhciBza2lwTGVuID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChza2lwTGVuID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgbWV0aG9kRGF0YSA9IHJlYWRTdHJpbmcocGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuX3BvcyArIDQgKyBza2lwTGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3V0ZjgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgIGlmIChtZXRob2REYXRhID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kICE9PSAnbm9uZScpXG4gICAgICBtZXRob2REYXRhID0gcGF5bG9hZC5zbGljZShwYXlsb2FkLl9wb3MpO1xuXG4gICAgaWYgKG1ldGhvZERlc2MgPT09IHVuZGVmaW5lZClcbiAgICAgIG1ldGhvZERlc2MgPSBtZXRob2Q7XG5cbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIHBhY2tldDogVVNFUkFVVEhfUkVRVUVTVCAoJ1xuICAgICAgICAgICAgICAgKyBtZXRob2REZXNjXG4gICAgICAgICAgICAgICArICcpJyk7XG5cbiAgICBzZWxmLl9zdGF0ZS5hdXRoc1F1ZXVlLnB1c2gobWV0aG9kKTtcbiAgICBzZWxmLmVtaXQoJ1VTRVJBVVRIX1JFUVVFU1QnLCB1c2VybmFtZSwgc3ZjTmFtZSwgbWV0aG9kLCBtZXRob2REYXRhKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLlVTRVJBVVRIX1NVQ0NFU1MpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfU1VDQ0VTU1xuICAgICovXG4gICAgaWYgKG91dHN0YXRlLmNvbXByZXNzLnR5cGUgPT09ICd6bGliQG9wZW5zc2guY29tJykge1xuICAgICAgb3V0c3RhdGUuY29tcHJlc3MuaW5zdGFuY2UgPSB6bGliLmNyZWF0ZURlZmxhdGUoWkxJQl9PUFRTKTtcbiAgICAgIG91dHN0YXRlLmNvbXByZXNzLnF1ZXVlID0gW107XG4gICAgfVxuICAgIGlmIChpbnN0YXRlLmRlY29tcHJlc3MudHlwZSA9PT0gJ3psaWJAb3BlbnNzaC5jb20nKVxuICAgICAgaW5zdGF0ZS5kZWNvbXByZXNzLmluc3RhbmNlID0gemxpYi5jcmVhdGVJbmZsYXRlKFpMSUJfT1BUUyk7XG5cbiAgICBzZWxmLl9zdGF0ZS5hdXRoc1F1ZXVlLnNoaWZ0KCk7XG5cbiAgICBzZWxmLmVtaXQoJ1VTRVJBVVRIX1NVQ0NFU1MnKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLlVTRVJBVVRIX0ZBSUxVUkUpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfRkFJTFVSRVxuICAgICAgbmFtZS1saXN0ICAgIGF1dGhlbnRpY2F0aW9ucyB0aGF0IGNhbiBjb250aW51ZVxuICAgICAgYm9vbGVhbiAgICAgIHBhcnRpYWwgc3VjY2Vzc1xuICAgICovXG4gICAgdmFyIGF1dGhzID0gcmVhZFN0cmluZyhwYXlsb2FkLCAxLCAnYXNjaWknLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGF1dGhzID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcGFydFN1Y2Nlc3MgPSBwYXlsb2FkW3BheWxvYWQuX3Bvc107XG4gICAgaWYgKHBhcnRTdWNjZXNzID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBwYXJ0U3VjY2VzcyA9IChwYXJ0U3VjY2VzcyAhPT0gMCk7XG4gICAgYXV0aHMgPSBhdXRocy5zcGxpdCgnLCcpO1xuXG4gICAgc2VsZi5fc3RhdGUuYXV0aHNRdWV1ZS5zaGlmdCgpO1xuICAgIHNlbGYuZW1pdCgnVVNFUkFVVEhfRkFJTFVSRScsIGF1dGhzLCBwYXJ0U3VjY2Vzcyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5VU0VSQVVUSF9CQU5ORVIpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfQkFOTkVSXG4gICAgICBzdHJpbmcgICAgbWVzc2FnZSBpbiBJU08tMTA2NDYgVVRGLTggZW5jb2RpbmdcbiAgICAgIHN0cmluZyAgICBsYW5ndWFnZSB0YWdcbiAgICAqL1xuICAgIG1lc3NhZ2UgPSByZWFkU3RyaW5nKHBheWxvYWQsIDEsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChtZXNzYWdlID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsYW5nID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChsYW5nID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHNlbGYuZW1pdCgnVVNFUkFVVEhfQkFOTkVSJywgbWVzc2FnZSwgbGFuZyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5HTE9CQUxfUkVRVUVTVCkge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19HTE9CQUxfUkVRVUVTVFxuICAgICAgc3RyaW5nICAgIHJlcXVlc3QgbmFtZSBpbiBVUy1BU0NJSSBvbmx5XG4gICAgICBib29sZWFuICAgd2FudCByZXBseVxuICAgICAgLi4uLiAgICAgIHJlcXVlc3Qtc3BlY2lmaWMgZGF0YSBmb2xsb3dzXG4gICAgKi9cbiAgICB2YXIgcmVxdWVzdCA9IHJlYWRTdHJpbmcocGF5bG9hZCwgMSwgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChyZXF1ZXN0ID09PSBmYWxzZSkge1xuICAgICAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6IEdMT0JBTF9SRVFVRVNUJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX1BBQ0tFVERBVEFBRlRFUiwgcGFja2V0OiBHTE9CQUxfUkVRVUVTVCAoJ1xuICAgICAgICAgICAgICAgKyByZXF1ZXN0XG4gICAgICAgICAgICAgICArICcpJyk7XG5cbiAgICB2YXIgd2FudFJlcGx5ID0gcGF5bG9hZFtwYXlsb2FkLl9wb3MrK107XG4gICAgaWYgKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHdhbnRSZXBseSA9ICh3YW50UmVwbHkgIT09IDApO1xuXG4gICAgdmFyIHJlcURhdGE7XG4gICAgaWYgKHJlcXVlc3QgPT09ICd0Y3BpcC1mb3J3YXJkJyB8fCByZXF1ZXN0ID09PSAnY2FuY2VsLXRjcGlwLWZvcndhcmQnKSB7XG4gICAgICB2YXIgYmluZEFkZHIgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKGJpbmRBZGRyID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGJpbmRQb3J0ID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChiaW5kUG9ydCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIHJlcURhdGEgPSB7XG4gICAgICAgIGJpbmRBZGRyOiBiaW5kQWRkcixcbiAgICAgICAgYmluZFBvcnQ6IGJpbmRQb3J0XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ3N0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20nXG4gICAgICAgICAgICAgICB8fCByZXF1ZXN0ID09PSAnY2FuY2VsLXN0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20nKSB7XG4gICAgICBzb2NrZXRQYXRoID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKHNvY2tldFBhdGggPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICByZXFEYXRhID0ge1xuICAgICAgICBzb2NrZXRQYXRoOiBzb2NrZXRQYXRoXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ25vLW1vcmUtc2Vzc2lvbnNAb3BlbnNzaC5jb20nKSB7XG4gICAgICAvLyBObyBkYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcURhdGEgPSBwYXlsb2FkLnNsaWNlKHBheWxvYWQuX3Bvcyk7XG4gICAgfVxuXG4gICAgc2VsZi5lbWl0KCdHTE9CQUxfUkVRVUVTVCcsIHJlcXVlc3QsIHdhbnRSZXBseSwgcmVxRGF0YSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5SRVFVRVNUX1NVQ0NFU1MpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfUkVRVUVTVF9TVUNDRVNTXG4gICAgICAuLi4uICAgICAgcmVzcG9uc2Ugc3BlY2lmaWMgZGF0YVxuICAgICovXG4gICAgaWYgKHBheWxvYWQubGVuZ3RoID4gMSlcbiAgICAgIHNlbGYuZW1pdCgnUkVRVUVTVF9TVUNDRVNTJywgcGF5bG9hZC5zbGljZSgxKSk7XG4gICAgZWxzZVxuICAgICAgc2VsZi5lbWl0KCdSRVFVRVNUX1NVQ0NFU1MnKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLlJFUVVFU1RfRkFJTFVSRSkge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19SRVFVRVNUX0ZBSUxVUkVcbiAgICAqL1xuICAgIHNlbGYuZW1pdCgnUkVRVUVTVF9GQUlMVVJFJyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5VTklNUExFTUVOVEVEKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX1VOSU1QTEVNRU5URURcbiAgICAgIHVpbnQzMiAgICBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyIG9mIHJlamVjdGVkIG1lc3NhZ2VcbiAgICAqL1xuICAgIC8vIFRPRE9cbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLktFWElOSVQpXG4gICAgcmV0dXJuIHBhcnNlX0tFWElOSVQoc2VsZiwgY2FsbGJhY2spO1xuICBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLkNIQU5ORUxfUkVRVUVTVClcbiAgICByZXR1cm4gcGFyc2VfQ0hBTk5FTF9SRVFVRVNUKHNlbGYsIGNhbGxiYWNrKTtcbiAgZWxzZSBpZiAodHlwZSA+PSAzMCAmJiB0eXBlIDw9IDQ5KSAvLyBLZXkgZXhjaGFuZ2UgbWV0aG9kLXNwZWNpZmljIG1lc3NhZ2VzXG4gICAgcmV0dXJuIHBhcnNlX0tFWChzZWxmLCB0eXBlLCBjYWxsYmFjayk7XG4gIGVsc2UgaWYgKHR5cGUgPj0gNjAgJiYgdHlwZSA8PSA3MCkgLy8gVXNlciBhdXRoIGNvbnRleHQtc3BlY2lmaWMgbWVzc2FnZXNcbiAgICByZXR1cm4gcGFyc2VfVVNFUkFVVEgoc2VsZiwgdHlwZSwgY2FsbGJhY2spO1xuICBlbHNlIHtcbiAgICAvLyBVbmtub3duIHBhY2tldCB0eXBlXG4gICAgdmFyIHVuaW1wbCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCk7XG4gICAgdW5pbXBsWzBdID0gTUVTU0FHRS5VTklNUExFTUVOVEVEO1xuICAgIHdyaXRlVUludDMyQkUodW5pbXBsLCBzZXFubywgMSk7XG4gICAgc2VuZChzZWxmLCB1bmltcGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlX0tFWElOSVQoc2VsZiwgY2FsbGJhY2spIHtcbiAgdmFyIGluc3RhdGUgPSBzZWxmLl9zdGF0ZS5pbmNvbWluZztcbiAgdmFyIHBheWxvYWQgPSBpbnN0YXRlLnBheWxvYWQ7XG5cbiAgLypcbiAgICBieXRlICAgICAgICAgU1NIX01TR19LRVhJTklUXG4gICAgYnl0ZVsxNl0gICAgIGNvb2tpZSAocmFuZG9tIGJ5dGVzKVxuICAgIG5hbWUtbGlzdCAgICBrZXhfYWxnb3JpdGhtc1xuICAgIG5hbWUtbGlzdCAgICBzZXJ2ZXJfaG9zdF9rZXlfYWxnb3JpdGhtc1xuICAgIG5hbWUtbGlzdCAgICBlbmNyeXB0aW9uX2FsZ29yaXRobXNfY2xpZW50X3RvX3NlcnZlclxuICAgIG5hbWUtbGlzdCAgICBlbmNyeXB0aW9uX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudFxuICAgIG5hbWUtbGlzdCAgICBtYWNfYWxnb3JpdGhtc19jbGllbnRfdG9fc2VydmVyXG4gICAgbmFtZS1saXN0ICAgIG1hY19hbGdvcml0aG1zX3NlcnZlcl90b19jbGllbnRcbiAgICBuYW1lLWxpc3QgICAgY29tcHJlc3Npb25fYWxnb3JpdGhtc19jbGllbnRfdG9fc2VydmVyXG4gICAgbmFtZS1saXN0ICAgIGNvbXByZXNzaW9uX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudFxuICAgIG5hbWUtbGlzdCAgICBsYW5ndWFnZXNfY2xpZW50X3RvX3NlcnZlclxuICAgIG5hbWUtbGlzdCAgICBsYW5ndWFnZXNfc2VydmVyX3RvX2NsaWVudFxuICAgIGJvb2xlYW4gICAgICBmaXJzdF9rZXhfcGFja2V0X2ZvbGxvd3NcbiAgICB1aW50MzIgICAgICAgMCAocmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb24pXG4gICovXG4gIHZhciBpbml0ID0ge1xuICAgIGFsZ29yaXRobXM6IHtcbiAgICAgIGtleDogdW5kZWZpbmVkLFxuICAgICAgc3J2SG9zdEtleTogdW5kZWZpbmVkLFxuICAgICAgY3M6IHtcbiAgICAgICAgZW5jcnlwdDogdW5kZWZpbmVkLFxuICAgICAgICBtYWM6IHVuZGVmaW5lZCxcbiAgICAgICAgY29tcHJlc3M6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHNjOiB7XG4gICAgICAgIGVuY3J5cHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgbWFjOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbXByZXNzOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuICAgIGxhbmd1YWdlczoge1xuICAgICAgY3M6IHVuZGVmaW5lZCxcbiAgICAgIHNjOiB1bmRlZmluZWRcbiAgICB9XG4gIH07XG4gIHZhciB2YWw7XG5cbiAgdmFsID0gcmVhZExpc3QocGF5bG9hZCwgMTcsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpbml0LmFsZ29yaXRobXMua2V4ID0gdmFsO1xuICB2YWwgPSByZWFkTGlzdChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpbml0LmFsZ29yaXRobXMuc3J2SG9zdEtleSA9IHZhbDtcbiAgdmFsID0gcmVhZExpc3QocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gIGlmICh2YWwgPT09IGZhbHNlKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaW5pdC5hbGdvcml0aG1zLmNzLmVuY3J5cHQgPSB2YWw7XG4gIHZhbCA9IHJlYWRMaXN0KHBheWxvYWQsIHBheWxvYWQuX3Bvcywgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAodmFsID09PSBmYWxzZSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGluaXQuYWxnb3JpdGhtcy5zYy5lbmNyeXB0ID0gdmFsO1xuICB2YWwgPSByZWFkTGlzdChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpbml0LmFsZ29yaXRobXMuY3MubWFjID0gdmFsO1xuICB2YWwgPSByZWFkTGlzdChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpbml0LmFsZ29yaXRobXMuc2MubWFjID0gdmFsO1xuICB2YWwgPSByZWFkTGlzdChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpbml0LmFsZ29yaXRobXMuY3MuY29tcHJlc3MgPSB2YWw7XG4gIHZhbCA9IHJlYWRMaXN0KHBheWxvYWQsIHBheWxvYWQuX3Bvcywgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAodmFsID09PSBmYWxzZSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGluaXQuYWxnb3JpdGhtcy5zYy5jb21wcmVzcyA9IHZhbDtcbiAgdmFsID0gcmVhZExpc3QocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gIGlmICh2YWwgPT09IGZhbHNlKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaW5pdC5sYW5ndWFnZXMuY3MgPSB2YWw7XG4gIHZhbCA9IHJlYWRMaXN0KHBheWxvYWQsIHBheWxvYWQuX3Bvcywgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAodmFsID09PSBmYWxzZSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGluaXQubGFuZ3VhZ2VzLnNjID0gdmFsO1xuXG4gIHZhciBmaXJzdEZvbGxvd3MgPSAocGF5bG9hZC5fcG9zIDwgcGF5bG9hZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAmJiBwYXlsb2FkW3BheWxvYWQuX3Bvc10gPT09IDEpO1xuXG4gIGluc3RhdGUua2V4aW5pdCA9IHBheWxvYWQ7XG5cbiAgc2VsZi5lbWl0KCdLRVhJTklUJywgaW5pdCwgZmlyc3RGb2xsb3dzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfS0VYKHNlbGYsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3N0YXRlO1xuICB2YXIgaW5zdGF0ZSA9IHN0YXRlLmluY29taW5nO1xuICB2YXIgcGF5bG9hZCA9IGluc3RhdGUucGF5bG9hZDtcblxuICBpZiAoc3RhdGUub3V0Z29pbmcuc3RhdHVzID09PSBPVVRfUkVBRFlcbiAgICAgIHx8IGdldFBhY2tldFR5cGUoc2VsZiwgdHlwZSkgIT09IGluc3RhdGUuZXhwZWN0ZWRQYWNrZXQpIHtcbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIGV4cGVjdGVkOiAnXG4gICAgICAgICAgICAgICArIGluc3RhdGUuZXhwZWN0ZWRQYWNrZXRcbiAgICAgICAgICAgICAgICsgJyBidXQgZ290OiAnXG4gICAgICAgICAgICAgICArIGdldFBhY2tldFR5cGUoc2VsZiwgdHlwZSkpO1xuICAgIHNlbGYuZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5QUk9UT0NPTF9FUlJPUik7XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignUmVjZWl2ZWQgdW5leHBlY3RlZCBwYWNrZXQnKTtcbiAgICBlcnIubGV2ZWwgPSAncHJvdG9jb2wnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5rZXgudHlwZSA9PT0gJ2dyb3VwZXgnKSB7XG4gICAgLy8gRHluYW1pYyBncm91cCBleGNoYW5nZS1yZWxhdGVkXG5cbiAgICBpZiAoc2VsZi5zZXJ2ZXIpIHtcbiAgICAgIC8vIFRPRE86IFN1cHBvcnQgZ3JvdXAgZXhjaGFuZ2Ugc2VydmVyLXNpZGVcbiAgICAgIHNlbGYuZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5QUk9UT0NPTF9FUlJPUik7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdESCBncm91cCBleGNoYW5nZSBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlcicpO1xuICAgICAgZXJyLmxldmVsID0gJ2hhbmRzaGFrZSc7XG4gICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGUgPT09IE1FU1NBR0UuS0VYREhfR0VYX0dST1VQKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgYnl0ZSAgICBTU0hfTVNHX0tFWF9ESF9HRVhfR1JPVVBcbiAgICAgICAgICBtcGludCAgIHAsIHNhZmUgcHJpbWVcbiAgICAgICAgICBtcGludCAgIGcsIGdlbmVyYXRvciBmb3Igc3ViZ3JvdXAgaW4gR0YocClcbiAgICAgICAgKi9cbiAgICAgICAgdmFyIHByaW1lID0gcmVhZFN0cmluZyhwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICAgIGlmIChwcmltZSA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZ2VuID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGdlbiA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBzZWxmLmVtaXQoJ0tFWERIX0dFWF9HUk9VUCcsIHByaW1lLCBnZW4pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLktFWERIX0dFWF9SRVBMWSlcbiAgICAgICAgcmV0dXJuIHBhcnNlX0tFWERIX1JFUExZKHNlbGYsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU3RhdGljIGdyb3VwIG9yIEVDREgtcmVsYXRlZFxuXG4gICAgaWYgKHR5cGUgPT09IE1FU1NBR0UuS0VYREhfSU5JVCkge1xuICAgICAgLypcbiAgICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfS0VYREhfSU5JVFxuICAgICAgICBtcGludCAgICAgZVxuICAgICAgKi9cbiAgICAgIHZhciBlID0gcmVhZFN0cmluZyhwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAoZSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgc2VsZi5lbWl0KCdLRVhESF9JTklUJywgZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLktFWERIX1JFUExZKVxuICAgICAgcmV0dXJuIHBhcnNlX0tFWERIX1JFUExZKHNlbGYsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZV9LRVhESF9SRVBMWShzZWxmLCBjYWxsYmFjaykge1xuICB2YXIgcGF5bG9hZCA9IHNlbGYuX3N0YXRlLmluY29taW5nLnBheWxvYWQ7XG4gIC8qXG4gICAgYnl0ZSAgICAgIFNTSF9NU0dfS0VYREhfUkVQTFlcbiAgICAgICAgICAgICAgICAvIFNTSF9NU0dfS0VYX0RIX0dFWF9SRVBMWVxuICAgICAgICAgICAgICAgIC8gU1NIX01TR19LRVhfRUNESF9SRVBMWVxuICAgIHN0cmluZyAgICBzZXJ2ZXIgcHVibGljIGhvc3Qga2V5IGFuZCBjZXJ0aWZpY2F0ZXMgKEtfUylcbiAgICBtcGludCAgICAgZlxuICAgIHN0cmluZyAgICBzaWduYXR1cmUgb2YgSFxuICAqL1xuICB2YXIgaG9zdGtleSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgMSwgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAoaG9zdGtleSA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB2YXIgcHVia2V5ID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHB1YmtleSA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2lnID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHNpZyA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB2YXIgaW5mbyA9IHtcbiAgICBob3N0a2V5OiBob3N0a2V5LFxuICAgIGhvc3RrZXlfZm9ybWF0OiB1bmRlZmluZWQsXG4gICAgcHVia2V5OiBwdWJrZXksXG4gICAgc2lnOiBzaWcsXG4gICAgc2lnX2Zvcm1hdDogdW5kZWZpbmVkXG4gIH07XG4gIHZhciBob3N0a2V5X2Zvcm1hdCA9IHJlYWRTdHJpbmcoaG9zdGtleSwgMCwgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAoaG9zdGtleV9mb3JtYXQgPT09IGZhbHNlKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaW5mby5ob3N0a2V5X2Zvcm1hdCA9IGhvc3RrZXlfZm9ybWF0O1xuICB2YXIgc2lnX2Zvcm1hdCA9IHJlYWRTdHJpbmcoc2lnLCAwLCAnYXNjaWknLCBzZWxmLCBjYWxsYmFjayk7XG4gIGlmIChzaWdfZm9ybWF0ID09PSBmYWxzZSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGluZm8uc2lnX2Zvcm1hdCA9IHNpZ19mb3JtYXQ7XG4gIHNlbGYuZW1pdCgnS0VYREhfUkVQTFknLCBpbmZvKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfVVNFUkFVVEgoc2VsZiwgdHlwZSwgY2FsbGJhY2spIHtcbiAgdmFyIHN0YXRlID0gc2VsZi5fc3RhdGU7XG4gIHZhciBhdXRoTWV0aG9kID0gc3RhdGUuYXV0aHNRdWV1ZVswXTtcbiAgdmFyIHBheWxvYWQgPSBzdGF0ZS5pbmNvbWluZy5wYXlsb2FkO1xuICB2YXIgbWVzc2FnZTtcbiAgdmFyIGxhbmc7XG4gIHZhciB0ZXh0O1xuXG4gIGlmIChhdXRoTWV0aG9kID09PSAncGFzc3dvcmQnKSB7XG4gICAgaWYgKHR5cGUgPT09IE1FU1NBR0UuVVNFUkFVVEhfUEFTU1dEX0NIQU5HRVJFUSkge1xuICAgICAgLypcbiAgICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfUEFTU1dEX0NIQU5HRVJFUVxuICAgICAgICBzdHJpbmcgICAgcHJvbXB0IGluIElTTy0xMDY0NiBVVEYtOCBlbmNvZGluZ1xuICAgICAgICBzdHJpbmcgICAgbGFuZ3VhZ2UgdGFnXG4gICAgICAqL1xuICAgICAgbWVzc2FnZSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgMSwgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAobWVzc2FnZSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGxhbmcgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAobGFuZyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIHNlbGYuZW1pdCgnVVNFUkFVVEhfUEFTU1dEX0NIQU5HRVJFUScsIG1lc3NhZ2UsIGxhbmcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhdXRoTWV0aG9kID09PSAna2V5Ym9hcmQtaW50ZXJhY3RpdmUnKSB7XG4gICAgaWYgKHR5cGUgPT09IE1FU1NBR0UuVVNFUkFVVEhfSU5GT19SRVFVRVNUKSB7XG4gICAgICAvKlxuICAgICAgICBieXRlICAgICAgU1NIX01TR19VU0VSQVVUSF9JTkZPX1JFUVVFU1RcbiAgICAgICAgc3RyaW5nICAgIG5hbWUgKElTTy0xMDY0NiBVVEYtOClcbiAgICAgICAgc3RyaW5nICAgIGluc3RydWN0aW9uIChJU08tMTA2NDYgVVRGLTgpXG4gICAgICAgIHN0cmluZyAgICBsYW5ndWFnZSB0YWcgLS0gTUFZIGJlIGVtcHR5XG4gICAgICAgIGludCAgICAgICBudW0tcHJvbXB0c1xuICAgICAgICBzdHJpbmcgICAgcHJvbXB0WzFdIChJU08tMTA2NDYgVVRGLTgpXG4gICAgICAgIGJvb2xlYW4gICBlY2hvWzFdXG4gICAgICAgIC4uLlxuICAgICAgICBzdHJpbmcgICAgcHJvbXB0W251bS1wcm9tcHRzXSAoSVNPLTEwNjQ2IFVURi04KVxuICAgICAgICBib29sZWFuICAgZWNob1tudW0tcHJvbXB0c11cbiAgICAgICovXG4gICAgICB2YXIgbmFtZTtcbiAgICAgIHZhciBpbnN0cjtcbiAgICAgIHZhciBucHJvbXB0cztcblxuICAgICAgbmFtZSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgMSwgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAobmFtZSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGluc3RyID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKGluc3RyID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgbGFuZyA9IHJlYWRTdHJpbmcocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCAndXRmOCcsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChsYW5nID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgbnByb21wdHMgPSByZWFkSW50KHBheWxvYWQsIHBheWxvYWQuX3Bvcywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKG5wcm9tcHRzID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBwYXlsb2FkLl9wb3MgKz0gNDtcblxuICAgICAgdmFyIHByb21wdHMgPSBbXTtcbiAgICAgIGZvciAodmFyIHByb21wdCA9IDA7IHByb21wdCA8IG5wcm9tcHRzOyArK3Byb21wdCkge1xuICAgICAgICB0ZXh0ID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgICBpZiAodGV4dCA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZWNobyA9IHBheWxvYWRbcGF5bG9hZC5fcG9zKytdO1xuICAgICAgICBpZiAoZWNobyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZWNobyA9IChlY2hvICE9PSAwKTtcbiAgICAgICAgcHJvbXB0cy5wdXNoKHtcbiAgICAgICAgICBwcm9tcHQ6IHRleHQsXG4gICAgICAgICAgZWNobzogZWNob1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHNlbGYuZW1pdCgnVVNFUkFVVEhfSU5GT19SRVFVRVNUJywgbmFtZSwgaW5zdHIsIGxhbmcsIHByb21wdHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5VU0VSQVVUSF9JTkZPX1JFU1BPTlNFKSB7XG4gICAgICAvKlxuICAgICAgICBieXRlICAgICAgU1NIX01TR19VU0VSQVVUSF9JTkZPX1JFU1BPTlNFXG4gICAgICAgIGludCAgICAgICBudW0tcmVzcG9uc2VzXG4gICAgICAgIHN0cmluZyAgICByZXNwb25zZVsxXSAoSVNPLTEwNjQ2IFVURi04KVxuICAgICAgICAuLi5cbiAgICAgICAgc3RyaW5nICAgIHJlc3BvbnNlW251bS1yZXNwb25zZXNdIChJU08tMTA2NDYgVVRGLTgpXG4gICAgICAqL1xuICAgICAgdmFyIG5yZXNwb25zZXMgPSByZWFkSW50KHBheWxvYWQsIDEsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChucmVzcG9uc2VzID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBwYXlsb2FkLl9wb3MgPSA1O1xuXG4gICAgICB2YXIgcmVzcG9uc2VzID0gW107XG4gICAgICBmb3IgKHZhciByZXNwb25zZSA9IDA7IHJlc3BvbnNlIDwgbnJlc3BvbnNlczsgKytyZXNwb25zZSkge1xuICAgICAgICB0ZXh0ID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgICBpZiAodGV4dCA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXNwb25zZXMucHVzaCh0ZXh0KTtcbiAgICAgIH1cbiAgICAgIHNlbGYuZW1pdCgnVVNFUkFVVEhfSU5GT19SRVNQT05TRScsIHJlc3BvbnNlcyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGF1dGhNZXRob2QgPT09ICdwdWJsaWNrZXknKSB7XG4gICAgaWYgKHR5cGUgPT09IE1FU1NBR0UuVVNFUkFVVEhfUEtfT0spIHtcbiAgICAgIC8qXG4gICAgICAgIGJ5dGUgICAgICBTU0hfTVNHX1VTRVJBVVRIX1BLX09LXG4gICAgICAgIHN0cmluZyAgICBwdWJsaWMga2V5IGFsZ29yaXRobSBuYW1lIGZyb20gdGhlIHJlcXVlc3RcbiAgICAgICAgc3RyaW5nICAgIHB1YmxpYyBrZXkgYmxvYiBmcm9tIHRoZSByZXF1ZXN0XG4gICAgICAqL1xuICAgICAgdmFyIGF1dGhzUXVldWUgPSBzZWxmLl9zdGF0ZS5hdXRoc1F1ZXVlO1xuICAgICAgaWYgKCFhdXRoc1F1ZXVlLmxlbmd0aCB8fCBhdXRoc1F1ZXVlWzBdICE9PSAncHVibGlja2V5JylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgYXV0aHNRdWV1ZS5zaGlmdCgpO1xuICAgICAgc2VsZi5lbWl0KCdVU0VSQVVUSF9QS19PSycpO1xuICAgICAgLy8gWFhYOiBQYXJzZSBwdWJsaWMga2V5IGluZm8/IGNsaWVudCBjdXJyZW50bHkgY2FuIGlnbm9yZSBpdCBiZWNhdXNlXG4gICAgICAvLyB0aGVyZSBpcyBvbmx5IG9uZSBvdXRzdGFuZGluZyBhdXRoIHJlcXVlc3QgYXQgYW55IGdpdmVuIHRpbWUsIHNvIGl0XG4gICAgICAvLyBrbm93cyB3aGljaCBrZXkgd2FzIE9LJ2RcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXV0aE1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gSW52YWxpZCBwYWNrZXQgZm9yIHRoaXMgYXV0aCB0eXBlXG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLlBST1RPQ09MX0VSUk9SKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdJbnZhbGlkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZDogJyArIGF1dGhNZXRob2QpO1xuICAgIGVyci5sZXZlbCA9ICdwcm90b2NvbCc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VfQ0hBTk5FTF9SRVFVRVNUKHNlbGYsIGNhbGxiYWNrKSB7XG4gIHZhciBwYXlsb2FkID0gc2VsZi5fc3RhdGUuaW5jb21pbmcucGF5bG9hZDtcbiAgdmFyIGluZm87XG4gIHZhciBjb2xzO1xuICB2YXIgcm93cztcbiAgdmFyIHdpZHRoO1xuICB2YXIgaGVpZ2h0O1xuICB2YXIgd2FudFJlcGx5O1xuICB2YXIgc2lnbmFsO1xuXG4gIHZhciByZWNpcGllbnQgPSByZWFkSW50KHBheWxvYWQsIDEsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHJlY2lwaWVudCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB2YXIgcmVxdWVzdCA9IHJlYWRTdHJpbmcocGF5bG9hZCwgNSwgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAocmVxdWVzdCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChyZXF1ZXN0ID09PSAnZXhpdC1zdGF0dXMnKSB7IC8vIFNlcnZlci0+Q2xpZW50XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfUkVRVUVTVFxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICBzdHJpbmcgICAgXCJleGl0LXN0YXR1c1wiXG4gICAgICBib29sZWFuICAgRkFMU0VcbiAgICAgIHVpbnQzMiAgICBleGl0X3N0YXR1c1xuICAgICovXG4gICAgdmFyIGNvZGUgPSByZWFkSW50KHBheWxvYWQsICsrcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNvZGUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IGZhbHNlLFxuICAgICAgY29kZTogY29kZVxuICAgIH07XG4gIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ2V4aXQtc2lnbmFsJykgeyAvLyBTZXJ2ZXItPkNsaWVudFxuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX1JFUVVFU1RcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgc3RyaW5nICAgIFwiZXhpdC1zaWduYWxcIlxuICAgICAgYm9vbGVhbiAgIEZBTFNFXG4gICAgICBzdHJpbmcgICAgc2lnbmFsIG5hbWUgKHdpdGhvdXQgdGhlIFwiU0lHXCIgcHJlZml4KVxuICAgICAgYm9vbGVhbiAgIGNvcmUgZHVtcGVkXG4gICAgICBzdHJpbmcgICAgZXJyb3IgbWVzc2FnZSBpbiBJU08tMTA2NDYgVVRGLTggZW5jb2RpbmdcbiAgICAgIHN0cmluZyAgICBsYW5ndWFnZSB0YWdcbiAgICAqL1xuICAgIHZhciBjb3JlZHVtcDtcbiAgICBpZiAoIShzZWxmLnJlbW90ZUJ1Z3MgJiBCVUdTLk9MRF9FWElUKSkge1xuICAgICAgc2lnbmFsID0gcmVhZFN0cmluZyhwYXlsb2FkLCArK3BheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKHNpZ25hbCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNvcmVkdW1wID0gcGF5bG9hZFtwYXlsb2FkLl9wb3MrK107XG4gICAgICBpZiAoY29yZWR1bXAgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY29yZWR1bXAgPSAoY29yZWR1bXAgIT09IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKlxuICAgICAgICBJbnN0ZWFkIG9mIGBzaWduYWwgbmFtZWAgYW5kIGBjb3JlIGR1bXBlZGAsIHdlIGhhdmUganVzdDpcblxuICAgICAgICB1aW50MzIgIHNpZ25hbCBudW1iZXJcbiAgICAgICovXG4gICAgICBzaWduYWwgPSByZWFkSW50KHBheWxvYWQsICsrcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAoc2lnbmFsID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgc3dpdGNoIChzaWduYWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHNpZ25hbCA9ICdIVVAnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2lnbmFsID0gJ0lOVCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzaWduYWwgPSAnUVVJVCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBzaWduYWwgPSAnQUJSVCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBzaWduYWwgPSAnS0lMTCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgc2lnbmFsID0gJ0FMUk0nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHNpZ25hbCA9ICdURVJNJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBVbmtub3duIG9yIE9TLXNwZWNpZmljXG4gICAgICAgICAgc2lnbmFsID0gJ1VOS05PV04gKCcgKyBzaWduYWwgKyAnKSc7XG4gICAgICB9XG4gICAgICBjb3JlZHVtcCA9IGZhbHNlO1xuICAgIH1cbiAgICB2YXIgZGVzY3JpcHRpb24gPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ3V0ZjgnLCBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGxhbmcgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGxhbmcgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IGZhbHNlLFxuICAgICAgc2lnbmFsOiBzaWduYWwsXG4gICAgICBjb3JlZHVtcDogY29yZWR1bXAsXG4gICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICBsYW5nOiBsYW5nXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0ID09PSAncHR5LXJlcScpIHsgLy8gQ2xpZW50LT5TZXJ2ZXJcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9SRVFVRVNUXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAgIHN0cmluZyAgICBcInB0eS1yZXFcIlxuICAgICAgYm9vbGVhbiAgIHdhbnRfcmVwbHlcbiAgICAgIHN0cmluZyAgICBURVJNIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlIChlLmcuLCB2dDEwMClcbiAgICAgIHVpbnQzMiAgICB0ZXJtaW5hbCB3aWR0aCwgY2hhcmFjdGVycyAoZS5nLiwgODApXG4gICAgICB1aW50MzIgICAgdGVybWluYWwgaGVpZ2h0LCByb3dzIChlLmcuLCAyNClcbiAgICAgIHVpbnQzMiAgICB0ZXJtaW5hbCB3aWR0aCwgcGl4ZWxzIChlLmcuLCA2NDApXG4gICAgICB1aW50MzIgICAgdGVybWluYWwgaGVpZ2h0LCBwaXhlbHMgKGUuZy4sIDQ4MClcbiAgICAgIHN0cmluZyAgICBlbmNvZGVkIHRlcm1pbmFsIG1vZGVzXG4gICAgKi9cbiAgICB3YW50UmVwbHkgPSBwYXlsb2FkW3BheWxvYWQuX3BvcysrXTtcbiAgICBpZiAod2FudFJlcGx5ID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2FudFJlcGx5ID0gKHdhbnRSZXBseSAhPT0gMCk7XG4gICAgdmFyIHRlcm0gPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh0ZXJtID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb2xzID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoY29scyA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcm93cyA9IHJlYWRJbnQocGF5bG9hZCwgcGF5bG9hZC5fcG9zICs9IDQsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAocm93cyA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2lkdGggPSByZWFkSW50KHBheWxvYWQsIHBheWxvYWQuX3BvcyArPSA0LCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHdpZHRoID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBoZWlnaHQgPSByZWFkSW50KHBheWxvYWQsIHBheWxvYWQuX3BvcyArPSA0LCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGhlaWdodCA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIG1vZGVzID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChtb2RlcyA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgbW9kZXMgPSBieXRlc1RvTW9kZXMobW9kZXMpO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IHdhbnRSZXBseSxcbiAgICAgIHRlcm06IHRlcm0sXG4gICAgICBjb2xzOiBjb2xzLFxuICAgICAgcm93czogcm93cyxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgbW9kZXM6IG1vZGVzXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0ID09PSAnd2luZG93LWNoYW5nZScpIHsgLy8gQ2xpZW50LT5TZXJ2ZXJcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9SRVFVRVNUXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAgIHN0cmluZyAgICBcIndpbmRvdy1jaGFuZ2VcIlxuICAgICAgYm9vbGVhbiAgIEZBTFNFXG4gICAgICB1aW50MzIgICAgdGVybWluYWwgd2lkdGgsIGNvbHVtbnNcbiAgICAgIHVpbnQzMiAgICB0ZXJtaW5hbCBoZWlnaHQsIHJvd3NcbiAgICAgIHVpbnQzMiAgICB0ZXJtaW5hbCB3aWR0aCwgcGl4ZWxzXG4gICAgICB1aW50MzIgICAgdGVybWluYWwgaGVpZ2h0LCBwaXhlbHNcbiAgICAqL1xuICAgIGNvbHMgPSByZWFkSW50KHBheWxvYWQsICsrcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNvbHMgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJvd3MgPSByZWFkSW50KHBheWxvYWQsIHBheWxvYWQuX3BvcyArPSA0LCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHJvd3MgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHdpZHRoID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh3aWR0aCA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaGVpZ2h0ID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChoZWlnaHQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IGZhbHNlLFxuICAgICAgY29sczogY29scyxcbiAgICAgIHJvd3M6IHJvd3MsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH07XG4gIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ3gxMS1yZXEnKSB7IC8vIENsaWVudC0+U2VydmVyXG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfUkVRVUVTVFxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICBzdHJpbmcgICAgXCJ4MTEtcmVxXCJcbiAgICAgIGJvb2xlYW4gICB3YW50IHJlcGx5XG4gICAgICBib29sZWFuICAgc2luZ2xlIGNvbm5lY3Rpb25cbiAgICAgIHN0cmluZyAgICB4MTEgYXV0aGVudGljYXRpb24gcHJvdG9jb2xcbiAgICAgIHN0cmluZyAgICB4MTEgYXV0aGVudGljYXRpb24gY29va2llXG4gICAgICB1aW50MzIgICAgeDExIHNjcmVlbiBudW1iZXJcbiAgICAqL1xuICAgIHdhbnRSZXBseSA9IHBheWxvYWRbcGF5bG9hZC5fcG9zKytdO1xuICAgIGlmICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB3YW50UmVwbHkgPSAod2FudFJlcGx5ICE9PSAwKTtcbiAgICB2YXIgc2luZ2xlID0gcGF5bG9hZFtwYXlsb2FkLl9wb3MrK107XG4gICAgaWYgKHNpbmdsZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHNpbmdsZSA9IChzaW5nbGUgIT09IDApO1xuICAgIHZhciBwcm90b2NvbCA9IHJlYWRTdHJpbmcocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCAnYXNjaWknLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHByb3RvY29sID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgY29va2llID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICdiaW5hcnknLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNvb2tpZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHNjcmVlbiA9IHJlYWRJbnQocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHNjcmVlbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaW5mbyA9IHtcbiAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50LFxuICAgICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICAgIHdhbnRSZXBseTogd2FudFJlcGx5LFxuICAgICAgc2luZ2xlOiBzaW5nbGUsXG4gICAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgICBjb29raWU6IGNvb2tpZSxcbiAgICAgIHNjcmVlbjogc2NyZWVuXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0ID09PSAnZW52JykgeyAvLyBDbGllbnQtPlNlcnZlclxuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX1JFUVVFU1RcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgc3RyaW5nICAgIFwiZW52XCJcbiAgICAgIGJvb2xlYW4gICB3YW50IHJlcGx5XG4gICAgICBzdHJpbmcgICAgdmFyaWFibGUgbmFtZVxuICAgICAgc3RyaW5nICAgIHZhcmlhYmxlIHZhbHVlXG4gICAgKi9cbiAgICB3YW50UmVwbHkgPSBwYXlsb2FkW3BheWxvYWQuX3BvcysrXTtcbiAgICBpZiAod2FudFJlcGx5ID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2FudFJlcGx5ID0gKHdhbnRSZXBseSAhPT0gMCk7XG4gICAgdmFyIGtleSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCAndXRmOCcsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoa2V5ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh2YWwgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IHdhbnRSZXBseSxcbiAgICAgIGtleToga2V5LFxuICAgICAgdmFsOiB2YWxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlcXVlc3QgPT09ICdzaGVsbCcpIHsgLy8gQ2xpZW50LT5TZXJ2ZXJcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9SRVFVRVNUXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAgIHN0cmluZyAgICBcInNoZWxsXCJcbiAgICAgIGJvb2xlYW4gICB3YW50IHJlcGx5XG4gICAgKi9cbiAgICB3YW50UmVwbHkgPSBwYXlsb2FkW3BheWxvYWQuX3Bvc107XG4gICAgaWYgKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHdhbnRSZXBseSA9ICh3YW50UmVwbHkgIT09IDApO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IHdhbnRSZXBseVxuICAgIH07XG4gIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ2V4ZWMnKSB7IC8vIENsaWVudC0+U2VydmVyXG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfUkVRVUVTVFxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICBzdHJpbmcgICAgXCJleGVjXCJcbiAgICAgIGJvb2xlYW4gICB3YW50IHJlcGx5XG4gICAgICBzdHJpbmcgICAgY29tbWFuZFxuICAgICovXG4gICAgd2FudFJlcGx5ID0gcGF5bG9hZFtwYXlsb2FkLl9wb3MrK107XG4gICAgaWYgKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHdhbnRSZXBseSA9ICh3YW50UmVwbHkgIT09IDApO1xuICAgIHZhciBjb21tYW5kID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChjb21tYW5kID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpbmZvID0ge1xuICAgICAgcmVjaXBpZW50OiByZWNpcGllbnQsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgICAgd2FudFJlcGx5OiB3YW50UmVwbHksXG4gICAgICBjb21tYW5kOiBjb21tYW5kXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0ID09PSAnc3Vic3lzdGVtJykgeyAvLyBDbGllbnQtPlNlcnZlclxuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX1JFUVVFU1RcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgc3RyaW5nICAgIFwic3Vic3lzdGVtXCJcbiAgICAgIGJvb2xlYW4gICB3YW50IHJlcGx5XG4gICAgICBzdHJpbmcgICAgc3Vic3lzdGVtIG5hbWVcbiAgICAqL1xuICAgIHdhbnRSZXBseSA9IHBheWxvYWRbcGF5bG9hZC5fcG9zKytdO1xuICAgIGlmICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB3YW50UmVwbHkgPSAod2FudFJlcGx5ICE9PSAwKTtcbiAgICB2YXIgc3Vic3lzdGVtID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChzdWJzeXN0ZW0gPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IHdhbnRSZXBseSxcbiAgICAgIHN1YnN5c3RlbTogc3Vic3lzdGVtXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0ID09PSAnc2lnbmFsJykgeyAvLyBDbGllbnQtPlNlcnZlclxuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX1JFUVVFU1RcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgc3RyaW5nICAgIFwic2lnbmFsXCJcbiAgICAgIGJvb2xlYW4gICBGQUxTRVxuICAgICAgc3RyaW5nICAgIHNpZ25hbCBuYW1lICh3aXRob3V0IHRoZSBcIlNJR1wiIHByZWZpeClcbiAgICAqL1xuICAgIHNpZ25hbCA9IHJlYWRTdHJpbmcocGF5bG9hZCwgKytwYXlsb2FkLl9wb3MsICdhc2NpaScsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoc2lnbmFsID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpbmZvID0ge1xuICAgICAgcmVjaXBpZW50OiByZWNpcGllbnQsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgICAgd2FudFJlcGx5OiBmYWxzZSxcbiAgICAgIHNpZ25hbDogJ1NJRycgKyBzaWduYWxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlcXVlc3QgPT09ICd4b24teG9mZicpIHsgLy8gQ2xpZW50LT5TZXJ2ZXJcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9SRVFVRVNUXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAgIHN0cmluZyAgICBcInhvbi14b2ZmXCJcbiAgICAgIGJvb2xlYW4gICBGQUxTRVxuICAgICAgYm9vbGVhbiAgIGNsaWVudCBjYW4gZG9cbiAgICAqL1xuICAgIHZhciBjbGllbnRDb250cm9sID0gcGF5bG9hZFsrK3BheWxvYWQuX3Bvc107XG4gICAgaWYgKGNsaWVudENvbnRyb2wgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjbGllbnRDb250cm9sID0gKGNsaWVudENvbnRyb2wgIT09IDApO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IGZhbHNlLFxuICAgICAgY2xpZW50Q29udHJvbDogY2xpZW50Q29udHJvbFxuICAgIH07XG4gIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ2F1dGgtYWdlbnQtcmVxQG9wZW5zc2guY29tJykgeyAvLyBDbGllbnQtPlNlcnZlclxuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX1JFUVVFU1RcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgc3RyaW5nICAgIFwiYXV0aC1hZ2VudC1yZXFAb3BlbnNzaC5jb21cIlxuICAgICAgYm9vbGVhbiAgIHdhbnQgcmVwbHlcbiAgICAqL1xuICAgIHdhbnRSZXBseSA9IHBheWxvYWRbcGF5bG9hZC5fcG9zXTtcbiAgICBpZiAod2FudFJlcGx5ID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2FudFJlcGx5ID0gKHdhbnRSZXBseSAhPT0gMCk7XG4gICAgaW5mbyA9IHtcbiAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50LFxuICAgICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICAgIHdhbnRSZXBseTogd2FudFJlcGx5XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVbmtub3duIHJlcXVlc3QgdHlwZVxuICAgIHdhbnRSZXBseSA9IHBheWxvYWRbcGF5bG9hZC5fcG9zXTtcbiAgICBpZiAod2FudFJlcGx5ID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2FudFJlcGx5ID0gKHdhbnRSZXBseSAhPT0gMCk7XG4gICAgaW5mbyA9IHtcbiAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50LFxuICAgICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICAgIHdhbnRSZXBseTogd2FudFJlcGx5XG4gICAgfTtcbiAgfVxuICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIHBhY2tldDogQ0hBTk5FTF9SRVFVRVNUICgnXG4gICAgICAgICAgICAgKyByZWNpcGllbnRcbiAgICAgICAgICAgICArICcsICdcbiAgICAgICAgICAgICArIHJlcXVlc3RcbiAgICAgICAgICAgICArICcpJyk7XG4gIHNlbGYuZW1pdCgnQ0hBTk5FTF9SRVFVRVNUOicgKyByZWNpcGllbnQsIGluZm8pO1xufVxuXG5mdW5jdGlvbiBobWFjVmVyaWZ5KHNlbGYsIGRhdGEpIHtcbiAgdmFyIGluc3RhdGUgPSBzZWxmLl9zdGF0ZS5pbmNvbWluZztcbiAgdmFyIGhtYWMgPSBpbnN0YXRlLmhtYWM7XG5cbiAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogVmVyaWZ5aW5nIE1BQycpO1xuXG4gIGlmIChpbnN0YXRlLmRlY3J5cHQuaW5mby5hdXRoTGVuID4gMCkge1xuICAgIHZhciBkZWNyeXB0ID0gaW5zdGF0ZS5kZWNyeXB0O1xuICAgIHZhciBpbnN0YW5jZSA9IGRlY3J5cHQuaW5zdGFuY2U7XG5cbiAgICBpbnN0YW5jZS5zZXRBdXRoVGFnKGRhdGEpO1xuXG4gICAgdmFyIHBheWxvYWQgPSBpbnN0YW5jZS51cGRhdGUoaW5zdGF0ZS5wYWNrZXQpO1xuICAgIGluc3RhdGUucGF5bG9hZCA9IHBheWxvYWQuc2xpY2UoMSwgaW5zdGF0ZS5wYWNrZXQubGVuZ3RoIC0gcGF5bG9hZFswXSk7XG4gICAgaXZfaW5jKGRlY3J5cHQuaXYpO1xuXG4gICAgZGVjcnlwdC5pbnN0YW5jZSA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KFxuICAgICAgICAgICAgICAgICAgICAgICAgIFNTSF9UT19PUEVOU1NMW2RlY3J5cHQudHlwZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdC5pdlxuICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgIGRlY3J5cHQuaW5zdGFuY2Uuc2V0QXV0b1BhZGRpbmcoZmFsc2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBjYWxjSG1hYyA9IGNyeXB0by5jcmVhdGVIbWFjKFNTSF9UT19PUEVOU1NMW2htYWMudHlwZV0sIGhtYWMua2V5KTtcblxuICAgIHdyaXRlVUludDMyQkUoSE1BQ19DT01QVVRFLCBpbnN0YXRlLnNlcW5vLCAwKTtcbiAgICB3cml0ZVVJbnQzMkJFKEhNQUNfQ09NUFVURSwgaW5zdGF0ZS5wa3RMZW4sIDQpO1xuICAgIEhNQUNfQ09NUFVURVs4XSA9IGluc3RhdGUucGFkTGVuO1xuXG4gICAgY2FsY0htYWMudXBkYXRlKEhNQUNfQ09NUFVURSk7XG4gICAgY2FsY0htYWMudXBkYXRlKGluc3RhdGUucGFja2V0KTtcblxuICAgIHZhciBtYWMgPSBjYWxjSG1hYy5kaWdlc3QoKTtcbiAgICBpZiAobWFjLmxlbmd0aCA+IGluc3RhdGUuaG1hYy5pbmZvLmFjdHVhbExlbilcbiAgICAgIG1hYyA9IG1hYy5zbGljZSgwLCBpbnN0YXRlLmhtYWMuaW5mby5hY3R1YWxMZW4pO1xuICAgIHJldHVybiB0aW1pbmdTYWZlRXF1YWwobWFjLCBkYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNyeXB0RGF0YShzZWxmLCBkYXRhKSB7XG4gIHZhciBpbnN0YW5jZSA9IHNlbGYuX3N0YXRlLmluY29taW5nLmRlY3J5cHQuaW5zdGFuY2U7XG4gIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IERlY3J5cHRpbmcnKTtcbiAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZShkYXRhKTtcbn1cblxuZnVuY3Rpb24gZXhwZWN0RGF0YShzZWxmLCB0eXBlLCBhbW91bnQsIGJ1ZmZlcikge1xuICB2YXIgZXhwZWN0ID0gc2VsZi5fc3RhdGUuaW5jb21pbmcuZXhwZWN0O1xuICBleHBlY3QuYW1vdW50ID0gYW1vdW50O1xuICBleHBlY3QudHlwZSA9IHR5cGU7XG4gIGV4cGVjdC5wdHIgPSAwO1xuICBpZiAoYnVmZmVyKVxuICAgIGV4cGVjdC5idWYgPSBidWZmZXI7XG4gIGVsc2UgaWYgKGFtb3VudClcbiAgICBleHBlY3QuYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKGFtb3VudCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRMaXN0KGJ1ZmZlciwgc3RhcnQsIHN0cmVhbSwgY2FsbGJhY2spIHtcbiAgdmFyIGxpc3QgPSByZWFkU3RyaW5nKGJ1ZmZlciwgc3RhcnQsICdhc2NpaScsIHN0cmVhbSwgY2FsbGJhY2spO1xuICByZXR1cm4gKGxpc3QgIT09IGZhbHNlID8gKGxpc3QubGVuZ3RoID8gbGlzdC5zcGxpdCgnLCcpIDogW10pIDogZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBieXRlc1RvTW9kZXMoYnVmZmVyKSB7XG4gIHZhciBtb2RlcyA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBidWZmZXIubGVuZ3RoLCBvcGNvZGU7IGkgPCBsZW47IGkgKz0gNSkge1xuICAgIG9wY29kZSA9IGJ1ZmZlcltpXTtcbiAgICBpZiAob3Bjb2RlID09PSBURVJNSU5BTF9NT0RFLlRUWV9PUF9FTkRcbiAgICAgICAgfHwgVEVSTUlOQUxfTU9ERVtvcGNvZGVdID09PSB1bmRlZmluZWRcbiAgICAgICAgfHwgaSArIDUgPiBsZW4pXG4gICAgICBicmVhaztcbiAgICBtb2Rlc1tURVJNSU5BTF9NT0RFW29wY29kZV1dID0gcmVhZFVJbnQzMkJFKGJ1ZmZlciwgaSArIDEpO1xuICB9XG5cbiAgcmV0dXJuIG1vZGVzO1xufVxuXG5mdW5jdGlvbiBtb2Rlc1RvQnl0ZXMobW9kZXMpIHtcbiAgdmFyIFJFX0lTX05VTSA9IC9eXFxkKyQvO1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG1vZGVzKTtcbiAgdmFyIGIgPSAwO1xuICB2YXIgYnl0ZXMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0ga2V5cy5sZW5ndGgsIGtleSwgb3Bjb2RlLCB2YWw7IGkgPCBsZW47ICsraSkge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb3Bjb2RlID0gVEVSTUlOQUxfTU9ERVtrZXldO1xuICAgIGlmIChvcGNvZGVcbiAgICAgICAgJiYgIVJFX0lTX05VTS50ZXN0KGtleSlcbiAgICAgICAgJiYgdHlwZW9mIG1vZGVzW2tleV0gPT09ICdudW1iZXInXG4gICAgICAgICYmIGtleSAhPT0gJ1RUWV9PUF9FTkQnKSB7XG4gICAgICB2YWwgPSBtb2Rlc1trZXldO1xuICAgICAgYnl0ZXNbYisrXSA9IG9wY29kZTtcbiAgICAgIGJ5dGVzW2IrK10gPSAodmFsID4+PiAyNCkgJiAweEZGO1xuICAgICAgYnl0ZXNbYisrXSA9ICh2YWwgPj4+IDE2KSAmIDB4RkY7XG4gICAgICBieXRlc1tiKytdID0gKHZhbCA+Pj4gOCkgJiAweEZGO1xuICAgICAgYnl0ZXNbYisrXSA9IHZhbCAmIDB4RkY7XG4gICAgfVxuICB9XG5cbiAgYnl0ZXNbYl0gPSBURVJNSU5BTF9NT0RFLlRUWV9PUF9FTkQ7XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG4vLyBTaGFyZWQgb3V0Z29pbmcgZnVuY3Rpb25zXG5mdW5jdGlvbiBLRVhJTklUKHNlbGYsIGNiKSB7IC8vIENsaWVudC9TZXJ2ZXJcbiAgcmFuZEJ5dGVzKDE2LCBmdW5jdGlvbihteUNvb2tpZSkge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgICAgU1NIX01TR19LRVhJTklUXG4gICAgICBieXRlWzE2XSAgICAgY29va2llIChyYW5kb20gYnl0ZXMpXG4gICAgICBuYW1lLWxpc3QgICAga2V4X2FsZ29yaXRobXNcbiAgICAgIG5hbWUtbGlzdCAgICBzZXJ2ZXJfaG9zdF9rZXlfYWxnb3JpdGhtc1xuICAgICAgbmFtZS1saXN0ICAgIGVuY3J5cHRpb25fYWxnb3JpdGhtc19jbGllbnRfdG9fc2VydmVyXG4gICAgICBuYW1lLWxpc3QgICAgZW5jcnlwdGlvbl9hbGdvcml0aG1zX3NlcnZlcl90b19jbGllbnRcbiAgICAgIG5hbWUtbGlzdCAgICBtYWNfYWxnb3JpdGhtc19jbGllbnRfdG9fc2VydmVyXG4gICAgICBuYW1lLWxpc3QgICAgbWFjX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudFxuICAgICAgbmFtZS1saXN0ICAgIGNvbXByZXNzaW9uX2FsZ29yaXRobXNfY2xpZW50X3RvX3NlcnZlclxuICAgICAgbmFtZS1saXN0ICAgIGNvbXByZXNzaW9uX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudFxuICAgICAgbmFtZS1saXN0ICAgIGxhbmd1YWdlc19jbGllbnRfdG9fc2VydmVyXG4gICAgICBuYW1lLWxpc3QgICAgbGFuZ3VhZ2VzX3NlcnZlcl90b19jbGllbnRcbiAgICAgIGJvb2xlYW4gICAgICBmaXJzdF9rZXhfcGFja2V0X2ZvbGxvd3NcbiAgICAgIHVpbnQzMiAgICAgICAwIChyZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbilcbiAgICAqL1xuICAgIHZhciBhbGdvcyA9IHNlbGYuY29uZmlnLmFsZ29yaXRobXM7XG5cbiAgICB2YXIga2V4QnVmID0gYWxnb3Mua2V4QnVmO1xuICAgIGlmIChzZWxmLnJlbW90ZUJ1Z3MgJiBCVUdTLkJBRF9ESEdFWCkge1xuICAgICAgdmFyIGNvcGllZCA9IGZhbHNlO1xuICAgICAgdmFyIGtleExpc3QgPSBhbGdvcy5rZXg7XG4gICAgICBmb3IgKHZhciBqID0ga2V4TGlzdC5sZW5ndGggLSAxOyBqID49IDA7IC0taikge1xuICAgICAgICBpZiAoa2V4TGlzdFtqXS5pbmRleE9mKCdncm91cC1leGNoYW5nZScpICE9PSAtMSkge1xuICAgICAgICAgIGlmICghY29waWVkKSB7XG4gICAgICAgICAgICBrZXhMaXN0ID0ga2V4TGlzdC5zbGljZSgpO1xuICAgICAgICAgICAgY29waWVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAga2V4TGlzdC5zcGxpY2UoaiwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb3BpZWQpXG4gICAgICAgIGtleEJ1ZiA9IEJ1ZmZlci5mcm9tKGtleExpc3Quam9pbignLCcpKTtcbiAgICB9XG5cbiAgICB2YXIgaG9zdEtleUJ1ZiA9IGFsZ29zLnNlcnZlckhvc3RLZXlCdWY7XG5cbiAgICB2YXIga2V4SW5pdFNpemUgPSAxICsgMTZcbiAgICAgICAgICAgICAgICAgICAgICArIDQgKyBrZXhCdWYubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgKyA0ICsgaG9zdEtleUJ1Zi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICArICgyICogKDQgKyBhbGdvcy5jaXBoZXJCdWYubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICArICgyICogKDQgKyBhbGdvcy5obWFjQnVmLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgKyAoMiAqICg0ICsgYWxnb3MuY29tcHJlc3NCdWYubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICArICgyICogKDQgLyogbGFuZ3VhZ2VzIHNraXBwZWQgKi8pKVxuICAgICAgICAgICAgICAgICAgICAgICsgMSArIDQ7XG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShrZXhJbml0U2l6ZSk7XG4gICAgdmFyIHAgPSAxNztcblxuICAgIGJ1ZlswXSA9IE1FU1NBR0UuS0VYSU5JVDtcblxuICAgIGlmIChteUNvb2tpZSAhPT0gZmFsc2UpXG4gICAgICBteUNvb2tpZS5jb3B5KGJ1ZiwgMSk7XG5cbiAgICB3cml0ZVVJbnQzMkJFKGJ1Ziwga2V4QnVmLmxlbmd0aCwgcCk7XG4gICAgcCArPSA0O1xuICAgIGtleEJ1Zi5jb3B5KGJ1ZiwgcCk7XG4gICAgcCArPSBrZXhCdWYubGVuZ3RoO1xuXG4gICAgd3JpdGVVSW50MzJCRShidWYsIGhvc3RLZXlCdWYubGVuZ3RoLCBwKTtcbiAgICBwICs9IDQ7XG4gICAgaG9zdEtleUJ1Zi5jb3B5KGJ1ZiwgcCk7XG4gICAgcCArPSBob3N0S2V5QnVmLmxlbmd0aDtcblxuICAgIHdyaXRlVUludDMyQkUoYnVmLCBhbGdvcy5jaXBoZXJCdWYubGVuZ3RoLCBwKTtcbiAgICBwICs9IDQ7XG4gICAgYWxnb3MuY2lwaGVyQnVmLmNvcHkoYnVmLCBwKTtcbiAgICBwICs9IGFsZ29zLmNpcGhlckJ1Zi5sZW5ndGg7XG5cbiAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYWxnb3MuY2lwaGVyQnVmLmxlbmd0aCwgcCk7XG4gICAgcCArPSA0O1xuICAgIGFsZ29zLmNpcGhlckJ1Zi5jb3B5KGJ1ZiwgcCk7XG4gICAgcCArPSBhbGdvcy5jaXBoZXJCdWYubGVuZ3RoO1xuXG4gICAgd3JpdGVVSW50MzJCRShidWYsIGFsZ29zLmhtYWNCdWYubGVuZ3RoLCBwKTtcbiAgICBwICs9IDQ7XG4gICAgYWxnb3MuaG1hY0J1Zi5jb3B5KGJ1ZiwgcCk7XG4gICAgcCArPSBhbGdvcy5obWFjQnVmLmxlbmd0aDtcblxuICAgIHdyaXRlVUludDMyQkUoYnVmLCBhbGdvcy5obWFjQnVmLmxlbmd0aCwgcCk7XG4gICAgcCArPSA0O1xuICAgIGFsZ29zLmhtYWNCdWYuY29weShidWYsIHApO1xuICAgIHAgKz0gYWxnb3MuaG1hY0J1Zi5sZW5ndGg7XG5cbiAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYWxnb3MuY29tcHJlc3NCdWYubGVuZ3RoLCBwKTtcbiAgICBwICs9IDQ7XG4gICAgYWxnb3MuY29tcHJlc3NCdWYuY29weShidWYsIHApO1xuICAgIHAgKz0gYWxnb3MuY29tcHJlc3NCdWYubGVuZ3RoO1xuXG4gICAgd3JpdGVVSW50MzJCRShidWYsIGFsZ29zLmNvbXByZXNzQnVmLmxlbmd0aCwgcCk7XG4gICAgcCArPSA0O1xuICAgIGFsZ29zLmNvbXByZXNzQnVmLmNvcHkoYnVmLCBwKTtcbiAgICBwICs9IGFsZ29zLmNvbXByZXNzQnVmLmxlbmd0aDtcblxuICAgIC8vIFNraXAgbGFuZ3VhZ2UgbGlzdHMsIGZpcnN0X2tleF9wYWNrZXRfZm9sbG93cywgYW5kIHJlc2VydmVkIGJ5dGVzXG4gICAgYnVmLmZpbGwoMCwgYnVmLmxlbmd0aCAtIDEzKTtcblxuICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBLRVhJTklUJyk7XG5cbiAgICBzZWxmLl9zdGF0ZS5pbmNvbWluZy5leHBlY3RlZFBhY2tldCA9ICdLRVhJTklUJztcblxuICAgIHZhciBvdXRzdGF0ZSA9IHNlbGYuX3N0YXRlLm91dGdvaW5nO1xuXG4gICAgb3V0c3RhdGUua2V4aW5pdCA9IGJ1ZjtcblxuICAgIGlmIChvdXRzdGF0ZS5zdGF0dXMgPT09IE9VVF9SRUFEWSkge1xuICAgICAgLy8gV2UgYXJlIHRoZSBvbmUgc3RhcnRpbmcgdGhlIHJla2V5aW5nIHByb2Nlc3MgLi4uXG4gICAgICBvdXRzdGF0ZS5zdGF0dXMgPSBPVVRfUkVLRVlJTkc7XG4gICAgfVxuXG4gICAgc2VuZChzZWxmLCBidWYsIGNiLCB0cnVlKTtcbiAgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBLRVhESF9JTklUKHNlbGYpIHsgLy8gQ2xpZW50XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3N0YXRlO1xuICB2YXIgb3V0c3RhdGUgPSBzdGF0ZS5vdXRnb2luZztcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIG91dHN0YXRlLnB1YmtleS5sZW5ndGgpO1xuXG4gIHN0YXRlLmluY29taW5nLmV4cGVjdGVkUGFja2V0ID0gc3RhdGUua2V4LnBrdFJlcGx5O1xuICBpZiAoc3RhdGUua2V4LnR5cGUgPT09ICdncm91cGV4Jykge1xuICAgIGJ1ZlswXSA9IE1FU1NBR0UuS0VYREhfR0VYX0lOSVQ7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIEtFWERIX0dFWF9JTklUJyk7XG4gIH0gZWxzZSB7XG4gICAgYnVmWzBdID0gTUVTU0FHRS5LRVhESF9JTklUO1xuICAgIGlmIChzdGF0ZS5rZXgudHlwZSA9PT0gJ2dyb3VwJylcbiAgICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBLRVhESF9JTklUJyk7XG4gICAgZWxzZVxuICAgICAgc2VsZi5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIEtFWEVDREhfSU5JVCcpO1xuICB9XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG91dHN0YXRlLnB1YmtleS5sZW5ndGgsIDEpO1xuICBvdXRzdGF0ZS5wdWJrZXkuY29weShidWYsIDUpO1xuXG4gIHJldHVybiBzZW5kKHNlbGYsIGJ1ZiwgdW5kZWZpbmVkLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gS0VYREhfUkVQTFkoc2VsZiwgZSkgeyAvLyBTZXJ2ZXJcbiAgdmFyIHN0YXRlID0gc2VsZi5fc3RhdGU7XG4gIHZhciBvdXRzdGF0ZSA9IHN0YXRlLm91dGdvaW5nO1xuICB2YXIgaW5zdGF0ZSA9IHN0YXRlLmluY29taW5nO1xuICB2YXIgY3VySG9zdEtleSA9IHNlbGYuY29uZmlnLmhvc3RLZXlzW3N0YXRlLmhvc3RrZXlGb3JtYXRdO1xuICBpZiAoQXJyYXkuaXNBcnJheShjdXJIb3N0S2V5KSlcbiAgICBjdXJIb3N0S2V5ID0gY3VySG9zdEtleVswXTtcbiAgdmFyIGhvc3RrZXkgPSBjdXJIb3N0S2V5LmdldFB1YmxpY1NTSCgpO1xuICB2YXIgaG9zdGtleUFsZ28gPSBjdXJIb3N0S2V5LnR5cGU7XG5cbiAgLy8gZSA9PT0gY2xpZW50IERIIHB1YmxpYyBrZXlcblxuICBlID0gc3RhdGUua2V4LmNvbnZlcnRQdWJsaWNLZXkoZSk7XG5cbiAgdmFyIHNlY3JldCA9IHN0YXRlLmtleC5jb21wdXRlU2VjcmV0KGUpO1xuXG4gIGlmIChzZWNyZXQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHNlY3JldC5tZXNzYWdlID0gJ0Vycm9yIHdoaWxlIGNvbXB1dGluZyBESCBzZWNyZXQgKCdcbiAgICAgICAgICAgICAgICAgICAgICsgc3RhdGUua2V4LnR5cGUgKyAnKTogJ1xuICAgICAgICAgICAgICAgICAgICAgKyBzZWNyZXQubWVzc2FnZTtcbiAgICBzZWNyZXQubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgc2VjcmV0KTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChzdGF0ZS5rZXguaGFzaCk7XG5cbiAgdmFyIGxlbl9pZGVudCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGluc3RhdGUuaWRlbnRSYXcpO1xuICB2YXIgbGVuX3NpZGVudCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHNlbGYuY29uZmlnLmlkZW50KTtcbiAgdmFyIGxlbl9pbml0ID0gaW5zdGF0ZS5rZXhpbml0Lmxlbmd0aDtcbiAgdmFyIGxlbl9zaW5pdCA9IG91dHN0YXRlLmtleGluaXQubGVuZ3RoO1xuICB2YXIgbGVuX2hvc3RrZXkgPSBob3N0a2V5Lmxlbmd0aDtcbiAgdmFyIGxlbl9wdWJrZXkgPSBlLmxlbmd0aDtcbiAgdmFyIGxlbl9zcHVia2V5ID0gb3V0c3RhdGUucHVia2V5Lmxlbmd0aDtcbiAgdmFyIGxlbl9zZWNyZXQgPSBzZWNyZXQubGVuZ3RoO1xuXG4gIHZhciBleGNoYW5nZUJ1ZkxlbiA9IGxlbl9pZGVudFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zaWRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgKyBsZW5faW5pdFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zaW5pdFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9ob3N0a2V5XG4gICAgICAgICAgICAgICAgICAgICAgICsgbGVuX3B1YmtleVxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zcHVia2V5XG4gICAgICAgICAgICAgICAgICAgICAgICsgbGVuX3NlY3JldFxuICAgICAgICAgICAgICAgICAgICAgICArICg0ICogOCk7IC8vIExlbmd0aCBmaWVsZHMgZm9yIGFib3ZlIHZhbHVlc1xuXG4gIC8vIEdyb3VwIGV4Y2hhbmdlLXJlbGF0ZWRcbiAgdmFyIGxlbl9nZXhfcHJpbWU7XG4gIHZhciBsZW5fZ2V4X2dlbjtcbiAgdmFyIGdleF9wcmltZTtcbiAgdmFyIGdleF9nZW47XG4gIHZhciBkaFBhcmFtcyA9IHN0YXRlLmtleC5nZXRESFBhcmFtcygpO1xuICBpZiAoZGhQYXJhbXMpIHtcbiAgICBnZXhfcHJpbWUgPSBkaFBhcmFtcy5wcmltZTtcbiAgICBnZXhfZ2VuID0gZGhQYXJhbXMuZ2VuZXJhdG9yO1xuICAgIGxlbl9nZXhfcHJpbWUgPSBnZXhfcHJpbWUubGVuZ3RoO1xuICAgIGxlbl9nZXhfZ2VuID0gZ2V4X2dlbi5sZW5ndGg7XG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gKDQgKiAzKTsgLy8gbWluLCBuLCBtYXggdmFsdWVzXG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gKDQgKiAyKTsgLy8gcHJpbWUsIGdlbmVyYXRvciBsZW5ndGggZmllbGRzXG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gbGVuX2dleF9wcmltZTtcbiAgICBleGNoYW5nZUJ1ZkxlbiArPSBsZW5fZ2V4X2dlbjtcbiAgfVxuXG4gIHZhciBicCA9IDA7XG4gIHZhciBleGNoYW5nZUJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShleGNoYW5nZUJ1Zkxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX2lkZW50LCBicCk7XG4gIGJwICs9IDQ7XG4gIGV4Y2hhbmdlQnVmLndyaXRlKGluc3RhdGUuaWRlbnRSYXcsIGJwLCAndXRmOCcpOyAvLyBWX0NcbiAgYnAgKz0gbGVuX2lkZW50O1xuXG4gIHdyaXRlVUludDMyQkUoZXhjaGFuZ2VCdWYsIGxlbl9zaWRlbnQsIGJwKTtcbiAgYnAgKz0gNDtcbiAgZXhjaGFuZ2VCdWYud3JpdGUoc2VsZi5jb25maWcuaWRlbnQsIGJwLCAndXRmOCcpOyAvLyBWX1NcbiAgYnAgKz0gbGVuX3NpZGVudDtcblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5faW5pdCwgYnApO1xuICBicCArPSA0O1xuICBpbnN0YXRlLmtleGluaXQuY29weShleGNoYW5nZUJ1ZiwgYnApOyAvLyBJX0NcbiAgYnAgKz0gbGVuX2luaXQ7XG4gIGluc3RhdGUua2V4aW5pdCA9IHVuZGVmaW5lZDtcblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5fc2luaXQsIGJwKTtcbiAgYnAgKz0gNDtcbiAgb3V0c3RhdGUua2V4aW5pdC5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIElfU1xuICBicCArPSBsZW5fc2luaXQ7XG4gIG91dHN0YXRlLmtleGluaXQgPSB1bmRlZmluZWQ7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX2hvc3RrZXksIGJwKTtcbiAgYnAgKz0gNDtcbiAgaG9zdGtleS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIEtfU1xuICBicCArPSBsZW5faG9zdGtleTtcblxuICBpZiAoZGhQYXJhbXMpIHtcbiAgICBLRVhESF9HRVhfUkVRX1BBQ0tFVC5zbGljZSgxKS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIG1pbiwgbiwgbWF4XG4gICAgYnAgKz0gKDQgKiAzKTsgLy8gU2tpcCBvdmVyIGJ5dGVzIGp1c3QgY29waWVkXG5cbiAgICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5fZ2V4X3ByaW1lLCBicCk7XG4gICAgYnAgKz0gNDtcbiAgICBnZXhfcHJpbWUuY29weShleGNoYW5nZUJ1ZiwgYnApOyAvLyBwXG4gICAgYnAgKz0gbGVuX2dleF9wcmltZTtcblxuICAgIHdyaXRlVUludDMyQkUoZXhjaGFuZ2VCdWYsIGxlbl9nZXhfZ2VuLCBicCk7XG4gICAgYnAgKz0gNDtcbiAgICBnZXhfZ2VuLmNvcHkoZXhjaGFuZ2VCdWYsIGJwKTsgLy8gZ1xuICAgIGJwICs9IGxlbl9nZXhfZ2VuO1xuICB9XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX3B1YmtleSwgYnApO1xuICBicCArPSA0O1xuICBlLmNvcHkoZXhjaGFuZ2VCdWYsIGJwKTsgLy8gZVxuICBicCArPSBsZW5fcHVia2V5O1xuXG4gIHdyaXRlVUludDMyQkUoZXhjaGFuZ2VCdWYsIGxlbl9zcHVia2V5LCBicCk7XG4gIGJwICs9IDQ7XG4gIG91dHN0YXRlLnB1YmtleS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIGZcbiAgYnAgKz0gbGVuX3NwdWJrZXk7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX3NlY3JldCwgYnApO1xuICBicCArPSA0O1xuICBzZWNyZXQuY29weShleGNoYW5nZUJ1ZiwgYnApOyAvLyBLXG5cbiAgb3V0c3RhdGUuZXhjaGFuZ2VIYXNoID0gaGFzaC51cGRhdGUoZXhjaGFuZ2VCdWYpLmRpZ2VzdCgpOyAvLyBIXG5cbiAgaWYgKG91dHN0YXRlLnNlc3Npb25JZCA9PT0gdW5kZWZpbmVkKVxuICAgIG91dHN0YXRlLnNlc3Npb25JZCA9IG91dHN0YXRlLmV4Y2hhbmdlSGFzaDtcbiAgb3V0c3RhdGUua2V4c2VjcmV0ID0gc2VjcmV0O1xuXG4gIHZhciBzaWduYXR1cmUgPSBjdXJIb3N0S2V5LnNpZ24ob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKTtcbiAgaWYgKHNpZ25hdHVyZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgc2lnbmF0dXJlLm1lc3NhZ2UgPSAnRXJyb3Igd2hpbGUgc2lnbmluZyBkYXRhIHdpdGggaG9zdCBrZXkgKCdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgaG9zdGtleUFsZ28gKyAnKTogJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKyBzaWduYXR1cmUubWVzc2FnZTtcbiAgICBzaWduYXR1cmUubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgc2lnbmF0dXJlKTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2lnbmF0dXJlID0gY29udmVydFNpZ25hdHVyZShzaWduYXR1cmUsIGhvc3RrZXlBbGdvKTtcbiAgaWYgKHNpZ25hdHVyZSA9PT0gZmFsc2UpIHtcbiAgICBzaWduYXR1cmUubWVzc2FnZSA9ICdFcnJvciB3aGlsZSBjb252ZXJ0aW5nIGhhbmRzaGFrZSBzaWduYXR1cmUnO1xuICAgIHNpZ25hdHVyZS5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBzaWduYXR1cmUpO1xuICAgIHNlbGYuZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5LRVlfRVhDSEFOR0VfRkFJTEVEKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKlxuICAgIGJ5dGUgICAgICBTU0hfTVNHX0tFWERIX1JFUExZXG4gICAgc3RyaW5nICAgIHNlcnZlciBwdWJsaWMgaG9zdCBrZXkgYW5kIGNlcnRpZmljYXRlcyAoS19TKVxuICAgIG1waW50ICAgICBmXG4gICAgc3RyaW5nICAgIHNpZ25hdHVyZSBvZiBIXG4gICovXG5cbiAgdmFyIHNpZ2xlbiA9IDQgKyBob3N0a2V5QWxnby5sZW5ndGggKyA0ICsgc2lnbmF0dXJlLmxlbmd0aDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgbGVuX2hvc3RrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBsZW5fc3B1YmtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIHNpZ2xlbik7XG5cbiAgYnAgPSAwO1xuICBidWZbYnBdID0gTUVTU0FHRVtzdGF0ZS5rZXgucGt0UmVwbHldO1xuICArK2JwO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBsZW5faG9zdGtleSwgYnApO1xuICBicCArPSA0O1xuICBob3N0a2V5LmNvcHkoYnVmLCBicCk7IC8vIEtfU1xuICBicCArPSBsZW5faG9zdGtleTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbGVuX3NwdWJrZXksIGJwKTtcbiAgYnAgKz0gNDtcbiAgb3V0c3RhdGUucHVia2V5LmNvcHkoYnVmLCBicCk7IC8vIGZcbiAgYnAgKz0gbGVuX3NwdWJrZXk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHNpZ2xlbiwgYnApO1xuICBicCArPSA0O1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaG9zdGtleUFsZ28ubGVuZ3RoLCBicCk7XG4gIGJwICs9IDQ7XG4gIGJ1Zi53cml0ZShob3N0a2V5QWxnbywgYnAsIGhvc3RrZXlBbGdvLmxlbmd0aCwgJ2FzY2lpJyk7XG4gIGJwICs9IGhvc3RrZXlBbGdvLmxlbmd0aDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHNpZ25hdHVyZS5sZW5ndGgsIGJwKTtcbiAgYnAgKz0gNDtcbiAgc2lnbmF0dXJlLmNvcHkoYnVmLCBicCk7XG5cbiAgc3RhdGUuaW5jb21pbmcuZXhwZWN0ZWRQYWNrZXQgPSAnTkVXS0VZUyc7XG5cbiAgc2VsZi5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nICcgKyBzdGF0ZS5rZXgucGt0UmVwbHkpO1xuICBzZW5kKHNlbGYsIGJ1ZiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICBvdXRzdGF0ZS5zZW50TkVXS0VZUyA9IHRydWU7XG4gIHNlbGYuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBORVdLRVlTJyk7XG4gIHJldHVybiBzZW5kKHNlbGYsIE5FV0tFWVNfUEFDS0VULCB1bmRlZmluZWQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBLRVhESF9HRVhfUkVRKHNlbGYpIHsgLy8gQ2xpZW50XG4gIHNlbGYuX3N0YXRlLmluY29taW5nLmV4cGVjdGVkUGFja2V0ID0gJ0tFWERIX0dFWF9HUk9VUCc7XG5cbiAgc2VsZi5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIEtFWERIX0dFWF9SRVFVRVNUJyk7XG4gIHJldHVybiBzZW5kKHNlbGYsIEtFWERIX0dFWF9SRVFfUEFDS0VULCB1bmRlZmluZWQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBjb21wcmVzc1BheWxvYWQoc2VsZiwgcGF5bG9hZCwgY2IpIHtcbiAgdmFyIGNvbXByZXNzID0gc2VsZi5fc3RhdGUub3V0Z29pbmcuY29tcHJlc3MuaW5zdGFuY2U7XG4gIGNvbXByZXNzLndyaXRlKHBheWxvYWQpO1xuICBjb21wcmVzcy5mbHVzaChaX1BBUlRJQUxfRkxVU0gsIGNvbXByZXNzRmx1c2hDYi5iaW5kKHNlbGYsIGNiKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXByZXNzRmx1c2hDYihjYikge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKVxuICAgIHJldHVybjtcbiAgc2VuZF8odGhpcywgdGhpcy5fc3RhdGUub3V0Z29pbmcuY29tcHJlc3MuaW5zdGFuY2UucmVhZCgpLCBjYik7XG5cbiAgdmFyIHF1ZXVlID0gdGhpcy5fc3RhdGUub3V0Z29pbmcuY29tcHJlc3MucXVldWU7XG4gIHF1ZXVlLnNoaWZ0KCk7XG4gIGlmIChxdWV1ZS5sZW5ndGggPiAwKVxuICAgIGNvbXByZXNzUGF5bG9hZCh0aGlzLCBxdWV1ZVswXVswXSwgcXVldWVbMF1bMV0pO1xufVxuXG5mdW5jdGlvbiBzZW5kKHNlbGYsIHBheWxvYWQsIGNiLCBieXBhc3MpIHtcbiAgdmFyIHN0YXRlID0gc2VsZi5fc3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIG91dHN0YXRlID0gc3RhdGUub3V0Z29pbmc7XG4gIGlmIChvdXRzdGF0ZS5zdGF0dXMgPT09IE9VVF9SRUtFWUlORyAmJiAhYnlwYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIG91dHN0YXRlLnJla2V5UXVldWUucHVzaChbcGF5bG9hZCwgY2JdKTtcbiAgICBlbHNlXG4gICAgICBvdXRzdGF0ZS5yZWtleVF1ZXVlLnB1c2gocGF5bG9hZCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKHNlbGYuX3JlYWRhYmxlU3RhdGUuZW5kZWQgfHwgc2VsZi5fd3JpdGFibGVTdGF0ZS5lbmRlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChvdXRzdGF0ZS5jb21wcmVzcy5pbnN0YW5jZSkge1xuICAgIC8vIFRoaXMgcXVldWUgbm9uc2Vuc2Ugb25seSBleGlzdHMgYmVjYXVzZSBvZiBhIGNoYW5nZSBtYWRlIGluIG5vZGUgdjEwLjEyLjBcbiAgICAvLyB0aGF0IGNoYW5nZWQgZmx1c2hpbmcgYmVoYXZpb3IsIHdoaWNoIG5vdyBjb2FsZXNjZXMgbXVsdGlwbGUgd3JpdGVzIHRvIGFcbiAgICAvLyBzaW5nbGUgZmx1c2gsIHdoaWNoIGRvZXMgbm90IHdvcmsgZm9yIHVzLlxuICAgIHZhciBxdWV1ZSA9IG91dHN0YXRlLmNvbXByZXNzLnF1ZXVlO1xuICAgIHF1ZXVlLnB1c2goW3BheWxvYWQsIGNiXSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSlcbiAgICAgIGNvbXByZXNzUGF5bG9hZChzZWxmLCBxdWV1ZVswXVswXSwgcXVldWVbMF1bMV0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZW5kXyhzZWxmLCBwYXlsb2FkLCBjYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VuZF8oc2VsZiwgcGF5bG9hZCwgY2IpIHtcbiAgLy8gVE9ETzogSW1wbGVtZW50IGxlbmd0aCBjaGVja3NcblxuICB2YXIgc3RhdGUgPSBzZWxmLl9zdGF0ZTtcbiAgdmFyIG91dHN0YXRlID0gc3RhdGUub3V0Z29pbmc7XG4gIHZhciBlbmNyeXB0ID0gb3V0c3RhdGUuZW5jcnlwdDtcbiAgdmFyIGhtYWMgPSBvdXRzdGF0ZS5obWFjO1xuICB2YXIgcGt0TGVuO1xuICB2YXIgcGFkTGVuO1xuICB2YXIgYnVmO1xuICB2YXIgbWFjO1xuICB2YXIgcmV0O1xuXG4gIHBrdExlbiA9IHBheWxvYWQubGVuZ3RoICsgOTtcblxuICBpZiAoZW5jcnlwdC5pbnN0YW5jZSAhPT0gZmFsc2UpIHtcbiAgICBpZiAoZW5jcnlwdC5pbmZvLmF1dGhMZW4gPiAwKSB7XG4gICAgICB2YXIgcHRsZW4gPSAxICsgcGF5bG9hZC5sZW5ndGggKyA0LyogTXVzdCBoYXZlIGF0IGxlYXN0IDQgYnl0ZXMgcGFkZGluZyovO1xuICAgICAgd2hpbGUgKChwdGxlbiAlIGVuY3J5cHQuaW5mby5ibG9ja0xlbikgIT09IDApXG4gICAgICAgICsrcHRsZW47XG4gICAgICBwYWRMZW4gPSBwdGxlbiAtIDEgLSBwYXlsb2FkLmxlbmd0aDtcbiAgICAgIHBrdExlbiA9IDQgKyBwdGxlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGJsb2NrTGVuID0gZW5jcnlwdC5pbmZvLmJsb2NrTGVuO1xuICAgICAgcGt0TGVuICs9ICgoYmxvY2tMZW4gLSAxKSAqIHBrdExlbikgJSBibG9ja0xlbjtcbiAgICAgIHBhZExlbiA9IHBrdExlbiAtIHBheWxvYWQubGVuZ3RoIC0gNTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGt0TGVuICs9ICg3ICogcGt0TGVuKSAlIDg7XG4gICAgcGFkTGVuID0gcGt0TGVuIC0gcGF5bG9hZC5sZW5ndGggLSA1O1xuICB9XG5cbiAgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBrdExlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBrdExlbiAtIDQsIDApO1xuICBidWZbNF0gPSBwYWRMZW47XG4gIHBheWxvYWQuY29weShidWYsIDUpO1xuXG4gIGNvcHlSYW5kUGFkQnl0ZXMoYnVmLCA1ICsgcGF5bG9hZC5sZW5ndGgsIHBhZExlbik7XG5cbiAgaWYgKGhtYWMudHlwZSAhPT0gZmFsc2UgJiYgaG1hYy5rZXkpIHtcbiAgICBtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYyhTU0hfVE9fT1BFTlNTTFtobWFjLnR5cGVdLCBobWFjLmtleSk7XG4gICAgd3JpdGVVSW50MzJCRShvdXRzdGF0ZS5idWZTZXFubywgb3V0c3RhdGUuc2Vxbm8sIDApO1xuICAgIG1hYy51cGRhdGUob3V0c3RhdGUuYnVmU2Vxbm8pO1xuICAgIG1hYy51cGRhdGUoYnVmKTtcbiAgICBtYWMgPSBtYWMuZGlnZXN0KCk7XG4gICAgaWYgKG1hYy5sZW5ndGggPiBobWFjLmluZm8uYWN0dWFsTGVuKVxuICAgICAgbWFjID0gbWFjLnNsaWNlKDAsIGhtYWMuaW5mby5hY3R1YWxMZW4pO1xuICB9XG5cbiAgdmFyIG5iID0gMDtcbiAgdmFyIGVuY0RhdGE7XG5cbiAgaWYgKGVuY3J5cHQuaW5zdGFuY2UgIT09IGZhbHNlKSB7XG4gICAgaWYgKGVuY3J5cHQuaW5mby5hdXRoTGVuID4gMCkge1xuICAgICAgdmFyIGVuY3J5cHRlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihTU0hfVE9fT1BFTlNTTFtlbmNyeXB0LnR5cGVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0LmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdC5pdik7XG4gICAgICBlbmNyeXB0ZXIuc2V0QXV0b1BhZGRpbmcoZmFsc2UpO1xuXG4gICAgICB2YXIgbGVuYnVmID0gYnVmLnNsaWNlKDAsIDQpO1xuXG4gICAgICBlbmNyeXB0ZXIuc2V0QUFEKGxlbmJ1Zik7XG4gICAgICBzZWxmLnB1c2gobGVuYnVmKTtcbiAgICAgIG5iICs9IGxlbmJ1ZjtcblxuICAgICAgZW5jRGF0YSA9IGVuY3J5cHRlci51cGRhdGUoYnVmLnNsaWNlKDQpKTtcbiAgICAgIHNlbGYucHVzaChlbmNEYXRhKTtcbiAgICAgIG5iICs9IGVuY0RhdGEubGVuZ3RoO1xuXG4gICAgICB2YXIgZmluYWwgPSBlbmNyeXB0ZXIuZmluYWwoKTtcbiAgICAgIGlmIChmaW5hbC5sZW5ndGgpIHtcbiAgICAgICAgc2VsZi5wdXNoKGZpbmFsKTtcbiAgICAgICAgbmIgKz0gZmluYWwubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXV0aFRhZyA9IGVuY3J5cHRlci5nZXRBdXRoVGFnKCk7XG4gICAgICByZXQgPSBzZWxmLnB1c2goYXV0aFRhZyk7XG4gICAgICBuYiArPSBhdXRoVGFnLmxlbmd0aDtcblxuICAgICAgaXZfaW5jKGVuY3J5cHQuaXYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNEYXRhID0gZW5jcnlwdC5pbnN0YW5jZS51cGRhdGUoYnVmKTtcbiAgICAgIHNlbGYucHVzaChlbmNEYXRhKTtcbiAgICAgIG5iICs9IGVuY0RhdGEubGVuZ3RoO1xuXG4gICAgICByZXQgPSBzZWxmLnB1c2gobWFjKTtcbiAgICAgIG5iICs9IG1hYy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldCA9IHNlbGYucHVzaChidWYpO1xuICAgIG5iID0gYnVmLmxlbmd0aDtcbiAgfVxuXG4gIHNlbGYuYnl0ZXNTZW50ICs9IG5iO1xuXG4gIGlmICgrK291dHN0YXRlLnNlcW5vID4gTUFYX1NFUU5PKVxuICAgIG91dHN0YXRlLnNlcW5vID0gMDtcblxuICBjYiAmJiBjYigpO1xuXG4gIHJldHVybiByZXQ7XG59XG5cbnZhciBjb3B5UmFuZFBhZEJ5dGVzID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodHlwZW9mIGNyeXB0by5yYW5kb21GaWxsU3luYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjcnlwdG8ucmFuZG9tRmlsbFN5bmM7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvcHlSYW5kUGFkQnl0ZXMoYnVmLCBvZmZzZXQsIGNvdW50KSB7XG4gICAgICB2YXIgcGFkQnl0ZXMgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoY291bnQpO1xuICAgICAgcGFkQnl0ZXMuY29weShidWYsIG9mZnNldCk7XG4gICAgfTtcbiAgfVxufSkoKTtcblxuZnVuY3Rpb24gcmFuZEJ5dGVzKG4sIGNiKSB7XG4gIGNyeXB0by5yYW5kb21CeXRlcyhuLCBmdW5jdGlvbiByZXRyeShlcnIsIGJ1Zikge1xuICAgIGlmIChlcnIpXG4gICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKG4sIHJldHJ5KTtcbiAgICBjYiAmJiBjYihidWYpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY29udmVydFNpZ25hdHVyZShzaWduYXR1cmUsIGtleVR5cGUpIHtcbiAgc3dpdGNoIChrZXlUeXBlKSB7XG4gICAgY2FzZSAnc3NoLWRzcyc6XG4gICAgICByZXR1cm4gRFNBU2lnQkVSVG9CYXJlKHNpZ25hdHVyZSk7XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDI1Nic6XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDM4NCc6XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDUyMSc6XG4gICAgICByZXR1cm4gRUNEU0FTaWdBU04xVG9TU0goc2lnbmF0dXJlKTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbnZhciB0aW1pbmdTYWZlRXF1YWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2YgY3J5cHRvLnRpbWluZ1NhZmVFcXVhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiB0aW1pbmdTYWZlRXF1YWxzKGEsIGIpIHtcbiAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgICAgY3J5cHRvLnRpbWluZ1NhZmVFcXVhbChhLCBhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by50aW1pbmdTYWZlRXF1YWwoYSwgYik7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gdGltaW5nU2FmZUVxdWFscyhhLCBiKSB7XG4gICAgICB2YXIgdmFsO1xuICAgICAgaWYgKGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgICAgICB2YWwgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gMTtcbiAgICAgICAgYiA9IGE7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB2YWwgfD0gKGFbaV0gXiBiW2ldKTtcblxuICAgICAgcmV0dXJuICh2YWwgPT09IDApO1xuICAgIH1cbiAgfVxufSkoKTtcblxuZnVuY3Rpb24gS2V5RXhjaGFuZ2UoYWxnbywgb3B0aW9ucykge1xuICBzd2l0Y2ggKGFsZ28pIHtcbiAgICBjYXNlICdjdXJ2ZTI1NTE5LXNoYTI1Nic6XG4gICAgY2FzZSAnY3VydmUyNTUxOS1zaGEyNTZAbGlic3NoLm9yZyc6XG4gICAgICBpZiAoIUNVUlZFMjU1MTlfU1VQUE9SVEVEKVxuICAgICAgICBicmVhaztcbiAgICAgIHRoaXMudHlwZSA9ICcyNTUxOSc7XG4gICAgICB0aGlzLmhhc2ggPSAnc2hhMjU2JztcbiAgICAgIHRoaXMucGt0SW5pdCA9ICdLRVhFQ0RIX0lOSVQnO1xuICAgICAgdGhpcy5wa3RSZXBseSA9ICdLRVhFQ0RIX1JFUExZJztcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdlY2RoLXNoYTItbmlzdHAyNTYnOlxuICAgICAgdGhpcy50eXBlID0gJ2VjZGgnO1xuICAgICAgdGhpcy5uYW1lID0gJ3ByaW1lMjU2djEnO1xuICAgICAgdGhpcy5oYXNoID0gJ3NoYTI1Nic7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYRUNESF9JTklUJztcbiAgICAgIHRoaXMucGt0UmVwbHkgPSAnS0VYRUNESF9SRVBMWSc7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZWNkaC1zaGEyLW5pc3RwMzg0JzpcbiAgICAgIHRoaXMudHlwZSA9ICdlY2RoJztcbiAgICAgIHRoaXMubmFtZSA9ICdzZWNwMzg0cjEnO1xuICAgICAgdGhpcy5oYXNoID0gJ3NoYTM4NCc7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYRUNESF9JTklUJztcbiAgICAgIHRoaXMucGt0UmVwbHkgPSAnS0VYRUNESF9SRVBMWSc7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZWNkaC1zaGEyLW5pc3RwNTIxJzpcbiAgICAgIHRoaXMudHlwZSA9ICdlY2RoJztcbiAgICAgIHRoaXMubmFtZSA9ICdzZWNwNTIxcjEnO1xuICAgICAgdGhpcy5oYXNoID0gJ3NoYTUxMic7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYRUNESF9JTklUJztcbiAgICAgIHRoaXMucGt0UmVwbHkgPSAnS0VYRUNESF9SRVBMWSc7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZGlmZmllLWhlbGxtYW4tZ3JvdXAxLXNoYTEnOlxuICAgICAgdGhpcy50eXBlID0gJ2dyb3VwJztcbiAgICAgIHRoaXMubmFtZSA9ICdtb2RwMic7XG4gICAgICB0aGlzLmhhc2ggPSAnc2hhMSc7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYREhfSU5JVCc7XG4gICAgICB0aGlzLnBrdFJlcGx5ID0gJ0tFWERIX1JFUExZJztcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEnOlxuICAgICAgdGhpcy50eXBlID0gJ2dyb3VwJztcbiAgICAgIHRoaXMubmFtZSA9ICdtb2RwMTQnO1xuICAgICAgdGhpcy5oYXNoID0gJ3NoYTEnO1xuICAgICAgdGhpcy5wa3RJbml0ID0gJ0tFWERIX0lOSVQnO1xuICAgICAgdGhpcy5wa3RSZXBseSA9ICdLRVhESF9SRVBMWSc7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZGlmZmllLWhlbGxtYW4tZ3JvdXAxNC1zaGEyNTYnOlxuICAgICAgdGhpcy50eXBlID0gJ2dyb3VwJztcbiAgICAgIHRoaXMubmFtZSA9ICdtb2RwMTQnO1xuICAgICAgdGhpcy5oYXNoID0gJ3NoYTI1Nic7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYREhfSU5JVCc7XG4gICAgICB0aGlzLnBrdFJlcGx5ID0gJ0tFWERIX1JFUExZJztcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdkaWZmaWUtaGVsbG1hbi1ncm91cDE2LXNoYTUxMic6XG4gICAgICB0aGlzLnR5cGUgPSAnZ3JvdXAnO1xuICAgICAgdGhpcy5uYW1lID0gJ21vZHAxNic7XG4gICAgICB0aGlzLmhhc2ggPSAnc2hhNTEyJztcbiAgICAgIHRoaXMucGt0SW5pdCA9ICdLRVhESF9JTklUJztcbiAgICAgIHRoaXMucGt0UmVwbHkgPSAnS0VYREhfUkVQTFknO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgJ2RpZmZpZS1oZWxsbWFuLWdyb3VwMTgtc2hhNTEyJzpcbiAgICAgIHRoaXMudHlwZSA9ICdncm91cCc7XG4gICAgICB0aGlzLm5hbWUgPSAnbW9kcDE4JztcbiAgICAgIHRoaXMuaGFzaCA9ICdzaGE1MTInO1xuICAgICAgdGhpcy5wa3RJbml0ID0gJ0tFWERIX0lOSVQnO1xuICAgICAgdGhpcy5wa3RSZXBseSA9ICdLRVhESF9SRVBMWSc7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZGlmZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMSc6XG4gICAgICB0aGlzLnR5cGUgPSAnZ3JvdXBleCc7XG4gICAgICB0aGlzLmhhc2ggPSAnc2hhMSc7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYREhfR0VYX1JFUSc7XG4gICAgICB0aGlzLnBrdFJlcGx5ID0gJ0tFWERIX0dFWF9SRVBMWSc7XG4gICAgICB0aGlzLl9wcmltZSA9IG51bGw7XG4gICAgICB0aGlzLl9nZW5lcmF0b3IgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgJ2RpZmZpZS1oZWxsbWFuLWdyb3VwLWV4Y2hhbmdlLXNoYTI1Nic6XG4gICAgICB0aGlzLnR5cGUgPSAnZ3JvdXBleCc7XG4gICAgICB0aGlzLmhhc2ggPSAnc2hhMjU2JztcbiAgICAgIHRoaXMucGt0SW5pdCA9ICdLRVhESF9HRVhfUkVRJztcbiAgICAgIHRoaXMucGt0UmVwbHkgPSAnS0VYREhfR0VYX1JFUExZJztcbiAgICAgIHRoaXMuX3ByaW1lID0gbnVsbDtcbiAgICAgIHRoaXMuX2dlbmVyYXRvciA9IG51bGw7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtOiAnICsgYWxnbyk7XG59XG5LZXlFeGNoYW5nZS5wcm90b3R5cGUuc2V0REhQYXJhbXMgPSBmdW5jdGlvbihwcmltZSwgZ2VuZXJhdG9yKSB7XG4gIGlmICh0aGlzLnR5cGUgPT09ICdncm91cGV4Jykge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHByaW1lKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwcmltZSB2YWx1ZScpO1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGdlbmVyYXRvcikpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2VuZXJhdG9yIHZhbHVlJyk7XG4gICAgdGhpcy5fcHJpbWUgPSBwcmltZTtcbiAgICB0aGlzLl9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7XG4gIH1cbn07XG5LZXlFeGNoYW5nZS5wcm90b3R5cGUuZ2V0REhQYXJhbXMgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMudHlwZSA9PT0gJ2dyb3VwZXgnICYmIHRoaXMuX2tleCkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmltZTogY29udmVydFRvTXBpbnQodGhpcy5fa2V4LmdldFByaW1lKCkpLFxuICAgICAgZ2VuZXJhdG9yOiBjb252ZXJ0VG9NcGludCh0aGlzLl9rZXguZ2V0R2VuZXJhdG9yKCkpLFxuICAgIH07XG4gIH1cbn07XG5LZXlFeGNoYW5nZS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzID0gZnVuY3Rpb24oKSB7XG4gIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgY2FzZSAnMjU1MTknOlxuICAgICAgaWYgKCF0aGlzLl9rZXlzKVxuICAgICAgICB0aGlzLl9rZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoJ3gyNTUxOScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZWNkaCc6XG4gICAgICBpZiAoIXRoaXMuX2tleCkge1xuICAgICAgICB0aGlzLl9rZXggPSBjcnlwdG8uY3JlYXRlRUNESCh0aGlzLm5hbWUpO1xuICAgICAgICB0aGlzLl9wdWJsaWMgPSB0aGlzLl9rZXguZ2VuZXJhdGVLZXlzKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cCc6XG4gICAgY2FzZSAnZ3JvdXBleCc6XG4gICAgICBpZiAoIXRoaXMuX2tleCkge1xuICAgICAgICBpZiAodGhpcy5uYW1lKVxuICAgICAgICAgIHRoaXMuX2tleCA9IGNyeXB0by5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAodGhpcy5uYW1lKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fcHJpbWUgJiYgdGhpcy5fZ2VuZXJhdG9yKVxuICAgICAgICAgIHRoaXMuX2tleCA9IGNyeXB0by5jcmVhdGVEaWZmaWVIZWxsbWFuKHRoaXMuX3ByaW1lLCB0aGlzLl9nZW5lcmF0b3IpO1xuICAgICAgICBpZiAodGhpcy5fa2V4KVxuICAgICAgICAgIHRoaXMuX3B1YmxpYyA9IHRoaXMuX2tleC5nZW5lcmF0ZUtleXMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59O1xuS2V5RXhjaGFuZ2UucHJvdG90eXBlLmdldFB1YmxpY0tleSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmdlbmVyYXRlS2V5cygpO1xuXG4gIHZhciBrZXk7XG4gIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgY2FzZSAnMjU1MTknOlxuICAgICAga2V5ID0gdGhpcy5fa2V5cy5wdWJsaWNLZXkuZXhwb3J0KHsgdHlwZTogJ3Nwa2knLCBmb3JtYXQ6ICdkZXInIH0pO1xuICAgICAgcmV0dXJuIGtleS5zbGljZSgtMzIpOyAvLyBIQUNLOiBhdm9pZHMgcGFyc2luZyBERVIvQkVSIGhlYWRlclxuICAgIGNhc2UgJ2VjZGgnOlxuICAgIGNhc2UgJ2dyb3VwJzpcbiAgICBjYXNlICdncm91cGV4JzpcbiAgICAgIGtleSA9IHRoaXMuX3B1YmxpYztcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmIChrZXkpXG4gICAgcmV0dXJuIHRoaXMuY29udmVydFB1YmxpY0tleShrZXkpO1xufTtcbktleUV4Y2hhbmdlLnByb3RvdHlwZS5jb252ZXJ0UHVibGljS2V5ID0gZnVuY3Rpb24oa2V5KSB7XG4gIHZhciBuZXdLZXk7XG4gIHZhciBpZHggPSAwO1xuICB2YXIgbGVuID0ga2V5Lmxlbmd0aDtcbiAgd2hpbGUgKGtleVtpZHhdID09PSAweDAwKSB7XG4gICAgKytpZHg7XG4gICAgLS1sZW47XG4gIH1cbiAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICBjYXNlICcyNTUxOSc6XG4gICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMzIpXG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKGtleVtpZHhdICYgMHg4MCkge1xuICAgICAgICBuZXdLZXkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIGxlbik7XG4gICAgICAgIG5ld0tleVswXSA9IDA7XG4gICAgICAgIGtleS5jb3B5KG5ld0tleSwgMSwgaWR4KTtcbiAgICAgICAgcmV0dXJuIG5ld0tleTtcbiAgICAgIH1cbiAgfVxuICBpZiAobGVuICE9PSBrZXkubGVuZ3RoKSB7XG4gICAgbmV3S2V5ID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbik7XG4gICAga2V5LmNvcHkobmV3S2V5LCAwLCBpZHgpO1xuICAgIGtleSA9IG5ld0tleTtcbiAgfVxuICByZXR1cm4ga2V5O1xufTtcbktleUV4Y2hhbmdlLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0ID0gZnVuY3Rpb24ob3RoZXJQdWJsaWNLZXkpIHtcbiAgdGhpcy5nZW5lcmF0ZUtleXMoKTtcblxuICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgIGNhc2UgJzI1NTE5JzpcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBhc25Xcml0ZXIgPSBuZXcgQmVyLldyaXRlcigpO1xuICAgICAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgICAgICAgIC8vIGFsZ29yaXRobVxuICAgICAgICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgICAgICAgICBhc25Xcml0ZXIud3JpdGVPSUQoJzEuMy4xMDEuMTEwJyk7IC8vIGlkLVgyNTUxOVxuICAgICAgICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuXG4gICAgICAgICAgLy8gUHVibGljS2V5XG4gICAgICAgICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoQmVyLkJpdFN0cmluZyk7XG4gICAgICAgICAgICBhc25Xcml0ZXIud3JpdGVCeXRlKDB4MDApO1xuICAgICAgICAgICAgLy8gWFhYOiBoYWNrIHRvIHdyaXRlIGEgcmF3IGJ1ZmZlciB3aXRob3V0IGEgdGFnIC0tIHl1Y2tcbiAgICAgICAgICAgIGFzbldyaXRlci5fZW5zdXJlKG90aGVyUHVibGljS2V5Lmxlbmd0aCk7XG4gICAgICAgICAgICBvdGhlclB1YmxpY0tleS5jb3B5KGFzbldyaXRlci5fYnVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc25Xcml0ZXIuX29mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJQdWJsaWNLZXkubGVuZ3RoKTtcbiAgICAgICAgICAgIGFzbldyaXRlci5fb2Zmc2V0ICs9IG90aGVyUHVibGljS2V5Lmxlbmd0aDtcbiAgICAgICAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgICAgICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRUb01waW50KGNyeXB0by5kaWZmaWVIZWxsbWFuKHtcbiAgICAgICAgICBwcml2YXRlS2V5OiB0aGlzLl9rZXlzLnByaXZhdGVLZXksXG4gICAgICAgICAgcHVibGljS2V5OiBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogYXNuV3JpdGVyLmJ1ZmZlcixcbiAgICAgICAgICAgIHR5cGU6ICdzcGtpJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2RlcicsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pKTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIHJldHVybiBleDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VjZGgnOlxuICAgIGNhc2UgJ2dyb3VwJzpcbiAgICBjYXNlICdncm91cGV4JzpcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0VG9NcGludCh0aGlzLl9rZXguY29tcHV0ZVNlY3JldChvdGhlclB1YmxpY0tleSkpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcmV0dXJuIGV4O1xuICAgICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjb252ZXJ0VG9NcGludChidWYpIHtcbiAgdmFyIGlkeCA9IDA7XG4gIHZhciBsZW5ndGggPSBidWYubGVuZ3RoO1xuICB3aGlsZSAoYnVmW2lkeF0gPT09IDB4MDApIHtcbiAgICArK2lkeDtcbiAgICAtLWxlbmd0aDtcbiAgfVxuICB2YXIgbmV3QnVmO1xuICBpZiAoYnVmW2lkeF0gJiAweDgwKSB7XG4gICAgbmV3QnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyBsZW5ndGgpO1xuICAgIG5ld0J1ZlswXSA9IDA7XG4gICAgYnVmLmNvcHkobmV3QnVmLCAxLCBpZHgpO1xuICAgIGJ1ZiA9IG5ld0J1ZjtcbiAgfSBlbHNlIGlmIChsZW5ndGggIT09IGJ1Zi5sZW5ndGgpIHtcbiAgICBuZXdCdWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKTtcbiAgICBidWYuY29weShuZXdCdWYsIDAsIGlkeCk7XG4gICAgYnVmID0gbmV3QnVmO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU1NIMlN0cmVhbTtcbm1vZHVsZS5leHBvcnRzLl9zZW5kID0gc2VuZDtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInpsaWJcIik7IiwiLypcbiAgQmFzZWQgaGVhdmlseSBvbiB0aGUgU3RyZWFtaW5nIEJveWVyLU1vb3JlLUhvcnNwb29sIEMrKyBpbXBsZW1lbnRhdGlvblxuICBieSBIb25nbGkgTGFpIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRm9vQmFyV2lkZ2V0L2JveWVyLW1vb3JlLWhvcnNwb29sXG4qL1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcixcbiAgICBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcblxuZnVuY3Rpb24ganNtZW1jbXAoYnVmMSwgcG9zMSwgYnVmMiwgcG9zMiwgbnVtKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtOyArK2ksICsrcG9zMSwgKytwb3MyKVxuICAgIGlmIChidWYxW3BvczFdICE9PSBidWYyW3BvczJdKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gU0JNSChuZWVkbGUpIHtcbiAgaWYgKHR5cGVvZiBuZWVkbGUgPT09ICdzdHJpbmcnKVxuICAgIG5lZWRsZSA9IG5ldyBCdWZmZXIobmVlZGxlKTtcbiAgdmFyIGksIGosIG5lZWRsZV9sZW4gPSBuZWVkbGUubGVuZ3RoO1xuXG4gIHRoaXMubWF4TWF0Y2hlcyA9IEluZmluaXR5O1xuICB0aGlzLm1hdGNoZXMgPSAwO1xuXG4gIHRoaXMuX29jYyA9IG5ldyBBcnJheSgyNTYpO1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwO1xuICB0aGlzLl9uZWVkbGUgPSBuZWVkbGU7XG4gIHRoaXMuX2J1ZnBvcyA9IDA7XG5cbiAgdGhpcy5fbG9va2JlaGluZCA9IG5ldyBCdWZmZXIobmVlZGxlX2xlbik7XG5cbiAgLy8gSW5pdGlhbGl6ZSBvY2N1cnJlbmNlIHRhYmxlLlxuICBmb3IgKGogPSAwOyBqIDwgMjU2OyArK2opXG4gICAgdGhpcy5fb2NjW2pdID0gbmVlZGxlX2xlbjtcblxuICAvLyBQb3B1bGF0ZSBvY2N1cnJlbmNlIHRhYmxlIHdpdGggYW5hbHlzaXMgb2YgdGhlIG5lZWRsZSxcbiAgLy8gaWdub3JpbmcgbGFzdCBsZXR0ZXIuXG4gIGlmIChuZWVkbGVfbGVuID49IDEpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmVlZGxlX2xlbiAtIDE7ICsraSlcbiAgICAgIHRoaXMuX29jY1tuZWVkbGVbaV1dID0gbmVlZGxlX2xlbiAtIDEgLSBpO1xuICB9XG59XG5pbmhlcml0cyhTQk1ILCBFdmVudEVtaXR0ZXIpO1xuXG5TQk1ILnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwO1xuICB0aGlzLm1hdGNoZXMgPSAwO1xuICB0aGlzLl9idWZwb3MgPSAwO1xufTtcblxuU0JNSC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGNodW5rLCBwb3MpIHtcbiAgdmFyIHIsIGNobGVuO1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpXG4gICAgY2h1bmsgPSBuZXcgQnVmZmVyKGNodW5rLCAnYmluYXJ5Jyk7XG4gIGNobGVuID0gY2h1bmsubGVuZ3RoO1xuICB0aGlzLl9idWZwb3MgPSBwb3MgfHwgMDtcbiAgd2hpbGUgKHIgIT09IGNobGVuICYmIHRoaXMubWF0Y2hlcyA8IHRoaXMubWF4TWF0Y2hlcylcbiAgICByID0gdGhpcy5fc2JtaF9mZWVkKGNodW5rKTtcbiAgcmV0dXJuIHI7XG59O1xuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9mZWVkID0gZnVuY3Rpb24oZGF0YSkge1xuICB2YXIgbGVuID0gZGF0YS5sZW5ndGgsIG5lZWRsZSA9IHRoaXMuX25lZWRsZSwgbmVlZGxlX2xlbiA9IG5lZWRsZS5sZW5ndGg7XG5cbiAgLy8gUG9zaXRpdmU6IHBvaW50cyB0byBhIHBvc2l0aW9uIGluIGBkYXRhYFxuICAvLyAgICAgICAgICAgcG9zID09IDMgcG9pbnRzIHRvIGRhdGFbM11cbiAgLy8gTmVnYXRpdmU6IHBvaW50cyB0byBhIHBvc2l0aW9uIGluIHRoZSBsb29rYmVoaW5kIGJ1ZmZlclxuICAvLyAgICAgICAgICAgcG9zID09IC0yIHBvaW50cyB0byBsb29rYmVoaW5kW2xvb2tiZWhpbmRfc2l6ZSAtIDJdXG4gIHZhciBwb3MgPSAtdGhpcy5fbG9va2JlaGluZF9zaXplLFxuICAgICAgbGFzdF9uZWVkbGVfY2hhciA9IG5lZWRsZVtuZWVkbGVfbGVuIC0gMV0sXG4gICAgICBvY2MgPSB0aGlzLl9vY2MsXG4gICAgICBsb29rYmVoaW5kID0gdGhpcy5fbG9va2JlaGluZDtcblxuICBpZiAocG9zIDwgMCkge1xuICAgIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gUGVyZm9ybSBCb3llci1Nb29yZS1Ib3JzcG9vbFxuICAgIC8vIHNlYXJjaCB3aXRoIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IGNvbnNpZGVycyBib3RoIHRoZVxuICAgIC8vIGxvb2tiZWhpbmQgYnVmZmVyIGFuZCB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gICAgLy9cbiAgICAvLyBMb29wIHVudGlsXG4gICAgLy8gICB0aGVyZSBpcyBhIG1hdGNoLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB3ZSd2ZSBtb3ZlZCBwYXN0IHRoZSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIHRoZVxuICAgIC8vICAgbG9va2JlaGluZCBidWZmZXIuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gICBvcHRpbWl6ZWQgbG9vcC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgdGhlIGNoYXJhY3RlciB0byBsb29rIGF0IGxpZXMgb3V0c2lkZSB0aGUgaGF5c3RhY2suXG4gICAgd2hpbGUgKHBvcyA8IDAgJiYgcG9zIDw9IGxlbiAtIG5lZWRsZV9sZW4pIHtcbiAgICAgICB2YXIgY2ggPSB0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIG5lZWRsZV9sZW4gLSAxKTtcblxuICAgICAgaWYgKGNoID09PSBsYXN0X25lZWRsZV9jaGFyXG4gICAgICAgICAgJiYgdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBuZWVkbGVfbGVuIC0gMSkpIHtcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMDtcbiAgICAgICAgKyt0aGlzLm1hdGNoZXM7XG4gICAgICAgIGlmIChwb3MgPiAtdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGxvb2tiZWhpbmQsIDAsIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKTtcblxuICAgICAgICB0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVfbGVuO1xuICAgICAgICByZXR1cm4gcG9zICsgbmVlZGxlX2xlbjtcbiAgICAgIH0gZWxzZVxuICAgICAgICBwb3MgKz0gb2NjW2NoXTtcbiAgICB9XG5cbiAgICAvLyBObyBtYXRjaC5cblxuICAgIGlmIChwb3MgPCAwKSB7XG4gICAgICAvLyBUaGVyZSdzIHRvbyBmZXcgZGF0YSBmb3IgQm95ZXItTW9vcmUtSG9yc3Bvb2wgdG8gcnVuLFxuICAgICAgLy8gc28gbGV0J3MgdXNlIGEgZGlmZmVyZW50IGFsZ29yaXRobSB0byBza2lwIGFzIG11Y2ggYXNcbiAgICAgIC8vIHdlIGNhbi5cbiAgICAgIC8vIEZvcndhcmQgcG9zIHVudGlsXG4gICAgICAvLyAgIHRoZSB0cmFpbGluZyBwYXJ0IG9mIGxvb2tiZWhpbmQgKyBkYXRhXG4gICAgICAvLyAgIGxvb2tzIGxpa2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmVlZGxlXG4gICAgICAvLyBvciB1bnRpbFxuICAgICAgLy8gICBwb3MgPT0gMFxuICAgICAgd2hpbGUgKHBvcyA8IDAgJiYgIXRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbGVuIC0gcG9zKSlcbiAgICAgICAgcG9zKys7XG4gICAgfVxuXG4gICAgaWYgKHBvcyA+PSAwKSB7XG4gICAgICAvLyBEaXNjYXJkIGxvb2tiZWhpbmQgYnVmZmVyLlxuICAgICAgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIGxvb2tiZWhpbmQsIDAsIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSk7XG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXQgb2ZmIHBhcnQgb2YgdGhlIGxvb2tiZWhpbmQgYnVmZmVyIHRoYXQgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgYXBwZW5kIHRoZSBlbnRpcmUgaGF5c3RhY2tcbiAgICAgIC8vIGludG8gaXQuXG4gICAgICB2YXIgYnl0ZXNUb0N1dE9mZiA9IHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvcztcblxuICAgICAgaWYgKGJ5dGVzVG9DdXRPZmYgPiAwKSB7XG4gICAgICAgIC8vIFRoZSBjdXQgb2ZmIGRhdGEgaXMgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiB0aGUgbmVlZGxlLlxuICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZik7XG4gICAgICB9XG5cbiAgICAgIGxvb2tiZWhpbmQuY29weShsb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtIGJ5dGVzVG9DdXRPZmYpO1xuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC09IGJ5dGVzVG9DdXRPZmY7XG5cbiAgICAgIGRhdGEuY29weShsb29rYmVoaW5kLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpO1xuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplICs9IGxlbjtcblxuICAgICAgdGhpcy5fYnVmcG9zID0gbGVuO1xuICAgICAgcmV0dXJuIGxlbjtcbiAgICB9XG4gIH1cblxuICBpZiAocG9zID49IDApXG4gICAgcG9zICs9IHRoaXMuX2J1ZnBvcztcblxuICAvLyBMb29rYmVoaW5kIGJ1ZmZlciBpcyBub3cgZW1wdHkuIFBlcmZvcm0gQm95ZXItTW9vcmUtSG9yc3Bvb2xcbiAgLy8gc2VhcmNoIHdpdGggb3B0aW1pemVkIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IG9ubHkgY29uc2lkZXJzXG4gIC8vIHRoZSBjdXJyZW50IHJvdW5kJ3MgaGF5c3RhY2sgZGF0YS5cbiAgd2hpbGUgKHBvcyA8PSBsZW4gLSBuZWVkbGVfbGVuKSB7XG4gICAgdmFyIGNoID0gZGF0YVtwb3MgKyBuZWVkbGVfbGVuIC0gMV07XG5cbiAgICBpZiAoY2ggPT09IGxhc3RfbmVlZGxlX2NoYXJcbiAgICAgICAgJiYgZGF0YVtwb3NdID09PSBuZWVkbGVbMF1cbiAgICAgICAgJiYganNtZW1jbXAobmVlZGxlLCAwLCBkYXRhLCBwb3MsIG5lZWRsZV9sZW4gLSAxKSkge1xuICAgICAgKyt0aGlzLm1hdGNoZXM7XG4gICAgICBpZiAocG9zID4gMClcbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSwgZGF0YSwgdGhpcy5fYnVmcG9zLCBwb3MpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKTtcblxuICAgICAgdGhpcy5fYnVmcG9zID0gcG9zICsgbmVlZGxlX2xlbjtcbiAgICAgIHJldHVybiBwb3MgKyBuZWVkbGVfbGVuO1xuICAgIH0gZWxzZVxuICAgICAgcG9zICs9IG9jY1tjaF07XG4gIH1cblxuICAvLyBUaGVyZSB3YXMgbm8gbWF0Y2guIElmIHRoZXJlJ3MgdHJhaWxpbmcgaGF5c3RhY2sgZGF0YSB0aGF0IHdlIGNhbm5vdFxuICAvLyBtYXRjaCB5ZXQgdXNpbmcgdGhlIEJveWVyLU1vb3JlLUhvcnNwb29sIGFsZ29yaXRobSAoYmVjYXVzZSB0aGUgdHJhaWxpbmdcbiAgLy8gZGF0YSBpcyBsZXNzIHRoYW4gdGhlIG5lZWRsZSBzaXplKSB0aGVuIG1hdGNoIHVzaW5nIGEgbW9kaWZpZWRcbiAgLy8gYWxnb3JpdGhtIHRoYXQgc3RhcnRzIG1hdGNoaW5nIGZyb20gdGhlIGJlZ2lubmluZyBpbnN0ZWFkIG9mIHRoZSBlbmQuXG4gIC8vIFdoYXRldmVyIHRyYWlsaW5nIGRhdGEgaXMgbGVmdCBhZnRlciBydW5uaW5nIHRoaXMgYWxnb3JpdGhtIGlzIGFkZGVkIHRvXG4gIC8vIHRoZSBsb29rYmVoaW5kIGJ1ZmZlci5cbiAgaWYgKHBvcyA8IGxlbikge1xuICAgIHdoaWxlIChwb3MgPCBsZW4gJiYgKGRhdGFbcG9zXSAhPT0gbmVlZGxlWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWpzbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlLCAwLCBsZW4gLSBwb3MpKSkge1xuICAgICAgKytwb3M7XG4gICAgfVxuICAgIGlmIChwb3MgPCBsZW4pIHtcbiAgICAgIGRhdGEuY29weShsb29rYmVoaW5kLCAwLCBwb3MsIHBvcyArIChsZW4gLSBwb3MpKTtcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IGxlbiAtIHBvcztcbiAgICB9XG4gIH1cblxuICAvLyBFdmVyeXRoaW5nIHVudGlsIHBvcyBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIG5lZWRsZSBkYXRhLlxuICBpZiAocG9zID4gMClcbiAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgZGF0YSwgdGhpcy5fYnVmcG9zLCBwb3MgPCBsZW4gPyBwb3MgOiBsZW4pO1xuXG4gIHRoaXMuX2J1ZnBvcyA9IGxlbjtcbiAgcmV0dXJuIGxlbjtcbn07XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2xvb2t1cF9jaGFyID0gZnVuY3Rpb24oZGF0YSwgcG9zKSB7XG4gIGlmIChwb3MgPCAwKVxuICAgIHJldHVybiB0aGlzLl9sb29rYmVoaW5kW3RoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc107XG4gIGVsc2VcbiAgICByZXR1cm4gZGF0YVtwb3NdO1xufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9tZW1jbXAgPSBmdW5jdGlvbihkYXRhLCBwb3MsIGxlbikge1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICBpZiAodGhpcy5fc2JtaF9sb29rdXBfY2hhcihkYXRhLCBwb3MgKyBpKSA9PT0gdGhpcy5fbmVlZGxlW2ldKVxuICAgICAgKytpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTQk1IO1xuIiwidmFyIEh0dHBBZ2VudCA9IHJlcXVpcmUoJ2h0dHAnKS5BZ2VudDtcbnZhciBIdHRwc0FnZW50ID0gcmVxdWlyZSgnaHR0cHMnKS5BZ2VudDtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcblxudmFyIENsaWVudDtcblxuW0h0dHBBZ2VudCwgSHR0cHNBZ2VudF0uZm9yRWFjaCgoY3RvcikgPT4ge1xuICBmdW5jdGlvbiBTU0hBZ2VudChjb25uZWN0Q2ZnLCBhZ2VudE9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU1NIQWdlbnQpKVxuICAgICAgcmV0dXJuIG5ldyBTU0hBZ2VudChjb25uZWN0Q2ZnLCBhZ2VudE9wdGlvbnMpO1xuXG4gICAgY3Rvci5jYWxsKHRoaXMsIGFnZW50T3B0aW9ucyk7XG5cbiAgICB0aGlzLl9jb25uZWN0Q2ZnID0gY29ubmVjdENmZztcbiAgICB0aGlzLl9kZWZhdWx0U3JjSVAgPSAoYWdlbnRPcHRpb25zICYmIGFnZW50T3B0aW9ucy5zcmNJUCkgfHwgJ2xvY2FsaG9zdCc7XG4gIH1cbiAgaW5oZXJpdHMoU1NIQWdlbnQsIGN0b3IpO1xuXG4gIFNTSEFnZW50LnByb3RvdHlwZS5jcmVhdGVDb25uZWN0aW9uID0gY3JlYXRlQ29ubmVjdGlvbjtcblxuICBleHBvcnRzW2N0b3IgPT09IEh0dHBBZ2VudCA/ICdTU0hUVFBBZ2VudCcgOiAnU1NIVFRQU0FnZW50J10gPSBTU0hBZ2VudDtcbn0pO1xuXG5mdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzcmNJUCA9IChvcHRpb25zICYmIG9wdGlvbnMubG9jYWxBZGRyZXNzKSB8fCB0aGlzLl9kZWZhdWx0U3JjSVA7XG4gIHZhciBzcmNQb3J0ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5sb2NhbFBvcnQpIHx8IDA7XG4gIHZhciBkc3RJUCA9IG9wdGlvbnMuaG9zdDtcbiAgdmFyIGRzdFBvcnQgPSBvcHRpb25zLnBvcnQ7XG5cbiAgaWYgKENsaWVudCA9PT0gdW5kZWZpbmVkKVxuICAgIENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JykuQ2xpZW50O1xuXG4gIHZhciBjbGllbnQgPSBuZXcgQ2xpZW50KCk7XG4gIHZhciB0cmllZEZvcndhcmQgPSBmYWxzZTtcbiAgY2xpZW50Lm9uKCdyZWFkeScsICgpID0+IHtcbiAgICBjbGllbnQuZm9yd2FyZE91dChzcmNJUCwgc3JjUG9ydCwgZHN0SVAsIGRzdFBvcnQsIChlcnIsIHN0cmVhbSkgPT4ge1xuICAgICAgdHJpZWRGb3J3YXJkID0gdHJ1ZTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgY2xpZW50LmVuZCgpO1xuICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY2xpZW50LmVuZCgpO1xuICAgICAgfSk7XG4gICAgICBjYihudWxsLCBkZWNvcmF0ZVN0cmVhbShzdHJlYW0pKTtcbiAgICB9KTtcbiAgfSkub24oJ2Vycm9yJywgY2IpLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICBpZiAoIXRyaWVkRm9yd2FyZClcbiAgICAgIGNiKG5ldyBFcnJvcignVW5leHBlY3RlZCBjb25uZWN0aW9uIGxvc3MnKSk7XG4gIH0pLmNvbm5lY3QodGhpcy5fY29ubmVjdENmZyk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiBkZWNvcmF0ZVN0cmVhbShzdHJlYW0pIHtcbiAgc3RyZWFtLnNldEtlZXBBbGl2ZSA9IG5vb3A7XG4gIHN0cmVhbS5zZXROb0RlbGF5ID0gbm9vcDtcbiAgc3RyZWFtLnNldFRpbWVvdXQgPSBub29wO1xuICBzdHJlYW0ucmVmID0gbm9vcDtcbiAgc3RyZWFtLnVucmVmID0gbm9vcDtcbiAgc3RyZWFtLmRlc3Ryb3lTb29uID0gc3RyZWFtLmRlc3Ryb3k7XG4gIHJldHVybiBzdHJlYW07XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBzXCIpOyIsInZhciBTb2NrZXQgPSByZXF1aXJlKCduZXQnKS5Tb2NrZXQ7XG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIGNwID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuXG52YXIgcmVhZFVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLnJlYWRVSW50MzJCRTtcbnZhciB3cml0ZVVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLndyaXRlVUludDMyQkU7XG52YXIgd3JpdGVVSW50MzJMRSA9IHJlcXVpcmUoJy4vYnVmZmVyLWhlbHBlcnMnKS53cml0ZVVJbnQzMkxFO1xuXG52YXIgUkVRVUVTVF9JREVOVElUSUVTID0gMTE7XG52YXIgSURFTlRJVElFU19BTlNXRVIgPSAxMjtcbnZhciBTSUdOX1JFUVVFU1QgPSAxMztcbnZhciBTSUdOX1JFU1BPTlNFID0gMTQ7XG52YXIgRkFJTFVSRSA9IDU7XG5cbnZhciBSRV9DWUdXSU5fU09DSyA9IC9eXFwhPHNvY2tldCA+KFxcZCspIHMgKFtBLVowLTldezh9XFwtW0EtWjAtOV17OH1cXC1bQS1aMC05XXs4fVxcLVtBLVowLTldezh9KS87XG5cbi8vIEZvcm1hdCBvZiBgLy8uL3BpcGUvQU5ZVEhJTkdgLCB3aXRoIGZvcndhcmQgc2xhc2hlcyBhbmQgYmFja3dhcmQgc2xhc2hlcyBiZWluZyBpbnRlcmNoYW5nZWFibGVcbnZhciBXSU5ET1dTX1BJUEVfUkVHRVggPSAvXlsvXFxcXF1bL1xcXFxdXFwuWy9cXFxcXXBpcGVbL1xcXFxdLisvO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHNvY2tQYXRoLCBrZXksIGtleVR5cGUsIGRhdGEsIGNiKSB7XG4gIHZhciBzb2NrO1xuICB2YXIgZXJyb3I7XG4gIHZhciBzaWc7XG4gIHZhciBkYXRhbGVuO1xuICB2YXIga2V5bGVuID0gMDtcbiAgdmFyIGlzU2lnbmluZyA9IEJ1ZmZlci5pc0J1ZmZlcihrZXkpO1xuICB2YXIgdHlwZTtcbiAgdmFyIGNvdW50ID0gMDtcbiAgdmFyIHNpZ2xlbiA9IDA7XG4gIHZhciBua2V5cyA9IDA7XG4gIHZhciBrZXlzO1xuICB2YXIgY29tbGVuID0gMDtcbiAgdmFyIGNvbW1lbnQgPSBmYWxzZTtcbiAgdmFyIGFjY2VwdDtcbiAgdmFyIHJlamVjdDtcblxuICBpZiAodHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Yga2V5VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGFnZW50IGZvcndhcmRpbmdcbiAgICBhY2NlcHQgPSBrZXk7XG4gICAgcmVqZWN0ID0ga2V5VHlwZTtcbiAgfSBlbHNlIGlmIChpc1NpZ25pbmcpIHtcbiAgICBrZXlsZW4gPSBrZXkubGVuZ3RoO1xuICAgIGRhdGFsZW4gPSBkYXRhLmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICBjYiA9IGtleTtcbiAgICBrZXkgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBvbmNvbm5lY3QoKSB7XG4gICAgdmFyIGJ1ZjtcbiAgICBpZiAoaXNTaWduaW5nKSB7XG4gICAgICAvKlxuICAgICAgICBieXRlICAgICAgICBTU0gyX0FHRU5UQ19TSUdOX1JFUVVFU1RcbiAgICAgICAgc3RyaW5nICAgICAga2V5X2Jsb2JcbiAgICAgICAgc3RyaW5nICAgICAgZGF0YVxuICAgICAgICB1aW50MzIgICAgICBmbGFnc1xuICAgICAgKi9cbiAgICAgIHZhciBwID0gOTtcbiAgICAgIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyBrZXlsZW4gKyA0ICsgZGF0YWxlbiArIDQpO1xuICAgICAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgICAgIGJ1Zls0XSA9IFNJR05fUkVRVUVTVDtcbiAgICAgIHdyaXRlVUludDMyQkUoYnVmLCBrZXlsZW4sIDUpO1xuICAgICAga2V5LmNvcHkoYnVmLCBwKTtcbiAgICAgIHdyaXRlVUludDMyQkUoYnVmLCBkYXRhbGVuLCBwICs9IGtleWxlbik7XG4gICAgICBkYXRhLmNvcHkoYnVmLCBwICs9IDQpO1xuICAgICAgd3JpdGVVSW50MzJCRShidWYsIDAsIHAgKz0gZGF0YWxlbik7XG4gICAgICBzb2NrLndyaXRlKGJ1Zik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qXG4gICAgICAgIGJ5dGUgICAgICAgIFNTSDJfQUdFTlRDX1JFUVVFU1RfSURFTlRJVElFU1xuICAgICAgKi9cbiAgICAgIHNvY2sud3JpdGUoQnVmZmVyLmZyb20oWzAsIDAsIDAsIDEsIFJFUVVFU1RfSURFTlRJVElFU10pKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNodW5rLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHNraXAgb3ZlciBwYWNrZXQgbGVuZ3RoXG4gICAgICAgIGlmICgrK2NvdW50ID09PSA1KSB7XG4gICAgICAgICAgdHlwZSA9IGNodW5rW2ldO1xuICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBTSUdOX1JFU1BPTlNFKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgYnl0ZSAgICAgICAgU1NIMl9BR0VOVF9TSUdOX1JFU1BPTlNFXG4gICAgICAgICAgc3RyaW5nICAgICAgc2lnbmF0dXJlX2Jsb2JcbiAgICAgICAgKi9cbiAgICAgICAgaWYgKCFzaWcpIHtcbiAgICAgICAgICBzaWdsZW4gPDw9IDg7XG4gICAgICAgICAgc2lnbGVuICs9IGNodW5rW2ldO1xuICAgICAgICAgIGlmICgrK2NvdW50ID09PSA0KSB7XG4gICAgICAgICAgICBzaWcgPSBCdWZmZXIuYWxsb2NVbnNhZmUoc2lnbGVuKTtcbiAgICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2lnW2NvdW50XSA9IGNodW5rW2ldO1xuICAgICAgICAgIGlmICgrK2NvdW50ID09PSBzaWdsZW4pIHtcbiAgICAgICAgICAgIHNvY2sucmVtb3ZlQWxsTGlzdGVuZXJzKCdkYXRhJyk7XG4gICAgICAgICAgICByZXR1cm4gc29jay5kZXN0cm95KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IElERU5USVRJRVNfQU5TV0VSKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgYnl0ZSAgICAgICAgU1NIMl9BR0VOVF9JREVOVElUSUVTX0FOU1dFUlxuICAgICAgICAgIHVpbnQzMiAgICAgIG51bV9rZXlzXG5cbiAgICAgICAgRm9sbG93ZWQgYnkgemVybyBvciBtb3JlIGNvbnNlY3V0aXZlIGtleXMsIGVuY29kZWQgYXM6XG5cbiAgICAgICAgICBzdHJpbmcgICAgICBwdWJsaWMga2V5IGJsb2JcbiAgICAgICAgICBzdHJpbmcgICAgICBwdWJsaWMga2V5IGNvbW1lbnRcbiAgICAgICAgKi9cbiAgICAgICAgaWYgKGtleXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5rZXlzIDw8PSA4O1xuICAgICAgICAgIG5rZXlzICs9IGNodW5rW2ldO1xuICAgICAgICAgIGlmICgrK2NvdW50ID09PSA0KSB7XG4gICAgICAgICAgICBrZXlzID0gbmV3IEFycmF5KG5rZXlzKTtcbiAgICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgICAgIGlmIChua2V5cyA9PT0gMCkge1xuICAgICAgICAgICAgICBzb2NrLnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpO1xuICAgICAgICAgICAgICByZXR1cm4gc29jay5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICBrZXlsZW4gPDw9IDg7XG4gICAgICAgICAgICBrZXlsZW4gKz0gY2h1bmtbaV07XG4gICAgICAgICAgICBpZiAoKytjb3VudCA9PT0gNCkge1xuICAgICAgICAgICAgICBrZXkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoa2V5bGVuKTtcbiAgICAgICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY29tbWVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGtleVtjb3VudF0gPSBjaHVua1tpXTtcbiAgICAgICAgICAgIGlmICgrK2NvdW50ID09PSBrZXlsZW4pIHtcbiAgICAgICAgICAgICAga2V5c1tua2V5cyAtIDFdID0ga2V5O1xuICAgICAgICAgICAgICBrZXlsZW4gPSAwO1xuICAgICAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgICAgICAgIGNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICBpZiAoLS1ua2V5cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGtleSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBzb2NrLnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzb2NrLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY29tbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29tbGVuIDw8PSA4O1xuICAgICAgICAgICAgY29tbGVuICs9IGNodW5rW2ldO1xuICAgICAgICAgICAgaWYgKCsrY291bnQgPT09IDQpIHtcbiAgICAgICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICAgICAgICBpZiAoY29tbGVuID4gMClcbiAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbGVuO1xuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbWxlbiA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNraXAgY29tbWVudHNcbiAgICAgICAgICAgIGlmICgrK2NvdW50ID09PSBjb21tZW50KSB7XG4gICAgICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICAgICAgICBrZXkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZBSUxVUkUpIHtcbiAgICAgICAgaWYgKGlzU2lnbmluZylcbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignQWdlbnQgdW5hYmxlIHRvIHNpZ24gZGF0YScpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIGtleXMgZnJvbSBhZ2VudCcpO1xuICAgICAgICBzb2NrLnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpO1xuICAgICAgICByZXR1cm4gc29jay5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXJyKSB7XG4gICAgZXJyb3IgPSBlcnI7XG4gIH1cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZXJyb3IpXG4gICAgICBjYihlcnJvcik7XG4gICAgZWxzZSBpZiAoKGlzU2lnbmluZyAmJiAhc2lnKSB8fCAoIWlzU2lnbmluZyAmJiAha2V5cykpXG4gICAgICBjYihuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZGlzY29ubmVjdGlvbiBmcm9tIGFnZW50JykpO1xuICAgIGVsc2UgaWYgKGlzU2lnbmluZyAmJiBzaWcpXG4gICAgICBjYih1bmRlZmluZWQsIHNpZyk7XG4gICAgZWxzZSBpZiAoIWlzU2lnbmluZyAmJiBrZXlzKVxuICAgICAgY2IodW5kZWZpbmVkLCBrZXlzKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmICFXSU5ET1dTX1BJUEVfUkVHRVgudGVzdChzb2NrUGF0aCkpIHtcbiAgICBpZiAoc29ja1BhdGggPT09ICdwYWdlYW50Jykge1xuICAgICAgLy8gUGFnZWFudCAoUHVUVFkgYXV0aGVudGljYXRpb24gYWdlbnQpXG4gICAgICBzb2NrID0gbmV3IFBhZ2VhbnRTb2NrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGN5Z3dpbiBzc2gtYWdlbnQgaW5zdGFuY2VcbiAgICAgIHZhciB0cmllZEN5Z3BhdGggPSBmYWxzZTtcbiAgICAgIGZzLnJlYWRGaWxlKHNvY2tQYXRoLCBmdW5jdGlvbiByZWFkQ3lnc29ja2V0KGVyciwgZGF0YSkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRyaWVkQ3lncGF0aClcbiAgICAgICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ0ludmFsaWQgY3lnd2luIHVuaXggc29ja2V0IHBhdGgnKSk7XG4gICAgICAgICAgLy8gdHJ5IHVzaW5nIGBjeWdwYXRoYCB0byBjb252ZXJ0IGEgcG9zc2libGUgKm5peC1zdHlsZSBwYXRoIHRvIHRoZVxuICAgICAgICAgIC8vIHJlYWwgV2luZG93cyBwYXRoIGJlZm9yZSBnaXZpbmcgdXAgLi4uXG4gICAgICAgICAgY3AuZXhlYygnY3lncGF0aCAtdyBcIicgKyBzb2NrUGF0aCArICdcIicsXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnIsIHN0ZG91dCwgc3RkZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyIHx8IHN0ZG91dC5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ0ludmFsaWQgY3lnd2luIHVuaXggc29ja2V0IHBhdGgnKSk7XG4gICAgICAgICAgICB0cmllZEN5Z3BhdGggPSB0cnVlO1xuICAgICAgICAgICAgc29ja1BhdGggPSBzdGRvdXQudG9TdHJpbmcoKS5yZXBsYWNlKC9bXFxyXFxuXS9nLCAnJyk7XG4gICAgICAgICAgICBmcy5yZWFkRmlsZShzb2NrUGF0aCwgcmVhZEN5Z3NvY2tldCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG07XG4gICAgICAgIGlmIChtID0gUkVfQ1lHV0lOX1NPQ0suZXhlYyhkYXRhLnRvU3RyaW5nKCdhc2NpaScpKSkge1xuICAgICAgICAgIHZhciBwb3J0O1xuICAgICAgICAgIHZhciBzZWNyZXQ7XG4gICAgICAgICAgdmFyIHNlY3JldGJ1ZjtcbiAgICAgICAgICB2YXIgc3RhdGU7XG4gICAgICAgICAgdmFyIGJjID0gMDtcbiAgICAgICAgICB2YXIgaXNSZXRyeWluZyA9IGZhbHNlO1xuICAgICAgICAgIHZhciBpbmJ1ZiA9IFtdO1xuICAgICAgICAgIHZhciBjcmVkc2J1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxMik7XG4gICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgdmFyIGo7XG5cbiAgICAgICAgICAvLyB1c2UgMCBmb3IgcGlkLCB1aWQsIGFuZCBnaWQgdG8gZW5zdXJlIHdlIGdldCBhbiBlcnJvciBhbmQgYWxzb1xuICAgICAgICAgIC8vIGEgdmFsaWQgdWlkIGFuZCBnaWQgZnJvbSBjeWd3aW4gc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGZpZ3VyZSBpdFxuICAgICAgICAgIC8vIG91dCBvdXJzZWx2ZXNcbiAgICAgICAgICBjcmVkc2J1Zi5maWxsKDApO1xuXG4gICAgICAgICAgLy8gcGFyc2UgY3lnd2luIHVuaXggc29ja2V0IGZpbGUgY29udGVudHNcbiAgICAgICAgICBwb3J0ID0gcGFyc2VJbnQobVsxXSwgMTApO1xuICAgICAgICAgIHNlY3JldCA9IG1bMl0ucmVwbGFjZSgvXFwtL2csICcnKTtcbiAgICAgICAgICBzZWNyZXRidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMTYpO1xuICAgICAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBqIDwgMzI7ICsraSxqKz0yKVxuICAgICAgICAgICAgc2VjcmV0YnVmW2ldID0gcGFyc2VJbnQoc2VjcmV0LnN1YnN0cmluZyhqLCBqICsgMiksIDE2KTtcblxuICAgICAgICAgIC8vIGNvbnZlcnQgdG8gaG9zdCBvcmRlciAoYWx3YXlzIExFIGZvciBXaW5kb3dzKVxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSA0KVxuICAgICAgICAgICAgd3JpdGVVSW50MzJMRShzZWNyZXRidWYsIHJlYWRVSW50MzJCRShzZWNyZXRidWYsIGkpLCBpKTtcblxuICAgICAgICAgIGZ1bmN0aW9uIF9vbmNvbm5lY3QoKSB7XG4gICAgICAgICAgICBiYyA9IDA7XG4gICAgICAgICAgICBzdGF0ZSA9ICdzZWNyZXQnO1xuICAgICAgICAgICAgc29jay53cml0ZShzZWNyZXRidWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBfb25kYXRhKGRhdGEpIHtcbiAgICAgICAgICAgIGJjICs9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnc2VjcmV0Jykge1xuICAgICAgICAgICAgICAvLyB0aGUgc2VjcmV0IHdlIHNlbnQgaXMgZWNob2VkIGJhY2sgdG8gdXMgYnkgY3lnd2luLCBub3Qgc3VyZSBvZlxuICAgICAgICAgICAgICAvLyB0aGUgcmVhc29uIGZvciB0aGF0LCBidXQgd2UgaWdub3JlIGl0IG5vbmV0aGVsZXNzIC4uLlxuICAgICAgICAgICAgICBpZiAoYmMgPT09IDE2KSB7XG4gICAgICAgICAgICAgICAgYmMgPSAwO1xuICAgICAgICAgICAgICAgIHN0YXRlID0gJ2NyZWRzJztcbiAgICAgICAgICAgICAgICBzb2NrLndyaXRlKGNyZWRzYnVmKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gJ2NyZWRzJykge1xuICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBhdHRlbXB0LCBtYWtlIHN1cmUgdG8gZ2F0aGVyIHRoZSB2YWxpZFxuICAgICAgICAgICAgICAvLyB1aWQgYW5kIGdpZCBmb3Igb3VyIG5leHQgYXR0ZW1wdFxuICAgICAgICAgICAgICBpZiAoIWlzUmV0cnlpbmcpXG4gICAgICAgICAgICAgICAgaW5idWYucHVzaChkYXRhKTtcblxuICAgICAgICAgICAgICBpZiAoYmMgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgc29jay5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIF9vbmNvbm5lY3QpO1xuICAgICAgICAgICAgICAgIHNvY2sucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBfb25kYXRhKTtcbiAgICAgICAgICAgICAgICBzb2NrLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIF9vbmNsb3NlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXRyeWluZykge1xuICAgICAgICAgICAgICAgICAgYWRkU29ja0xpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgc29jay5lbWl0KCdjb25uZWN0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlzUmV0cnlpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY3JlZHNidWYgPSBCdWZmZXIuY29uY2F0KGluYnVmKTtcbiAgICAgICAgICAgICAgICAgIHdyaXRlVUludDMyTEUoY3JlZHNidWYsIHByb2Nlc3MucGlkLCAwKTtcbiAgICAgICAgICAgICAgICAgIHNvY2suZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgdHJ5Q29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBfb25jbG9zZSgpIHtcbiAgICAgICAgICAgIGNiKG5ldyBFcnJvcignUHJvYmxlbSBuZWdvdGlhdGluZyBjeWd3aW4gdW5peCBzb2NrZXQgc2VjdXJpdHknKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHRyeUNvbm5lY3QoKSB7XG4gICAgICAgICAgICBzb2NrID0gbmV3IFNvY2tldCgpO1xuICAgICAgICAgICAgc29jay5vbmNlKCdjb25uZWN0JywgX29uY29ubmVjdCk7XG4gICAgICAgICAgICBzb2NrLm9uKCdkYXRhJywgX29uZGF0YSk7XG4gICAgICAgICAgICBzb2NrLm9uY2UoJ2Nsb3NlJywgX29uY2xvc2UpO1xuICAgICAgICAgICAgc29jay5jb25uZWN0KHBvcnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnlDb25uZWN0KCk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGNiKG5ldyBFcnJvcignTWFsZm9ybWVkIGN5Z3dpbiB1bml4IHNvY2tldCBmaWxlJykpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2VcbiAgICBzb2NrID0gbmV3IFNvY2tldCgpO1xuXG4gIGZ1bmN0aW9uIGFkZFNvY2tMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKCFhY2NlcHQgJiYgIXJlamVjdCkge1xuICAgICAgc29jay5vbmNlKCdjb25uZWN0Jywgb25jb25uZWN0KTtcbiAgICAgIHNvY2sub24oJ2RhdGEnLCBvbmRhdGEpO1xuICAgICAgc29jay5vbmNlKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgICAgc29jay5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY2hhbjtcbiAgICAgIHNvY2sub25jZSgnY29ubmVjdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICBjaGFuID0gYWNjZXB0KCk7XG4gICAgICAgIHZhciBpc0RvbmUgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gb25Eb25lKCkge1xuICAgICAgICAgIGlmIChpc0RvbmUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgc29jay5kZXN0cm95KCk7XG4gICAgICAgICAgaXNEb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGFuLm9uY2UoJ2VuZCcsIG9uRG9uZSlcbiAgICAgICAgICAgIC5vbmNlKCdjbG9zZScsIG9uRG9uZSlcbiAgICAgICAgICAgIC5vbignZGF0YScsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICBzb2NrLndyaXRlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgc29jay5vbignZGF0YScsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICBjaGFuLndyaXRlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgc29jay5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIWNoYW4pXG4gICAgICAgICAgcmVqZWN0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgYWRkU29ja0xpc3RlbmVycygpO1xuICBzb2NrLmNvbm5lY3Qoc29ja1BhdGgpO1xufTtcblxuXG4vLyB3aW4zMiBvbmx5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgdmFyIFJFVF9FUlJfQkFEQVJHUyA9IDEwO1xuICB2YXIgUkVUX0VSUl9VTkFWQUlMQUJMRSA9IDExO1xuICB2YXIgUkVUX0VSUl9OT01BUCA9IDEyO1xuICB2YXIgUkVUX0VSUl9CSU5TVERJTiA9IDEzO1xuICB2YXIgUkVUX0VSUl9CSU5TVERPVVQgPSAxNDtcbiAgdmFyIFJFVF9FUlJfQkFETEVOID0gMTU7XG5cbiAgdmFyIEVSUk9SID0ge307XG4gIHZhciBFWEVQQVRIID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJ3V0aWwvcGFnZW50LmV4ZScpO1xuICBFUlJPUltSRVRfRVJSX0JBREFSR1NdID0gbmV3IEVycm9yKCdJbnZhbGlkIHBhZ2VudC5leGUgYXJndW1lbnRzJyk7XG4gIEVSUk9SW1JFVF9FUlJfVU5BVkFJTEFCTEVdID0gbmV3IEVycm9yKCdQYWdlYW50IGlzIG5vdCBydW5uaW5nJyk7XG4gIEVSUk9SW1JFVF9FUlJfTk9NQVBdID0gbmV3IEVycm9yKCdwYWdlbnQuZXhlIGNvdWxkIG5vdCBjcmVhdGUgYW4gbW1hcCcpO1xuICBFUlJPUltSRVRfRVJSX0JJTlNURElOXSA9IG5ldyBFcnJvcigncGFnZW50LmV4ZSBjb3VsZCBub3Qgc2V0IG1vZGUgZm9yIHN0ZGluJyk7XG4gIEVSUk9SW1JFVF9FUlJfQklOU1RET1VUXSA9IG5ldyBFcnJvcigncGFnZW50LmV4ZSBjb3VsZCBub3Qgc2V0IG1vZGUgZm9yIHN0ZG91dCcpO1xuICBFUlJPUltSRVRfRVJSX0JBRExFTl0gPSBuZXcgRXJyb3IoJ3BhZ2VudC5leGUgZGlkIG5vdCBnZXQgZXhwZWN0ZWQgaW5wdXQgcGF5bG9hZCcpO1xuXG4gIGZ1bmN0aW9uIFBhZ2VhbnRTb2NrKCkge1xuICAgIHRoaXMucHJvYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gIH1cbiAgaW5oZXJpdHMoUGFnZWFudFNvY2ssIEV2ZW50RW1pdHRlcik7XG5cbiAgUGFnZWFudFNvY2sucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgaWYgKHRoaXMuYnVmZmVyID09PSBudWxsKVxuICAgICAgdGhpcy5idWZmZXIgPSBidWY7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuYnVmZmVyLCBidWZdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyLmxlbmd0aCArIGJ1Zi5sZW5ndGgpO1xuICAgIH1cbiAgICAvLyBXYWl0IGZvciBhdCBsZWFzdCBhbGwgbGVuZ3RoIGJ5dGVzXG4gICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA8IDQpXG4gICAgICByZXR1cm47XG5cbiAgICB2YXIgbGVuID0gcmVhZFVJbnQzMkJFKHRoaXMuYnVmZmVyLCAwKTtcbiAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGZ1bGwgbWVzc2FnZSBiZWZvcmUgcXVlcnlpbmcgcGFnZWFudFxuICAgIGlmICgodGhpcy5idWZmZXIubGVuZ3RoIC0gNCkgPCBsZW4pXG4gICAgICByZXR1cm47XG5cbiAgICBidWYgPSB0aGlzLmJ1ZmZlci5zbGljZSgwLCA0ICsgbGVuKTtcbiAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID4gKDQgKyBsZW4pKVxuICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlci5zbGljZSg0ICsgbGVuKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb2M7XG4gICAgdmFyIGhhZEVycm9yID0gZmFsc2U7XG4gICAgcHJvYyA9IHRoaXMucHJvYyA9IGNwLnNwYXduKEVYRVBBVEgsIFsgYnVmLmxlbmd0aCBdKTtcbiAgICBwcm9jLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHNlbGYuZW1pdCgnZGF0YScsIGRhdGEpO1xuICAgIH0pO1xuICAgIHByb2Mub25jZSgnZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGlmICghaGFkRXJyb3IpIHtcbiAgICAgICAgaGFkRXJyb3IgPSB0cnVlO1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24oY29kZSkge1xuICAgICAgc2VsZi5wcm9jID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKEVSUk9SW2NvZGVdICYmICFoYWRFcnJvcikge1xuICAgICAgICBoYWRFcnJvciA9IHRydWU7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBFUlJPUltjb2RlXSk7XG4gICAgICB9XG4gICAgICBzZWxmLmVtaXQoJ2Nsb3NlJywgaGFkRXJyb3IpO1xuICAgIH0pO1xuICAgIHByb2Muc3RkaW4uZW5kKGJ1Zik7XG4gIH07XG4gIFBhZ2VhbnRTb2NrLnByb3RvdHlwZS5lbmQgPSBQYWdlYW50U29jay5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICBpZiAodGhpcy5wcm9jKSB7XG4gICAgICB0aGlzLnByb2Mua2lsbCgpO1xuICAgICAgdGhpcy5wcm9jID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbiAgUGFnZWFudFNvY2sucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnKTtcbiAgfTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7IiwiLy8gVGhpcyB3cmFwcGVyIGNsYXNzIGlzIHVzZWQgdG8gcmV0YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGhcbi8vIHByZS12MC40IHNzaDIuIElmIGl0IHdlcmVuJ3QgZm9yIGByZWFkKClgIGFuZCBgd3JpdGUoKWAgYmVpbmcgdXNlZCBieSB0aGVcbi8vIHN0cmVhbXMyLzMgQVBJLCB3ZSBjb3VsZCBqdXN0IHBhc3MgdGhlIFNGVFBTdHJlYW0gZGlyZWN0bHkgdG8gdGhlIGVuZCB1c2VyLi4uXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbmZ1bmN0aW9uIFNGVFBXcmFwcGVyKHN0cmVhbSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuXG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfSkub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnZW5kJyk7XG4gIH0pLm9uKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnKTtcbiAgfSkub24oJ2NvbnRpbnVlJywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5lbWl0KCdjb250aW51ZScpO1xuICB9KTtcbn1cbmluaGVyaXRzKFNGVFBXcmFwcGVyLCBFdmVudEVtaXR0ZXIpO1xuXG4vLyBzdHJlYW0tcmVsYXRlZCBtZXRob2RzIHRvIHBhc3Mgb25cblNGVFBXcmFwcGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5lbmQoKTtcbn07XG4vLyBTRlRQU3RyZWFtIGNsaWVudCBtZXRob2RzXG5TRlRQV3JhcHBlci5wcm90b3R5cGUuY3JlYXRlUmVhZFN0cmVhbSA9IGZ1bmN0aW9uKHBhdGgsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5jcmVhdGVSZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5jcmVhdGVXcml0ZVN0cmVhbSA9IGZ1bmN0aW9uKHBhdGgsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5jcmVhdGVXcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKHBhdGgsIGZsYWdzLCBhdHRycywgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5vcGVuKHBhdGgsIGZsYWdzLCBhdHRycywgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKGhhbmRsZSwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5jbG9zZShoYW5kbGUsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKGhhbmRsZSwgYnVmLCBvZmYsIGxlbiwgcG9zaXRpb24sIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0ucmVhZERhdGEoaGFuZGxlLCBidWYsIG9mZiwgbGVuLCBwb3NpdGlvbiwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGhhbmRsZSwgYnVmLCBvZmYsIGxlbiwgcG9zaXRpb24sIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0ud3JpdGVEYXRhKGhhbmRsZSwgYnVmLCBvZmYsIGxlbiwgcG9zaXRpb24sIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZmFzdEdldCA9IGZ1bmN0aW9uKHJlbW90ZVBhdGgsIGxvY2FsUGF0aCwgb3B0cywgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5mYXN0R2V0KHJlbW90ZVBhdGgsIGxvY2FsUGF0aCwgb3B0cywgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5mYXN0UHV0ID0gZnVuY3Rpb24obG9jYWxQYXRoLCByZW1vdGVQYXRoLCBvcHRzLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmZhc3RQdXQobG9jYWxQYXRoLCByZW1vdGVQYXRoLCBvcHRzLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLnJlYWRGaWxlID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9ucywgY2FsbGJhY2tfKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0ucmVhZEZpbGUocGF0aCwgb3B0aW9ucywgY2FsbGJhY2tfKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUud3JpdGVGaWxlID0gZnVuY3Rpb24ocGF0aCwgZGF0YSwgb3B0aW9ucywgY2FsbGJhY2tfKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0ud3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNhbGxiYWNrXyk7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmFwcGVuZEZpbGUgPSBmdW5jdGlvbihwYXRoLCBkYXRhLCBvcHRpb25zLCBjYWxsYmFja18pIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5hcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNhbGxiYWNrXyk7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uKHBhdGgsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uZXhpc3RzKHBhdGgsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24oZmlsZW5hbWUsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0udW5saW5rKGZpbGVuYW1lLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLnJlbmFtZSA9IGZ1bmN0aW9uKG9sZFBhdGgsIG5ld1BhdGgsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0ucmVuYW1lKG9sZFBhdGgsIG5ld1BhdGgsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihwYXRoLCBhdHRycywgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5ta2RpcihwYXRoLCBhdHRycywgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5ybWRpciA9IGZ1bmN0aW9uKHBhdGgsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0ucm1kaXIocGF0aCwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5yZWFkZGlyID0gZnVuY3Rpb24od2hlcmUsIG9wdHMsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0ucmVhZGRpcih3aGVyZSwgb3B0cywgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5mc3RhdCA9IGZ1bmN0aW9uKGhhbmRsZSwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5mc3RhdChoYW5kbGUsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuc3RhdCA9IGZ1bmN0aW9uKHBhdGgsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uc3RhdChwYXRoLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmxzdGF0ID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5sc3RhdChwYXRoLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLm9wZW5kaXIgPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLm9wZW5kaXIocGF0aCwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5zZXRzdGF0ID0gZnVuY3Rpb24ocGF0aCwgYXR0cnMsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uc2V0c3RhdChwYXRoLCBhdHRycywgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5mc2V0c3RhdCA9IGZ1bmN0aW9uKGhhbmRsZSwgYXR0cnMsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uZnNldHN0YXQoaGFuZGxlLCBhdHRycywgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5mdXRpbWVzID0gZnVuY3Rpb24oaGFuZGxlLCBhdGltZSwgbXRpbWUsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uZnV0aW1lcyhoYW5kbGUsIGF0aW1lLCBtdGltZSwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS51dGltZXMgPSBmdW5jdGlvbihwYXRoLCBhdGltZSwgbXRpbWUsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0udXRpbWVzKHBhdGgsIGF0aW1lLCBtdGltZSwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5mY2hvd24gPSBmdW5jdGlvbihoYW5kbGUsIHVpZCwgZ2lkLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmZjaG93bihoYW5kbGUsIHVpZCwgZ2lkLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmNob3duID0gZnVuY3Rpb24ocGF0aCwgdWlkLCBnaWQsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uY2hvd24ocGF0aCwgdWlkLCBnaWQsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZmNobW9kID0gZnVuY3Rpb24oaGFuZGxlLCBtb2RlLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmZjaG1vZChoYW5kbGUsIG1vZGUsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuY2htb2QgPSBmdW5jdGlvbihwYXRoLCBtb2RlLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmNobW9kKHBhdGgsIG1vZGUsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUucmVhZGxpbmsgPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnJlYWRsaW5rKHBhdGgsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuc3ltbGluayA9IGZ1bmN0aW9uKHRhcmdldFBhdGgsIGxpbmtQYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnN5bWxpbmsodGFyZ2V0UGF0aCwgbGlua1BhdGgsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUucmVhbHBhdGggPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnJlYWxwYXRoKHBhdGgsIGNiKTtcbn07XG4vLyBleHRlbmRlZCByZXF1ZXN0c1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmV4dF9vcGVuc3NoX3JlbmFtZSA9IGZ1bmN0aW9uKG9sZFBhdGgsIG5ld1BhdGgsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uZXh0X29wZW5zc2hfcmVuYW1lKG9sZFBhdGgsIG5ld1BhdGgsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZXh0X29wZW5zc2hfc3RhdHZmcyA9IGZ1bmN0aW9uKHBhdGgsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uZXh0X29wZW5zc2hfc3RhdHZmcyhwYXRoLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmV4dF9vcGVuc3NoX2ZzdGF0dmZzID0gZnVuY3Rpb24oaGFuZGxlLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmV4dF9vcGVuc3NoX2ZzdGF0dmZzKGhhbmRsZSwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5leHRfb3BlbnNzaF9oYXJkbGluayA9IGZ1bmN0aW9uKG9sZFBhdGgsIG5ld1BhdGgsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uZXh0X29wZW5zc2hfaGFyZGxpbmsob2xkUGF0aCwgbmV3UGF0aCwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5leHRfb3BlbnNzaF9mc3luYyA9IGZ1bmN0aW9uKGhhbmRsZSwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5leHRfb3BlbnNzaF9mc3luYyhoYW5kbGUsIGNiKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU0ZUUFdyYXBwZXI7XG4iLCJ2YXIgbmV0ID0gcmVxdWlyZSgnbmV0Jyk7XG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xudmFyIGxpc3RlbmVyQ291bnQgPSBFdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudDtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcblxudmFyIHNzaDJfc3RyZWFtcyA9IHJlcXVpcmUoJ0BvbHppZS0xMi9zc2gyLXN0cmVhbXMnKTtcbnZhciBwYXJzZUtleSA9IHNzaDJfc3RyZWFtcy51dGlscy5wYXJzZUtleTtcbnZhciBTU0gyU3RyZWFtID0gc3NoMl9zdHJlYW1zLlNTSDJTdHJlYW07XG52YXIgU0ZUUFN0cmVhbSA9IHNzaDJfc3RyZWFtcy5TRlRQU3RyZWFtO1xudmFyIGNvbnN0cyA9IHNzaDJfc3RyZWFtcy5jb25zdGFudHM7XG52YXIgRElTQ09OTkVDVF9SRUFTT04gPSBjb25zdHMuRElTQ09OTkVDVF9SRUFTT047XG52YXIgQ0hBTk5FTF9PUEVOX0ZBSUxVUkUgPSBjb25zdHMuQ0hBTk5FTF9PUEVOX0ZBSUxVUkU7XG52YXIgQUxHT1JJVEhNUyA9IGNvbnN0cy5BTEdPUklUSE1TO1xuXG52YXIgQ2hhbm5lbCA9IHJlcXVpcmUoJy4vQ2hhbm5lbCcpO1xudmFyIEtlZXBhbGl2ZU1hbmFnZXIgPSByZXF1aXJlKCcuL2tlZXBhbGl2ZW1ncicpO1xudmFyIHdyaXRlVUludDMyQkUgPSByZXF1aXJlKCcuL2J1ZmZlci1oZWxwZXJzJykud3JpdGVVSW50MzJCRTtcblxudmFyIE1BWF9DSEFOTkVMID0gTWF0aC5wb3coMiwgMzIpIC0gMTtcbnZhciBNQVhfUEVORElOR19BVVRIUyA9IDEwO1xuXG52YXIga2FNZ3I7XG5cbmZ1bmN0aW9uIFNlcnZlcihjZmcsIGxpc3RlbmVyKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTZXJ2ZXIpKVxuICAgIHJldHVybiBuZXcgU2VydmVyKGNmZywgbGlzdGVuZXIpO1xuXG4gIHZhciBob3N0S2V5cyA9IHtcbiAgICAnc3NoLXJzYSc6IG51bGwsXG4gICAgJ3NzaC1kc3MnOiBudWxsLFxuICAgICdzc2gtZWQyNTUxOSc6IG51bGwsXG4gICAgJ2VjZHNhLXNoYTItbmlzdHAyNTYnOiBudWxsLFxuICAgICdlY2RzYS1zaGEyLW5pc3RwMzg0JzogbnVsbCxcbiAgICAnZWNkc2Etc2hhMi1uaXN0cDUyMSc6IG51bGxcbiAgfTtcblxuICB2YXIgaG9zdEtleXNfID0gY2ZnLmhvc3RLZXlzO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoaG9zdEtleXNfKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hvc3RLZXlzIG11c3QgYmUgYW4gYXJyYXknKTtcblxuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IGhvc3RLZXlzXy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBwcml2YXRlS2V5O1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoaG9zdEtleXNfW2ldKSB8fCB0eXBlb2YgaG9zdEtleXNfW2ldID09PSAnc3RyaW5nJylcbiAgICAgIHByaXZhdGVLZXkgPSBwYXJzZUtleShob3N0S2V5c19baV0pO1xuICAgIGVsc2VcbiAgICAgIHByaXZhdGVLZXkgPSBwYXJzZUtleShob3N0S2V5c19baV0ua2V5LCBob3N0S2V5c19baV0ucGFzc3BocmFzZSk7XG4gICAgaWYgKHByaXZhdGVLZXkgaW5zdGFuY2VvZiBFcnJvcilcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIHByaXZhdGVLZXk6ICcgKyBwcml2YXRlS2V5Lm1lc3NhZ2UpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByaXZhdGVLZXkpKVxuICAgICAgcHJpdmF0ZUtleSA9IHByaXZhdGVLZXlbMF07IC8vIE9wZW5TU0gncyBuZXdlciBmb3JtYXQgb25seSBzdG9yZXMgMSBrZXkgZm9yIG5vd1xuICAgIGlmIChwcml2YXRlS2V5LmdldFByaXZhdGVQRU0oKSA9PT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJpdmF0ZUtleSB2YWx1ZSBjb250YWlucyBhbiBpbnZhbGlkIHByaXZhdGUga2V5Jyk7XG4gICAgaWYgKGhvc3RLZXlzW3ByaXZhdGVLZXkudHlwZV0pXG4gICAgICBjb250aW51ZTtcbiAgICBob3N0S2V5c1twcml2YXRlS2V5LnR5cGVdID0gcHJpdmF0ZUtleTtcbiAgfVxuXG4gIHZhciBhbGdvcml0aG1zID0ge1xuICAgIGtleDogdW5kZWZpbmVkLFxuICAgIGtleEJ1ZjogdW5kZWZpbmVkLFxuICAgIGNpcGhlcjogdW5kZWZpbmVkLFxuICAgIGNpcGhlckJ1ZjogdW5kZWZpbmVkLFxuICAgIHNlcnZlckhvc3RLZXk6IHVuZGVmaW5lZCxcbiAgICBzZXJ2ZXJIb3N0S2V5QnVmOiB1bmRlZmluZWQsXG4gICAgaG1hYzogdW5kZWZpbmVkLFxuICAgIGhtYWNCdWY6IHVuZGVmaW5lZCxcbiAgICBjb21wcmVzczogdW5kZWZpbmVkLFxuICAgIGNvbXByZXNzQnVmOiB1bmRlZmluZWRcbiAgfTtcbiAgaWYgKHR5cGVvZiBjZmcuYWxnb3JpdGhtcyA9PT0gJ29iamVjdCcgJiYgY2ZnLmFsZ29yaXRobXMgIT09IG51bGwpIHtcbiAgICB2YXIgYWxnb3NTdXBwb3J0ZWQ7XG4gICAgdmFyIGFsZ29MaXN0O1xuXG4gICAgYWxnb0xpc3QgPSBjZmcuYWxnb3JpdGhtcy5rZXg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb0xpc3QpICYmIGFsZ29MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFsZ29zU3VwcG9ydGVkID0gQUxHT1JJVEhNUy5TVVBQT1JURURfS0VYO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFsZ29MaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhbGdvc1N1cHBvcnRlZC5pbmRleE9mKGFsZ29MaXN0W2ldKSA9PT0gLTEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtOiAnICsgYWxnb0xpc3RbaV0pO1xuICAgICAgfVxuICAgICAgYWxnb3JpdGhtcy5rZXggPSBhbGdvTGlzdDtcbiAgICB9XG5cbiAgICBhbGdvTGlzdCA9IGNmZy5hbGdvcml0aG1zLmNpcGhlcjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbGdvTGlzdCkgJiYgYWxnb0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgYWxnb3NTdXBwb3J0ZWQgPSBBTEdPUklUSE1TLlNVUFBPUlRFRF9DSVBIRVI7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYWxnb0xpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGFsZ29zU3VwcG9ydGVkLmluZGV4T2YoYWxnb0xpc3RbaV0pID09PSAtMSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNpcGhlciBhbGdvcml0aG06ICcgKyBhbGdvTGlzdFtpXSk7XG4gICAgICB9XG4gICAgICBhbGdvcml0aG1zLmNpcGhlciA9IGFsZ29MaXN0O1xuICAgIH1cblxuICAgIGFsZ29MaXN0ID0gY2ZnLmFsZ29yaXRobXMuc2VydmVySG9zdEtleTtcbiAgICB2YXIgY29waWVkID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb0xpc3QpICYmIGFsZ29MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFsZ29zU3VwcG9ydGVkID0gQUxHT1JJVEhNUy5TVVBQT1JURURfU0VSVkVSX0hPU1RfS0VZO1xuICAgICAgZm9yIChpID0gYWxnb0xpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgaWYgKGFsZ29zU3VwcG9ydGVkLmluZGV4T2YoYWxnb0xpc3RbaV0pID09PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc2VydmVyIGhvc3Qga2V5IGFsZ29yaXRobTogJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhbGdvTGlzdFtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFob3N0S2V5c1thbGdvTGlzdFtpXV0pIHtcbiAgICAgICAgICAvLyBTaWxlbnRseSBkaXNjYXJkIGZvciBub3dcbiAgICAgICAgICBpZiAoIWNvcGllZCkge1xuICAgICAgICAgICAgYWxnb0xpc3QgPSBhbGdvTGlzdC5zbGljZSgpO1xuICAgICAgICAgICAgY29waWVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWxnb0xpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYWxnb0xpc3QubGVuZ3RoID4gMClcbiAgICAgICAgYWxnb3JpdGhtcy5zZXJ2ZXJIb3N0S2V5ID0gYWxnb0xpc3Q7XG4gICAgfVxuXG4gICAgYWxnb0xpc3QgPSBjZmcuYWxnb3JpdGhtcy5obWFjO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsZ29MaXN0KSAmJiBhbGdvTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBhbGdvc1N1cHBvcnRlZCA9IEFMR09SSVRITVMuU1VQUE9SVEVEX0hNQUM7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYWxnb0xpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGFsZ29zU3VwcG9ydGVkLmluZGV4T2YoYWxnb0xpc3RbaV0pID09PSAtMSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIEhNQUMgYWxnb3JpdGhtOiAnICsgYWxnb0xpc3RbaV0pO1xuICAgICAgfVxuICAgICAgYWxnb3JpdGhtcy5obWFjID0gYWxnb0xpc3Q7XG4gICAgfVxuXG4gICAgYWxnb0xpc3QgPSBjZmcuYWxnb3JpdGhtcy5jb21wcmVzcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbGdvTGlzdCkgJiYgYWxnb0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgYWxnb3NTdXBwb3J0ZWQgPSBBTEdPUklUSE1TLlNVUFBPUlRFRF9DT01QUkVTUztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhbGdvTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoYWxnb3NTdXBwb3J0ZWQuaW5kZXhPZihhbGdvTGlzdFtpXSkgPT09IC0xKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAnICsgYWxnb0xpc3RbaV0pO1xuICAgICAgfVxuICAgICAgYWxnb3JpdGhtcy5jb21wcmVzcyA9IGFsZ29MaXN0O1xuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIHNvbWUga2luZCBvZiB2YWxpZCBsaXN0IG9mIHN1cHBvcnQga2V5XG4gIC8vIGZvcm1hdHNcbiAgaWYgKGFsZ29yaXRobXMuc2VydmVySG9zdEtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGhvc3RLZXlBbGdvcyA9IE9iamVjdC5rZXlzKGhvc3RLZXlzKTtcbiAgICBmb3IgKGkgPSBob3N0S2V5QWxnb3MubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIGlmICghaG9zdEtleXNbaG9zdEtleUFsZ29zW2ldXSlcbiAgICAgICAgaG9zdEtleUFsZ29zLnNwbGljZShpLCAxKTtcbiAgICB9XG4gICAgYWxnb3JpdGhtcy5zZXJ2ZXJIb3N0S2V5ID0gaG9zdEtleUFsZ29zO1xuICB9XG5cbiAgaWYgKCFrYU1nclxuICAgICAgJiYgU2VydmVyLktFRVBBTElWRV9JTlRFUlZBTCA+IDBcbiAgICAgICYmIFNlcnZlci5LRUVQQUxJVkVfQ0xJRU5UX0lOVEVSVkFMID4gMFxuICAgICAgJiYgU2VydmVyLktFRVBBTElWRV9DTElFTlRfQ09VTlRfTUFYID49IDApIHtcbiAgICBrYU1nciA9IG5ldyBLZWVwYWxpdmVNYW5hZ2VyKFNlcnZlci5LRUVQQUxJVkVfSU5URVJWQUwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2ZXIuS0VFUEFMSVZFX0NMSUVOVF9JTlRFUlZBTCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZlci5LRUVQQUxJVkVfQ0xJRU5UX0NPVU5UX01BWCk7XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICBzZWxmLm9uKCdjb25uZWN0aW9uJywgbGlzdGVuZXIpO1xuXG4gIHZhciBzdHJlYW1jZmcgPSB7XG4gICAgYWxnb3JpdGhtczogYWxnb3JpdGhtcyxcbiAgICBob3N0S2V5czogaG9zdEtleXMsXG4gICAgc2VydmVyOiB0cnVlXG4gIH07XG4gIHZhciBrZXlzO1xuICB2YXIgbGVuO1xuICBmb3IgKGkgPSAwLCBrZXlzID0gT2JqZWN0LmtleXMoY2ZnKSwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09ICdwcml2YXRlS2V5J1xuICAgICAgICB8fCBrZXkgPT09ICdwdWJsaWNLZXknXG4gICAgICAgIHx8IGtleSA9PT0gJ3Bhc3NwaHJhc2UnXG4gICAgICAgIHx8IGtleSA9PT0gJ2FsZ29yaXRobXMnXG4gICAgICAgIHx8IGtleSA9PT0gJ2hvc3RLZXlzJ1xuICAgICAgICB8fCBrZXkgPT09ICdzZXJ2ZXInKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgc3RyZWFtY2ZnW2tleV0gPSBjZmdba2V5XTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtY2ZnLmRlYnVnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIG9sZERlYnVnID0gc3RyZWFtY2ZnLmRlYnVnO1xuICAgIHZhciBjZmdLZXlzID0gT2JqZWN0LmtleXMoc3RyZWFtY2ZnKTtcbiAgfVxuXG4gIHRoaXMuX3NydiA9IG5ldyBuZXQuU2VydmVyKGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIGlmIChzZWxmLl9jb25uZWN0aW9ucyA+PSBzZWxmLm1heENvbm5lY3Rpb25zKSB7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICArK3NlbGYuX2Nvbm5lY3Rpb25zO1xuICAgIHNvY2tldC5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uKGhhZF9lcnIpIHtcbiAgICAgIC0tc2VsZi5fY29ubmVjdGlvbnM7XG5cbiAgICAgIC8vIHNpbmNlIGpveWVudC9ub2RlIzk5M2JiOTNlMGEsIHdlIGhhdmUgdG8gXCJyZWFkIHBhc3QgRU9GXCIgaW4gb3JkZXIgdG9cbiAgICAgIC8vIGdldCBhbiBgZW5kYCBldmVudCBvbiBzdHJlYW1zLiB0aGFua2Z1bGx5IGFkZGluZyB0aGlzIGRvZXMgbm90XG4gICAgICAvLyBuZWdhdGl2ZWx5IGFmZmVjdCBub2RlIHZlcnNpb25zIHByZS1qb3llbnQvbm9kZSM5OTNiYjkzZTBhLlxuICAgICAgc3Noc3RyZWFtLnJlYWQoKTtcbiAgICB9KS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIHNzaHN0cmVhbS5yZXNldCgpO1xuICAgICAgc3Noc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICB9KTtcblxuICAgIHZhciBjb25uY2ZnID0gc3RyZWFtY2ZnO1xuXG4gICAgLy8gcHJlcGVuZCBkZWJ1ZyBvdXRwdXQgd2l0aCBhIHVuaXF1ZSBpZGVudGlmaWVyIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlXG4gICAgLy8gY2xpZW50cyBjb25uZWN0ZWQgYXQgdGhlIHNhbWUgdGltZVxuICAgIGlmIChvbGREZWJ1Zykge1xuICAgICAgY29ubmNmZyA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGtleTsgaSA8IGNmZ0tleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAga2V5ID0gY2ZnS2V5c1tpXTtcbiAgICAgICAgY29ubmNmZ1trZXldID0gc3RyZWFtY2ZnW2tleV07XG4gICAgICB9XG4gICAgICB2YXIgZGVidWdQcmVmaXggPSAnWycgKyBwcm9jZXNzLmhydGltZSgpLmpvaW4oJy4nKSArICddICc7XG4gICAgICBjb25uY2ZnLmRlYnVnID0gZnVuY3Rpb24obXNnKSB7XG4gICAgICAgIG9sZERlYnVnKGRlYnVnUHJlZml4ICsgbXNnKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHNzaHN0cmVhbSA9IG5ldyBTU0gyU3RyZWFtKGNvbm5jZmcpO1xuICAgIHZhciBjbGllbnQgPSBuZXcgQ2xpZW50KHNzaHN0cmVhbSwgc29ja2V0KTtcblxuICAgIHNvY2tldC5waXBlKHNzaHN0cmVhbSkucGlwZShzb2NrZXQpO1xuXG4gICAgLy8gc2lsZW5jZSBwcmUtaGVhZGVyIGVycm9yc1xuICAgIGZ1bmN0aW9uIG9uQ2xpZW50UHJlSGVhZGVyRXJyb3IoZXJyKSB7fVxuICAgIGNsaWVudC5vbignZXJyb3InLCBvbkNsaWVudFByZUhlYWRlckVycm9yKTtcblxuICAgIHNzaHN0cmVhbS5vbmNlKCdoZWFkZXInLCBmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIGlmIChzc2hzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kZWQpIHtcbiAgICAgICAgLy8gYWxyZWFkeSBkaXNjb25uZWN0ZWQgaW50ZXJuYWxseSBpbiBTU0gyU3RyZWFtIGR1ZSB0byBpbmNvbXBhdGlibGVcbiAgICAgICAgLy8gcHJvdG9jb2wgdmVyc2lvblxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKCFsaXN0ZW5lckNvdW50KHNlbGYsICdjb25uZWN0aW9uJykpIHtcbiAgICAgICAgLy8gYXV0byByZWplY3RcbiAgICAgICAgcmV0dXJuIHNzaHN0cmVhbS5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLkJZX0FQUExJQ0FUSU9OKTtcbiAgICAgIH1cblxuICAgICAgY2xpZW50LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uQ2xpZW50UHJlSGVhZGVyRXJyb3IpO1xuXG4gICAgICBzZWxmLmVtaXQoJ2Nvbm5lY3Rpb24nLFxuICAgICAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgICAgICB7IGlwOiBzb2NrZXQucmVtb3RlQWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgIGZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICAgICAgICAgICAgICAgIHBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgICAgICAgICAgICAgICAgaGVhZGVyOiBoZWFkZXIgfSk7XG4gICAgfSk7XG4gIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9KS5vbignbGlzdGVuaW5nJywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5lbWl0KCdsaXN0ZW5pbmcnKTtcbiAgfSkub24oJ2Nsb3NlJywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScpO1xuICB9KTtcbiAgdGhpcy5fY29ubmVjdGlvbnMgPSAwO1xuICB0aGlzLm1heENvbm5lY3Rpb25zID0gSW5maW5pdHk7XG59XG5pbmhlcml0cyhTZXJ2ZXIsIEV2ZW50RW1pdHRlcik7XG5cblNlcnZlci5wcm90b3R5cGUubGlzdGVuID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Nydi5saXN0ZW4uYXBwbHkodGhpcy5fc3J2LCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblNlcnZlci5wcm90b3R5cGUuYWRkcmVzcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fc3J2LmFkZHJlc3MoKTtcbn07XG5cblNlcnZlci5wcm90b3R5cGUuZ2V0Q29ubmVjdGlvbnMgPSBmdW5jdGlvbihjYikge1xuICB0aGlzLl9zcnYuZ2V0Q29ubmVjdGlvbnMoY2IpO1xufTtcblxuU2VydmVyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKGNiKSB7XG4gIHRoaXMuX3Nydi5jbG9zZShjYik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuU2VydmVyLnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fc3J2LnJlZigpO1xufTtcblxuU2VydmVyLnByb3RvdHlwZS51bnJlZiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9zcnYudW5yZWYoKTtcbn07XG5cblxuZnVuY3Rpb24gQ2xpZW50KHN0cmVhbSwgc29ja2V0KSB7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9zc2hzdHJlYW0gPSBzdHJlYW07XG4gIHZhciBjaGFubmVscyA9IHRoaXMuX2NoYW5uZWxzID0ge307XG4gIHRoaXMuX2N1ckNoYW4gPSAtMTtcbiAgdGhpcy5fc29jayA9IHNvY2tldDtcbiAgdGhpcy5ub01vcmVTZXNzaW9ucyA9IGZhbHNlO1xuICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcblxuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIHNvY2tldC5yZXN1bWUoKTtcbiAgICBzZWxmLmVtaXQoJ2VuZCcpO1xuICB9KS5vbignY2xvc2UnLCBmdW5jdGlvbihoYXNFcnIpIHtcbiAgICBzZWxmLmVtaXQoJ2Nsb3NlJywgaGFzRXJyKTtcbiAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gIH0pLm9uKCdkcmFpbicsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnZHJhaW4nKTtcbiAgfSkub24oJ2NvbnRpbnVlJywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5lbWl0KCdjb250aW51ZScpO1xuICB9KTtcblxuICB2YXIgZXhjaGFuZ2VzID0gMDtcbiAgdmFyIGFjY2VwdGVkQXV0aFN2YyA9IGZhbHNlO1xuICB2YXIgcGVuZGluZ0F1dGhzID0gW107XG4gIHZhciBhdXRoQ3R4O1xuXG4gIC8vIGJlZ2luIHNlcnZpY2UvYXV0aC1yZWxhdGVkID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBzdHJlYW0ub24oJ1NFUlZJQ0VfUkVRVUVTVCcsIGZ1bmN0aW9uKHNlcnZpY2UpIHtcbiAgICBpZiAoZXhjaGFuZ2VzID09PSAwXG4gICAgICAgIHx8IGFjY2VwdGVkQXV0aFN2Y1xuICAgICAgICB8fCBzZWxmLmF1dGhlbnRpY2F0ZWRcbiAgICAgICAgfHwgc2VydmljZSAhPT0gJ3NzaC11c2VyYXV0aCcpXG4gICAgICByZXR1cm4gc3RyZWFtLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uU0VSVklDRV9OT1RfQVZBSUxBQkxFKTtcblxuICAgIGFjY2VwdGVkQXV0aFN2YyA9IHRydWU7XG4gICAgc3RyZWFtLnNlcnZpY2VBY2NlcHQoc2VydmljZSk7XG4gIH0pLm9uKCdVU0VSQVVUSF9SRVFVRVNUJywgb25VU0VSQVVUSF9SRVFVRVNUKTtcbiAgZnVuY3Rpb24gb25VU0VSQVVUSF9SRVFVRVNUKHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsIG1ldGhvZERhdGEpIHtcbiAgICBpZiAoZXhjaGFuZ2VzID09PSAwXG4gICAgICAgIHx8IChhdXRoQ3R4XG4gICAgICAgICAgICAmJiAoYXV0aEN0eC51c2VybmFtZSAhPT0gdXNlcm5hbWUgfHwgYXV0aEN0eC5zZXJ2aWNlICE9PSBzZXJ2aWNlKSlcbiAgICAgICAgICAvLyBUT0RPOiBzdXBwb3J0IGhvc3RiYXNlZCBhdXRoXG4gICAgICAgIHx8IChtZXRob2QgIT09ICdwYXNzd29yZCdcbiAgICAgICAgICAgICYmIG1ldGhvZCAhPT0gJ3B1YmxpY2tleSdcbiAgICAgICAgICAgICYmIG1ldGhvZCAhPT0gJ2hvc3RiYXNlZCdcbiAgICAgICAgICAgICYmIG1ldGhvZCAhPT0gJ2tleWJvYXJkLWludGVyYWN0aXZlJ1xuICAgICAgICAgICAgJiYgbWV0aG9kICE9PSAnbm9uZScpXG4gICAgICAgIHx8IHBlbmRpbmdBdXRocy5sZW5ndGggPT09IE1BWF9QRU5ESU5HX0FVVEhTKVxuICAgICAgcmV0dXJuIHN0cmVhbS5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLlBST1RPQ09MX0VSUk9SKTtcbiAgICBlbHNlIGlmIChzZXJ2aWNlICE9PSAnc3NoLWNvbm5lY3Rpb24nKVxuICAgICAgcmV0dXJuIHN0cmVhbS5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLlNFUlZJQ0VfTk9UX0FWQUlMQUJMRSk7XG5cbiAgICAvLyBYWFg6IHRoaXMgcmVhbGx5IHNob3VsZG4ndCBiZSByZWFjaGluZyBpbnRvIHByaXZhdGUgc3RhdGUgLi4uXG4gICAgc3RyZWFtLl9zdGF0ZS5hdXRoTWV0aG9kID0gbWV0aG9kO1xuXG4gICAgdmFyIGN0eDtcbiAgICBpZiAobWV0aG9kID09PSAna2V5Ym9hcmQtaW50ZXJhY3RpdmUnKSB7XG4gICAgICBjdHggPSBuZXcgS2V5Ym9hcmRBdXRoQ29udGV4dChzdHJlYW0sIHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2REYXRhLCBvbkF1dGhEZWNpZGUpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAncHVibGlja2V5Jykge1xuICAgICAgY3R4ID0gbmV3IFBLQXV0aENvbnRleHQoc3RyZWFtLCB1c2VybmFtZSwgc2VydmljZSwgbWV0aG9kLCBtZXRob2REYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25BdXRoRGVjaWRlKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ2hvc3RiYXNlZCcpIHtcbiAgICAgIGN0eCA9IG5ldyBIb3N0YmFzZWRBdXRoQ29udGV4dChzdHJlYW0sIHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kRGF0YSwgb25BdXRoRGVjaWRlKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgY3R4ID0gbmV3IFB3ZEF1dGhDb250ZXh0KHN0cmVhbSwgdXNlcm5hbWUsIHNlcnZpY2UsIG1ldGhvZCwgbWV0aG9kRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkF1dGhEZWNpZGUpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAnbm9uZScpXG4gICAgICBjdHggPSBuZXcgQXV0aENvbnRleHQoc3RyZWFtLCB1c2VybmFtZSwgc2VydmljZSwgbWV0aG9kLCBvbkF1dGhEZWNpZGUpO1xuXG4gICAgaWYgKGF1dGhDdHgpIHtcbiAgICAgIGlmICghYXV0aEN0eC5faW5pdGlhbFJlc3BvbnNlKVxuICAgICAgICByZXR1cm4gcGVuZGluZ0F1dGhzLnB1c2goY3R4KTtcbiAgICAgIGVsc2UgaWYgKGF1dGhDdHguX211bHRpc3RlcCAmJiAhdGhpcy5fZmluYWxSZXNwb25zZSkge1xuICAgICAgICAvLyBSRkMgNDI1MiBzYXlzIHRvIHNpbGVudGx5IGFib3J0IHRoZSBjdXJyZW50IGF1dGggcmVxdWVzdCBpZiBhIG5ld1xuICAgICAgICAvLyBhdXRoIHJlcXVlc3QgY29tZXMgaW4gYmVmb3JlIHRoZSBmaW5hbCByZXNwb25zZSBmcm9tIGFuIGF1dGggbWV0aG9kXG4gICAgICAgIC8vIHRoYXQgcmVxdWlyZXMgYWRkaXRpb25hbCByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlcyAtLSB0aGlzIG1lYW5zXG4gICAgICAgIC8vIGtleWJvYXJkLWludGVyYWN0aXZlIGZvciBub3cgLi4uXG4gICAgICAgIGF1dGhDdHguX2NsZWFudXAgJiYgYXV0aEN0eC5fY2xlYW51cCgpO1xuICAgICAgICBhdXRoQ3R4LmVtaXQoJ2Fib3J0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXV0aEN0eCA9IGN0eDtcblxuICAgIGlmIChsaXN0ZW5lckNvdW50KHNlbGYsICdhdXRoZW50aWNhdGlvbicpKVxuICAgICAgc2VsZi5lbWl0KCdhdXRoZW50aWNhdGlvbicsIGF1dGhDdHgpO1xuICAgIGVsc2VcbiAgICAgIGF1dGhDdHgucmVqZWN0KCk7XG4gIH1cbiAgZnVuY3Rpb24gb25BdXRoRGVjaWRlKGN0eCwgYWxsb3dlZCwgbWV0aG9kc0xlZnQsIGlzUGFydGlhbCkge1xuICAgIGlmIChhdXRoQ3R4ID09PSBjdHggJiYgIXNlbGYuYXV0aGVudGljYXRlZCkge1xuICAgICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdVU0VSQVVUSF9SRVFVRVNUJywgb25VU0VSQVVUSF9SRVFVRVNUKTtcbiAgICAgICAgYXV0aEN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2VsZi5hdXRoZW50aWNhdGVkID0gdHJ1ZTtcbiAgICAgICAgc3RyZWFtLmF1dGhTdWNjZXNzKCk7XG4gICAgICAgIHBlbmRpbmdBdXRocyA9IFtdO1xuICAgICAgICBzZWxmLmVtaXQoJ3JlYWR5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0uYXV0aEZhaWx1cmUobWV0aG9kc0xlZnQsIGlzUGFydGlhbCk7XG4gICAgICAgIGlmIChwZW5kaW5nQXV0aHMubGVuZ3RoKSB7XG4gICAgICAgICAgYXV0aEN0eCA9IHBlbmRpbmdBdXRocy5wb3AoKTtcbiAgICAgICAgICBpZiAobGlzdGVuZXJDb3VudChzZWxmLCAnYXV0aGVudGljYXRpb24nKSlcbiAgICAgICAgICAgIHNlbGYuZW1pdCgnYXV0aGVudGljYXRpb24nLCBhdXRoQ3R4KTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBhdXRoQ3R4LnJlamVjdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGVuZCBzZXJ2aWNlL2F1dGgtcmVsYXRlZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciB1bnNlbnRHbG9iYWxSZXF1ZXN0c1JlcGxpZXMgPSBbXTtcblxuICBmdW5jdGlvbiBzZW5kUmVwbGllcygpIHtcbiAgICB2YXIgcmVwbHk7XG4gICAgd2hpbGUgKHVuc2VudEdsb2JhbFJlcXVlc3RzUmVwbGllcy5sZW5ndGggPiAwXG4gICAgICAgICAgICYmIHVuc2VudEdsb2JhbFJlcXVlc3RzUmVwbGllc1swXS50eXBlKSB7XG4gICAgICByZXBseSA9IHVuc2VudEdsb2JhbFJlcXVlc3RzUmVwbGllcy5zaGlmdCgpO1xuICAgICAgaWYgKHJlcGx5LnR5cGUgPT09ICdTVUNDRVNTJylcbiAgICAgICAgc3RyZWFtLnJlcXVlc3RTdWNjZXNzKHJlcGx5LmJ1Zik7XG4gICAgICBpZiAocmVwbHkudHlwZSA9PT0gJ0ZBSUxVUkUnKVxuICAgICAgICBzdHJlYW0ucmVxdWVzdEZhaWx1cmUoKTtcbiAgICB9XG4gIH1cblxuICBzdHJlYW0ub24oJ0dMT0JBTF9SRVFVRVNUJywgZnVuY3Rpb24obmFtZSwgd2FudFJlcGx5LCBkYXRhKSB7XG4gICAgdmFyIHJlcGx5ID0ge1xuICAgICAgdHlwZTogbnVsbCxcbiAgICAgIGJ1ZjogbnVsbFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBzZXRSZXBseSh0eXBlLCBidWYpIHtcbiAgICAgIHJlcGx5LnR5cGUgPSB0eXBlO1xuICAgICAgcmVwbHkuYnVmID0gYnVmO1xuICAgICAgc2VuZFJlcGxpZXMoKTtcbiAgICB9XG5cbiAgICBpZiAod2FudFJlcGx5KVxuICAgICAgdW5zZW50R2xvYmFsUmVxdWVzdHNSZXBsaWVzLnB1c2gocmVwbHkpO1xuXG4gICAgaWYgKChuYW1lID09PSAndGNwaXAtZm9yd2FyZCdcbiAgICAgICAgIHx8IG5hbWUgPT09ICdjYW5jZWwtdGNwaXAtZm9yd2FyZCdcbiAgICAgICAgIHx8IG5hbWUgPT09ICduby1tb3JlLXNlc3Npb25zQG9wZW5zc2guY29tJ1xuICAgICAgICAgfHwgbmFtZSA9PT0gJ3N0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20nXG4gICAgICAgICB8fCBuYW1lID09PSAnY2FuY2VsLXN0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20nKVxuICAgICAgICAmJiBsaXN0ZW5lckNvdW50KHNlbGYsICdyZXF1ZXN0JylcbiAgICAgICAgJiYgc2VsZi5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB2YXIgYWNjZXB0O1xuICAgICAgdmFyIHJlamVjdDtcblxuICAgICAgaWYgKHdhbnRSZXBseSkge1xuICAgICAgICB2YXIgcmVwbGllZCA9IGZhbHNlO1xuICAgICAgICBhY2NlcHQgPSBmdW5jdGlvbihjaG9zZW5Qb3J0KSB7XG4gICAgICAgICAgaWYgKHJlcGxpZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgcmVwbGllZCA9IHRydWU7XG4gICAgICAgICAgdmFyIGJ1ZlBvcnQ7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICd0Y3BpcC1mb3J3YXJkJ1xuICAgICAgICAgICAgICAmJiBkYXRhLmJpbmRQb3J0ID09PSAwXG4gICAgICAgICAgICAgICYmIHR5cGVvZiBjaG9zZW5Qb3J0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgYnVmUG9ydCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICAgICAgICAgIHdyaXRlVUludDMyQkUoYnVmUG9ydCwgY2hvc2VuUG9ydCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldFJlcGx5KCdTVUNDRVNTJywgYnVmUG9ydCk7XG4gICAgICAgIH07XG4gICAgICAgIHJlamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChyZXBsaWVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHJlcGxpZWQgPSB0cnVlO1xuICAgICAgICAgIHNldFJlcGx5KCdGQUlMVVJFJyk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSAnbm8tbW9yZS1zZXNzaW9uc0BvcGVuc3NoLmNvbScpIHtcbiAgICAgICAgc2VsZi5ub01vcmVTZXNzaW9ucyA9IHRydWU7XG4gICAgICAgIGFjY2VwdCAmJiBhY2NlcHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLmVtaXQoJ3JlcXVlc3QnLCBhY2NlcHQsIHJlamVjdCwgbmFtZSwgZGF0YSk7XG4gICAgfSBlbHNlIGlmICh3YW50UmVwbHkpXG4gICAgICBzZXRSZXBseSgnRkFJTFVSRScpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ0NIQU5ORUxfT1BFTicsIGZ1bmN0aW9uKGluZm8pIHtcbiAgICAvLyBkbyBlYXJseSByZWplY3QgaW4gc29tZSBjYXNlcyB0byBwcmV2ZW50IHdhc3RlZnVsIGNoYW5uZWwgYWxsb2NhdGlvblxuICAgIGlmICgoaW5mby50eXBlID09PSAnc2Vzc2lvbicgJiYgc2VsZi5ub01vcmVTZXNzaW9ucylcbiAgICAgICAgfHwgIXNlbGYuYXV0aGVudGljYXRlZCkge1xuICAgICAgdmFyIHJlYXNvbkNvZGUgPSBDSEFOTkVMX09QRU5fRkFJTFVSRS5BRE1JTklTVFJBVElWRUxZX1BST0hJQklURUQ7XG4gICAgICByZXR1cm4gc3RyZWFtLmNoYW5uZWxPcGVuRmFpbChpbmZvLnNlbmRlciwgcmVhc29uQ29kZSk7XG4gICAgfVxuXG4gICAgdmFyIGxvY2FsQ2hhbiA9IG5leHRDaGFubmVsKHNlbGYpO1xuICAgIHZhciBhY2NlcHQ7XG4gICAgdmFyIHJlamVjdDtcbiAgICB2YXIgcmVwbGllZCA9IGZhbHNlO1xuICAgIGlmIChsb2NhbENoYW4gPT09IGZhbHNlKSB7XG4gICAgICAvLyBhdXRvLXJlamVjdCBkdWUgdG8gbm8gY2hhbm5lbHMgYXZhaWxhYmxlXG4gICAgICByZXR1cm4gc3RyZWFtLmNoYW5uZWxPcGVuRmFpbChpbmZvLnNlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfT1BFTl9GQUlMVVJFLlJFU09VUkNFX1NIT1JUQUdFKTtcbiAgICB9XG5cbiAgICAvLyBiZSBvcHRpbWlzdGljLCByZXNlcnZlIGNoYW5uZWwgdG8gcHJldmVudCBhbm90aGVyIHJlcXVlc3QgZnJvbSB0cnlpbmcgdG9cbiAgICAvLyB0YWtlIHRoZSBzYW1lIGNoYW5uZWxcbiAgICBjaGFubmVsc1tsb2NhbENoYW5dID0gdHJ1ZTtcblxuICAgIHJlamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHJlcGxpZWQpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgcmVwbGllZCA9IHRydWU7XG5cbiAgICAgIGRlbGV0ZSBjaGFubmVsc1tsb2NhbENoYW5dO1xuXG4gICAgICB2YXIgcmVhc29uQ29kZSA9IENIQU5ORUxfT1BFTl9GQUlMVVJFLkFETUlOSVNUUkFUSVZFTFlfUFJPSElCSVRFRDtcbiAgICAgIHJldHVybiBzdHJlYW0uY2hhbm5lbE9wZW5GYWlsKGluZm8uc2VuZGVyLCByZWFzb25Db2RlKTtcbiAgICB9O1xuXG4gICAgc3dpdGNoIChpbmZvLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3Nlc3Npb24nOlxuICAgICAgICBpZiAobGlzdGVuZXJDb3VudChzZWxmLCAnc2Vzc2lvbicpKSB7XG4gICAgICAgICAgYWNjZXB0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAocmVwbGllZClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICByZXBsaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgc3RyZWFtLmNoYW5uZWxPcGVuQ29uZmlybShpbmZvLnNlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxDaGFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFubmVsLk1BWF9XSU5ET1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwuUEFDS0VUX1NJWkUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb24oc2VsZiwgaW5mbywgbG9jYWxDaGFuKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc2VsZi5lbWl0KCdzZXNzaW9uJywgYWNjZXB0LCByZWplY3QpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZWplY3QoKTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGlyZWN0LXRjcGlwJzpcbiAgICAgICAgaWYgKGxpc3RlbmVyQ291bnQoc2VsZiwgJ3RjcGlwJykpIHtcbiAgICAgICAgICBhY2NlcHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChyZXBsaWVkKVxuICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHJlcGxpZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBzdHJlYW0uY2hhbm5lbE9wZW5Db25maXJtKGluZm8uc2VuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbENoYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwuTUFYX1dJTkRPVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbC5QQUNLRVRfU0laRSk7XG5cbiAgICAgICAgICAgIHZhciBjaGFuaW5mbyA9IHtcbiAgICAgICAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBpbmNvbWluZzoge1xuICAgICAgICAgICAgICAgIGlkOiBsb2NhbENoYW4sXG4gICAgICAgICAgICAgICAgd2luZG93OiBDaGFubmVsLk1BWF9XSU5ET1csXG4gICAgICAgICAgICAgICAgcGFja2V0U2l6ZTogQ2hhbm5lbC5QQUNLRVRfU0laRSxcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ29wZW4nXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG91dGdvaW5nOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGluZm8uc2VuZGVyLFxuICAgICAgICAgICAgICAgIHdpbmRvdzogaW5mby53aW5kb3csXG4gICAgICAgICAgICAgICAgcGFja2V0U2l6ZTogaW5mby5wYWNrZXRTaXplLFxuICAgICAgICAgICAgICAgIHN0YXRlOiAnb3BlbidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGFubmVsKGNoYW5pbmZvLCBzZWxmKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc2VsZi5lbWl0KCd0Y3BpcCcsIGFjY2VwdCwgcmVqZWN0LCBpbmZvLmRhdGEpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZWplY3QoKTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGlyZWN0LXN0cmVhbWxvY2FsQG9wZW5zc2guY29tJzpcbiAgICAgICAgaWYgKGxpc3RlbmVyQ291bnQoc2VsZiwgJ29wZW5zc2guc3RyZWFtbG9jYWwnKSkge1xuICAgICAgICAgIGFjY2VwdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHJlcGxpZWQpXG4gICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgcmVwbGllZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHN0cmVhbS5jaGFubmVsT3BlbkNvbmZpcm0oaW5mby5zZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2hhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbC5NQVhfV0lORE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFubmVsLlBBQ0tFVF9TSVpFKTtcblxuICAgICAgICAgICAgdmFyIGNoYW5pbmZvID0ge1xuICAgICAgICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGluY29taW5nOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGxvY2FsQ2hhbixcbiAgICAgICAgICAgICAgICB3aW5kb3c6IENoYW5uZWwuTUFYX1dJTkRPVyxcbiAgICAgICAgICAgICAgICBwYWNrZXRTaXplOiBDaGFubmVsLlBBQ0tFVF9TSVpFLFxuICAgICAgICAgICAgICAgIHN0YXRlOiAnb3BlbidcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb3V0Z29pbmc6IHtcbiAgICAgICAgICAgICAgICBpZDogaW5mby5zZW5kZXIsXG4gICAgICAgICAgICAgICAgd2luZG93OiBpbmZvLndpbmRvdyxcbiAgICAgICAgICAgICAgICBwYWNrZXRTaXplOiBpbmZvLnBhY2tldFNpemUsXG4gICAgICAgICAgICAgICAgc3RhdGU6ICdvcGVuJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IENoYW5uZWwoY2hhbmluZm8sIHNlbGYpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzZWxmLmVtaXQoJ29wZW5zc2guc3RyZWFtbG9jYWwnLCBhY2NlcHQsIHJlamVjdCwgaW5mby5kYXRhKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmVqZWN0KCk7XG4gICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGF1dG8tcmVqZWN0IHVuc3VwcG9ydGVkIGNoYW5uZWwgdHlwZXNcbiAgICAgICAgcmVqZWN0KCk7XG4gICAgfVxuICB9KTtcblxuICBzdHJlYW0ub24oJ05FV0tFWVMnLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoKytleGNoYW5nZXMgPiAxKVxuICAgICAgc2VsZi5lbWl0KCdyZWtleScpO1xuICB9KTtcblxuICBpZiAoa2FNZ3IpIHtcbiAgICB0aGlzLm9uY2UoJ3JlYWR5JywgZnVuY3Rpb24oKSB7XG4gICAgICBrYU1nci5hZGQoc3RyZWFtKTtcbiAgICB9KTtcbiAgfVxufVxuaW5oZXJpdHMoQ2xpZW50LCBFdmVudEVtaXR0ZXIpO1xuXG5DbGllbnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fc3Noc3RyZWFtLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uQllfQVBQTElDQVRJT04pO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS54MTEgPSBmdW5jdGlvbihvcmlnaW5BZGRyLCBvcmlnaW5Qb3J0LCBjYikge1xuICB2YXIgb3B0cyA9IHtcbiAgICBvcmlnaW5BZGRyOiBvcmlnaW5BZGRyLFxuICAgIG9yaWdpblBvcnQ6IG9yaWdpblBvcnRcbiAgfTtcbiAgcmV0dXJuIG9wZW5DaGFubmVsKHRoaXMsICd4MTEnLCBvcHRzLCBjYik7XG59O1xuXG5DbGllbnQucHJvdG90eXBlLmZvcndhcmRPdXQgPSBmdW5jdGlvbihib3VuZEFkZHIsIGJvdW5kUG9ydCwgcmVtb3RlQWRkcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZVBvcnQsIGNiKSB7XG4gIHZhciBvcHRzID0ge1xuICAgIGJvdW5kQWRkcjogYm91bmRBZGRyLFxuICAgIGJvdW5kUG9ydDogYm91bmRQb3J0LFxuICAgIHJlbW90ZUFkZHI6IHJlbW90ZUFkZHIsXG4gICAgcmVtb3RlUG9ydDogcmVtb3RlUG9ydFxuICB9O1xuICByZXR1cm4gb3BlbkNoYW5uZWwodGhpcywgJ2ZvcndhcmRlZC10Y3BpcCcsIG9wdHMsIGNiKTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUub3BlbnNzaF9mb3J3YXJkT3V0U3RyZWFtTG9jYWwgPSBmdW5jdGlvbihzb2NrZXRQYXRoLCBjYikge1xuICB2YXIgb3B0cyA9IHtcbiAgICBzb2NrZXRQYXRoOiBzb2NrZXRQYXRoXG4gIH07XG4gIHJldHVybiBvcGVuQ2hhbm5lbCh0aGlzLCAnZm9yd2FyZGVkLXN0cmVhbWxvY2FsQG9wZW5zc2guY29tJywgb3B0cywgY2IpO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS5yZWtleSA9IGZ1bmN0aW9uKGNiKSB7XG4gIHZhciBzdHJlYW0gPSB0aGlzLl9zc2hzdHJlYW07XG4gIHZhciByZXQgPSB0cnVlO1xuICB2YXIgZXJyb3I7XG5cbiAgdHJ5IHtcbiAgICByZXQgPSBzdHJlYW0ucmVrZXkoKTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICBlcnJvciA9IGV4O1xuICB9XG5cbiAgLy8gVE9ETzogcmUtdGhyb3cgZXJyb3IgaWYgbm8gY2FsbGJhY2s/XG5cbiAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgY2IoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlXG4gICAgICB0aGlzLm9uY2UoJ3Jla2V5JywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIFNlc3Npb24oY2xpZW50LCBpbmZvLCBsb2NhbENoYW4pIHtcbiAgdGhpcy5zdWJ0eXBlID0gdW5kZWZpbmVkO1xuXG4gIHZhciBlbmRpbmcgPSBmYWxzZTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3V0Z29pbmdJZCA9IGluZm8uc2VuZGVyO1xuICB2YXIgY2hhbm5lbDtcblxuICB2YXIgY2hhbmluZm8gPSB7XG4gICAgdHlwZTogJ3Nlc3Npb24nLFxuICAgIGluY29taW5nOiB7XG4gICAgICBpZDogbG9jYWxDaGFuLFxuICAgICAgd2luZG93OiBDaGFubmVsLk1BWF9XSU5ET1csXG4gICAgICBwYWNrZXRTaXplOiBDaGFubmVsLlBBQ0tFVF9TSVpFLFxuICAgICAgc3RhdGU6ICdvcGVuJ1xuICAgIH0sXG4gICAgb3V0Z29pbmc6IHtcbiAgICAgIGlkOiBpbmZvLnNlbmRlcixcbiAgICAgIHdpbmRvdzogaW5mby53aW5kb3csXG4gICAgICBwYWNrZXRTaXplOiBpbmZvLnBhY2tldFNpemUsXG4gICAgICBzdGF0ZTogJ29wZW4nXG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIG9uUkVRVUVTVChpbmZvKSB7XG4gICAgdmFyIHJlcGxpZWQgPSBmYWxzZTtcbiAgICB2YXIgYWNjZXB0O1xuICAgIHZhciByZWplY3Q7XG5cbiAgICBpZiAoaW5mby53YW50UmVwbHkpIHtcbiAgICAgIC8vIFwicmVhbCBzZXNzaW9uXCIgcmVxdWVzdHMgd2lsbCBoYXZlIGN1c3RvbSBhY2NlcHQgYmVoYXZpb3JzXG4gICAgICBpZiAoaW5mby5yZXF1ZXN0ICE9PSAnc2hlbGwnXG4gICAgICAgICAgJiYgaW5mby5yZXF1ZXN0ICE9PSAnZXhlYydcbiAgICAgICAgICAmJiBpbmZvLnJlcXVlc3QgIT09ICdzdWJzeXN0ZW0nKSB7XG4gICAgICAgIGFjY2VwdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChyZXBsaWVkIHx8IGVuZGluZyB8fCBjaGFubmVsKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgcmVwbGllZCA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gY2xpZW50Ll9zc2hzdHJlYW0uY2hhbm5lbFN1Y2Nlc3Mob3V0Z29pbmdJZCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJlamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAocmVwbGllZCB8fCBlbmRpbmcgfHwgY2hhbm5lbClcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgcmVwbGllZCA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGNsaWVudC5fc3Noc3RyZWFtLmNoYW5uZWxGYWlsdXJlKG91dGdvaW5nSWQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZW5kaW5nKSB7XG4gICAgICByZWplY3QgJiYgcmVqZWN0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChpbmZvLnJlcXVlc3QpIHtcbiAgICAgIC8vIFwicHJlLXJlYWwgc2Vzc2lvbiBzdGFydFwiIHJlcXVlc3RzXG4gICAgICBjYXNlICdlbnYnOlxuICAgICAgICBpZiAobGlzdGVuZXJDb3VudChzZWxmLCAnZW52JykpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoJ2VudicsIGFjY2VwdCwgcmVqZWN0LCB7XG4gICAgICAgICAgICBrZXk6IGluZm8ua2V5LFxuICAgICAgICAgICAgdmFsOiBpbmZvLnZhbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZWplY3QgJiYgcmVqZWN0KCk7XG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3B0eS1yZXEnOlxuICAgICAgICBpZiAobGlzdGVuZXJDb3VudChzZWxmLCAncHR5JykpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoJ3B0eScsIGFjY2VwdCwgcmVqZWN0LCB7XG4gICAgICAgICAgICBjb2xzOiBpbmZvLmNvbHMsXG4gICAgICAgICAgICByb3dzOiBpbmZvLnJvd3MsXG4gICAgICAgICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaW5mby5oZWlnaHQsXG4gICAgICAgICAgICB0ZXJtOiBpbmZvLnRlcm0sXG4gICAgICAgICAgICBtb2RlczogaW5mby5tb2RlcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmVqZWN0ICYmIHJlamVjdCgpO1xuICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3aW5kb3ctY2hhbmdlJzpcbiAgICAgICAgaWYgKGxpc3RlbmVyQ291bnQoc2VsZiwgJ3dpbmRvdy1jaGFuZ2UnKSkge1xuICAgICAgICAgIHNlbGYuZW1pdCgnd2luZG93LWNoYW5nZScsIGFjY2VwdCwgcmVqZWN0LCB7XG4gICAgICAgICAgICBjb2xzOiBpbmZvLmNvbHMsXG4gICAgICAgICAgICByb3dzOiBpbmZvLnJvd3MsXG4gICAgICAgICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaW5mby5oZWlnaHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmVqZWN0ICYmIHJlamVjdCgpO1xuICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd4MTEtcmVxJzpcbiAgICAgICAgaWYgKGxpc3RlbmVyQ291bnQoc2VsZiwgJ3gxMScpKSB7XG4gICAgICAgICAgc2VsZi5lbWl0KCd4MTEnLCBhY2NlcHQsIHJlamVjdCwge1xuICAgICAgICAgICAgc2luZ2xlOiBpbmZvLnNpbmdsZSxcbiAgICAgICAgICAgIHByb3RvY29sOiBpbmZvLnByb3RvY29sLFxuICAgICAgICAgICAgY29va2llOiBpbmZvLmNvb2tpZSxcbiAgICAgICAgICAgIHNjcmVlbjogaW5mby5zY3JlZW5cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmVqZWN0ICYmIHJlamVjdCgpO1xuICAgICAgYnJlYWs7XG4gICAgICAvLyBcInBvc3QtcmVhbCBzZXNzaW9uIHN0YXJ0XCIgcmVxdWVzdHNcbiAgICAgIGNhc2UgJ3NpZ25hbCc6XG4gICAgICAgIGlmIChsaXN0ZW5lckNvdW50KHNlbGYsICdzaWduYWwnKSkge1xuICAgICAgICAgIHNlbGYuZW1pdCgnc2lnbmFsJywgYWNjZXB0LCByZWplY3QsIHtcbiAgICAgICAgICAgIG5hbWU6IGluZm8uc2lnbmFsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHJlamVjdCAmJiByZWplY3QoKTtcbiAgICAgIGJyZWFrO1xuICAgICAgLy8gWFhYOiBpcyBgYXV0aC1hZ2VudC1yZXFAb3BlbnNzaC5jb21gIHJlYWxseSBcInBvc3QtcmVhbCBzZXNzaW9uIHN0YXJ0XCI/XG4gICAgICBjYXNlICdhdXRoLWFnZW50LXJlcUBvcGVuc3NoLmNvbSc6XG4gICAgICAgIGlmIChsaXN0ZW5lckNvdW50KHNlbGYsICdhdXRoLWFnZW50JykpXG4gICAgICAgICAgc2VsZi5lbWl0KCdhdXRoLWFnZW50JywgYWNjZXB0LCByZWplY3QpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVqZWN0ICYmIHJlamVjdCgpO1xuICAgICAgYnJlYWs7XG4gICAgICAvLyBcInJlYWwgc2Vzc2lvbiBzdGFydFwiIHJlcXVlc3RzXG4gICAgICBjYXNlICdzaGVsbCc6XG4gICAgICAgIGlmIChsaXN0ZW5lckNvdW50KHNlbGYsICdzaGVsbCcpKSB7XG4gICAgICAgICAgYWNjZXB0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAocmVwbGllZCB8fCBlbmRpbmcgfHwgY2hhbm5lbClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICByZXBsaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGluZm8ud2FudFJlcGx5KVxuICAgICAgICAgICAgICBjbGllbnQuX3NzaHN0cmVhbS5jaGFubmVsU3VjY2VzcyhvdXRnb2luZ0lkKTtcblxuICAgICAgICAgICAgY2hhbm5lbCA9IG5ldyBDaGFubmVsKGNoYW5pbmZvLCBjbGllbnQsIHsgc2VydmVyOiB0cnVlIH0pO1xuXG4gICAgICAgICAgICBjaGFubmVsLnN1YnR5cGUgPSBzZWxmLnN1YnR5cGUgPSBpbmZvLnJlcXVlc3Q7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGFubmVsO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzZWxmLmVtaXQoJ3NoZWxsJywgYWNjZXB0LCByZWplY3QpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZWplY3QgJiYgcmVqZWN0KCk7XG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4ZWMnOlxuICAgICAgICBpZiAobGlzdGVuZXJDb3VudChzZWxmLCAnZXhlYycpKSB7XG4gICAgICAgICAgYWNjZXB0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAocmVwbGllZCB8fCBlbmRpbmcgfHwgY2hhbm5lbClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICByZXBsaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGluZm8ud2FudFJlcGx5KVxuICAgICAgICAgICAgICBjbGllbnQuX3NzaHN0cmVhbS5jaGFubmVsU3VjY2VzcyhvdXRnb2luZ0lkKTtcblxuICAgICAgICAgICAgY2hhbm5lbCA9IG5ldyBDaGFubmVsKGNoYW5pbmZvLCBjbGllbnQsIHsgc2VydmVyOiB0cnVlIH0pO1xuXG4gICAgICAgICAgICBjaGFubmVsLnN1YnR5cGUgPSBzZWxmLnN1YnR5cGUgPSBpbmZvLnJlcXVlc3Q7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGFubmVsO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzZWxmLmVtaXQoJ2V4ZWMnLCBhY2NlcHQsIHJlamVjdCwge1xuICAgICAgICAgICAgY29tbWFuZDogaW5mby5jb21tYW5kXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHJlamVjdCAmJiByZWplY3QoKTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3Vic3lzdGVtJzpcbiAgICAgICAgYWNjZXB0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHJlcGxpZWQgfHwgZW5kaW5nIHx8IGNoYW5uZWwpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICByZXBsaWVkID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChpbmZvLndhbnRSZXBseSlcbiAgICAgICAgICAgIGNsaWVudC5fc3Noc3RyZWFtLmNoYW5uZWxTdWNjZXNzKG91dGdvaW5nSWQpO1xuXG4gICAgICAgICAgY2hhbm5lbCA9IG5ldyBDaGFubmVsKGNoYW5pbmZvLCBjbGllbnQsIHsgc2VydmVyOiB0cnVlIH0pO1xuXG4gICAgICAgICAgY2hhbm5lbC5zdWJ0eXBlID0gc2VsZi5zdWJ0eXBlID0gKGluZm8ucmVxdWVzdCArICc6JyArIGluZm8uc3Vic3lzdGVtKTtcblxuICAgICAgICAgIGlmIChpbmZvLnN1YnN5c3RlbSA9PT0gJ3NmdHAnKSB7XG4gICAgICAgICAgICB2YXIgc2Z0cCA9IG5ldyBTRlRQU3RyZWFtKHtcbiAgICAgICAgICAgICAgc2VydmVyOiB0cnVlLFxuICAgICAgICAgICAgICBkZWJ1ZzogY2xpZW50Ll9zc2hzdHJlYW0uZGVidWdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2hhbm5lbC5waXBlKHNmdHApLnBpcGUoY2hhbm5lbCk7XG5cbiAgICAgICAgICAgIHJldHVybiBzZnRwO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWw7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGluZm8uc3Vic3lzdGVtID09PSAnc2Z0cCcgJiYgbGlzdGVuZXJDb3VudChzZWxmLCAnc2Z0cCcpKVxuICAgICAgICAgIHNlbGYuZW1pdCgnc2Z0cCcsIGFjY2VwdCwgcmVqZWN0KTtcbiAgICAgICAgZWxzZSBpZiAoaW5mby5zdWJzeXN0ZW0gIT09ICdzZnRwJyAmJiBsaXN0ZW5lckNvdW50KHNlbGYsICdzdWJzeXN0ZW0nKSkge1xuICAgICAgICAgIHNlbGYuZW1pdCgnc3Vic3lzdGVtJywgYWNjZXB0LCByZWplY3QsIHtcbiAgICAgICAgICAgIG5hbWU6IGluZm8uc3Vic3lzdGVtXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHJlamVjdCAmJiByZWplY3QoKTtcbiAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVqZWN0ICYmIHJlamVjdCgpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvbkVPRigpIHtcbiAgICBlbmRpbmcgPSB0cnVlO1xuICAgIHNlbGYuZW1pdCgnZW9mJyk7XG4gICAgc2VsZi5lbWl0KCdlbmQnKTtcbiAgfVxuICBmdW5jdGlvbiBvbkNMT1NFKCkge1xuICAgIGVuZGluZyA9IHRydWU7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScpO1xuICB9XG4gIGNsaWVudC5fc3Noc3RyZWFtXG4gICAgICAgIC5vbignQ0hBTk5FTF9SRVFVRVNUOicgKyBsb2NhbENoYW4sIG9uUkVRVUVTVClcbiAgICAgICAgLm9uY2UoJ0NIQU5ORUxfRU9GOicgKyBsb2NhbENoYW4sIG9uRU9GKVxuICAgICAgICAub25jZSgnQ0hBTk5FTF9DTE9TRTonICsgbG9jYWxDaGFuLCBvbkNMT1NFKTtcbn1cbmluaGVyaXRzKFNlc3Npb24sIEV2ZW50RW1pdHRlcik7XG5cblxuZnVuY3Rpb24gQXV0aENvbnRleHQoc3RyZWFtLCB1c2VybmFtZSwgc2VydmljZSwgbWV0aG9kLCBjYikge1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy51c2VybmFtZSA9IHRoaXMudXNlciA9IHVzZXJuYW1lO1xuICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgdGhpcy5faW5pdGlhbFJlc3BvbnNlID0gZmFsc2U7XG4gIHRoaXMuX2ZpbmFsUmVzcG9uc2UgPSBmYWxzZTtcbiAgdGhpcy5fbXVsdGlzdGVwID0gZmFsc2U7XG4gIHRoaXMuX2NiZmluYWwgPSBmdW5jdGlvbihhbGxvd2VkLCBtZXRob2RzTGVmdCwgaXNQYXJ0aWFsKSB7XG4gICAgaWYgKCFzZWxmLl9maW5hbFJlc3BvbnNlKSB7XG4gICAgICBzZWxmLl9maW5hbFJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgIGNiKHNlbGYsIGFsbG93ZWQsIG1ldGhvZHNMZWZ0LCBpc1BhcnRpYWwpO1xuICAgIH1cbiAgfTtcbiAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xufVxuaW5oZXJpdHMoQXV0aENvbnRleHQsIEV2ZW50RW1pdHRlcik7XG5BdXRoQ29udGV4dC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFudXAgJiYgdGhpcy5fY2xlYW51cCgpO1xuICB0aGlzLl9pbml0aWFsUmVzcG9uc2UgPSB0cnVlO1xuICB0aGlzLl9jYmZpbmFsKHRydWUpO1xufTtcbkF1dGhDb250ZXh0LnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihtZXRob2RzTGVmdCwgaXNQYXJ0aWFsKSB7XG4gIHRoaXMuX2NsZWFudXAgJiYgdGhpcy5fY2xlYW51cCgpO1xuICB0aGlzLl9pbml0aWFsUmVzcG9uc2UgPSB0cnVlO1xuICB0aGlzLl9jYmZpbmFsKGZhbHNlLCBtZXRob2RzTGVmdCwgaXNQYXJ0aWFsKTtcbn07XG5cbnZhciBSRV9LQklOVF9TVUJNRVRIT0RTID0gL1sgXFx0XFxyXFxuXSosWyBcXHRcXHJcXG5dKi9nO1xuZnVuY3Rpb24gS2V5Ym9hcmRBdXRoQ29udGV4dChzdHJlYW0sIHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsIHN1Ym1ldGhvZHMsIGNiKSB7XG4gIEF1dGhDb250ZXh0LmNhbGwodGhpcywgc3RyZWFtLCB1c2VybmFtZSwgc2VydmljZSwgbWV0aG9kLCBjYik7XG4gIHRoaXMuX211bHRpc3RlcCA9IHRydWU7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkO1xuICB0aGlzLl9vbkluZm9SZXNwb25zZSA9IGZ1bmN0aW9uKHJlc3BvbnNlcykge1xuICAgIGlmIChzZWxmLl9jYikge1xuICAgICAgdmFyIGNhbGxiYWNrID0gc2VsZi5fY2I7XG4gICAgICBzZWxmLl9jYiA9IHVuZGVmaW5lZDtcbiAgICAgIGNhbGxiYWNrKHJlc3BvbnNlcyk7XG4gICAgfVxuICB9O1xuICB0aGlzLnN1Ym1ldGhvZHMgPSBzdWJtZXRob2RzLnNwbGl0KFJFX0tCSU5UX1NVQk1FVEhPRFMpO1xuICB0aGlzLm9uKCdhYm9ydCcsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX2NiICYmIHNlbGYuX2NiKG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gcmVxdWVzdCBhYm9ydGVkJykpO1xuICB9KTtcbn1cbmluaGVyaXRzKEtleWJvYXJkQXV0aENvbnRleHQsIEF1dGhDb250ZXh0KTtcbktleWJvYXJkQXV0aENvbnRleHQucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3N0cmVhbS5yZW1vdmVMaXN0ZW5lcignVVNFUkFVVEhfSU5GT19SRVNQT05TRScsIHRoaXMuX29uSW5mb1Jlc3BvbnNlKTtcbn07XG5LZXlib2FyZEF1dGhDb250ZXh0LnByb3RvdHlwZS5wcm9tcHQgPSBmdW5jdGlvbihwcm9tcHRzLCB0aXRsZSwgaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2IpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHByb21wdHMpKVxuICAgIHByb21wdHMgPSBbIHByb21wdHMgXTtcblxuICBpZiAodHlwZW9mIHRpdGxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSB0aXRsZTtcbiAgICB0aXRsZSA9IGluc3RydWN0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdHJ1Y3Rpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBpbnN0cnVjdGlvbnM7XG4gICAgaW5zdHJ1Y3Rpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9tcHRzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9tcHRzW2ldID09PSAnc3RyaW5nJykge1xuICAgICAgcHJvbXB0c1tpXSA9IHtcbiAgICAgICAgcHJvbXB0OiBwcm9tcHRzW2ldLFxuICAgICAgICBlY2hvOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX2NiID0gY2I7XG4gIHRoaXMuX2luaXRpYWxSZXNwb25zZSA9IHRydWU7XG4gIHRoaXMuX3N0cmVhbS5vbmNlKCdVU0VSQVVUSF9JTkZPX1JFU1BPTlNFJywgdGhpcy5fb25JbmZvUmVzcG9uc2UpO1xuXG4gIHJldHVybiB0aGlzLl9zdHJlYW0uYXV0aEluZm9SZXEodGl0bGUsIGluc3RydWN0aW9ucywgcHJvbXB0cyk7XG59O1xuXG5mdW5jdGlvbiBQS0F1dGhDb250ZXh0KHN0cmVhbSwgdXNlcm5hbWUsIHNlcnZpY2UsIG1ldGhvZCwgcGtJbmZvLCBjYikge1xuICBBdXRoQ29udGV4dC5jYWxsKHRoaXMsIHN0cmVhbSwgdXNlcm5hbWUsIHNlcnZpY2UsIG1ldGhvZCwgY2IpO1xuXG4gIHRoaXMua2V5ID0geyBhbGdvOiBwa0luZm8ua2V5QWxnbywgZGF0YTogcGtJbmZvLmtleSB9O1xuICB0aGlzLnNpZ25hdHVyZSA9IHBrSW5mby5zaWduYXR1cmU7XG4gIHZhciBzaWdBbGdvO1xuICBpZiAodGhpcy5zaWduYXR1cmUpIHtcbiAgICAvLyBUT0RPOiBtb3ZlIGtleSB0eXBlIGNoZWNraW5nIGxvZ2ljIHRvIHNzaDItc3RyZWFtc1xuICAgIHN3aXRjaCAocGtJbmZvLmtleUFsZ28pIHtcbiAgICAgIGNhc2UgJ3NzaC1yc2EnOlxuICAgICAgY2FzZSAnc3NoLWRzcyc6XG4gICAgICAgIHNpZ0FsZ28gPSAnc2hhMSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3NoLWVkMjU1MTknOlxuICAgICAgICBzaWdBbGdvID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlY2RzYS1zaGEyLW5pc3RwMjU2JzpcbiAgICAgICAgc2lnQWxnbyA9ICdzaGEyNTYnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHAzODQnOlxuICAgICAgICBzaWdBbGdvID0gJ3NoYTM4NCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDUyMSc6XG4gICAgICAgIHNpZ0FsZ28gPSAnc2hhNTEyJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHRoaXMuc2lnQWxnbyA9IHNpZ0FsZ287XG4gIHRoaXMuYmxvYiA9IHBrSW5mby5ibG9iO1xufVxuaW5oZXJpdHMoUEtBdXRoQ29udGV4dCwgQXV0aENvbnRleHQpO1xuUEtBdXRoQ29udGV4dC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5zaWduYXR1cmUpIHtcbiAgICB0aGlzLl9pbml0aWFsUmVzcG9uc2UgPSB0cnVlO1xuICAgIHRoaXMuX3N0cmVhbS5hdXRoUEtPSyh0aGlzLmtleS5hbGdvLCB0aGlzLmtleS5kYXRhKTtcbiAgfSBlbHNlIHtcbiAgICBBdXRoQ29udGV4dC5wcm90b3R5cGUuYWNjZXB0LmNhbGwodGhpcyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIEhvc3RiYXNlZEF1dGhDb250ZXh0KHN0cmVhbSwgdXNlcm5hbWUsIHNlcnZpY2UsIG1ldGhvZCwgcGtJbmZvLCBjYikge1xuICBBdXRoQ29udGV4dC5jYWxsKHRoaXMsIHN0cmVhbSwgdXNlcm5hbWUsIHNlcnZpY2UsIG1ldGhvZCwgY2IpO1xuXG4gIHRoaXMua2V5ID0geyBhbGdvOiBwa0luZm8ua2V5QWxnbywgZGF0YTogcGtJbmZvLmtleSB9O1xuICB0aGlzLnNpZ25hdHVyZSA9IHBrSW5mby5zaWduYXR1cmU7XG4gIHZhciBzaWdBbGdvO1xuICBpZiAodGhpcy5zaWduYXR1cmUpIHtcbiAgICAvLyBUT0RPOiBtb3ZlIGtleSB0eXBlIGNoZWNraW5nIGxvZ2ljIHRvIHNzaDItc3RyZWFtc1xuICAgIHN3aXRjaCAocGtJbmZvLmtleUFsZ28pIHtcbiAgICAgIGNhc2UgJ3NzaC1yc2EnOlxuICAgICAgY2FzZSAnc3NoLWRzcyc6XG4gICAgICAgIHNpZ0FsZ28gPSAnc2hhMSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3NoLWVkMjU1MTknOlxuICAgICAgICBzaWdBbGdvID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlY2RzYS1zaGEyLW5pc3RwMjU2JzpcbiAgICAgICAgc2lnQWxnbyA9ICdzaGEyNTYnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHAzODQnOlxuICAgICAgICBzaWdBbGdvID0gJ3NoYTM4NCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDUyMSc6XG4gICAgICAgIHNpZ0FsZ28gPSAnc2hhNTEyJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHRoaXMuc2lnQWxnbyA9IHNpZ0FsZ287XG4gIHRoaXMuYmxvYiA9IHBrSW5mby5ibG9iO1xuICB0aGlzLmxvY2FsSG9zdG5hbWUgPSBwa0luZm8ubG9jYWxIb3N0bmFtZTtcbiAgdGhpcy5sb2NhbFVzZXJuYW1lID0gcGtJbmZvLmxvY2FsVXNlcm5hbWU7XG59XG5pbmhlcml0cyhIb3N0YmFzZWRBdXRoQ29udGV4dCwgQXV0aENvbnRleHQpO1xuXG5mdW5jdGlvbiBQd2RBdXRoQ29udGV4dChzdHJlYW0sIHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsIHBhc3N3b3JkLCBjYikge1xuICBBdXRoQ29udGV4dC5jYWxsKHRoaXMsIHN0cmVhbSwgdXNlcm5hbWUsIHNlcnZpY2UsIG1ldGhvZCwgY2IpO1xuXG4gIHRoaXMucGFzc3dvcmQgPSBwYXNzd29yZDtcbn1cbmluaGVyaXRzKFB3ZEF1dGhDb250ZXh0LCBBdXRoQ29udGV4dCk7XG5cblxuZnVuY3Rpb24gb3BlbkNoYW5uZWwoc2VsZiwgdHlwZSwgb3B0cywgY2IpIHtcbiAgLy8gYXNrIHRoZSBjbGllbnQgdG8gb3BlbiBhIGNoYW5uZWwgZm9yIHNvbWUgcHVycG9zZVxuICAvLyAoZS5nLiBhIGZvcndhcmRlZCBUQ1AgY29ubmVjdGlvbilcbiAgdmFyIGxvY2FsQ2hhbiA9IG5leHRDaGFubmVsKHNlbGYpO1xuICB2YXIgaW5pdFdpbmRvdyA9IENoYW5uZWwuTUFYX1dJTkRPVztcbiAgdmFyIG1heFBhY2tldCA9IENoYW5uZWwuUEFDS0VUX1NJWkU7XG4gIHZhciByZXQgPSB0cnVlO1xuXG4gIGlmIChsb2NhbENoYW4gPT09IGZhbHNlKVxuICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ05vIGZyZWUgY2hhbm5lbHMgYXZhaWxhYmxlJykpO1xuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cblxuICBzZWxmLl9jaGFubmVsc1tsb2NhbENoYW5dID0gdHJ1ZTtcblxuICB2YXIgc3Noc3RyZWFtID0gc2VsZi5fc3Noc3RyZWFtO1xuICBzc2hzdHJlYW0ub25jZSgnQ0hBTk5FTF9PUEVOX0NPTkZJUk1BVElPTjonICsgbG9jYWxDaGFuLCBmdW5jdGlvbihpbmZvKSB7XG4gICAgc3Noc3RyZWFtLnJlbW92ZUFsbExpc3RlbmVycygnQ0hBTk5FTF9PUEVOX0ZBSUxVUkU6JyArIGxvY2FsQ2hhbik7XG5cbiAgICB2YXIgY2hhbmluZm8gPSB7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgaW5jb21pbmc6IHtcbiAgICAgICAgaWQ6IGxvY2FsQ2hhbixcbiAgICAgICAgd2luZG93OiBpbml0V2luZG93LFxuICAgICAgICBwYWNrZXRTaXplOiBtYXhQYWNrZXQsXG4gICAgICAgIHN0YXRlOiAnb3BlbidcbiAgICAgIH0sXG4gICAgICBvdXRnb2luZzoge1xuICAgICAgICBpZDogaW5mby5zZW5kZXIsXG4gICAgICAgIHdpbmRvdzogaW5mby53aW5kb3csXG4gICAgICAgIHBhY2tldFNpemU6IGluZm8ucGFja2V0U2l6ZSxcbiAgICAgICAgc3RhdGU6ICdvcGVuJ1xuICAgICAgfVxuICAgIH07XG4gICAgY2IodW5kZWZpbmVkLCBuZXcgQ2hhbm5lbChjaGFuaW5mbywgc2VsZiwgeyBzZXJ2ZXI6IHRydWUgfSkpO1xuICB9KS5vbmNlKCdDSEFOTkVMX09QRU5fRkFJTFVSRTonICsgbG9jYWxDaGFuLCBmdW5jdGlvbihpbmZvKSB7XG4gICAgc3Noc3RyZWFtLnJlbW92ZUFsbExpc3RlbmVycygnQ0hBTk5FTF9PUEVOX0NPTkZJUk1BVElPTjonICsgbG9jYWxDaGFuKTtcblxuICAgIGRlbGV0ZSBzZWxmLl9jaGFubmVsc1tsb2NhbENoYW5dO1xuXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignKFNTSCkgQ2hhbm5lbCBvcGVuIGZhaWx1cmU6ICcgKyBpbmZvLmRlc2NyaXB0aW9uKTtcbiAgICBlcnIucmVhc29uID0gaW5mby5yZWFzb247XG4gICAgZXJyLmxhbmcgPSBpbmZvLmxhbmc7XG4gICAgY2IoZXJyKTtcbiAgfSk7XG5cbiAgaWYgKHR5cGUgPT09ICdmb3J3YXJkZWQtdGNwaXAnKVxuICAgIHJldCA9IHNzaHN0cmVhbS5mb3J3YXJkZWRUY3BpcChsb2NhbENoYW4sIGluaXRXaW5kb3csIG1heFBhY2tldCwgb3B0cyk7XG4gIGVsc2UgaWYgKHR5cGUgPT09ICd4MTEnKVxuICAgIHJldCA9IHNzaHN0cmVhbS54MTEobG9jYWxDaGFuLCBpbml0V2luZG93LCBtYXhQYWNrZXQsIG9wdHMpO1xuICBlbHNlIGlmICh0eXBlID09PSAnZm9yd2FyZGVkLXN0cmVhbWxvY2FsQG9wZW5zc2guY29tJykge1xuICAgIHJldCA9IHNzaHN0cmVhbS5vcGVuc3NoX2ZvcndhcmRlZFN0cmVhbUxvY2FsKGxvY2FsQ2hhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0V2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFBhY2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG5leHRDaGFubmVsKHNlbGYpIHtcbiAgLy8gZ2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBjaGFubmVsIG51bWJlclxuXG4gIC8vIGZhc3QgcGF0aFxuICBpZiAoc2VsZi5fY3VyQ2hhbiA8IE1BWF9DSEFOTkVMKVxuICAgIHJldHVybiArK3NlbGYuX2N1ckNoYW47XG5cbiAgLy8gc2xvd2VyIGxvb2t1cCBwYXRoXG4gIGZvciAodmFyIGkgPSAwLCBjaGFubmVscyA9IHNlbGYuX2NoYW5uZWxzOyBpIDwgTUFYX0NIQU5ORUw7ICsraSlcbiAgICBpZiAoIWNoYW5uZWxzW2ldKVxuICAgICAgcmV0dXJuIGk7XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5cblNlcnZlci5jcmVhdGVTZXJ2ZXIgPSBmdW5jdGlvbihjZmcsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBuZXcgU2VydmVyKGNmZywgbGlzdGVuZXIpO1xufTtcblNlcnZlci5LRUVQQUxJVkVfSU5URVJWQUwgPSAxMDAwO1xuU2VydmVyLktFRVBBTElWRV9DTElFTlRfSU5URVJWQUwgPSAxNTAwMDtcblNlcnZlci5LRUVQQUxJVkVfQ0xJRU5UX0NPVU5UX01BWCA9IDM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2VydmVyO1xubW9kdWxlLmV4cG9ydHMuSW5jb21pbmdDbGllbnQgPSBDbGllbnQ7XG4iLCJmdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4LCBrID0gaSArIDEsIG4gPSBsaXN0Lmxlbmd0aDsgayA8IG47IGkgKz0gMSwgayArPSAxKVxuICAgIGxpc3RbaV0gPSBsaXN0W2tdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiBNYW5hZ2VyKGludGVydmFsLCBzdHJlYW1JbnRlcnZhbCwga2FDb3VudE1heCkge1xuICB2YXIgc3RyZWFtcyA9IHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fdGltZXIgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3RpbWVySW50ZXJ2YWwgPSBpbnRlcnZhbDtcbiAgdGhpcy5fdGltZXJmbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdHJlYW1zLmxlbmd0aCwgcywgbGFzdDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBzID0gc3RyZWFtc1tpXTtcbiAgICAgIGxhc3QgPSBzLl9rYWxhc3Q7XG4gICAgICBpZiAobGFzdCAmJiAobm93IC0gbGFzdCkgPj0gc3RyZWFtSW50ZXJ2YWwpIHtcbiAgICAgICAgaWYgKCsrcy5fa2FjbnQgPiBrYUNvdW50TWF4KSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignS2VlcGFsaXZlIHRpbWVvdXQnKTtcbiAgICAgICAgICBlcnIubGV2ZWwgPSAnY2xpZW50LXRpbWVvdXQnO1xuICAgICAgICAgIHMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIHMuZGlzY29ubmVjdCgpO1xuICAgICAgICAgIHNwbGljZU9uZShzdHJlYW1zLCBpKTtcbiAgICAgICAgICAtLWk7XG4gICAgICAgICAgbGVuID0gc3RyZWFtcy5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcy5fa2FsYXN0ID0gbm93O1xuICAgICAgICAgIC8vIFhYWDogaWYgdGhlIHNlcnZlciBldmVyIHN0YXJ0cyBzZW5kaW5nIHJlYWwgZ2xvYmFsIHJlcXVlc3RzIHRvIHRoZVxuICAgICAgICAgIC8vICAgICAgY2xpZW50LCB3ZSB3aWxsIG5lZWQgdG8gYWRkIGEgZHVtbXkgY2FsbGJhY2sgaGVyZSB0byBrZWVwIHRoZVxuICAgICAgICAgIC8vICAgICAgY29ycmVjdCByZXBseSBvcmRlclxuICAgICAgICAgIHMucGluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5NYW5hZ2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fdGltZXIpXG4gICAgdGhpcy5zdG9wKCk7XG4gIHRoaXMuX3RpbWVyID0gc2V0SW50ZXJ2YWwodGhpcy5fdGltZXJmbiwgdGhpcy5fdGltZXJJbnRlcnZhbCk7XG59O1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl90aW1lcikge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpO1xuICAgIHRoaXMuX3RpbWVyID0gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHN0cmVhbXMgPSB0aGlzLl9zdHJlYW1zLFxuICAgICAgc2VsZiA9IHRoaXM7XG5cbiAgc3RyZWFtLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYucmVtb3ZlKHN0cmVhbSk7XG4gIH0pLm9uKCdwYWNrZXQnLCByZXNldEtBKTtcblxuICBzdHJlYW1zW3N0cmVhbXMubGVuZ3RoXSA9IHN0cmVhbTtcblxuICByZXNldEtBKCk7XG5cbiAgaWYgKCF0aGlzLl90aW1lcilcbiAgICB0aGlzLnN0YXJ0KCk7XG5cbiAgZnVuY3Rpb24gcmVzZXRLQSgpIHtcbiAgICBzdHJlYW0uX2thbGFzdCA9IERhdGUubm93KCk7XG4gICAgc3RyZWFtLl9rYWNudCA9IDA7XG4gIH1cbn07XG5cbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc3RyZWFtcyA9IHRoaXMuX3N0cmVhbXMsXG4gICAgICBpbmRleCA9IHN0cmVhbXMuaW5kZXhPZihzdHJlYW0pO1xuICBpZiAoaW5kZXggPiAtMSlcbiAgICBzcGxpY2VPbmUoc3RyZWFtcywgaW5kZXgpO1xuICBpZiAoIXN0cmVhbXMubGVuZ3RoKVxuICAgIHRoaXMuc3RvcCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYW5hZ2VyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== +!function(e,t){ true?module.exports=t():0}(global,(()=>(()=>{var e={6728:(e,t,r)=>{e.exports={SFTPStream:r(6348),SSH2Stream:r(9104),utils:r(4264),constants:r(4e3)}},8128:e=>{e.exports={readUInt32BE:function(e,t){return 16777216*e[t++]+65536*e[t++]+256*e[t++]+e[t]},writeUInt32BE:function(e,t,r){return e[r++]=t>>>24,e[r++]=t>>>16,e[r++]=t>>>8,e[r++]=t,r},writeUInt32LE:function(e,t,r){return e[r++]=t,e[r++]=t>>>8,e[r++]=t>>>16,e[r++]=t>>>24,r}}},4e3:(e,t,r)=>{var i,n,s,o=r(7968),a=function(){if("function"==typeof o.sign&&"function"==typeof o.verify){var e,t,r="-----BEGIN PRIVATE KEY-----\r\nMC4CAQAwBQYDK2VwBCIEIHKj+sVa9WcD/q2DJUJaf43Kptc8xYuUQA4bOFj9vC8T\r\n-----END PRIVATE KEY-----",i=Buffer.from("a");try{e=o.sign(null,i,r),t=o.verify(null,i,r,e)}catch(e){}return Buffer.isBuffer(e)&&64===e.length&&!0===t}return!1}(),c="function"==typeof o.diffieHellman&&"function"==typeof o.generateKeyPairSync&&"function"==typeof o.createPublicKey,h=t.MESSAGE={DISCONNECT:1,IGNORE:2,UNIMPLEMENTED:3,DEBUG:4,SERVICE_REQUEST:5,SERVICE_ACCEPT:6,KEXINIT:20,NEWKEYS:21,USERAUTH_REQUEST:50,USERAUTH_FAILURE:51,USERAUTH_SUCCESS:52,USERAUTH_BANNER:53,GLOBAL_REQUEST:80,REQUEST_SUCCESS:81,REQUEST_FAILURE:82,CHANNEL_OPEN:90,CHANNEL_OPEN_CONFIRMATION:91,CHANNEL_OPEN_FAILURE:92,CHANNEL_WINDOW_ADJUST:93,CHANNEL_DATA:94,CHANNEL_EXTENDED_DATA:95,CHANNEL_EOF:96,CHANNEL_CLOSE:97,CHANNEL_REQUEST:98,CHANNEL_SUCCESS:99,CHANNEL_FAILURE:100};for(i=0,s=(n=Object.keys(h)).length;i{function t(e,t,r){null!=e&&("number"==typeof e?this.fromNumber(e,t,r):null==t&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,t))}function r(){return new t(null)}t.prototype.am=function(e,t,r,i,n,s){for(var o=16383&t,a=t>>14;--s>=0;){var c=16383&this[e],h=this[e++]>>14,f=a*c+h*o;n=((c=o*c+((16383&f)<<14)+r[i]+n)>>28)+(f>>14)+a*h,r[i++]=268435455&c}return n},t.prototype.DB=28,t.prototype.DM=268435455,t.prototype.DV=1<<28,t.prototype.FV=Math.pow(2,52),t.prototype.F1=24,t.prototype.F2=4;var i,n,s=new Array;for(i="0".charCodeAt(0),n=0;n<=9;++n)s[i++]=n;for(i="a".charCodeAt(0),n=10;n<36;++n)s[i++]=n;for(i="A".charCodeAt(0),n=10;n<36;++n)s[i++]=n;function o(e){return"0123456789abcdefghijklmnopqrstuvwxyz".charAt(e)}function a(e,t){var r=s[e.charCodeAt(t)];return null==r?-1:r}function c(e){var t=r();return t.fromInt(e),t}function h(e){var t,r=1;return 0!=(t=e>>>16)&&(e=t,r+=16),0!=(t=e>>8)&&(e=t,r+=8),0!=(t=e>>4)&&(e=t,r+=4),0!=(t=e>>2)&&(e=t,r+=2),0!=(t=e>>1)&&(e=t,r+=1),r}function f(e){this.m=e}function u(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,t+=16),0==(255&e)&&(e>>=8,t+=8),0==(15&e)&&(e>>=4,t+=4),0==(3&e)&&(e>>=2,t+=2),0==(1&e)&&++t,t}function m(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function v(){}function y(e){return e}function _(e){this.r2=r(),this.q3=r(),t.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}f.prototype.convert=function(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},f.prototype.revert=function(e){return e},f.prototype.reduce=function(e){e.divRemTo(this.m,null,e)},f.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},f.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},u.prototype.convert=function(e){var i=r();return e.abs().dlShiftTo(this.m.t,i),i.divRemTo(this.m,null,i),e.s<0&&i.compareTo(t.ZERO)>0&&this.m.subTo(i,i),i},u.prototype.revert=function(e){var t=r();return e.copyTo(t),this.reduce(t),t},u.prototype.reduce=function(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;for(e[r=t+this.m.t]+=this.m.am(0,i,e,t,0,this.m.t);e[r]>=e.DV;)e[r]-=e.DV,e[++r]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},u.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},u.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},t.prototype.copyTo=function(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s},t.prototype.fromInt=function(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0},t.prototype.fromString=function(e,r){var i;if(16==r)i=4;else if(8==r)i=3;else if(256==r)i=8;else if(2==r)i=1;else if(32==r)i=5;else{if(4!=r)return void this.fromRadix(e,r);i=2}this.t=0,this.s=0;for(var n=e.length,s=!1,o=0;--n>=0;){var c=8==i?255&e[n]:a(e,n);c<0?"-"==e.charAt(n)&&(s=!0):(s=!1,0==o?this[this.t++]=c:o+i>this.DB?(this[this.t-1]|=(c&(1<>this.DB-o):this[this.t-1]|=c<=this.DB&&(o-=this.DB))}8==i&&0!=(128&e[0])&&(this.s=-1,o>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==e;)--this.t},t.prototype.dlShiftTo=function(e,t){var r;for(r=this.t-1;r>=0;--r)t[r+e]=this[r];for(r=e-1;r>=0;--r)t[r]=0;t.t=this.t+e,t.s=this.s},t.prototype.drShiftTo=function(e,t){for(var r=e;r=0;--r)t[r+o+1]=this[r]>>n|a,a=(this[r]&s)<=0;--r)t[r]=0;t[o]=a,t.t=this.t+o+1,t.s=this.s,t.clamp()},t.prototype.rShiftTo=function(e,t){t.s=this.s;var r=Math.floor(e/this.DB);if(r>=this.t)t.t=0;else{var i=e%this.DB,n=this.DB-i,s=(1<>i;for(var o=r+1;o>i;i>0&&(t[this.t-r-1]|=(this.s&s)<>=this.DB;if(e.t>=this.DB;i+=this.s}else{for(i+=this.s;r>=this.DB;i-=e.s}t.s=i<0?-1:0,i<-1?t[r++]=this.DV+i:i>0&&(t[r++]=i),t.t=r,t.clamp()},t.prototype.multiplyTo=function(e,r){var i=this.abs(),n=e.abs(),s=i.t;for(r.t=s+n.t;--s>=0;)r[s]=0;for(s=0;s=0;)e[r]=0;for(r=0;r=t.DV&&(e[r+t.t]-=t.DV,e[r+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(r,t[r],e,2*r,0,1)),e.s=0,e.clamp()},t.prototype.divRemTo=function(e,i,n){var s=e.abs();if(!(s.t<=0)){var o=this.abs();if(o.t0?(s.lShiftTo(u,a),o.lShiftTo(u,n)):(s.copyTo(a),o.copyTo(n));var l=a.t,p=a[l-1];if(0!=p){var d=p*(1<1?a[l-2]>>this.F2:0),g=this.FV/d,E=(1<=0&&(n[n.t++]=1,n.subTo(_,n)),t.ONE.dlShiftTo(l,_),_.subTo(a,a);a.t=0;){var w=n[--v]==p?this.DM:Math.floor(n[v]*g+(n[v-1]+m)*E);if((n[v]+=a.am(0,w,n,y,0,l))0&&n.rShiftTo(u,n),c<0&&t.ZERO.subTo(n,n)}}},t.prototype.invDigit=function(){if(this.t<1)return 0;var e=this[0];if(0==(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},t.prototype.isEven=function(){return 0==(this.t>0?1&this[0]:this.s)},t.prototype.exp=function(e,i){if(e>4294967295||e<1)return t.ONE;var n=r(),s=r(),o=i.convert(this),a=h(e)-1;for(o.copyTo(n);--a>=0;)if(i.sqrTo(n,s),(e&1<0)i.mulTo(s,o,n);else{var c=n;n=s,s=c}return i.revert(n)},t.prototype.toString=function(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var r,i=(1<0)for(c>c)>0&&(n=!0,s=o(r));a>=0;)c>(c+=this.DB-t)):(r=this[a]>>(c-=t)&i,c<=0&&(c+=this.DB,--a)),r>0&&(n=!0),n&&(s+=o(r));return n?s:"0"},t.prototype.negate=function(){var e=r();return t.ZERO.subTo(this,e),e},t.prototype.abs=function(){return this.s<0?this.negate():this},t.prototype.compareTo=function(e){var t=this.s-e.s;if(0!=t)return t;var r=this.t;if(0!=(t=r-e.t))return this.s<0?-t:t;for(;--r>=0;)if(0!=(t=this[r]-e[r]))return t;return 0},t.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+h(this[this.t-1]^this.s&this.DM)},t.prototype.mod=function(e){var i=r();return this.abs().divRemTo(e,null,i),this.s<0&&i.compareTo(t.ZERO)>0&&e.subTo(i,i),i},t.prototype.modPowInt=function(e,t){var r;return r=e<256||t.isEven()?new f(t):new u(t),this.exp(e,r)},t.ZERO=c(0),t.ONE=c(1),v.prototype.convert=y,v.prototype.revert=y,v.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r)},v.prototype.sqrTo=function(e,t){e.squareTo(t)},_.prototype.convert=function(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=r();return e.copyTo(t),this.reduce(t),t},_.prototype.revert=function(e){return e},_.prototype.reduce=function(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},_.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},_.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)};var w=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],b=(1<<26)/w[w.length-1];t.prototype.chunkSize=function(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},t.prototype.toRadix=function(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),i=Math.pow(e,t),n=c(i),s=r(),o=r(),a="";for(this.divRemTo(n,s,o);s.signum()>0;)a=(i+o.intValue()).toString(e).substr(1)+a,s.divRemTo(n,s,o);return o.intValue().toString(e)+a},t.prototype.fromRadix=function(e,r){this.fromInt(0),null==r&&(r=10);for(var i=this.chunkSize(r),n=Math.pow(r,i),s=!1,o=0,c=0,h=0;h=i&&(this.dMultiply(n),this.dAddOffset(c,0),o=0,c=0))}o>0&&(this.dMultiply(Math.pow(r,o)),this.dAddOffset(c,0)),s&&t.ZERO.subTo(this,this)},t.prototype.fromNumber=function(e,r,i){if("number"==typeof r)if(e<2)this.fromInt(1);else for(this.fromNumber(e,i),this.testBit(e-1)||this.bitwiseTo(t.ONE.shiftLeft(e-1),p,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(r);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(t.ONE.shiftLeft(e-1),this);else{var n=new Array,s=7&e;n.length=1+(e>>3),r.nextBytes(n),s>0?n[0]&=(1<>=this.DB;if(e.t>=this.DB;i+=this.s}else{for(i+=this.s;r>=this.DB;i+=e.s}t.s=i<0?-1:0,i>0?t[r++]=i:i<-1&&(t[r++]=this.DV+i),t.t=r,t.clamp()},t.prototype.dMultiply=function(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},t.prototype.dAddOffset=function(e,t){if(0!=e){for(;this.t<=t;)this[this.t++]=0;for(this[t]+=e;this[t]>=this.DV;)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}},t.prototype.multiplyLowerTo=function(e,t,r){var i,n=Math.min(this.t+e.t,t);for(r.s=0,r.t=n;n>0;)r[--n]=0;for(i=r.t-this.t;n=0;)r[i]=0;for(i=Math.max(t-this.t,0);i0)if(0==t)r=this[0]%e;else for(var i=this.t-1;i>=0;--i)r=(t*r+this[i])%e;return r},t.prototype.millerRabin=function(e){var i=this.subtract(t.ONE),n=i.getLowestSetBit();if(n<=0)return!1;var s=i.shiftRight(n);(e=e+1>>1)>w.length&&(e=w.length);for(var o=r(),a=0;a>24},t.prototype.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16},t.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},t.prototype.toByteArray=function(){var e=this.t,t=new Array;t[0]=this.s;var r,i=this.DB-e*this.DB%8,n=0;if(e-- >0)for(i>i)!=(this.s&this.DM)>>i&&(t[n++]=r|this.s<=0;)i<8?(r=(this[e]&(1<>(i+=this.DB-8)):(r=this[e]>>(i-=8)&255,i<=0&&(i+=this.DB,--e)),0!=(128&r)&&(r|=-256),0==n&&(128&this.s)!=(128&r)&&++n,(n>0||r!=this.s)&&(t[n++]=r);return t},t.prototype.equals=function(e){return 0==this.compareTo(e)},t.prototype.min=function(e){return this.compareTo(e)<0?this:e},t.prototype.max=function(e){return this.compareTo(e)>0?this:e},t.prototype.and=function(e){var t=r();return this.bitwiseTo(e,l,t),t},t.prototype.or=function(e){var t=r();return this.bitwiseTo(e,p,t),t},t.prototype.xor=function(e){var t=r();return this.bitwiseTo(e,d,t),t},t.prototype.andNot=function(e){var t=r();return this.bitwiseTo(e,g,t),t},t.prototype.not=function(){for(var e=r(),t=0;t=this.t?0!=this.s:0!=(this[t]&1<1){var g=r();for(n.sqrTo(a[1],g);l<=d;)a[l]=r(),n.mulTo(g,a[l-2],a[l]),l+=2}var E,m,v=e.t-1,y=!0,w=r();for(s=h(e[v])-1;v>=0;){for(s>=p?E=e[v]>>s-p&d:(E=(e[v]&(1<0&&(E|=e[v-1]>>this.DB+s-p)),l=i;0==(1&E);)E>>=1,--l;if((s-=l)<0&&(s+=this.DB,--v),y)a[E].copyTo(o),y=!1;else{for(;l>1;)n.sqrTo(o,w),n.sqrTo(w,o),l-=2;l>0?n.sqrTo(o,w):(m=o,o=w,w=m),n.mulTo(w,a[E],o)}for(;v>=0&&0==(e[v]&1<=0?(i.subTo(n,i),r&&s.subTo(a,s),o.subTo(h,o)):(n.subTo(i,n),r&&a.subTo(s,a),h.subTo(o,h))}return 0!=n.compareTo(t.ONE)?t.ZERO:h.compareTo(e)>=0?h.subtract(e):h.signum()<0?(h.addTo(e,h),h.signum()<0?h.add(e):h):h},t.prototype.pow=function(e){return this.exp(e,new v)},t.prototype.gcd=function(e){var t=this.s<0?this.negate():this.clone(),r=e.s<0?e.negate():e.clone();if(t.compareTo(r)<0){var i=t;t=r,r=i}var n=t.getLowestSetBit(),s=r.getLowestSetBit();if(s<0)return t;for(n0&&(t.rShiftTo(s,t),r.rShiftTo(s,r));t.signum()>0;)(n=t.getLowestSetBit())>0&&t.rShiftTo(n,t),(n=r.getLowestSetBit())>0&&r.rShiftTo(n,r),t.compareTo(r)>=0?(t.subTo(r,t),t.rShiftTo(1,t)):(r.subTo(t,r),r.rShiftTo(1,r));return s>0&&r.lShiftTo(s,r),r},t.prototype.isProbablePrime=function(e){var t,r=this.abs();if(1==r.t&&r[0]<=w[w.length-1]){for(t=0;t{var i,n=r(7968),s=n.sign,o=n.verify,a=n.createSign,c=n.createVerify,h=n.createDecipheriv,f=n.createHash,u=n.createHmac,l=n.getCiphers(),p=r(8304).Ber,d=r(4688).pbkdf,g=r(8128),E=g.readUInt32BE,m=g.writeUInt32BE,v=r(4e3),y=v.ALGORITHMS.SUPPORTED_CIPHER,_=v.CIPHER_INFO,w=v.SSH_TO_OPENSSL,b=v.EDDSA_SUPPORTED,S=Symbol("Hash Algorithm"),k=Symbol("Private key PEM"),T=Symbol("Public key PEM"),A=Symbol("Public key SSH"),U=Symbol("Decrypted Key"),B=Object.create(null);!function(){for(var e=Object.keys(_),t=0;t=r||s<4)return!1;var o=E(e,i);if(s<4+o)return!1;i+=4+o}return e._pos=i,!0}function O(e,t){var r=new p.Writer;return r.startSequence(),r.startSequence(),r.writeOID("1.2.840.113549.1.1.1"),r.writeNull(),r.endSequence(),r.startSequence(p.BitString),r.writeByte(0),r.startSequence(),r.writeBuffer(e,p.Integer),r.writeBuffer(t,p.Integer),r.endSequence(),r.endSequence(),r.endSequence(),N("PUBLIC",r.buffer)}function I(e,t){var r=Buffer.allocUnsafe(15+e.length+4+t.length);m(r,7,0),r.write("ssh-rsa",4,7,"ascii");var i=11;return m(r,t.length,i),t.copy(r,i+=4),m(r,e.length,i+=t.length),e.copy(r,i+4),r}var C=function(){function e(e,t,r,i,n,s,o,a){var c=new p.Writer;return c.startSequence(),c.writeInt(0,p.Integer),c.writeBuffer(e,p.Integer),c.writeBuffer(t,p.Integer),c.writeBuffer(r,p.Integer),c.writeBuffer(i,p.Integer),c.writeBuffer(n,p.Integer),c.writeBuffer(s,p.Integer),c.writeBuffer(o,p.Integer),c.writeBuffer(a,p.Integer),c.endSequence(),c.buffer}try{var t=["return function genOpenSSLRSAPriv(n, e, d, iqmp, p, q) {"," var bn_d = bigIntFromBuffer(d);"," var dmp1 = bigIntToBuffer(bn_d % (bigIntFromBuffer(p) - 1n));"," var dmq1 = bigIntToBuffer(bn_d % (bigIntFromBuffer(q) - 1n));"," return makePEM('RSA PRIVATE', genRSAASN1Buf(n, e, d, p, q, dmp1, dmq1, iqmp));","};"].join("\n");return new Function("bigIntFromBuffer, bigIntToBuffer, makePEM, genRSAASN1Buf",t)((function(e){return BigInt("0x"+e.toString("hex"))}),(function(e){var t=e.toString(16);if(0!=(1&t.length))t="0"+t;else{var r=t.charCodeAt(0);(56===r||r>=97&&r<=102)&&(t="00"+t)}return Buffer.from(t,"hex")}),N,e)}catch(t){return i=r(1896),function(t,r,n,s,o,a){var c=new i(o,256),h=new i(a,256),f=new i(n,256),u=f.mod(c.subtract(i.ONE)),l=f.mod(h.subtract(i.ONE));return N("RSA PRIVATE",e(t,r,n,o,a,Buffer.from(u.toByteArray()),Buffer.from(l.toByteArray()),s))}}var i}();function L(e,t,r,i){var n=new p.Writer;return n.startSequence(),n.startSequence(),n.writeOID("1.2.840.10040.4.1"),n.startSequence(),n.writeBuffer(e,p.Integer),n.writeBuffer(t,p.Integer),n.writeBuffer(r,p.Integer),n.endSequence(),n.endSequence(),n.startSequence(p.BitString),n.writeByte(0),n.writeBuffer(i,p.Integer),n.endSequence(),n.endSequence(),N("PUBLIC",n.buffer)}function H(e,t,r,i){var n=Buffer.allocUnsafe(15+e.length+4+t.length+4+r.length+4+i.length);m(n,7,0),n.write("ssh-dss",4,7,"ascii");var s=11;return m(n,e.length,s),e.copy(n,s+=4),m(n,t.length,s+=e.length),t.copy(n,s+=4),m(n,r.length,s+=t.length),r.copy(n,s+=4),m(n,i.length,s+=r.length),i.copy(n,s+4),n}function x(e,t,r,i,n){var s=new p.Writer;return s.startSequence(),s.writeInt(0,p.Integer),s.writeBuffer(e,p.Integer),s.writeBuffer(t,p.Integer),s.writeBuffer(r,p.Integer),s.writeBuffer(i,p.Integer),s.writeBuffer(n,p.Integer),s.endSequence(),N("DSA PRIVATE",s.buffer)}function F(e){var t=new p.Writer;return t.startSequence(),t.startSequence(),t.writeOID("1.3.101.112"),t.endSequence(),t.startSequence(p.BitString),t.writeByte(0),t._ensure(e.length),e.copy(t._buf,t._offset,0,e.length),t._offset+=e.length,t.endSequence(),t.endSequence(),N("PUBLIC",t.buffer)}function M(e){var t=Buffer.allocUnsafe(19+e.length);return m(t,11,0),t.write("ssh-ed25519",4,11,"ascii"),m(t,e.length,15),e.copy(t,19),t}function K(e,t){var r=new p.Writer;return r.startSequence(),r.startSequence(),r.writeOID("1.2.840.10045.2.1"),r.writeOID(e),r.endSequence(),r.startSequence(p.BitString),r.writeByte(0),r._ensure(t.length),t.copy(r._buf,r._offset,0,t.length),r._offset+=t.length,r.endSequence(),r.endSequence(),N("PUBLIC",r.buffer)}function G(e,t){var r;switch(e){case"1.2.840.10045.3.1.7":r="nistp256";break;case"1.3.132.0.34":r="nistp384";break;case"1.3.132.0.35":r="nistp521";break;default:return}var i=Buffer.allocUnsafe(39+t.length);return m(i,19,0),i.write("ecdsa-sha2-"+r,4,19,"ascii"),m(i,8,23),i.write(r,27,8,"ascii"),m(i,t.length,35),t.copy(i,39),i}function W(e,t,r){var i=new p.Writer;return i.startSequence(),i.writeInt(1,p.Integer),i.writeBuffer(r,p.OctetString),i.startSequence(160),i.writeOID(e),i.endSequence(),i.startSequence(161),i.startSequence(p.BitString),i.writeByte(0),i._ensure(t.length),t.copy(i._buf,i._offset,0,t.length),i._offset+=t.length,i.endSequence(),i.endSequence(),i.endSequence(),N("EC PRIVATE",i.buffer)}var q,X={sign:"function"==typeof s?function(e){var t=this[k];if(null===t)return new Error("No private key available");try{return s(this[S],e,t)}catch(e){return e}}:function(e){var t=this[k];if(null===t)return new Error("No private key available");var r=a(this[S]);return r.update(e),function(e,t){try{return e.sign(t)}catch(e){return e}}(r,t)},verify:"function"==typeof o?function(e,t){var r=this[T];if(null===r)return new Error("No public key available");try{return o(this[S],e,r,t)}catch(e){return e}}:function(e,t){var r=this[T];if(null===r)return new Error("No public key available");var i=c(this[S]);return i.update(e),function(e,t,r){try{return e.verify(t,r)}catch(e){return e}}(i,r,t)},getPrivatePEM:function(){return this[k]},getPublicPEM:function(){return this[T]},getPublicSSH:function(){return this[A]}};function j(e,t,r,i,n,s,o){this.type=e,this.comment=t,this[k]=r,this[T]=i,this[A]=n,this[S]=s,this[U]=o}function V(e,t,r,i,n,s,o){this.type=e,this.comment=t,this[k]=r,this[T]=i,this[A]=n,this[S]=s,this[U]=o}function Y(e,t,r,i,n,s,o){this.type=e,this.comment=t,this[k]=r,this[T]=i,this[A]=n,this[S]=s,this[U]=o}function Q(e,t,n,s){var o;i||(i=r(4264));var a=null,c=null;switch(t){case"ssh-rsa":var h=i.readString(e,e._pos);if(!1===h)return new Error("Malformed OpenSSH public key");var f=i.readString(e,e._pos);if(!1===f)return new Error("Malformed OpenSSH public key");a=O(f,h),c=I(f,h),o="sha1";break;case"ssh-dss":var u=i.readString(e,e._pos);if(!1===u)return new Error("Malformed OpenSSH public key");var l=i.readString(e,e._pos);if(!1===l)return new Error("Malformed OpenSSH public key");var p=i.readString(e,e._pos);if(!1===p)return new Error("Malformed OpenSSH public key");var d=i.readString(e,e._pos);if(!1===d)return new Error("Malformed OpenSSH public key");a=L(u,l,p,d),c=H(u,l,p,d),o="sha1";break;case"ssh-ed25519":var g=i.readString(e,e._pos);if(!1===g||32!==g.length)return new Error("Malformed OpenSSH public key");a=F(g),c=M(g),o=null;break;case"ecdsa-sha2-nistp256":o="sha256",oid="1.2.840.10045.3.1.7";case"ecdsa-sha2-nistp384":void 0===o&&(o="sha384",oid="1.3.132.0.34");case"ecdsa-sha2-nistp521":if(void 0===o&&(o="sha512",oid="1.3.132.0.35"),!D(e,1))return new Error("Malformed OpenSSH public key");var E=i.readString(e,e._pos);if(!1===E)return new Error("Malformed OpenSSH public key");a=K(oid,E),c=G(oid,E);break;default:return new Error("Unsupported OpenSSH public key type: "+t)}return new z(s,n,a,c,o)}function z(e,t,r,i,n){this.type=e,this.comment=t,this[k]=null,this[T]=r,this[A]=i,this[S]=n,this[U]=!1}function $(e,t,r,i,n){this.type=e,this.comment=t,this[k]=null,this[T]=r,this[A]=i,this[S]=n,this[U]=!1}j.prototype=X,q=/^-----BEGIN OPENSSH PRIVATE KEY-----(?:\r\n|\n)([\s\S]+)(?:\r\n|\n)-----END OPENSSH PRIVATE KEY-----$/,j.parse=function(e,t){var n,s=q.exec(e);if(null===s)return null;var o=Buffer.from(s[1],"base64");if(o.length<31)return new Error("Malformed OpenSSH private key");var a=o.toString("ascii",0,15);if("openssh-key-v1\0"!==a)return new Error("Unsupported OpenSSH key magic: "+a);i||(i=r(4264));var c=i.readString(o,15,"ascii");if(!1===c)return new Error("Malformed OpenSSH private key");if("none"!==c&&-1===y.indexOf(c))return new Error("Unsupported cipher for OpenSSH key: "+c);var f,u,l,g=i.readString(o,o._pos,"ascii");if(!1===g)return new Error("Malformed OpenSSH private key");if("none"!==g){if("none"===c)return new Error("Malformed OpenSSH private key");if("bcrypt"!==g)return new Error("Unsupported kdf name for OpenSSH key: "+g);if(!t)return new Error("Encrypted private OpenSSH key detected, but no passphrase given")}else if("none"!==c)return new Error("Malformed OpenSSH private key");"none"!==c&&(f=_[c]);var m=i.readString(o,o._pos);if(!1===m)return new Error("Malformed OpenSSH private key");if(m.length)switch(g){case"none":return new Error("Malformed OpenSSH private key");case"bcrypt":var v=i.readString(m,0);if(!1===v||m._pos+4>m.length)return new Error("Malformed OpenSSH private key");var S=E(m,m._pos),k=Buffer.allocUnsafe(f.keyLen+f.ivLen);if(0!==d(t,t.length,v,v.length,k,k.length,S))return new Error("Failed to generate information to decrypt key");u=k.slice(0,f.keyLen),l=k.slice(f.keyLen)}else if("none"!==g)return new Error("Malformed OpenSSH private key");var T=i.readInt(o,o._pos);if(!1===T)return new Error("Malformed OpenSSH private key");if(o._pos+=4,T>0){for(var A=0;A0){if(o.length-o._posS.keyLen&&(A=A.slice(0,S.keyLen));try{var U=h(b,A,k);U.setAutoPadding(!1),g=P(U.update(g),U.final()),m=!0}catch(e){return e}}}}var R,D,C,x="Malformed OpenSSH private key";switch(m&&(x+=". Bad passphrase?"),i[1]){case"RSA":s="ssh-rsa",o=N("RSA PRIVATE",g);try{(d=new p.Reader(g)).readSequence(),d.readInt();var F=d.readString(p.Integer,!0);if(null===F)return new Error(x);var M=d.readString(p.Integer,!0);if(null===M)return new Error(x);a=O(F,M),c=I(F,M)}catch(e){return new Error(x)}u="sha1";break;case"DSA":s="ssh-dss",o=N("DSA PRIVATE",g);try{(d=new p.Reader(g)).readSequence(),d.readInt();var W=d.readString(p.Integer,!0);if(null===W)return new Error(x);var q=d.readString(p.Integer,!0);if(null===q)return new Error(x);var X=d.readString(p.Integer,!0);if(null===X)return new Error(x);var j=d.readString(p.Integer,!0);if(null===j)return new Error(x);a=L(W,q,X,j),c=H(W,q,X,j)}catch(e){return new Error(x)}u="sha1";break;case"EC":var Y,Q;try{(d=new p.Reader(g)).readSequence(),d.readInt(),Q=d.readString(p.OctetString,!0),d.readByte();var z=d.readLength();if(null===z)return new Error(x);d._offset=z;var $=d.readOID();if(null===$)return new Error(x);switch($){case"1.2.840.10045.3.1.7":Y="prime256v1",s="ecdsa-sha2-nistp256",u="sha256";break;case"1.3.132.0.34":Y="secp384r1",s="ecdsa-sha2-nistp384",u="sha384";break;case"1.3.132.0.35":Y="secp521r1",s="ecdsa-sha2-nistp521",u="sha512";break;default:return new Error("Unsupported private key EC OID: "+$)}}catch(e){return new Error(x)}o=N("EC PRIVATE",g);var Z=(R=Y,D=Q,(C=n.createECDH(R)).setPrivateKey(D),C.getPublicKey());a=K($,Z),c=G($,Z)}return new V(s,"",o,a,c,u,m)}}(),Y.prototype=X,function(){var e=Buffer.alloc(0),t=Buffer.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),n=Buffer.from([0,0,0,0]),s=Buffer.from([0,0,0,1]),o=/^PuTTY-User-Key-File-2: (ssh-(?:rsa|dss))\r?\nEncryption: (aes256-cbc|none)\r?\nComment: ([^\r\n]*)\r?\nPublic-Lines: \d+\r?\n([\s\S]+?)\r?\nPrivate-Lines: \d+\r?\n([\s\S]+?)\r?\nPrivate-MAC: ([^\r\n]+)/;Y.parse=function(a,c){var l=o.exec(a);if(null===l)return null;var p=l[2],d="none"!==p;if(d&&!c)return new Error("Encrypted PPK private key detected, but no passphrase given");var g=Buffer.from(l[5],"base64");if(d){var E=_[p],v=P(f("sha1").update(n).update(c).digest(),f("sha1").update(s).update(c).digest());v.length>E.keyLen&&(v=v.slice(0,E.keyLen));try{var y=h(w[p],v,t);y.setAutoPadding(!1),g=P(y.update(g),y.final()),decrypted=!0}catch(e){return e}}var b,S,k,T=l[1],A=l[3],U=Buffer.from(l[4],"base64"),B=l[6],R=T.length,N=p.length,F=Buffer.byteLength(A),M=U.length,K=g.length,G=Buffer.allocUnsafe(4+R+4+N+4+F+4+M+4+K);if(m(G,R,V=0),G.write(T,V+=4,R,"ascii"),m(G,N,V+=R),G.write(p,V+=4,N,"ascii"),m(G,F,V+=N),G.write(A,V+=4,F,"utf8"),m(G,M,V+=F),U.copy(G,V+=4),m(G,K,V+=M),g.copy(G,V+4),c||(c=e),u("sha1",f("sha1").update("putty-private-key-file-mac-key").update(c).digest()).update(G).digest("hex")!==B)return d?new Error("PPK private key integrity check failed -- bad passphrase?"):new Error("PPK private key integrity check failed");switch(i||(i=r(4264)),U._pos=0,D(U,1),T){case"ssh-rsa":var W=i.readString(U,U._pos);if(!1===W)return new Error("Malformed PPK public key");var q=i.readString(U,U._pos);if(!1===q)return new Error("Malformed PPK public key");var X=i.readString(g,0);if(!1===X)return new Error("Malformed PPK private key");if(!1===(V=i.readString(g,g._pos)))return new Error("Malformed PPK private key");if(!1===(Q=i.readString(g,g._pos)))return new Error("Malformed PPK private key");var j=i.readString(g,g._pos);if(!1===j)return new Error("Malformed PPK private key");b=O(q,W),S=I(q,W),k=C(q,W,X,j,V,Q);break;case"ssh-dss":var V,Q;if(!1===(V=i.readString(U,U._pos)))return new Error("Malformed PPK public key");if(!1===(Q=i.readString(U,U._pos)))return new Error("Malformed PPK public key");var z=i.readString(U,U._pos);if(!1===z)return new Error("Malformed PPK public key");var $=i.readString(U,U._pos);if(!1===$)return new Error("Malformed PPK public key");var Z=i.readString(g,0);if(!1===Z)return new Error("Malformed PPK private key");b=L(V,Q,z,$),S=H(V,Q,z,$),k=x(V,Q,z,$,Z)}return new Y(T,A,k,b,S,"sha1",d)}}(),z.prototype=X,function(){var e;e=b?/^(((?:ssh-(?:rsa|dss|ed25519))|ecdsa-sha2-nistp(?:256|384|521))(?:-cert-v0[01]@openssh.com)?) ([A-Z0-9a-z\/+=]+)(?:$|\s+([\S].*)?)$/:/^(((?:ssh-(?:rsa|dss))|ecdsa-sha2-nistp(?:256|384|521))(?:-cert-v0[01]@openssh.com)?) ([A-Z0-9a-z\/+=]+)(?:$|\s+([\S].*)?)$/,z.parse=function(t){var n=e.exec(t);if(null===n)return null;i||(i=r(4264));var s=n[1],o=n[2],a=Buffer.from(n[3],"base64"),c=n[4]||"",h=i.readString(a,a._pos,"ascii");return!1===h||0!==h.indexOf(o)?new Error("Malformed OpenSSH public key"):Q(a,o,c,s)}}(),$.prototype=X,function(){var e=/^---- BEGIN SSH2 PUBLIC KEY ----(?:\r\n|\n)((?:(?:[\x21-\x7E]+?):(?:(?:.*?\\\r?\n)*.*)(?:\r\n|\n))*)((?:[A-Z0-9a-z\/+=]+(?:\r\n|\n))+)---- END SSH2 PUBLIC KEY ----$/,t=/^([\x21-\x7E]+?):((?:.*?\\\r?\n)*.*)$/gm,n=/\\\r?\n/g;$.parse=function(s){var o=e.exec(s);if(null===o)return null;var a=o[1],c=Buffer.from(o[2],"base64"),h="";if(void 0!==a)for(;o=t.exec(a);)"comment"===o[1].toLowerCase()&&(h=R(o[2].replace(n,""))).length>1&&34===h.charCodeAt(0)&&34===h.charCodeAt(h.length-1)&&(h=h.slice(1,-1));i||(i=r(4264));var f=i.readString(c,0,"ascii");if(!1===f)return new Error("Malformed RFC4716 public key");var u=null,l=null;switch(f){case"ssh-rsa":var p=i.readString(c,c._pos);if(!1===p)return new Error("Malformed RFC4716 public key");var d=i.readString(c,c._pos);if(!1===d)return new Error("Malformed RFC4716 public key");u=O(d,p),l=I(d,p);break;case"ssh-dss":var g=i.readString(c,c._pos);if(!1===g)return new Error("Malformed RFC4716 public key");var E=i.readString(c,c._pos);if(!1===E)return new Error("Malformed RFC4716 public key");var m=i.readString(c,c._pos);if(!1===m)return new Error("Malformed RFC4716 public key");var v=i.readString(c,c._pos);if(!1===v)return new Error("Malformed RFC4716 public key");u=L(g,E,m,v),l=H(g,E,m,v);break;default:return new Error("Malformed RFC4716 public key")}return new $(f,h,u,l,"sha1")}}(),e.exports={parseDERKey:function(e,t){return Q(e,t,"",t)},parseKey:function(e,t){if(Buffer.isBuffer(e))e=e.toString("utf8").trim();else{if("string"!=typeof e)return new Error("Key data must be a Buffer or string");e=e.trim()}if(null!=t)if("string"==typeof t)t=Buffer.from(t);else if(!Buffer.isBuffer(t))return new Error("Passphrase must be a string or Buffer when supplied");var r;return null!==(r=j.parse(e,t))||null!==(r=V.parse(e,t))||null!==(r=Y.parse(e,t))||null!==(r=z.parse(e))||null!==(r=$.parse(e))?r:new Error("Unsupported key format")}}},4992:(e,t,r)=>{"use strict";var i=r(970).inspect;function n(e,t){if(!e)throw new ERR_INTERNAL_ASSERTION(t)}function s(e){for(var t="",r=e.length,i="-"===e[0]?1:0;r>=i+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function o(e,t){if(n("string"==typeof t,"`thing` has to be of type string"),Array.isArray(e)){var r=e.length;return n(r>0,"At least one expected value needs to be specified"),e=e.map((e=>String(e))),r>2?`one of ${t} ${e.slice(0,r-1).join(", ")}, or `+e[r-1]:2===r?`one of ${t} ${e[0]} or ${e[1]}`:`of ${t} ${e[0]}`}return`of ${t} ${String(e)}`}n.fail=function(e){throw new ERR_INTERNAL_ASSERTION(e)},t.ERR_INTERNAL_ASSERTION=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,e);var r="This is caused by either a bug in ssh2-streams or incorrect usage of ssh2-streams internals.\nPlease open an issue with this stack trace at https://github.com/mscdex/ssh2-streams/issues\n";this.message=void 0===t?r:`${t}\n${r}`}};var a=Math.pow(2,32),c=function(){try{return new Function("return 2n ** 32n")()}catch(e){}}();function h(e,t){emitErrorNT(e,t),f(e)}function f(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}t.ERR_OUT_OF_RANGE=class e extends RangeError{constructor(t,r,o,h){super(),Error.captureStackTrace(this,e),n(r,'Missing "range" argument');var f,u=h?t:`The value of "${t}" is out of range.`;Number.isInteger(o)&&Math.abs(o)>a?f=s(String(o)):"bigint"==typeof o?(f=String(o),(o>c||o<-c)&&(f=s(f)),f+="n"):f=i(o),u+=` It must be ${r}. Received ${f}`,this.message=u}},t.ERR_INVALID_ARG_TYPE=class e extends TypeError{constructor(t,r,i){var s,a;if(super(),Error.captureStackTrace(this,e),n("string"==typeof t,"'name' must be a string"),"string"==typeof r&&r.startsWith("not ")?(s="must not be",r=r.replace(/^not /,"")):s="must be",t.endsWith(" argument"))a=`The ${t} ${s} ${o(r,"type")}`;else{var c=t.includes(".")?"property":"argument";a=`The "${t}" ${c} ${s} ${o(r,"type")}`}a+=". Received type "+typeof i,this.message=a}},t.validateNumber=function(e,t){if("number"!=typeof e)throw new ERR_INVALID_ARG_TYPE(t,"number",e)},t.destroyImpl=function(e,t){const r=this._readableState&&this._readableState.destroyed,i=this._writableState&&this._writableState.destroyed;return r||i?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(emitErrorNT,this,e)):process.nextTick(emitErrorNT,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(e=>{!t&&e?this._writableState?this._writableState.errorEmitted?process.nextTick(f,this):(this._writableState.errorEmitted=!0,process.nextTick(h,this,e)):process.nextTick(h,this,e):t?(process.nextTick(f,this),t(e)):process.nextTick(f,this)})),this)}},6348:(e,t,r)=>{var i=r(8378).Transform,n=r(8378).Readable,s=r(8378).Writable,o=r(2058).constants||process.binding("constants"),a=r(970),c=a.inherits,h=a.isDate,f=r(467).EventEmitter.listenerCount,u=r(2058),l=r(4264).readString,p=r(4264).readInt,d=r(8128).readUInt32BE,g=r(8128).writeUInt32BE,E={OK:0,EOF:1,NO_SUCH_FILE:2,PERMISSION_DENIED:3,FAILURE:4,BAD_MESSAGE:5,NO_CONNECTION:6,CONNECTION_LOST:7,OP_UNSUPPORTED:8};Object.keys(E).forEach((function(e){E[E[e]]=e}));var m={0:"No error",1:"End of file",2:"No such file or directory",3:"Permission denied",4:"Failure",5:"Bad message",6:"No connection",7:"Connection lost",8:"Operation unsupported"};U.STATUS_CODE=E;var v={INIT:1,OPEN:3,CLOSE:4,READ:5,WRITE:6,LSTAT:7,FSTAT:8,SETSTAT:9,FSETSTAT:10,OPENDIR:11,READDIR:12,REMOVE:13,MKDIR:14,RMDIR:15,REALPATH:16,STAT:17,RENAME:18,READLINK:19,SYMLINK:20,EXTENDED:200};Object.keys(v).forEach((function(e){v[v[e]]=e}));var y={VERSION:2,STATUS:101,HANDLE:102,DATA:103,NAME:104,ATTRS:105,EXTENDED:201};Object.keys(y).forEach((function(e){y[y[e]]=e}));var _={READ:1,WRITE:2,APPEND:4,CREAT:8,TRUNC:16,EXCL:32};U.OPEN_MODE=_;var w=Math.pow(2,32)-1,b=Buffer.from([0,0,0,5,v.INIT,0,0,0,3]),S=Buffer.from([0,0,0,5,y.VERSION,0,0,0,3]),k=/^SSH-2.0-(?:OpenSSH|dropbear)/,T=260096;function A(e){}function U(e,t){"string"!=typeof e||t||(t=e,e=void 0),"object"==typeof e&&e||(e={}),i.call(this,{highWaterMark:"number"==typeof e.highWaterMark?e.highWaterMark:32768}),this.debug="function"==typeof e.debug?e.debug:A,this.server=!!e.server,this._isOpenSSH=t&&k.test(t),this._needContinue=!1,this._state={status:"packet_header",writeReqid:-1,pktLeft:void 0,pktHdrBuf:Buffer.allocUnsafe(9),pktBuf:void 0,pktType:void 0,version:void 0,extensions:{},maxDataLen:this._isOpenSSH?T:32768,requests:{}};var r=this;function n(){r.writable=!1,r._cleanup(!1)}this.on("end",(function(){r.readable=!1})).on("finish",n).on("prefinish",n),this.server||this.push(b)}function B(e,t,r,i,n,s){var o,a,c,h,f=64,l=32768;"function"==typeof n?s=n:"object"==typeof n&&null!==n&&("number"==typeof n.concurrency&&n.concurrency>0&&!isNaN(n.concurrency)&&(f=n.concurrency),"number"==typeof n.chunkSize&&n.chunkSize>0&&!isNaN(n.chunkSize)&&(l=n.chunkSize),"number"==typeof n.fileSize&&n.fileSize>0&&!isNaN(n.fileSize)&&(c=n.fileSize),"function"==typeof n.step&&(o=n.step),"string"!=typeof n.mode&&"number"!=typeof n.mode||(a=I(n.mode)));var p,d,g,E=0,m=0,v=!1,y=l*f;function _(r){if(!v){v=!0;var i,n=0;p||d?(i=function(){0==--n&&s(r)},p&&(e===u||e.writable)&&++n,d&&(t===u||t.writable)&&++n,p&&(e===u||e.writable)&&e.close(p,i),d&&(t===u||t.writable)&&t.close(d,i)):s(r)}}e.open(r,"r",(function(n,v){if(n)return _(n);function w(n,c){if(n)return e!==u?void e.stat(r,(function(e,t){if(e)return _(n);w(null,t)})):_(n);h=c.size,t.open(i,"w",(function(r,n){if(r)return _(r);if(d=n,h<=0)return _();for(;y>h;){if(1===f){y=h;break}y-=l,--f}if((g=function(e){try{return Buffer.allocUnsafe(e)}catch(e){return e}}(y))instanceof Error)return _(g);function c(r,i,n,a,c,f){if(r)return _(r);function v(r){if(r)return _(r);if(m+=i,o&&o(m,i,h),i=h)){var n=E+l>h?h-E:l;w(c,E,n),E+=n}}else t.close(d,(function(t){if(d=void 0,t)return _(t);e.close(p,(function(e){if(p=void 0,e)return _(e);s()}))}))}c=c||0,e===u?t.writeData(d,g,c,i,a,v):t.write(d,g,c,i,a,v)}function v(e,t,r){return function(i,n,s){c(i,n,0,t,e,r)}}function w(t,r,i){e===u?e.read(p,g,t,i,r,v(t,r,i)):e.readData(p,g,t,i,r,v(t,r,i))}function b(){for(var e=0,t=0;Eh?h-E:l;w(t,E,r),t+=r,E+=r,++e}}void 0!==a?t.fchmod(d,a,(function e(r){r?t.chmod(i,a,(function(t){e()})):b()})):b()}))}p=v,void 0===c?e.fstat(p,w):w(null,{size:c})}))}function R(e,t,r,i,n,s,o){var a="function"==typeof o?o:void 0;e.writeData(t,r,i,n,s,(function(o,c){if(o)return e.close(t,(function(){a&&a(o)}));c===n?e.close(t,a):R(e,t,r,i+=c,n-=c,s+=c,a)}))}function N(e,t,r,i){var n=d(e,t),s=new x;if(t+=4,1&n){var o=P(e,t,r,i);if(!1===o)return!1;s.size=o,t+=8}if(2&n){var a,c;if(!1===(a=p(e,t,this,i)))return!1;if(s.uid=a,!1===(c=p(e,t+=4,this,i)))return!1;s.gid=c,t+=4}if(4&n){var h=p(e,t,this,i);if(!1===h)return!1;s.mode=h,s.permissions=h,t+=4}if(8&n){var f,u;if(!1===(f=p(e,t,this,i)))return!1;if(s.atime=f,!1===(u=p(e,t+=4,this,i)))return!1;s.mtime=u,t+=4}if(2147483648&n){var l=p(e,t,this,i);if(!1===l)return!1;t+=4;for(var g,E=0;E=0;--n)s[n]=255&o,o/=256;i.push(s)}if("number"==typeof e.uid&&"number"==typeof e.gid&&(t|=2,r+=8,i.push([e.uid>>24&255,e.uid>>16&255,e.uid>>8&255,255&e.uid]),i.push([e.gid>>24&255,e.gid>>16&255,e.gid>>8&255,255&e.gid])),"number"==typeof e.permissions||"string"==typeof e.permissions||"number"==typeof e.mode||"string"==typeof e.mode){var a=I(e.mode||e.permissions);t|=4,r+=4,i.push([a>>24&255,a>>16&255,a>>8&255,255&a])}if(("number"==typeof e.atime||h(e.atime))&&("number"==typeof e.mtime||h(e.mtime))){var c=O(e.atime),f=O(e.mtime);t|=8,r+=8,i.push([c>>24&255,c>>16&255,c>>8&255,255&c]),i.push([f>>24&255,f>>16&255,f>>8&255,255&f])}return{flags:t,nbytes:r,bytes:i}}function O(e){if("number"==typeof e&&!isNaN(e))return e;if(h(e))return parseInt(e.getTime()/1e3,10);throw new Error("Cannot parse time: "+e)}function I(e){if("number"==typeof e&&!isNaN(e))return e;if("string"==typeof e)return I(parseInt(e,8));throw new Error("Cannot parse mode: "+e)}c(U,i),U.prototype.__read=i.prototype._read,U.prototype._read=function(e){return this._needContinue&&(this._needContinue=!1,this.emit("continue")),this.__read(e)},U.prototype.__push=i.prototype.push,U.prototype.push=function(e,t){if(!this.readable)return!1;null===e&&(this.readable=!1);var r=this.__push(e,t);return this._needContinue=!1===r,r},U.prototype._cleanup=function(e){var t=this._state;t.pktBuf=void 0;var r=t.requests,i=Object.keys(r),n=i.length;if(n){if(this.readable)for(var s,o=new Error("SFTP session ended early"),a=0;a34e3)return T("DEBUG[SFTP]: Parser: "+(V="Packet length ("+_+") exceeds max length (34000)")),this._cleanup(!1),r(new Error(V));h===v.EXTENDED?c="bad_pkt":void 0===v[h]&&(T("DEBUG[SFTP]: Parser: Unsupported packet type: "+h),c="discard")}}else{if(void 0===w&&h!==y.VERSION)return T("DEBUG[SFTP]: Parser: Unexpected packet before version"),this._cleanup(!1),r(new Error("Unexpected packet before version"));void 0!==w&&h===y.VERSION?(T("DEBUG[SFTP]: Parser: Unexpected duplicate version"),c="bad_pkt"):void 0===y[h]&&(c="discard")}"bad_pkt"===c?(g(b,_+1,0),b[4]=h,_=4,u=b):(u=Buffer.allocUnsafe(_),c="payload")}else _=5,u=b;else if("payload"===c){if(h===y.VERSION||h===v.INIT){if(!1===(w=o.version=p(i,0,this,r)))return;if(w<3)return this._cleanup(!1),r(new Error("Incompatible SFTP version: "+w));a&&this.push(S);var B,R,D=i.length;for(i._pos=4;i._pos=12){if(!1===(V=l(i,8,"utf8",this,r)))return;if(i._pos+4$&&g(i,$,4),!1===(L=l(i,4,q.buffer,this,r)))return;X(void 0,L,z)}else{if(!1===(L=l(i,4,this,r)))return;X(void 0,L)}else if(h===y.NAME){var Z=p(i,4,this,r);if(!1===Z)return;var J,ee=[];i._pos=8;for(var te=0;te=A)break}o.status=c,o.pktType=h,o.pktBuf=u,o.pktLeft=_,o.version=w,r()},U.prototype.createReadStream=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");return new Y(this,e,t)},U.prototype.createWriteStream=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");return new z(this,e,t)},U.prototype.open=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");var n=this._state;"function"==typeof r&&(i=r,r=void 0);var s="number"==typeof t?t:H(t);if(null===s)throw new Error("Unknown flags string: "+t);var o=0,a=0;"string"!=typeof r&&"number"!=typeof r||(r={mode:r}),"object"==typeof r&&null!==r&&(o=(r=D(r)).flags,a=r.nbytes,r=r.bytes);var c=Buffer.byteLength(e),h=9,f=Buffer.allocUnsafe(13+c+4+4+a);g(f,f.length-4,0),f[4]=v.OPEN;var u=n.writeReqid=(n.writeReqid+1)%w;if(g(f,u,5),g(f,c,h),f.write(e,h+=4,c,"utf8"),g(f,s,h+=c),g(f,o,h+=4),r&&o){h+=4;for(var l=0,p=r.length;l=t.length)throw new Error("offset is out of bounds");if(r+i>t.length)throw new Error("length extends beyond buffer");if(null===n)throw new Error("null position currently unsupported");var o=this._state,a=e.length,c=9,h=n,f=Buffer.allocUnsafe(13+a+8+4);g(f,f.length-4,0),f[4]=v.READ;var u=o.writeReqid=(o.writeReqid+1)%w;g(f,u,5),g(f,a,c),e.copy(f,c+=4),c+=a;for(var l=7;l>=0;--l)f[c+l]=255&h,h/=256;return g(f,i,c+=8),o.requests[u]={cb:function(e,t,r){if(e){if(s._wantEOFError||e.code!==E.EOF)return s(e)}else if(r>i)return s(new Error("Received more data than requested"));s(void 0,r||0,t,n)},buffer:t.slice(r,r+i)},this.debug("DEBUG[SFTP]: Outgoing: Writing READ"),this.push(f)},U.prototype.writeData=function(e,t,r,i,n,s){if(this.server)throw new Error("Client-only method called in server mode");if(!Buffer.isBuffer(e))throw new Error("handle is not a Buffer");if(!Buffer.isBuffer(t))throw new Error("buffer is not a Buffer");if(r>t.length)throw new Error("offset is out of bounds");if(r+i>t.length)throw new Error("length extends beyond buffer");if(null===n)throw new Error("null position currently unsupported");var o=this,a=this._state;if(i){var c=i>a.maxDataLen?i-a.maxDataLen:0,h=n;c&&(i=a.maxDataLen);var f=e.length,u=9,l=Buffer.allocUnsafe(13+f+8+4+i);g(l,l.length-4,0),l[4]=v.WRITE;var p=a.writeReqid=(a.writeReqid+1)%w;g(l,p,5),g(l,f,u),e.copy(l,u+=4),u+=f;for(var d=7;d>=0;--d)l[u+d]=255&n,n/=256;return g(l,i,u+=8),t.copy(l,u+=4,r,r+i),a.requests[p]={cb:function(n){n?s&&s(n):c?o.writeData(e,t,r+i,c,h+i,s):s&&s(void 0,r+i)}},this.debug("DEBUG[SFTP]: Outgoing: Writing WRITE"),this.push(l)}s&&process.nextTick((function(){s(void 0,0)}))},U.prototype.fastGet=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");B(this,u,e,t,r,i)},U.prototype.fastPut=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");B(u,this,e,t,r,i)},U.prototype.readFile=function(e,t,r){if(this.server)throw new Error("Client-only method called in server mode");var i;"function"==typeof r?i=r:"function"==typeof t&&(i=t,t=void 0);var n=this;if("string"==typeof t)t={encoding:t,flag:"r"};else if(t){if("object"!=typeof t)throw new TypeError("Bad arguments")}else t={encoding:null,flag:"r"};var s,o,a,c=t.encoding;if(c&&!Buffer.isEncoding(c))throw new Error("Unknown encoding: "+c);var h,f=0,u=0,l=t.flag||"r";function p(){0===s?(o=Buffer.allocUnsafe(8192),n.readData(h,o,0,8192,u,d)):n.readData(h,o,f,s-f,u,d)}function d(e,t){var r;if(e){if(!(r=e.code===E.EOF))return n.close(h,(function(){return i&&i(e)}))}else r=!1;if(r||0===s&&0===t)return g();u+=t,f+=t,0!==s?f===s?g():p():(a.push(o.slice(0,t)),p())}function g(){n.close(h,(function(e){return 0===s?o=Buffer.concat(a,f):f=0;--i)"."!==t[i].filename&&".."!==t[i].filename||t.splice(i,1);r(void 0,t)}:r},this.debug("DEBUG[SFTP]: Outgoing: Writing READDIR"),this.push(f)},U.prototype.fstat=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");if(!Buffer.isBuffer(e))throw new Error("handle is not a Buffer");var r=this._state,i=e.length,n=9,s=Buffer.allocUnsafe(13+i);g(s,s.length-4,0),s[4]=v.FSTAT;var o=r.writeReqid=(r.writeReqid+1)%w;return g(s,o,5),g(s,i,n),e.copy(s,n+=4),r.requests[o]={cb:t},this.debug("DEBUG[SFTP]: Outgoing: Writing FSTAT"),this.push(s)},U.prototype.stat=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");var r=this._state,i=Buffer.byteLength(e),n=9,s=Buffer.allocUnsafe(13+i);g(s,s.length-4,0),s[4]=v.STAT;var o=r.writeReqid=(r.writeReqid+1)%w;return g(s,o,5),g(s,i,n),s.write(e,n+=4,i,"utf8"),r.requests[o]={cb:t},this.debug("DEBUG[SFTP]: Outgoing: Writing STAT"),this.push(s)},U.prototype.lstat=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");var r=this._state,i=Buffer.byteLength(e),n=9,s=Buffer.allocUnsafe(13+i);g(s,s.length-4,0),s[4]=v.LSTAT;var o=r.writeReqid=(r.writeReqid+1)%w;return g(s,o,5),g(s,i,n),s.write(e,n+=4,i,"utf8"),r.requests[o]={cb:t},this.debug("DEBUG[SFTP]: Outgoing: Writing LSTAT"),this.push(s)},U.prototype.opendir=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");var r=this._state,i=Buffer.byteLength(e),n=9,s=Buffer.allocUnsafe(13+i);g(s,s.length-4,0),s[4]=v.OPENDIR;var o=r.writeReqid=(r.writeReqid+1)%w;return g(s,o,5),g(s,i,n),s.write(e,n+=4,i,"utf8"),r.requests[o]={cb:t},this.debug("DEBUG[SFTP]: Outgoing: Writing OPENDIR"),this.push(s)},U.prototype.setstat=function(e,t,r){if(this.server)throw new Error("Client-only method called in server mode");var i=0,n=0,s=this._state;"object"==typeof t&&null!==t?(i=(t=D(t)).flags,n=t.nbytes,t=t.bytes):"function"==typeof t&&(r=t);var o=Buffer.byteLength(e),a=9,c=Buffer.allocUnsafe(13+o+4+n);g(c,c.length-4,0),c[4]=v.SETSTAT;var h=s.writeReqid=(s.writeReqid+1)%w;if(g(c,h,5),g(c,o,a),c.write(e,a+=4,o,"utf8"),g(c,i,a+=o),i){a+=4;for(var f=0,u=t.length;f256)throw new Error("handle too large (> 256 bytes)");var i=Buffer.allocUnsafe(13+r);return g(i,i.length-4,0),i[4]=y.HANDLE,g(i,e,5),g(i,r,9),r&&t.copy(i,13),this.debug("DEBUG[SFTP]: Outgoing: Writing HANDLE"),this.push(i)},U.prototype.data=function(e,t,r){if(!this.server)throw new Error("Server-only method called in client mode");var i=Buffer.isBuffer(t);if(!i&&"string"!=typeof t)throw new Error("data is not a Buffer or string");i||r||(r="utf8");var n=i?t.length:Buffer.byteLength(t,r),s=Buffer.allocUnsafe(13+n);return g(s,s.length-4,0),s[4]=y.DATA,g(s,e,5),g(s,n,9),n&&(i?t.copy(s,13):s.write(t,13,n,r)),this.debug("DEBUG[SFTP]: Outgoing: Writing DATA"),this.push(s)},U.prototype.name=function(e,t){if(!this.server)throw new Error("Server-only method called in client mode");if(!Array.isArray(t)){if("object"!=typeof t||null===t)throw new Error("names is not an object or array");t=[t]}var r,i,n,s,o,a,c,h,f,u,l,p,d=t.length,E=0,m=[];for(u=0;u= 0 and <= 2 ** 53 - 1",e)}if(e<0)throw new W(t,">= 0 and <= 2 ** 53 - 1",e)}function V(e){return e+7&-8}function Y(e,t,r){if(void 0===r)r={};else if("string"==typeof r)r={encoding:r};else{if(null===r||"object"!=typeof r)throw new TypeError('"options" argument must be a string or an object');r=Object.create(r)}if(void 0===r.highWaterMark&&(r.highWaterMark=65536),r.emitClose=!1,n.call(this,r),this.path=t,this.flags=void 0===r.flags?"r":r.flags,this.mode=void 0===r.mode?438:r.mode,this.start=r.start,this.end=r.end,this.autoClose=void 0===r.autoClose||r.autoClose,this.pos=0,this.bytesRead=0,this.closed=!1,this.handle=void 0===r.handle?null:r.handle,this.sftp=e,this._opening=!1,void 0!==this.start&&(j(this.start,"start"),this.pos=this.start),void 0===this.end)this.end=1/0;else if(this.end!==1/0&&(j(this.end,"end"),void 0!==this.start&&this.start>this.end))throw new W("start",`<= "end" (here: ${this.end})`,this.start);this.on("end",(function(){this.autoClose&&this.destroy()})),Buffer.isBuffer(this.handle)||this.open()}function Q(e,t,r){if(!e.handle)return i();function i(i){t(i=i||r),e.closed=!0,i||e.emit("close")}e.sftp.close(e.handle,i)}function z(e,t,r){if(void 0===r)r={};else if("string"==typeof r)r={encoding:r};else{if(null===r||"object"!=typeof r)throw new TypeError('"options" argument must be a string or an object');r=Object.create(r)}r.emitClose=!1,s.call(this,r),this.path=t,this.flags=void 0===r.flags?"w":r.flags,this.mode=void 0===r.mode?438:r.mode,this.start=r.start,this.autoClose=void 0===r.autoClose||r.autoClose,this.pos=0,this.bytesWritten=0,this.closed=!1,this.handle=void 0===r.handle?null:r.handle,this.sftp=e,this._opening=!1,void 0!==this.start&&(j(this.start,"start"),this.pos=this.start),r.encoding&&this.setDefaultEncoding(r.encoding),this.on("finish",(function(){this._writableState.finalCalled||this.autoClose&&this.destroy()})),Buffer.isBuffer(this.handle)||this.open()}c(Y,n),Y.prototype.open=function(){this._opening||(this._opening=!0,this.sftp.open(this.path,this.flags,this.mode,((e,t)=>{if(this._opening=!1,e)return this.emit("error",e),void(this.autoClose&&this.destroy());this.handle=t,this.emit("open",t),this.emit("ready"),this.read()})))},Y.prototype._read=function(e){if(!Buffer.isBuffer(this.handle))return this.once("open",(function(){this._read(e)}));if(!this.destroyed){var t;(!F||F.length-F.used<128)&&(t=this.readableHighWaterMark||this._readableState.highWaterMark,(F=X.length>0?X.pop():Buffer.allocUnsafe(t)).used=0);var r=F,i=Math.min(F.length-F.used,e),n=F.used;if(void 0!==this.end&&(i=Math.min(this.end-this.pos+1,i)),i<=0)return this.push(null);this.sftp.readData(this.handle,F,F.used,i,this.pos,((e,t)=>{if(e)return this.emit("error",e),void(this.autoClose&&this.destroy());var s=null;if(n+i===r.used&&r===F){var o=r.used+t-i;r.used=V(o)}else{var a=n+i&-8,c=V(n+t);a-c>=128&&X.push(r.slice(c,a))}t>0&&(this.bytesRead+=t,s=r.slice(n,n+t)),this.pos+=t,this.push(s)})),F.used=V(F.used+i)}},"function"!=typeof n.prototype.destroy&&(Y.prototype.destroy=G),Y.prototype._destroy=function(e,t){!this._opening||Buffer.isBuffer(this.handle)?(Q(this,t,e),this.handle=null,this._opening=!1):this.once("open",Q.bind(null,this,t,e))},Y.prototype.close=function(e){this.destroy(null,e)},Object.defineProperty(Y.prototype,"pending",{get(){return null===this.handle},configurable:!0}),c(z,s),z.prototype._final=function(e){this.autoClose&&this.destroy(),e()},z.prototype.open=function(){this._opening||(this._opening=!0,this.sftp.open(this.path,this.flags,this.mode,((e,t)=>{if(this._opening=!1,e)return this.emit("error",e),void(this.autoClose&&this.destroy());this.handle=t;var r=e=>{if(e)this.sftp.chmod(this.path,this.mode,(e=>{r()}));else if("a"!==this.flags[0])this.emit("open",t),this.emit("ready");else{var i=(e,r)=>{e?this.sftp.stat(this.path,((t,r)=>{if(t)return this.destroy(),void this.emit("error",e);i(null,r)})):(this.pos=r.size,this.emit("open",t),this.emit("ready"))};this.sftp.fstat(t,i)}};this.sftp.fchmod(t,this.mode,r)})))},z.prototype._write=function(e,t,r){if(!Buffer.isBuffer(e)){const t=new q("data","Buffer",e);return this.emit("error",t)}if(!Buffer.isBuffer(this.handle))return this.once("open",(function(){this._write(e,t,r)}));this.sftp.writeData(this.handle,e,0,e.length,this.pos,((e,t)=>{if(e)return this.autoClose&&this.destroy(),r(e);this.bytesWritten+=t,r()})),this.pos+=e.length},z.prototype._writev=function(e,t){if(!Buffer.isBuffer(this.handle))return this.once("open",(function(){this._writev(e,t)}));for(var r=this.sftp,i=this.handle,n=e.length,s=(e,r)=>{if(e)return this.destroy(),t(e);this.bytesWritten+=r,0==--n&&t()},o=0;o{var i=r(7968),n=r(592),s=r(8378).Transform,o=r(970).inherits,a=r(970).inspect,c=r(1240),h=r(8304).Ber,f=r(8128).readUInt32BE,u=r(8128).writeUInt32BE,l=r(4e3),p=r(4264),d=p.iv_inc,g=p.readString,E=p.readInt,m=p.DSASigBERToBare,v=p.ECDSASigASN1ToSSH,y=p.sigSSHToASN1,_=r(4368).parseDERKey,w=l.CIPHER_INFO,b=l.HMAC_INFO,S=l.MESSAGE,k=(l.DYNAMIC_KEXDH_MESSAGE,l.KEXDH_MESSAGE,l.ALGORITHMS),T=l.DISCONNECT_REASON,A=l.CHANNEL_OPEN_FAILURE,U=l.SSH_TO_OPENSSL,B=l.TERMINAL_MODE,R=l.SIGNALS,N=(l.EDDSA_SUPPORTED,l.CURVE25519_SUPPORTED),P=l.BUGS,D=l.BUGGY_IMPLS,O=D.length,I=r(2968).WU,C=0,L=C++,H=C++,x=C++,F=C++,M=C++,K=C++,G=C++,W=C++,q=C++,X=C++,j=C++,V=4294967295,Y=2,Q=n.Z_PARTIAL_FLUSH,z={flush:Q},$=/\x00/g,Z=Buffer.from("SSH-"),J=Buffer.allocUnsafe(0),ee=Buffer.allocUnsafe(9),te=Buffer.from([S.GLOBAL_REQUEST,0,0,0,21,107,101,101,112,97,108,105,118,101,64,111,112,101,110,115,115,104,46,99,111,109,1]),re=Buffer.from([S.NEWKEYS]),ie=Buffer.from([S.USERAUTH_SUCCESS]),ne=Buffer.from([S.REQUEST_SUCCESS]),se=Buffer.from([S.REQUEST_FAILURE]),oe=Buffer.from([B.TTY_OP_END]),ae=Buffer.from([S.KEXDH_GEX_REQUEST,0,0,4,0,0,0,16,0,0,0,32,0]);function ce(e){}function he(e){"object"==typeof e&&null!==e||(e={}),s.call(this,{highWaterMark:"number"==typeof e.highWaterMark?e.highWaterMark:32768}),this._needContinue=!1,this.bytesSent=this.bytesReceived=0,this.debug="function"==typeof e.debug?e.debug:ce,this.server=!0===e.server,this.maxPacketSize="number"==typeof e.maxPacketSize?e.maxPacketSize:35e3,this.remoteBugs=0,this.server&&(this.remoteBugs=P.BAD_DHGEX),this.readable=!0;var t=this,r=e.hostKeys;if(this.server&&("object"!=typeof r||null===r))throw new Error("hostKeys must be an object keyed on host key type");if(this.config={hostKeys:r,ident:"SSH-2.0-"+(e.ident||"ssh2js"+I+(this.server?"srv":"")),algorithms:{kex:k.KEX,kexBuf:k.KEX_BUF,serverHostKey:k.SERVER_HOST_KEY,serverHostKeyBuf:k.SERVER_HOST_KEY_BUF,cipher:k.CIPHER,cipherBuf:k.CIPHER_BUF,hmac:k.HMAC,hmacBuf:k.HMAC_BUF,compress:k.COMPRESS,compressBuf:k.COMPRESS_BUF}},this.config.ident.replace($,""),this.config.ident.length+2>255)throw new Error("ident too long");if("object"==typeof e.algorithms&&null!==e.algorithms){var n=e.algorithms;Array.isArray(n.kex)&&n.kex.length>0&&(this.config.algorithms.kex=n.kex,Buffer.isBuffer(n.kexBuf)||(n.kexBuf=Buffer.from(n.kex.join(","),"ascii")),this.config.algorithms.kexBuf=n.kexBuf),Array.isArray(n.serverHostKey)&&n.serverHostKey.length>0&&(this.config.algorithms.serverHostKey=n.serverHostKey,Buffer.isBuffer(n.serverHostKeyBuf)||(n.serverHostKeyBuf=Buffer.from(n.serverHostKey.join(","),"ascii")),this.config.algorithms.serverHostKeyBuf=n.serverHostKeyBuf),Array.isArray(n.cipher)&&n.cipher.length>0&&(this.config.algorithms.cipher=n.cipher,Buffer.isBuffer(n.cipherBuf)||(n.cipherBuf=Buffer.from(n.cipher.join(","),"ascii")),this.config.algorithms.cipherBuf=n.cipherBuf),Array.isArray(n.hmac)&&n.hmac.length>0&&(this.config.algorithms.hmac=n.hmac,Buffer.isBuffer(n.hmacBuf)||(n.hmacBuf=Buffer.from(n.hmac.join(","),"ascii")),this.config.algorithms.hmacBuf=n.hmacBuf),Array.isArray(n.compress)&&n.compress.length>0&&(this.config.algorithms.compress=n.compress,Buffer.isBuffer(n.compressBuf)||(n.compressBuf=Buffer.from(n.compress.join(","),"ascii")),this.config.algorithms.compressBuf=n.compressBuf)}this.reset(!0),this.on("end",(function(){t.readable=!1,t._state=void 0,t.reset(),t._state.outgoing.bufSeqno=void 0})),this.on("DISCONNECT",(function(e,r,i,n){!function(e,t,r,i,n){if(r!==T.BY_APPLICATION){var s=new Error(i||t);s.code=r,e.emit("error",s)}e.reset()}(t,e,r,i)})),this.on("KEXINIT",(function(e,r){!function(e,t,r){var i=e._state,n=i.outgoing;function s(){!0===function(e,t,r){var i,n,s,o,a=e._state,c=a.incoming,h=a.outgoing,f=e.debug;f("DEBUG: Comparing KEXINITs ...");var u=e.config.algorithms,l=u.kex;if(e.remoteBugs&P.BAD_DHGEX)for(var p=!1,d=l.length-1;d>=0;--d)-1!==l[d].indexOf("group-exchange")&&(p||(l=l.slice(),p=!0),l.splice(d,1));for(f("DEBUG: (local) KEX algorithms: "+l),f("DEBUG: (remote) KEX algorithms: "+t.algorithms.kex),e.server?(i=l,n=t.algorithms.kex):(i=t.algorithms.kex,n=l),o=0,s=n.length;oServer ciphers: "+u.cipher),f("DEBUG: (remote) Client->Server ciphers: "+t.algorithms.cs.encrypt),e.server?(i=u.cipher,n=t.algorithms.cs.encrypt):(i=t.algorithms.cs.encrypt,n=u.cipher),o=0,s=n.length;oServer cipher"),(g=new Error("Handshake failed: no matching client->server cipher")).level="handshake",e.emit("error",g),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;for(f("DEBUG: Client->Server Cipher: "+(e.server?c.decrypt.type=n[o]:h.encrypt.type=n[o])),f("DEBUG: (local) Server->Client ciphers: "+u.cipher),f("DEBUG: (remote) Server->Client ciphers: "+t.algorithms.sc.encrypt),e.server?(i=u.cipher,n=t.algorithms.sc.encrypt):(i=t.algorithms.sc.encrypt,n=u.cipher),o=0,s=n.length;oClient cipher"),(g=new Error("Handshake failed: no matching server->client cipher")).level="handshake",e.emit("error",g),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;for(f("DEBUG: Server->Client Cipher: "+(e.server?h.encrypt.type=n[o]:c.decrypt.type=n[o])),f("DEBUG: (local) Client->Server HMAC algorithms: "+u.hmac),f("DEBUG: (remote) Client->Server HMAC algorithms: "+t.algorithms.cs.mac),e.server?(i=u.hmac,n=t.algorithms.cs.mac):(i=t.algorithms.cs.mac,n=u.hmac),o=0,s=n.length;oServer HMAC algorithm"),(g=new Error("Handshake failed: no matching client->server HMAC")).level="handshake",e.emit("error",g),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;for(f("DEBUG: Client->Server HMAC algorithm: "+(e.server?c.hmac.type=n[o]:h.hmac.type=n[o])),f("DEBUG: (local) Server->Client HMAC algorithms: "+u.hmac),f("DEBUG: (remote) Server->Client HMAC algorithms: "+t.algorithms.sc.mac),e.server?(i=u.hmac,n=t.algorithms.sc.mac):(i=t.algorithms.sc.mac,n=u.hmac),o=0,s=n.length;oClient HMAC algorithm"),(g=new Error("Handshake failed: no matching server->client HMAC")).level="handshake",e.emit("error",g),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;for(f("DEBUG: Server->Client HMAC algorithm: "+(e.server?h.hmac.type=n[o]:c.hmac.type=n[o])),f("DEBUG: (local) Client->Server compression algorithms: "+u.compress),f("DEBUG: (remote) Client->Server compression algorithms: "+t.algorithms.cs.compress),e.server?(i=u.compress,n=t.algorithms.cs.compress):(i=t.algorithms.cs.compress,n=u.compress),o=0,s=n.length;oServer compression algorithm"),(g=new Error("Handshake failed: no matching client->server compression algorithm")).level="handshake",e.emit("error",g),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;for(f("DEBUG: Client->Server compression algorithm: "+(e.server?c.decompress.type=n[o]:h.compress.type=n[o])),f("DEBUG: (local) Server->Client compression algorithms: "+u.compress),f("DEBUG: (remote) Server->Client compression algorithms: "+t.algorithms.sc.compress),e.server?(i=u.compress,n=t.algorithms.sc.compress):(i=t.algorithms.sc.compress,n=u.compress),o=0,s=n.length;oClient compression algorithm"),(g=new Error("Handshake failed: no matching server->client compression algorithm")).level="handshake",e.emit("error",g),e.disconnect(T.KEY_EXCHANGE_FAILED),!1):(f("DEBUG: Server->Client compression algorithm: "+(e.server?h.compress.type=n[o]:c.decompress.type=n[o])),a.kex=new Be(E),a.kex.generateKeys(),h.pubkey=a.kex.getPublicKey(),!0)}(e,t,r)&&(e.server?i.incoming.expectedPacket=i.kex.pktInit:"groupex"===i.kex.type?function(e){e._state.incoming.expectedPacket="KEXDH_GEX_GROUP",e.debug("DEBUG: Outgoing: Writing KEXDH_GEX_REQUEST"),Se(e,ae,void 0,!0)}(e):_e(e))}n.status===X?(e.debug("DEBUG: Received re-key request"),n.status=j,n.kexinit=void 0,ye(e,s)):s()}(t,e,r)})),this.on("NEWKEYS",(function(){ue(t)})),this.server?this.on("KEXDH_INIT",(function(e){!function(e,t){!function(e,t){var r=e._state,n=r.outgoing,s=r.incoming,o=e.config.hostKeys[r.hostkeyFormat];Array.isArray(o)&&(o=o[0]);var a=o.getPublicSSH(),c=o.type;t=r.kex.convertPublicKey(t);var h=r.kex.computeSecret(t);if(h instanceof Error)return h.message="Error while computing DH secret ("+r.kex.type+"): "+h.message,h.level="handshake",e.emit("error",h),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;var f,l,p,d,g=i.createHash(r.kex.hash),E=Buffer.byteLength(s.identRaw),m=Buffer.byteLength(e.config.ident),v=s.kexinit.length,y=n.kexinit.length,_=a.length,w=t.length,b=n.pubkey.length,k=h.length,A=E+m+v+y+_+w+b+k+32,U=r.kex.getDHParams();U&&(p=U.prime,d=U.generator,A+=12,A+=8,A+=f=p.length,A+=l=d.length);var B=0,R=Buffer.allocUnsafe(A);u(R,E,B),B+=4,R.write(s.identRaw,B,"utf8"),u(R,m,B+=E),B+=4,R.write(e.config.ident,B,"utf8"),u(R,v,B+=m),B+=4,s.kexinit.copy(R,B),B+=v,s.kexinit=void 0,u(R,y,B),B+=4,n.kexinit.copy(R,B),B+=y,n.kexinit=void 0,u(R,_,B),B+=4,a.copy(R,B),B+=_,U&&(ae.slice(1).copy(R,B),u(R,f,B+=12),B+=4,p.copy(R,B),u(R,l,B+=f),B+=4,d.copy(R,B),B+=l),u(R,w,B),B+=4,t.copy(R,B),u(R,b,B+=w),B+=4,n.pubkey.copy(R,B),u(R,k,B+=b),B+=4,h.copy(R,B),n.exchangeHash=g.update(R).digest(),void 0===n.sessionId&&(n.sessionId=n.exchangeHash),n.kexsecret=h;var N=o.sign(n.exchangeHash);if(N instanceof Error)return N.message="Error while signing data with host key ("+c+"): "+N.message,N.level="handshake",e.emit("error",N),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;if(!1===(N=Ae(N,c)))return N.message="Error while converting handshake signature",N.level="handshake",e.emit("error",N),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;var P=4+c.length+4+N.length,D=Buffer.allocUnsafe(5+_+4+b+4+P);D[B=0]=S[r.kex.pktReply],++B,u(D,_,B),B+=4,a.copy(D,B),u(D,b,B+=_),B+=4,n.pubkey.copy(D,B),u(D,P,B+=b),B+=4,u(D,c.length,B),B+=4,D.write(c,B,c.length,"ascii"),B+=c.length,u(D,N.length,B),B+=4,N.copy(D,B),r.incoming.expectedPacket="NEWKEYS",e.debug("DEBUG: Outgoing: Writing "+r.kex.pktReply),Se(e,D,void 0,!0),n.sentNEWKEYS=!0,e.debug("DEBUG: Outgoing: Writing NEWKEYS"),Se(e,re,void 0,!0)}(e,t)}(t,e)})):this.on("KEXDH_REPLY",(function(e){fe(t,e)})).on("KEXDH_GEX_GROUP",(function(e,r){!function(e,t,r){var i=e._state,n=i.outgoing;i.kex.setDHParams(t,r),i.kex.generateKeys(),n.pubkey=i.kex.getPublicKey(),_e(e)}(t,e,r)})),this.server&&("string"==typeof e.greeting&&e.greeting.length&&("\r\n"===e.greeting.slice(-2)?this.push(e.greeting):this.push(e.greeting+"\r\n")),"string"==typeof e.banner&&e.banner.length&&("\r\n"===e.banner.slice(-2)?this.banner=e.banner:this.banner=e.banner+"\r\n")),this.debug("DEBUG: Local ident: "+a(this.config.ident)),this.push(this.config.ident+"\r\n"),this._state.incoming.expectedPacket="KEXINIT"}function fe(e,t,r){var n=e._state,s=n.incoming,o=n.outgoing,a=e.debug;if(void 0===r){s.expectedPacket="NEWKEYS",o.sentNEWKEYS=!1,a("DEBUG: Checking host key format");var c=g(t.hostkey,0,"ascii",e);if(!1===c)return!1;if(t.hostkey_format!==n.hostkeyFormat||t.hostkey_format!==c)return a("DEBUG: Host key format mismatch"),e.disconnect(T.KEY_EXCHANGE_FAILED),e.reset(),(C=new Error("Handshake failed: host key format mismatch")).level="handshake",e.emit("error",C),!1;a("DEBUG: Checking signature format");var h=g(t.sig,0,"ascii",e);if(!1===h)return!1;if(t.sig_format!==h)return a("DEBUG: Signature format mismatch"),e.disconnect(T.KEY_EXCHANGE_FAILED),e.reset(),(C=new Error("Handshake failed: signature format mismatch")).level="handshake",e.emit("error",C),!1}if(o.status===q){if(void 0===r){a("DEBUG: Verifying host fingerprint");var f=!0,l=e.emit("fingerprint",t.hostkey,(function(i){void 0===r&&(r=!!i,f||fe(e,t,r))}));if(f=!1,l&&void 0===r)return}if(void 0===r)a("DEBUG: Host accepted by default (no verification)");else{if(!0!==r)return a("DEBUG: Host denied via fingerprint verification"),e.disconnect(T.KEY_EXCHANGE_FAILED),e.reset(),(C=new Error("Handshake failed: host fingerprint verification failed")).level="handshake",e.emit("error",C),!1;a("DEBUG: Host accepted (verified)")}}if(t.pubkey=n.kex.convertPublicKey(t.pubkey),t.secret=n.kex.computeSecret(t.pubkey),t.secret instanceof Error)return t.secret.message="Error while computing DH secret ("+n.kex.type+"): "+t.secret.message,t.secret.level="handshake",e.emit("error",t.secret),e.disconnect(T.KEY_EXCHANGE_FAILED),!1;var p,d,E,m,v=i.createHash(n.kex.hash),w=Buffer.byteLength(e.config.ident),b=Buffer.byteLength(s.identRaw),S=o.kexinit.length,k=s.kexinit.length,A=t.hostkey.length,U=o.pubkey.length,B=t.pubkey.length,R=t.secret.length,N=w+b+S+k+A+U+B+R+32,P=n.kex.getDHParams();P&&(E=P.prime,m=P.generator,N+=12,N+=8,N+=p=E.length,N+=d=m.length);var D=0,O=Buffer.allocUnsafe(N);u(O,w,D),D+=4,O.write(e.config.ident,D,"utf8"),u(O,b,D+=w),D+=4,O.write(s.identRaw,D,"utf8"),u(O,S,D+=b),D+=4,o.kexinit.copy(O,D),D+=S,o.kexinit=void 0,u(O,k,D),D+=4,s.kexinit.copy(O,D),D+=k,s.kexinit=void 0,u(O,A,D),D+=4,t.hostkey.copy(O,D),D+=A,P&&(ae.slice(1).copy(O,D),u(O,p,D+=12),D+=4,E.copy(O,D),u(O,d,D+=p),D+=4,m.copy(O,D),D+=d),u(O,U,D),D+=4,o.pubkey.copy(O,D),u(O,B,D+=U),D+=4,t.pubkey.copy(O,D),u(O,R,D+=B),D+=4,t.secret.copy(O,D),o.exchangeHash=v.update(O).digest();var I=g(t.sig,t.sig._pos,e);if(!1===I||!(I=y(I,t.sig_format,e)))return!1;var C,L=_(t.hostkey,t.sig_format);return!(L instanceof Error)&&(a("DEBUG: Verifying signature"),!0!==L.verify(o.exchangeHash,I)?(a("DEBUG: Signature verification failed"),e.disconnect(T.KEY_EXCHANGE_FAILED),e.reset(),(C=new Error("Handshake failed: signature verification failed")).level="handshake",e.emit("error",C),!1):(void 0===o.sessionId&&(o.sessionId=o.exchangeHash),o.kexsecret=t.secret,a("DEBUG: Outgoing: Writing NEWKEYS"),o.status===j?Se(e,re,void 0,!0):Se(e,re),o.sentNEWKEYS=!0,void(void 0!==r&&void 0===s.expectedPacket&&ue(e))))}function ue(e){var t=e._state,r=t.outgoing,s=t.incoming;if(s.expectedPacket=void 0,r.sentNEWKEYS){var o,a,c=r.kexsecret.length,h=r.encrypt.info=w[r.encrypt.type],f=0,l=t.kex.hash,p=Buffer.allocUnsafe(4+c);if(t.authsQueue=[],u(p,c,f),f+=4,r.kexsecret.copy(p,f),r.kexsecret=void 0,h.stream)o=J;else{for(o=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"B":"A","ascii").update(r.sessionId).digest();o.lengthh.ivLen&&(o=o.slice(0,h.ivLen))}for(a=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"D":"C","ascii").update(r.sessionId).digest();a.lengthh.keyLen&&(a=a.slice(0,h.keyLen)),h.authLen>0)r.encrypt.iv=o,r.encrypt.key=a,r.encrypt.instance=!0;else{var d=U[r.encrypt.type];r.encrypt.instance=i.createCipheriv(d,a,o),r.encrypt.instance.setAutoPadding(!1)}var g=s.decrypt.info=w[s.decrypt.type];if(g.stream)o=J;else{for(o=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"A":"B","ascii").update(r.sessionId).digest();o.lengthg.ivLen&&(o=o.slice(0,g.ivLen))}for(s.decrypt.buf=Buffer.allocUnsafe(g.blockLen),a=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"C":"D","ascii").update(r.sessionId).digest();a.lengthg.keyLen&&(a=a.slice(0,g.keyLen));var E,m=U[s.decrypt.type];s.decrypt.instance=i.createDecipheriv(m,a,o),s.decrypt.instance.setAutoPadding(!1),s.decrypt.iv=o,s.decrypt.key=a,h.discardLen>0&&(E=Buffer.alloc(h.discardLen),r.encrypt.instance.update(E)),g.discardLen>0&&(E&&E.length===g.discardLen||(E=Buffer.alloc(h.discardLen)),s.decrypt.instance.update(E));var v=r.hmac.info=b[r.hmac.type],y=s.hmac.info=b[s.hmac.type];if(0===h.authLen){for(a=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"F":"E","ascii").update(r.sessionId).digest();a.lengthv.len&&(a=a.slice(0,v.len)),r.hmac.key=a}else r.hmac.key=void 0;if(0===g.authLen){for(a=i.createHash(l).update(p).update(r.exchangeHash).update(e.server?"E":"F","ascii").update(r.sessionId).digest();a.lengthy.len&&(a=a.slice(0,y.len)),s.hmac.key=a}else s.hmac.key=void 0;var _=g.authLen||s.hmac.info.actualLen;if(s.hmac.buf&&s.hmac.buf.length===_||(s.hmac.buf=Buffer.allocUnsafe(_)),r.exchangeHash=void 0,"zlib"===r.compress.type?(r.compress.instance=n.createDeflate(z),r.compress.queue=[]):"none"===r.compress.type&&(r.compress.instance=!1,r.compress.queue=null),"zlib"===s.decompress.type?s.decompress.instance=n.createInflate(z):"none"===s.decompress.type&&(s.decompress.instance=!1),e.bytesSent=e.bytesReceived=0,r.status===j){r.status=X;var S=r.rekeyQueue,k=S.length,T=0;for(r.rekeyQueue=[];TV&&(b.seqno=0),b.ignoreNext)return e.debug("DEBUG: Parser: Packet ignored"),void(b.ignoreNext=!1);var N=U[0];if(void 0===N)return!1;if(k.status!==X&&le(e,N)!==b.expectedPacket&&N<1&&N>4){e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, expected: "+b.expectedPacket+" but got: "+le(e,N)),e.disconnect(T.PROTOCOL_ERROR);var D=new Error("Received unexpected packet");return D.level="protocol",e.emit("error",D),!1}if(N===S.CHANNEL_DATA){if(!1===(a=E(U,1,e,t)))return!1;if(!1===(c=g(U,5,e,t,32768)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_DATA ("+a+")"),e.emit("CHANNEL_DATA:"+a,c)}else if(N===S.CHANNEL_EXTENDED_DATA){if(!1===(a=E(U,1,e,t)))return!1;var O=E(U,5,e,t);if(!1===O)return!1;if(!1===(c=g(U,9,e,t)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_EXTENDED_DATA ("+a+")"),e.emit("CHANNEL_EXTENDED_DATA:"+a,O,c)}else if(N===S.CHANNEL_WINDOW_ADJUST){if(!1===(a=E(U,1,e,t)))return!1;var I=E(U,5,e,t);if(!1===I)return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_WINDOW_ADJUST ("+a+", "+I+")"),e.emit("CHANNEL_WINDOW_ADJUST:"+a,I)}else if(N===S.CHANNEL_SUCCESS){if(!1===(a=E(U,1,e,t)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_SUCCESS ("+a+")"),e.emit("CHANNEL_SUCCESS:"+a)}else if(N===S.CHANNEL_FAILURE){if(!1===(a=E(U,1,e,t)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_FAILURE ("+a+")"),e.emit("CHANNEL_FAILURE:"+a)}else if(N===S.CHANNEL_EOF){if(!1===(a=E(U,1,e,t)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_EOF ("+a+")"),e.emit("CHANNEL_EOF:"+a)}else if(N===S.CHANNEL_OPEN){var C,L=g(U,1,"ascii",e,t);if(!1===L)return!1;if(!1===(p=E(U,U._pos,e,t)))return!1;if(!1===(d=E(U,U._pos+=4,e,t)))return!1;if(!1===(m=E(U,U._pos+=4,e,t)))return!1;if(e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_OPEN ("+p+", "+L+")"),"forwarded-tcpip"===L||"direct-tcpip"===L){var H=g(U,U._pos+=4,"ascii",e,t);if(!1===H)return!1;var x=E(U,U._pos,e,t);if(!1===x)return!1;if(!1===(h=g(U,U._pos+=4,"ascii",e,t)))return!1;if(!1===(l=E(U,U._pos,e,t)))return!1;C={type:L,sender:p,window:d,packetSize:m,data:{destIP:H,destPort:x,srcIP:h,srcPort:l}}}else if("forwarded-streamlocal@openssh.com"===L||"direct-streamlocal@openssh.com"===L){if(!1===(w=g(U,U._pos+=4,"utf8",e,t)))return!1;C={type:L,sender:p,window:d,packetSize:m,data:{socketPath:w}}}else if("x11"===L){if(!1===(h=g(U,U._pos+=4,"ascii",e,t)))return!1;if(!1===(l=E(U,U._pos,e,t)))return!1;C={type:L,sender:p,window:d,packetSize:m,data:{srcIP:h,srcPort:l}}}else C={type:L,sender:p,window:d,packetSize:m,data:{}};e.emit("CHANNEL_OPEN",C)}else if(N===S.CHANNEL_OPEN_CONFIRMATION){if(!1===(v=E(U,1,e,t)))return!1;if(!1===(p=E(U,5,e,t)))return!1;if(!1===(d=E(U,9,e,t)))return!1;if(!1===(m=E(U,13,e,t)))return!1;o={recipient:v,sender:p,window:d,packetSize:m},U.length>17&&(o.data=U.slice(17)),e.emit("CHANNEL_OPEN_CONFIRMATION:"+o.recipient,o)}else if(N===S.CHANNEL_OPEN_FAILURE){if(!1===(v=E(U,1,e,t)))return!1;var F=E(U,5,e,t);if(!1===F)return!1;if(!1===(_=g(U,9,"utf8",e,t)))return!1;if(!1===(i=g(U,U._pos,"utf8",e,t)))return!1;U._pos=9,o={recipient:v,reasonCode:F,reason:A[F],description:_,lang:i},e.emit("CHANNEL_OPEN_FAILURE:"+o.recipient,o)}else if(N===S.CHANNEL_CLOSE){if(!1===(a=E(U,1,e,t)))return!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_CLOSE ("+a+")"),e.emit("CHANNEL_CLOSE:"+a)}else if(N===S.IGNORE);else if(N===S.DISCONNECT){var M=E(U,1,e,t);if(!1===M)return!1;var K=T[M];if(!1===(_=g(U,5,"utf8",e,t)))return!1;U._pos4+$.length+4&&J.toString("ascii",4,4+$.length)===$&&(J=J.slice(4+$.length+4)),!1===(J=y(J,$,e,t)))return!1;ee=Buffer.allocUnsafe(4+k.sessionId.length+ie),u(ee,k.sessionId.length,0),k.sessionId.copy(ee,4),U.copy(ee,4+k.sessionId.length,0,ie)}else j="publickey -- check";q={keyAlgo:$,key:Z,signature:J,blob:ee,localHostname:te,localUsername:re}}else if("keyboard-interactive"===Y){var ne=E(U,U._pos,e,t);if(!1===ne)return!1;if(!1===(q=g(U,U._pos+4+ne,"utf8",e,t)))return!1}else"none"!==Y&&(q=U.slice(U._pos));void 0===j&&(j=Y),e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: USERAUTH_REQUEST ("+j+")"),e._state.authsQueue.push(Y),e.emit("USERAUTH_REQUEST",G,W,Y,q)}else if(N===S.USERAUTH_SUCCESS)"zlib@openssh.com"===k.compress.type&&(k.compress.instance=n.createDeflate(z),k.compress.queue=[]),"zlib@openssh.com"===b.decompress.type&&(b.decompress.instance=n.createInflate(z)),e._state.authsQueue.shift(),e.emit("USERAUTH_SUCCESS");else if(N===S.USERAUTH_FAILURE){var se=g(U,1,"ascii",e,t);if(!1===se)return!1;var oe=U[U._pos];if(void 0===oe)return!1;oe=0!==oe,se=se.split(","),e._state.authsQueue.shift(),e.emit("USERAUTH_FAILURE",se,oe)}else if(N===S.USERAUTH_BANNER){if(!1===(s=g(U,1,"utf8",e,t)))return!1;if(!1===(i=g(U,U._pos,"utf8",e,t)))return!1;e.emit("USERAUTH_BANNER",s,i)}else if(N===S.GLOBAL_REQUEST){var ae=g(U,1,"ascii",e,t);if(!1===ae)return e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: GLOBAL_REQUEST"),!1;e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: GLOBAL_REQUEST ("+ae+")");var ce,he=U[U._pos++];if(void 0===he)return!1;if(he=0!==he,"tcpip-forward"===ae||"cancel-tcpip-forward"===ae){var fe=g(U,U._pos,"ascii",e,t);if(!1===fe)return!1;var ue=E(U,U._pos,e,t);if(!1===ue)return!1;ce={bindAddr:fe,bindPort:ue}}else if("streamlocal-forward@openssh.com"===ae||"cancel-streamlocal-forward@openssh.com"===ae){if(!1===(w=g(U,U._pos,"utf8",e,t)))return!1;ce={socketPath:w}}else"no-more-sessions@openssh.com"===ae||(ce=U.slice(U._pos));e.emit("GLOBAL_REQUEST",ae,he,ce)}else if(N===S.REQUEST_SUCCESS)U.length>1?e.emit("REQUEST_SUCCESS",U.slice(1)):e.emit("REQUEST_SUCCESS");else if(N===S.REQUEST_FAILURE)e.emit("REQUEST_FAILURE");else if(N===S.UNIMPLEMENTED);else{if(N===S.KEXINIT)return function(e,t){var r,i=e._state.incoming,n=i.payload,s={algorithms:{kex:void 0,srvHostKey:void 0,cs:{encrypt:void 0,mac:void 0,compress:void 0},sc:{encrypt:void 0,mac:void 0,compress:void 0}},languages:{cs:void 0,sc:void 0}};if(!1===(r=ve(n,17,e,t)))return!1;if(s.algorithms.kex=r,!1===(r=ve(n,n._pos,e,t)))return!1;if(s.algorithms.srvHostKey=r,!1===(r=ve(n,n._pos,e,t)))return!1;if(s.algorithms.cs.encrypt=r,!1===(r=ve(n,n._pos,e,t)))return!1;if(s.algorithms.sc.encrypt=r,!1===(r=ve(n,n._pos,e,t)))return!1;if(s.algorithms.cs.mac=r,!1===(r=ve(n,n._pos,e,t)))return!1;if(s.algorithms.sc.mac=r,!1===(r=ve(n,n._pos,e,t)))return!1;if(s.algorithms.cs.compress=r,!1===(r=ve(n,n._pos,e,t)))return!1;if(s.algorithms.sc.compress=r,!1===(r=ve(n,n._pos,e,t)))return!1;if(s.languages.cs=r,!1===(r=ve(n,n._pos,e,t)))return!1;s.languages.sc=r;var o=n._posn);i+=5)r[B[t]]=f(e,i+1);return r}(_)}}else if("window-change"===l){if(!1===(i=E(h,++h._pos,e,t)))return!1;if(!1===(n=E(h,h._pos+=4,e,t)))return!1;if(!1===(s=E(h,h._pos+=4,e,t)))return!1;if(!1===(o=E(h,h._pos+=4,e,t)))return!1;r={recipient:u,request:l,wantReply:!1,cols:i,rows:n,width:s,height:o}}else if("x11-req"===l){if(void 0===(a=h[h._pos++]))return!1;a=0!==a;var w=h[h._pos++];if(void 0===w)return!1;w=0!==w;var b=g(h,h._pos,"ascii",e,t);if(!1===b)return!1;var S=g(h,h._pos,"binary",e,t);if(!1===S)return!1;var k=E(h,h._pos,e,t);if(!1===k)return!1;r={recipient:u,request:l,wantReply:a,single:w,protocol:b,cookie:S,screen:k}}else if("env"===l){if(void 0===(a=h[h._pos++]))return!1;a=0!==a;var T=g(h,h._pos,"utf8",e,t);if(!1===T)return!1;var A=g(h,h._pos,"utf8",e,t);if(!1===A)return!1;r={recipient:u,request:l,wantReply:a,key:T,val:A}}else if("shell"===l){if(void 0===(a=h[h._pos]))return!1;r={recipient:u,request:l,wantReply:a=0!==a}}else if("exec"===l){if(void 0===(a=h[h._pos++]))return!1;a=0!==a;var U=g(h,h._pos,"utf8",e,t);if(!1===U)return!1;r={recipient:u,request:l,wantReply:a,command:U}}else if("subsystem"===l){if(void 0===(a=h[h._pos++]))return!1;a=0!==a;var R=g(h,h._pos,"utf8",e,t);if(!1===R)return!1;r={recipient:u,request:l,wantReply:a,subsystem:R}}else if("signal"===l){if(!1===(c=g(h,++h._pos,"ascii",e,t)))return!1;r={recipient:u,request:l,wantReply:!1,signal:"SIG"+c}}else if("xon-xoff"===l){var N=h[++h._pos];if(void 0===N)return!1;r={recipient:u,request:l,wantReply:!1,clientControl:N=0!==N}}else if("auth-agent-req@openssh.com"===l){if(void 0===(a=h[h._pos]))return!1;r={recipient:u,request:l,wantReply:a=0!==a}}else{if(void 0===(a=h[h._pos]))return!1;r={recipient:u,request:l,wantReply:a=0!==a}}e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_REQUEST ("+u+", "+l+")"),e.emit("CHANNEL_REQUEST:"+u,r)}(e,t);if(N>=30&&N<=49)return function(e,t,r){var i=e._state,n=i.incoming,s=n.payload;if(i.outgoing.status===X||le(e,t)!==n.expectedPacket)return e.debug("DEBUG: Parser: IN_PACKETDATAAFTER, expected: "+n.expectedPacket+" but got: "+le(e,t)),e.disconnect(T.PROTOCOL_ERROR),(o=new Error("Received unexpected packet")).level="protocol",e.emit("error",o),!1;if("groupex"===i.kex.type){var o;if(e.server)return e.disconnect(T.PROTOCOL_ERROR),(o=new Error("DH group exchange not supported by server")).level="handshake",e.emit("error",o),!1;if(t===S.KEXDH_GEX_GROUP){var a=g(s,1,e,r);if(!1===a)return!1;var c=g(s,s._pos,e,r);if(!1===c)return!1;e.emit("KEXDH_GEX_GROUP",a,c)}else if(t===S.KEXDH_GEX_REPLY)return de(e,r)}else if(t===S.KEXDH_INIT){var h=g(s,1,e,r);if(!1===h)return!1;e.emit("KEXDH_INIT",h)}else if(t===S.KEXDH_REPLY)return de(e,r)}(e,N,t);if(N>=60&&N<=70)return function(e,t,r){var i,n,s,o=e._state,a=o.authsQueue[0],c=o.incoming.payload;if("password"===a){if(t===S.USERAUTH_PASSWD_CHANGEREQ){if(!1===(i=g(c,1,"utf8",e,r)))return!1;if(!1===(n=g(c,c._pos,"utf8",e,r)))return!1;e.emit("USERAUTH_PASSWD_CHANGEREQ",i,n)}}else if("keyboard-interactive"===a){if(t===S.USERAUTH_INFO_REQUEST){var h,f,u;if(!1===(h=g(c,1,"utf8",e,r)))return!1;if(!1===(f=g(c,c._pos,"utf8",e,r)))return!1;if(!1===(n=g(c,c._pos,"utf8",e,r)))return!1;if(!1===(u=E(c,c._pos,e,r)))return!1;c._pos+=4;for(var l=[],p=0;p0){var s=r.decrypt,o=s.instance;o.setAuthTag(t);var a=o.update(r.packet);return r.payload=a.slice(1,r.packet.length-a[0]),d(s.iv),s.instance=i.createDecipheriv(U[s.type],s.key,s.iv),s.instance.setAutoPadding(!1),!0}var c=i.createHmac(U[n.type],n.key);u(ee,r.seqno,0),u(ee,r.pktLen,4),ee[8]=r.padLen,c.update(ee),c.update(r.packet);var h=c.digest();return h.length>r.hmac.info.actualLen&&(h=h.slice(0,r.hmac.info.actualLen)),Ue(h,t)}function Ee(e,t){var r=e._state.incoming.decrypt.instance;return e.debug("DEBUG: Parser: Decrypting"),r.update(t)}function me(e,t,r,i){var n=e._state.incoming.expect;n.amount=r,n.type=t,n.ptr=0,i?n.buf=i:r&&(n.buf=Buffer.allocUnsafe(r))}function ve(e,t,r,i){var n=g(e,t,"ascii",r,i);return!1!==n&&(n.length?n.split(","):[])}function ye(e,t){return function(e,t){i.randomBytes(16,(function e(r,n){if(r)return i.randomBytes(16,e);t&&t(n)}))}(0,(function(r){var i=e.config.algorithms,n=i.kexBuf;if(e.remoteBugs&P.BAD_DHGEX){for(var s=!1,o=i.kex,a=o.length-1;a>=0;--a)-1!==o[a].indexOf("group-exchange")&&(s||(o=o.slice(),s=!0),o.splice(a,1));s&&(n=Buffer.from(o.join(",")))}var c=i.serverHostKeyBuf,h=21+n.length+4+c.length+2*(4+i.cipherBuf.length)+2*(4+i.hmacBuf.length)+2*(4+i.compressBuf.length)+8+1+4,f=Buffer.allocUnsafe(h),l=17;f[0]=S.KEXINIT,!1!==r&&r.copy(f,1),u(f,n.length,l),l+=4,n.copy(f,l),l+=n.length,u(f,c.length,l),l+=4,c.copy(f,l),l+=c.length,u(f,i.cipherBuf.length,l),l+=4,i.cipherBuf.copy(f,l),l+=i.cipherBuf.length,u(f,i.cipherBuf.length,l),l+=4,i.cipherBuf.copy(f,l),l+=i.cipherBuf.length,u(f,i.hmacBuf.length,l),l+=4,i.hmacBuf.copy(f,l),l+=i.hmacBuf.length,u(f,i.hmacBuf.length,l),l+=4,i.hmacBuf.copy(f,l),l+=i.hmacBuf.length,u(f,i.compressBuf.length,l),l+=4,i.compressBuf.copy(f,l),l+=i.compressBuf.length,u(f,i.compressBuf.length,l),l+=4,i.compressBuf.copy(f,l),l+=i.compressBuf.length,f.fill(0,f.length-13),e.debug("DEBUG: Outgoing: Writing KEXINIT"),e._state.incoming.expectedPacket="KEXINIT";var p=e._state.outgoing;p.kexinit=f,p.status===X&&(p.status=j),Se(e,f,t,!0)})),!0}function _e(e){var t=e._state,r=t.outgoing,i=Buffer.allocUnsafe(5+r.pubkey.length);return t.incoming.expectedPacket=t.kex.pktReply,"groupex"===t.kex.type?(i[0]=S.KEXDH_GEX_INIT,e.debug("DEBUG: Outgoing: Writing KEXDH_GEX_INIT")):(i[0]=S.KEXDH_INIT,"group"===t.kex.type?e.debug("DEBUG: Outgoing: Writing KEXDH_INIT"):e.debug("DEBUG: Outgoing: Writing KEXECDH_INIT")),u(i,r.pubkey.length,1),r.pubkey.copy(i,5),Se(e,i,void 0,!0)}function we(e,t,r){var i=e._state.outgoing.compress.instance;i.write(t),i.flush(Q,be.bind(e,r))}function be(e){if(!this._readableState.ended&&!this._writableState.ended){ke(this,this._state.outgoing.compress.instance.read(),e);var t=this._state.outgoing.compress.queue;t.shift(),t.length>0&&we(this,t[0][0],t[0][1])}}function Se(e,t,r,i){var n=e._state;if(!n)return!1;var s=n.outgoing;if(s.status===j&&!i)return"function"==typeof r?s.rekeyQueue.push([t,r]):s.rekeyQueue.push(t),!1;if(e._readableState.ended||e._writableState.ended)return!1;if(s.compress.instance){var o=s.compress.queue;return o.push([t,r]),1===o.length&&we(e,o[0][0],o[0][1]),!0}return ke(e,t,r)}function ke(e,t,r){var n,s,o,a,c,h=e._state.outgoing,f=h.encrypt,l=h.hmac;if(n=t.length+9,!1!==f.instance)if(f.info.authLen>0){for(var p=1+t.length+4;p%f.info.blockLen!=0;)++p;s=p-1-t.length,n=4+p}else{var g=f.info.blockLen;s=(n+=(g-1)*n%g)-t.length-5}else s=(n+=7*n%8)-t.length-5;o=Buffer.allocUnsafe(n),u(o,n-4,0),o[4]=s,t.copy(o,5),Te(o,5+t.length,s),!1!==l.type&&l.key&&(a=i.createHmac(U[l.type],l.key),u(h.bufSeqno,h.seqno,0),a.update(h.bufSeqno),a.update(o),(a=a.digest()).length>l.info.actualLen&&(a=a.slice(0,l.info.actualLen)));var E,m=0;if(!1!==f.instance)if(f.info.authLen>0){var v=i.createCipheriv(U[f.type],f.key,f.iv);v.setAutoPadding(!1);var y=o.slice(0,4);v.setAAD(y),e.push(y),m+=y,E=v.update(o.slice(4)),e.push(E),m+=E.length;var _=v.final();_.length&&(e.push(_),m+=_.length);var w=v.getAuthTag();c=e.push(w),m+=w.length,d(f.iv)}else E=f.instance.update(o),e.push(E),m+=E.length,c=e.push(a),m+=a.length;else c=e.push(o),m=o.length;return e.bytesSent+=m,++h.seqno>V&&(h.seqno=0),r&&r(),c}o(he,s),he.prototype.__read=s.prototype._read,he.prototype._read=function(e){return this._needContinue&&(this._needContinue=!1,this.emit("continue")),this.__read(e)},he.prototype.__push=s.prototype.push,he.prototype.push=function(e,t){var r=this.__push(e,t);return this._needContinue=!1===r,r},he.prototype._cleanup=function(e){this.reset(),this.debug("DEBUG: Parser: Malformed packet"),e&&e(new Error("Malformed packet"))},he.prototype._transform=function(e,t,r,i){var n,s,o,h,f=!1,u=!1,l=this._state,p=l.incoming,d=l.outgoing,g=p.expect,m=p.decrypt,v=p.decompress,y=e.length,_=0,w=this.debug,b=this,k=0,A=k;for(this.bytesReceived+=y;;){if(void 0!==g.type){if(k>=y)break;if(g.type===Y){_=y-k;var U=g.buf.length-g.ptr;U<=_?(e.copy(g.buf,g.ptr,k,k+U),k+=U,s=g.buf,g.buf=void 0,g.ptr=0,g.type=void 0):(e.copy(g.buf,g.ptr,k),g.ptr+=_,k+=_);continue}if(0===g.type){if(k+=p.search.push(e),void 0!==g.type)continue}else if(1===g.type){if(4+ ++g.ptr>255)return this.reset(),w("DEBUG: Parser: Identification string exceeded 255 characters"),r(new Error("Max identification string size exceeded"));if(10!==e[k]){++k===y&&A-1?s.substring(N+1):void 0};if(p.greeting=void 0,"1.99"!==P.versions.protocol&&"2.0"!==P.versions.protocol)return this.reset(),w("DEBUG: Parser: protocol version not supported: "+P.versions.protocol),r(new Error("Protocol version not supported"));if(this.emit("header",P),p.status===L)return;var I=P.identRaw,C=P.versions.software;this.debug("DEBUG: Remote ident: "+a(I));for(var q,z=0;z0)||(s=Ee(this,s)),n=m.info.blockLen):(u=!1,n=8),!1===(h=E(s,0,this,r)))return;var $,ee=p.hmac.info,te=h+4+($=ee?ee.actualLen:0),re=this.maxPacketSize;if(v.instance&&(re+=5*(this.maxPacketSize/16384+1)+6),h>re||te<16+$||(h+(u?0:4))%n!=0)return this.disconnect(T.PROTOCOL_ERROR),w("DEBUG: Parser: Bad packet length ("+te+")"),r(new Error("Bad packet length"));p.pktLen=h;var ie=p.pktLen+4-n;if(u?(m.instance.setAAD(s.slice(0,4)),w("DEBUG: Parser: pktLen:"+p.pktLen+",remainLen:"+ie)):(p.padLen=s[4],w("DEBUG: Parser: pktLen:"+p.pktLen+",padLen:"+p.padLen+",remainLen:"+ie)),ie>0)p.pktExtra=u?s.slice(4):s.slice(5),me(this,Y,ie),p.status=K;else{if(!(ie<0)){f=!0,p.status=K;continue}p.status=F}}else if(p.status===K){w("DEBUG: Parser: IN_PACKETDATA"),m.instance?(u=m.info.authLen>0,f?f=!1:u||(s=Ee(this,s))):(u=!1,f=!1);var ne=p.pktLen-p.padLen-1;if(p.pktExtra?(o=Buffer.allocUnsafe(p.pktExtra.length+s.length),p.pktExtra.copy(o),s.copy(o,p.pktExtra.length),p.payload=o.slice(0,ne)):(o=u?s.slice(4):s.slice(5),p.payload=s.slice(5,5+ne)),void 0!==p.hmac.info){var se=m.info.authLen||p.hmac.info.actualLen;w("DEBUG: Parser: HMAC size:"+se),me(this,Y,se,p.hmac.buf),p.status=G,p.packet=o}else p.status=W;p.pktExtra=void 0,o=void 0}else if(p.status===G){if(w("DEBUG: Parser: IN_PACKETDATAVERIFY"),!ge(this,s))return this.reset(),w("DEBUG: Parser: IN_PACKETDATAVERIFY (Invalid HMAC)"),r(new Error("Invalid HMAC"));w("DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)"),p.status=W,p.packet=void 0}else if(p.status===W){if(v.instance){if(!i){w("DEBUG: Parser: Decompressing"),v.instance.write(p.payload);var oe=[],ae=0;return void v.instance.on("readable",(function(){for(var e;e=this.read();)oe.push(e),ae+=e.length})).flush(Q,(function(){var i;v.instance.removeAllListeners("readable"),1===oe.length?p.payload=oe[0]:p.payload=Buffer.concat(oe,ae),oe=null,i=k===y?J:e.slice(k),b._transform(i,t,r,!0)}))}i=!1}this.emit("packet");var he=p.payload[0];if(w!==ce){var fe="DEBUG: Parser: IN_PACKETDATAAFTER, packet: ",ue=l.authsQueue[0],le=null;if(d.status!==j||he<=4||he>=20&&he<=49||(fe+="(enqueued) "),he===S.KEXDH_INIT)switch(l.kex.type){case"group":le="KEXDH_INIT";break;case"groupex":le="KEXDH_GEX_REQUEST";break;default:le="KEXECDH_INIT"}else if(he===S.KEXDH_REPLY)switch(l.kex.type){case"group":le="KEXDH_REPLY";break;case"groupex":le="KEXDH_GEX_GROUP";break;default:le="KEXECDH_REPLY"}else he===S.KEXDH_GEX_GROUP?le="KEXDH_GEX_GROUP":he===S.KEXDH_GEX_REPLY?le="KEXDH_GEX_REPLY":60===he?le="password"===ue?"USERAUTH_PASSWD_CHANGEREQ":"keyboard-interactive"===ue?"USERAUTH_INFO_REQUEST":"publickey"===ue?"USERAUTH_PK_OK":"UNKNOWN PACKET 60":61===he&&(le="keyboard-interactive"===ue?"USERAUTH_INFO_RESPONSE":"UNKNOWN PACKET 61");null===le&&(le=S[he]),he!==S.CHANNEL_OPEN&&he!==S.CHANNEL_REQUEST&&he!==S.CHANNEL_SUCCESS&&he!==S.CHANNEL_FAILURE&&he!==S.CHANNEL_EOF&&he!==S.CHANNEL_CLOSE&&he!==S.CHANNEL_DATA&&he!==S.CHANNEL_EXTENDED_DATA&&he!==S.CHANNEL_WINDOW_ADJUST&&he!==S.DISCONNECT&&he!==S.USERAUTH_REQUEST&&he!==S.GLOBAL_REQUEST&&w(fe+le)}if(d.status===X||he<=4||he>=20&&he<=49){if(!1===pe(this,r))return;if(p.status===L)return}else if(d.status===j){if(50===p.rekeyQueue.length)return w("DEBUG: Parser: Max incoming re-key queue length reached"),this.disconnect(T.PROTOCOL_ERROR),r(new Error("Incoming re-key queue length limit reached"));var de=p.seqno;++p.seqno>V&&(p.seqno=0),p.rekeyQueue.push([de,p.payload])}p.status=F,p.payload=void 0}}void 0!==s&&(s=void 0)}r()},he.prototype.reset=function(e){if(this._state){var t=this._state;t.incoming.status=L,t.outgoing.status=q}else this._state={authsQueue:[],hostkeyFormat:void 0,kex:void 0,incoming:{status:L,expectedPacket:void 0,search:void 0,greeting:void 0,seqno:0,pktLen:void 0,padLen:void 0,pktExtra:void 0,payload:void 0,packet:void 0,kexinit:void 0,identRaw:void 0,rekeyQueue:[],ignoreNext:!1,expect:{amount:void 0,type:void 0,ptr:0,buf:void 0},decrypt:{instance:!1,info:void 0,iv:void 0,key:void 0,buf:void 0,type:void 0},hmac:{info:void 0,key:void 0,buf:void 0,type:!1},decompress:{instance:!1,type:!1}},outgoing:{status:q,seqno:0,bufSeqno:Buffer.allocUnsafe(4),rekeyQueue:[],kexinit:void 0,kexsecret:void 0,pubkey:void 0,exchangeHash:void 0,sessionId:void 0,sentNEWKEYS:!1,encrypt:{instance:!1,info:void 0,iv:void 0,key:void 0,type:void 0},hmac:{info:void 0,key:void 0,buf:void 0,type:!1},compress:{instance:!1,type:!1,queue:null}}};e||this.readable&&this.push(null)},he.prototype.disconnect=function(e){var t=Buffer.alloc(13);return t[0]=S.DISCONNECT,void 0===T[e]&&(e=T.BY_APPLICATION),u(t,e,1),this.debug("DEBUG: Outgoing: Writing DISCONNECT ("+T[e]+")"),Se(this,t),this.reset(),!1},he.prototype.ping=function(){return this.debug("DEBUG: Outgoing: Writing ping (GLOBAL_REQUEST: keepalive@openssh.com)"),Se(this,te)},he.prototype.rekey=function(){var e=this._state.outgoing.status;if(e===j)throw new Error("A re-key is already in progress");if(e!==X)throw new Error("Cannot re-key yet");return this.debug("DEBUG: Outgoing: Starting re-key"),ye(this)},he.prototype.requestSuccess=function(e){var t;return Buffer.isBuffer(e)?((t=Buffer.allocUnsafe(1+e.length))[0]=S.REQUEST_SUCCESS,e.copy(t,1)):t=ne,this.debug("DEBUG: Outgoing: Writing REQUEST_SUCCESS"),Se(this,t)},he.prototype.requestFailure=function(){return this.debug("DEBUG: Outgoing: Writing REQUEST_FAILURE"),Se(this,se)},he.prototype.channelSuccess=function(e){var t=Buffer.allocUnsafe(5);return t[0]=S.CHANNEL_SUCCESS,u(t,e,1),this.debug("DEBUG: Outgoing: Writing CHANNEL_SUCCESS ("+e+")"),Se(this,t)},he.prototype.channelFailure=function(e){var t=Buffer.allocUnsafe(5);return t[0]=S.CHANNEL_FAILURE,u(t,e,1),this.debug("DEBUG: Outgoing: Writing CHANNEL_FAILURE ("+e+")"),Se(this,t)},he.prototype.channelEOF=function(e){var t=Buffer.allocUnsafe(5);return t[0]=S.CHANNEL_EOF,u(t,e,1),this.debug("DEBUG: Outgoing: Writing CHANNEL_EOF ("+e+")"),Se(this,t)},he.prototype.channelClose=function(e){var t=Buffer.allocUnsafe(5);return t[0]=S.CHANNEL_CLOSE,u(t,e,1),this.debug("DEBUG: Outgoing: Writing CHANNEL_CLOSE ("+e+")"),Se(this,t)},he.prototype.channelWindowAdjust=function(e,t){var r=Buffer.allocUnsafe(9);return r[0]=S.CHANNEL_WINDOW_ADJUST,u(r,e,1),u(r,t,5),this.debug("DEBUG: Outgoing: Writing CHANNEL_WINDOW_ADJUST ("+e+", "+t+")"),Se(this,r)},he.prototype.channelData=function(e,t){var r=Buffer.isBuffer(t),i=r?t.length:Buffer.byteLength(t),n=Buffer.allocUnsafe(9+i);return n[0]=S.CHANNEL_DATA,u(n,e,1),u(n,i,5),r?t.copy(n,9):n.write(t,9,i,"utf8"),this.debug("DEBUG: Outgoing: Writing CHANNEL_DATA ("+e+")"),Se(this,n)},he.prototype.channelExtData=function(e,t,r){var i=Buffer.isBuffer(t),n=i?t.length:Buffer.byteLength(t),s=Buffer.allocUnsafe(13+n);return s[0]=S.CHANNEL_EXTENDED_DATA,u(s,e,1),u(s,r,5),u(s,n,9),i?t.copy(s,13):s.write(t,13,n,"utf8"),this.debug("DEBUG: Outgoing: Writing CHANNEL_EXTENDED_DATA ("+e+")"),Se(this,s)},he.prototype.channelOpenConfirm=function(e,t,r,i){var n=Buffer.allocUnsafe(17);return n[0]=S.CHANNEL_OPEN_CONFIRMATION,u(n,e,1),u(n,t,5),u(n,r,9),u(n,i,13),this.debug("DEBUG: Outgoing: Writing CHANNEL_OPEN_CONFIRMATION (r:"+e+", l:"+t+")"),Se(this,n)},he.prototype.channelOpenFail=function(e,t,r,i){"string"!=typeof r&&(r=""),"string"!=typeof i&&(i="");var n=Buffer.byteLength(r),s=Buffer.byteLength(i),o=9,a=Buffer.allocUnsafe(13+n+4+s);return a[0]=S.CHANNEL_OPEN_FAILURE,u(a,e,1),u(a,t,5),u(a,n,o),o+=4,n&&(a.write(r,o,n,"utf8"),o+=n),u(a,s,o),s&&a.write(i,o+=4,s,"ascii"),this.debug("DEBUG: Outgoing: Writing CHANNEL_OPEN_FAILURE ("+e+")"),Se(this,a)},he.prototype.service=function(e){if(this.server)throw new Error("Client-only method called in server mode");var t=Buffer.byteLength(e),r=Buffer.allocUnsafe(5+t);return r[0]=S.SERVICE_REQUEST,u(r,t,1),r.write(e,5,t,"ascii"),this.debug("DEBUG: Outgoing: Writing SERVICE_REQUEST ("+e+")"),Se(this,r)},he.prototype.tcpipForward=function(e,t,r){if(this.server)throw new Error("Client-only method called in server mode");var i=Buffer.byteLength(e),n=Buffer.allocUnsafe(23+i+4);return n[0]=S.GLOBAL_REQUEST,u(n,13,1),n.write("tcpip-forward",5,13,"ascii"),n[18]=void 0===r||!0===r?1:0,u(n,i,19),n.write(e,23,i,"ascii"),u(n,t,23+i),this.debug("DEBUG: Outgoing: Writing GLOBAL_REQUEST (tcpip-forward)"),Se(this,n)},he.prototype.cancelTcpipForward=function(e,t,r){if(this.server)throw new Error("Client-only method called in server mode");var i=Buffer.byteLength(e),n=Buffer.allocUnsafe(30+i+4);return n[0]=S.GLOBAL_REQUEST,u(n,20,1),n.write("cancel-tcpip-forward",5,20,"ascii"),n[25]=void 0===r||!0===r?1:0,u(n,i,26),n.write(e,30,i,"ascii"),u(n,t,30+i),this.debug("DEBUG: Outgoing: Writing GLOBAL_REQUEST (cancel-tcpip-forward)"),Se(this,n)},he.prototype.openssh_streamLocalForward=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");var r=Buffer.byteLength(e),i=Buffer.allocUnsafe(41+r);return i[0]=S.GLOBAL_REQUEST,u(i,31,1),i.write("streamlocal-forward@openssh.com",5,31,"ascii"),i[36]=void 0===t||!0===t?1:0,u(i,r,37),i.write(e,41,r,"utf8"),this.debug("DEBUG: Outgoing: Writing GLOBAL_REQUEST (streamlocal-forward@openssh.com)"),Se(this,i)},he.prototype.openssh_cancelStreamLocalForward=function(e,t){if(this.server)throw new Error("Client-only method called in server mode");var r=Buffer.byteLength(e),i=Buffer.allocUnsafe(48+r);return i[0]=S.GLOBAL_REQUEST,u(i,38,1),i.write("cancel-streamlocal-forward@openssh.com",5,38,"ascii"),i[43]=void 0===t||!0===t?1:0,u(i,r,44),i.write(e,48,r,"utf8"),this.debug("DEBUG: Outgoing: Writing GLOBAL_REQUEST (cancel-streamlocal-forward@openssh.com)"),Se(this,i)},he.prototype.directTcpip=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");var n=Buffer.byteLength(i.srcIP),s=Buffer.byteLength(i.dstIP),o=29,a=Buffer.allocUnsafe(33+n+4+4+s+4);return a[0]=S.CHANNEL_OPEN,u(a,12,1),a.write("direct-tcpip",5,12,"ascii"),u(a,e,17),u(a,t,21),u(a,r,25),u(a,s,o),a.write(i.dstIP,o+=4,s,"ascii"),u(a,i.dstPort,o+=s),u(a,n,o+=4),a.write(i.srcIP,o+=4,n,"ascii"),u(a,i.srcPort,o+=n),this.debug("DEBUG: Outgoing: Writing CHANNEL_OPEN ("+e+", direct-tcpip)"),Se(this,a)},he.prototype.openssh_directStreamLocal=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");var n=Buffer.byteLength(i.socketPath),s=47,o=Buffer.allocUnsafe(51+n+4+4);return o[0]=S.CHANNEL_OPEN,u(o,30,1),o.write("direct-streamlocal@openssh.com",5,30,"ascii"),u(o,e,35),u(o,t,39),u(o,r,43),u(o,n,s),o.write(i.socketPath,s+=4,n,"utf8"),o.fill(0,o.length-8),this.debug("DEBUG: Outgoing: Writing CHANNEL_OPEN ("+e+", direct-streamlocal@openssh.com)"),Se(this,o)},he.prototype.openssh_noMoreSessions=function(e){if(this.server)throw new Error("Client-only method called in server mode");var t=Buffer.allocUnsafe(34);return t[0]=S.GLOBAL_REQUEST,u(t,28,1),t.write("no-more-sessions@openssh.com",5,28,"ascii"),t[33]=void 0===e||!0===e?1:0,this.debug("DEBUG: Outgoing: Writing GLOBAL_REQUEST (no-more-sessions@openssh.com)"),Se(this,t)},he.prototype.session=function(e,t,r){if(this.server)throw new Error("Client-only method called in server mode");var i=Buffer.allocUnsafe(24);return i[0]=S.CHANNEL_OPEN,u(i,7,1),i.write("session",5,7,"ascii"),u(i,e,12),u(i,t,16),u(i,r,20),this.debug("DEBUG: Outgoing: Writing CHANNEL_OPEN ("+e+", session)"),Se(this,i)},he.prototype.windowChange=function(e,t,r,i,n){if(this.server)throw new Error("Client-only method called in server mode");var s=Buffer.allocUnsafe(39);return s[0]=S.CHANNEL_REQUEST,u(s,e,1),u(s,13,5),s.write("window-change",9,13,"ascii"),s[22]=0,u(s,r,23),u(s,t,27),u(s,n,31),u(s,i,35),this.debug("DEBUG: Outgoing: Writing CHANNEL_REQUEST ("+e+", window-change)"),Se(this,s)},he.prototype.pty=function(e,t,r,i,n,s,o,a){if(this.server)throw new Error("Client-only method called in server mode");s&&s.length||(s="vt100"),!o||Buffer.isBuffer(o)||Array.isArray(o)||"object"!=typeof o||(o=function(e){for(var t,r,i,n=/^\d+$/,s=Object.keys(e),o=0,a=[],c=0,h=s.length;c>>24&255,a[o++]=i>>>16&255,a[o++]=i>>>8&255,a[o++]=255&i);return a[o]=B.TTY_OP_END,a}(o)),o&&o.length||(o=oe);var c=s.length,h=o.length,f=21,l=Buffer.allocUnsafe(21+c+4+4+4+4+4+h);if(l[0]=S.CHANNEL_REQUEST,u(l,e,1),u(l,7,5),l.write("pty-req",9,7,"ascii"),l[16]=void 0===a||!0===a?1:0,u(l,c,17),l.write(s,21,c,"utf8"),u(l,r,f+=c),u(l,t,f+=4),u(l,n,f+=4),u(l,i,f+=4),u(l,h,f+=4),f+=4,Array.isArray(o))for(var p=0;p{var i=r(8304).Ber,n=r(8128).readUInt32BE,s=r(8128).writeUInt32BE;function o(e,t,r,i,s,o){r&&!Buffer.isBuffer(r)&&"string"!=typeof r&&("number"==typeof s&&(o=s),s=i,i=r,r=void 0),t||(t=0);var a,c,h=e.length,f=h-t;return t<0||t>=h||f<4||(a=n(e,t))>(o||Infinity)||f<4+a?(i&&i._cleanup(s),!1):(c=(t+=4)+a,e._pos=c,r?Buffer.isBuffer(r)?(e.copy(r,0,t,c),r):e.toString(r,t,c):e.slice(t,c))}e.exports={iv_inc:function(e){var t=12,r=0;do{if(255!==(r=e[--t]))return void(e[t]=++r);e[t]=0}while(t>4)},readInt:function(e,t,r,i){var s=e.length;return t<0||t>=s||s-t<4?(r&&r._cleanup(i),!1):n(e,t)},readString:o,parseKey:r(4368).parseKey,sigSSHToASN1:function(e,t,r,n){var s;switch(t){case"ssh-dss":if(e.length>40)return e;(s=new i.Writer).startSequence();var a=e.slice(0,20),c=e.slice(20);if(128&a[0]){var h=Buffer.allocUnsafe(21);h[0]=0,a.copy(h,1),a=h}else 0!==a[0]||128&a[1]||(a=a.slice(1));if(128&c[0]){var f=Buffer.allocUnsafe(21);f[0]=0,c.copy(f,1),c=f}else 0!==c[0]||128&c[1]||(c=c.slice(1));return s.writeBuffer(a,i.Integer),s.writeBuffer(c,i.Integer),s.endSequence(),s.buffer;case"ecdsa-sha2-nistp256":case"ecdsa-sha2-nistp384":case"ecdsa-sha2-nistp521":return!1!==(a=o(e,0,r,n))&&!1!==(c=o(e,e._pos,r,n))&&((s=new i.Writer).startSequence(),s.writeBuffer(a,i.Integer),s.writeBuffer(c,i.Integer),s.endSequence(),s.buffer);default:return e}},DSASigBERToBare:function(e){if(e.length<=40)return e;var t=new i.Reader(e);t.readSequence();var r=t.readString(i.Integer,!0),n=t.readString(i.Integer,!0),s=0,o=0;if(r.length<20){var a=Buffer.allocUnsafe(20);r.copy(a,1),(r=a)[0]=0}if(n.length<20){var c=Buffer.allocUnsafe(20);n.copy(c,1),(n=c)[0]=0}r.length>20&&0===r[0]&&(s=1),n.length>20&&0===n[0]&&(o=1);var h=Buffer.allocUnsafe(r.length-s+(n.length-o));return r.copy(h,0,s),n.copy(h,r.length-s,o),h},ECDSASigASN1ToSSH:function(e){if(0===e[0])return e;var t=new i.Reader(e);t.readSequence();var r=t.readString(i.Integer,!0),n=t.readString(i.Integer,!0);if(null===r||null===n)return!1;var o=Buffer.allocUnsafe(4+r.length+4+n.length);return s(o,r.length,0),r.copy(o,4),s(o,n.length,4+r.length),n.copy(o,8+r.length),o}}},5248:(e,t,r)=>{var i=r(970).inherits,n=r(8378).Duplex,s=r(8378).Readable,o=r(8378).Writable,a=r(6728).constants.CHANNEL_EXTENDED_DATATYPE.STDERR,c=2097152,h=c/2,f=["CHANNEL_EOF","CHANNEL_CLOSE","CHANNEL_DATA","CHANNEL_EXTENDED_DATA","CHANNEL_WINDOW_ADJUST","CHANNEL_SUCCESS","CHANNEL_FAILURE","CHANNEL_REQUEST"],u=f.length;function l(e,t,r){var i={highWaterMark:c,allowHalfOpen:!r||r&&!1!==r.allowHalfOpen};this.allowHalfOpen=i.allowHalfOpen,n.call(this,i);var o=this,a=r&&r.server;this.server=a,this.type=e.type,this.subtype=void 0;var l,g,E,m,v,y=this.incoming=e.incoming,_=y.id,w=this.outgoing=e.outgoing,b=this._callbacks=[];this._client=t,this._hasX11=!1;var S=t._channels,k=t._sshstream;function T(){o._waitClientDrain&&(o._waitClientDrain=!1,o._waitWindow||(o._chunk?o._write(o._chunk,null,o._chunkcb):o._chunkcb?o._chunkcb():o._chunkErr?o.stderr._write(o._chunkErr,null,o._chunkcbErr):o._chunkcbErr&&o._chunkcbErr()))}function A(){o.eof(),(a||!a&&!o.allowHalfOpen)&&o.close(),o.writable=!1}function U(){o.readable=!1}t._sock.on("drain",T),k.once("CHANNEL_EOF:"+_,(function(){"open"===y.state&&(y.state="eof",o.readable&&o.push(null),!a&&o.stderr.readable&&o.stderr.push(null))})).once("CHANNEL_CLOSE:"+_,(function(){if("closed"!==y.state){y.state="closed",o.readable&&o.push(null),a&&o.stderr.writable?o.stderr.end():!a&&o.stderr.readable&&o.stderr.push(null),"open"!==w.state&&"eof"!==w.state||o.close(),"closing"===w.state&&(w.state="closed"),delete S[_];var e=o._writableState;t._sock.removeListener("drain",T),e.ending||e.finished||o.end(),o._callbacks=[];for(var r=0;r0&&f>0;)if((s=u-l)>f&&(s=f),s>c&&(s=c),i=o.channelData(h,e.slice(l,l+s)),l+=s,f-=s,!i){this._waitClientDrain=!0,this._chunk=void 0,this._chunkcb=r;break}if(a.window=f,u-l>0)return 0===f&&(this._waitWindow=!0),l>0?(n=Buffer.allocUnsafe(u-l),e.copy(n,0,l),this._chunk=n):this._chunk=e,void(this._chunkcb=r);this._waitClientDrain||r()}},l.prototype.destroy=function(){this.end()},l.prototype.setWindow=function(e,t,r,i){if(this.server)throw new Error("Client-only method called in server mode");return"session"!==this.type||"shell"!==this.subtype&&"exec"!==this.subtype||!this.writable||"open"!==this.outgoing.state||this._client._sshstream.windowChange(this.outgoing.id,e,t,r,i)},l.prototype.signal=function(e){if(this.server)throw new Error("Client-only method called in server mode");return"session"!==this.type||!this.writable||"open"!==this.outgoing.state||this._client._sshstream.signal(this.outgoing.id,e)},l.prototype.exit=function(e,t,r){if(!this.server)throw new Error("Server-only method called in client mode");return"session"!==this.type||!this.writable||"open"!==this.outgoing.state||("number"==typeof e?this._client._sshstream.exitStatus(this.outgoing.id,e):this._client._sshstream.exitSignal(this.outgoing.id,e,t,r))},l.MAX_WINDOW=c,l.PACKET_SIZE=32768,i(d,o),d.prototype._write=function(e,t,r){var i,n,s,o=this._channel,c=o._client._sshstream,h=o.outgoing,f=h.packetSize,u=h.id,l=h.window,p=e.length,d=0;if("open"===o.outgoing.state){for(;p-d>0&&l>0;)if((s=p-d)>l&&(s=l),s>f&&(s=f),i=c.channelExtData(u,e.slice(d,d+s),a),d+=s,l-=s,!i){o._waitClientDrain=!0,o._chunkErr=void 0,o._chunkcbErr=r;break}if(h.window=l,p-d>0)return 0===l&&(o._waitWindow=!0),d>0?(n=Buffer.allocUnsafe(p-d),e.copy(n,0,d),o._chunkErr=n):o._chunkErr=e,void(o._chunkcbErr=r);o._waitClientDrain||r()}},e.exports=l},4784:(e,t,r)=>{var i=r(970).inherits,n=r(467).EventEmitter;function s(e){var t=this;n.call(this),this._stream=e,e.on("error",(function(e){t.emit("error",e)})).on("end",(function(){t.emit("end")})).on("close",(function(){t.emit("close")})).on("continue",(function(){t.emit("continue")}))}i(s,n),s.prototype.end=function(){return this._stream.end()},s.prototype.createReadStream=function(e,t){return this._stream.createReadStream(e,t)},s.prototype.createWriteStream=function(e,t){return this._stream.createWriteStream(e,t)},s.prototype.open=function(e,t,r,i){return this._stream.open(e,t,r,i)},s.prototype.close=function(e,t){return this._stream.close(e,t)},s.prototype.read=function(e,t,r,i,n,s){return this._stream.readData(e,t,r,i,n,s)},s.prototype.write=function(e,t,r,i,n,s){return this._stream.writeData(e,t,r,i,n,s)},s.prototype.fastGet=function(e,t,r,i){return this._stream.fastGet(e,t,r,i)},s.prototype.fastPut=function(e,t,r,i){return this._stream.fastPut(e,t,r,i)},s.prototype.readFile=function(e,t,r){return this._stream.readFile(e,t,r)},s.prototype.writeFile=function(e,t,r,i){return this._stream.writeFile(e,t,r,i)},s.prototype.appendFile=function(e,t,r,i){return this._stream.appendFile(e,t,r,i)},s.prototype.exists=function(e,t){return this._stream.exists(e,t)},s.prototype.unlink=function(e,t){return this._stream.unlink(e,t)},s.prototype.rename=function(e,t,r){return this._stream.rename(e,t,r)},s.prototype.mkdir=function(e,t,r){return this._stream.mkdir(e,t,r)},s.prototype.rmdir=function(e,t){return this._stream.rmdir(e,t)},s.prototype.readdir=function(e,t,r){return this._stream.readdir(e,t,r)},s.prototype.fstat=function(e,t){return this._stream.fstat(e,t)},s.prototype.stat=function(e,t){return this._stream.stat(e,t)},s.prototype.lstat=function(e,t){return this._stream.lstat(e,t)},s.prototype.opendir=function(e,t){return this._stream.opendir(e,t)},s.prototype.setstat=function(e,t,r){return this._stream.setstat(e,t,r)},s.prototype.fsetstat=function(e,t,r){return this._stream.fsetstat(e,t,r)},s.prototype.futimes=function(e,t,r,i){return this._stream.futimes(e,t,r,i)},s.prototype.utimes=function(e,t,r,i){return this._stream.utimes(e,t,r,i)},s.prototype.fchown=function(e,t,r,i){return this._stream.fchown(e,t,r,i)},s.prototype.chown=function(e,t,r,i){return this._stream.chown(e,t,r,i)},s.prototype.fchmod=function(e,t,r){return this._stream.fchmod(e,t,r)},s.prototype.chmod=function(e,t,r){return this._stream.chmod(e,t,r)},s.prototype.readlink=function(e,t){return this._stream.readlink(e,t)},s.prototype.symlink=function(e,t,r){return this._stream.symlink(e,t,r)},s.prototype.realpath=function(e,t){return this._stream.realpath(e,t)},s.prototype.ext_openssh_rename=function(e,t,r){return this._stream.ext_openssh_rename(e,t,r)},s.prototype.ext_openssh_statvfs=function(e,t){return this._stream.ext_openssh_statvfs(e,t)},s.prototype.ext_openssh_fstatvfs=function(e,t){return this._stream.ext_openssh_fstatvfs(e,t)},s.prototype.ext_openssh_hardlink=function(e,t,r){return this._stream.ext_openssh_hardlink(e,t,r)},s.prototype.ext_openssh_fsync=function(e,t){return this._stream.ext_openssh_fsync(e,t)},e.exports=s},1728:(e,t,r)=>{var i=r(5256).Socket,n=r(467).EventEmitter,s=r(970).inherits,o=r(7072),a=r(2058),c=r(1984),h=r(9224).readUInt32BE,f=r(9224).writeUInt32BE,u=r(9224).writeUInt32LE,l=/^\!(\d+) s ([A-Z0-9]{8}\-[A-Z0-9]{8}\-[A-Z0-9]{8}\-[A-Z0-9]{8})/,p=/^[/\\][/\\]\.[/\\]pipe[/\\].+/;if(e.exports=function(e,t,r,n,s){var o,d,g,m,v,y,_,w,b=0,S=Buffer.isBuffer(t),k=0,T=0,A=0,U=0,B=!1;function R(){var e;if(S){var r=9;e=Buffer.allocUnsafe(9+b+4+m+4),f(e,e.length-4,0),e[4]=13,f(e,b,5),t.copy(e,r),f(e,m,r+=b),n.copy(e,r+=4),f(e,0,r+=m),o.write(e)}else o.write(Buffer.from([0,0,0,1,11]))}function N(e){for(var r=0,i=e.length;r0?B=U:(t=void 0,B=!1),U=0)):++k===B&&(B=!1,k=0,t=void 0);else b<<=8,b+=e[r],4==++k&&(t=Buffer.allocUnsafe(b),k=0);else if(5===v)return d=S?new Error("Agent unable to sign data"):new Error("Unable to retrieve list of keys from agent"),o.removeAllListeners("data"),o.destroy()}function P(e){d=e}function D(){d?s(d):S&&!g||!S&&!y?s(new Error("Unexpected disconnection from agent")):S&&g?s(void 0,g):!S&&y&&s(void 0,y)}if("function"==typeof t&&"function"==typeof r?(_=t,w=r):S?(b=t.length,m=n.length):(s=t,t=void 0),"win32"!==process.platform||p.test(e))o=new i;else{if("pageant"!==e){var O=!1;return void a.readFile(e,(function t(r,n){if(r)return O?s(new Error("Invalid cygwin unix socket path")):void c.exec('cygpath -w "'+e+'"',(function(r,i,n){if(r||0===i.length)return s(new Error("Invalid cygwin unix socket path"));O=!0,e=i.toString().replace(/[\r\n]/g,""),a.readFile(e,t)}));var f;if(f=l.exec(n.toString("ascii"))){var p,d,g,E,m,v,y=0,_=!1,w=[],b=Buffer.allocUnsafe(12);for(b.fill(0),p=parseInt(f[1],10),d=f[2].replace(/\-/g,""),g=Buffer.allocUnsafe(16),m=0,v=0;v<32;++m,v+=2)g[m]=parseInt(d.substring(v,v+2),16);for(m=0;m<16;m+=4)u(g,h(g,m),m);function S(){y=0,E="secret",o.write(g)}function k(e){y+=e.length,"secret"===E?16===y&&(y=0,E="creds",o.write(b)):"creds"===E&&(_||w.push(e),12===y&&(o.removeListener("connect",S),o.removeListener("data",k),o.removeListener("close",T),_?(I(),o.emit("connect")):(_=!0,b=Buffer.concat(w),u(b,process.pid,0),o.destroy(),A())))}function T(){s(new Error("Problem negotiating cygwin unix socket security"))}function A(){(o=new i).once("connect",S),o.on("data",k),o.once("close",T),o.connect(p)}A()}else s(new Error("Malformed cygwin unix socket file"))}))}o=new E}function I(){var e;_||w?(o.once("connect",(function(){e=_();var t=!1;function r(){t||(o.destroy(),t=!0)}e.once("end",r).once("close",r).on("data",(function(e){o.write(e)})),o.on("data",(function(t){e.write(t)}))})),o.once("close",(function(){e||w()}))):(o.once("connect",R),o.on("data",N),o.once("error",P),o.once("close",D))}I(),o.connect(e)},"win32"===process.platform){var d={},g=o.resolve(__dirname,"..","util/pagent.exe");function E(){this.proc=void 0,this.buffer=null}d[10]=new Error("Invalid pagent.exe arguments"),d[11]=new Error("Pageant is not running"),d[12]=new Error("pagent.exe could not create an mmap"),d[13]=new Error("pagent.exe could not set mode for stdin"),d[14]=new Error("pagent.exe could not set mode for stdout"),d[15]=new Error("pagent.exe did not get expected input payload"),s(E,n),E.prototype.write=function(e){if(null===this.buffer?this.buffer=e:this.buffer=Buffer.concat([this.buffer,e],this.buffer.length+e.length),!(this.buffer.length<4)){var t=h(this.buffer,0);if(!(this.buffer.length-44+t?this.buffer=this.buffer.slice(4+t):this.buffer=null;var r,i=this,n=!1;(r=this.proc=c.spawn(g,[e.length])).stdout.on("data",(function(e){i.emit("data",e)})),r.once("error",(function(e){n||(n=!0,i.emit("error",e))})),r.once("close",(function(e){i.proc=void 0,d[e]&&!n&&(n=!0,i.emit("error",d[e])),i.emit("close",n)})),r.stdin.end(e)}}},E.prototype.end=E.prototype.destroy=function(){this.buffer=null,this.proc&&(this.proc.kill(),this.proc=void 0)},E.prototype.connect=function(){this.emit("connect")}}},9224:e=>{e.exports={readUInt32BE:function(e,t){return 16777216*e[t++]+65536*e[t++]+256*e[t++]+e[t]},writeUInt32BE:function(e,t,r){return e[r++]=t>>>24,e[r++]=t>>>16,e[r++]=t>>>8,e[r++]=t,r},writeUInt32LE:function(e,t,r){return e[r++]=t,e[r++]=t>>>8,e[r++]=t>>>16,e[r++]=t>>>24,r}}},461:(e,t,r)=>{var i=r(7968),n=r(5256).Socket,s=r(9880).lookup,o=r(467).EventEmitter,a=r(970).inherits,c=i.getHashes(),h=r(6728),f=h.SSH2Stream,u=h.SFTPStream,l=h.constants,p=l.BUGS,d=l.ALGORITHMS,g=l.EDDSA_SUPPORTED,E=h.utils.parseKey,m=r(2492),v=r(5248),y=r(1728),_=r(4784),w=r(9224).readUInt32BE,b=Math.pow(2,32)-1,S=/^OpenSSH_(?:(?![0-4])\d)|(?:\d{2,})/,k=function(e){};function T(){if(!(this instanceof T))return new T;o.call(this),this.config={host:void 0,port:void 0,localAddress:void 0,localPort:void 0,forceIPv4:void 0,forceIPv6:void 0,keepaliveCountMax:void 0,keepaliveInterval:void 0,readyTimeout:void 0,username:void 0,password:void 0,privateKey:void 0,tryKeyboard:void 0,agent:void 0,allowAgentFwd:void 0,authHandler:void 0,hostHashAlgo:void 0,hostHashCb:void 0,strictVendor:void 0,debug:void 0},this._readyTimeout=void 0,this._channels=void 0,this._callbacks=void 0,this._forwarding=void 0,this._forwardingUnix=void 0,this._acceptX11=void 0,this._agentFwdEnabled=void 0,this._curChan=void 0,this._remoteVer=void 0,this._sshstream=void 0,this._sock=void 0,this._resetKA=void 0}function A(e,t,r,i){var n=U(e),s=v.MAX_WINDOW,o=v.PACKET_SIZE,a=!0;if(!1===n)return i(new Error("No free channels available"));"function"==typeof r&&(i=r,r={}),e._channels[n]=i;var c=e._sshstream;return c.once("CHANNEL_OPEN_CONFIRMATION:"+n,h).once("CHANNEL_OPEN_FAILURE:"+n,f).once("CHANNEL_CLOSE:"+n,f),"session"===t?a=c.session(n,s,o):"direct-tcpip"===t?a=c.directTcpip(n,s,o,r):"direct-streamlocal@openssh.com"===t&&(a=c.openssh_directStreamLocal(n,s,o,r)),a;function h(r){c.removeListener("CHANNEL_OPEN_FAILURE:"+n,f),c.removeListener("CHANNEL_CLOSE:"+n,f);var a={type:t,incoming:{id:n,window:s,packetSize:o,state:"open"},outgoing:{id:r.sender,window:r.window,packetSize:r.packetSize,state:"open"}};i(void 0,new v(a,e))}function f(t){var r;c.removeListener("CHANNEL_OPEN_CONFIRMATION:"+n,h),c.removeListener("CHANNEL_OPEN_FAILURE:"+n,f),c.removeListener("CHANNEL_CLOSE:"+n,f),delete e._channels[n],t instanceof Error?r=t:"object"==typeof t&&null!==t?((r=new Error("(SSH) Channel open failure: "+t.description)).reason=t.reason,r.lang=t.lang):(r=new Error("(SSH) Channel open failure: server closed channel unexpectedly")).reason=r.lang="",i(r)}}function U(e){if(e._curChan=0?e.keepaliveCountMax:3,this.config.keepaliveInterval="number"==typeof e.keepaliveInterval&&e.keepaliveInterval>0?e.keepaliveInterval:0,this.config.readyTimeout="number"==typeof e.readyTimeout&&e.readyTimeout>=0?e.readyTimeout:2e4;var r,o={kex:void 0,kexBuf:void 0,cipher:void 0,cipherBuf:void 0,serverHostKey:void 0,serverHostKeyBuf:void 0,hmac:void 0,hmacBuf:void 0,compress:void 0,compressBuf:void 0};if("object"==typeof e.algorithms&&null!==e.algorithms){var a,h;if(h=e.algorithms.kex,Array.isArray(h)&&h.length>0){for(a=d.SUPPORTED_KEX,r=0;r0){for(a=d.SUPPORTED_CIPHER,r=0;r0){for(a=d.SUPPORTED_SERVER_HOST_KEY,r=0;r0){for(a=d.SUPPORTED_HMAC,r=0;r0){for(a=d.SUPPORTED_COMPRESS,r=0;rR){if(clearInterval(T),S.readable){var e=new Error("Keepalive timeout");e.level="client-timeout",t.emit("error",e),S.destroy()}}else S.writable?(_.push(D),b.ping()):clearInterval(T)}function D(){B>0&&(N=0,clearInterval(T),S.writable&&(T=setInterval(P,B)))}if(this._resetKA=D,b.on("USERAUTH_BANNER",(function(e){t.emit("banner",e)})),S.on("connect",(function(){p("DEBUG: Client: Connected"),t.emit("connect"),e.sock||b.pipe(S).pipe(b)})).on("timeout",(function(){t.emit("timeout")})).on("error",(function(e){clearTimeout(t._readyTimeout),e.level="client-socket",t.emit("error",e)})).on("end",(function(){b.unpipe(S),clearTimeout(t._readyTimeout),clearInterval(T),t.emit("end")})).on("close",(function(){b.unpipe(S),clearTimeout(t._readyTimeout),clearInterval(T),t.emit("close");var e=_,i=new Error("No response from server");for(_=t._callbacks=[],r=0;r=C.length)return;++x>=C.length?(p("DEBUG: Agent: No more keys left to try"),p("DEBUG: Client: agent auth failed"),C=void 0,W()):(p("DEBUG: Agent: Trying key #"+(x+1)),b.authPK(t.config.username,C[x]),b.once("USERAUTH_PK_OK",j))}}function X(e,r,i,n){if(0===(Array.isArray(n)?n.length:0))return p("DEBUG: Client: Sending automatic USERAUTH_INFO_RESPONSE"),b.authInfoRes();t.emit("keyboard-interactive",e,r,i,n,(function(e){b.authInfoRes(e)}))}function j(){if("agent"===A){var e=C[x],r=w(e,0),i=e.toString("ascii",4,4+r),n=i.slice(4);switch(i){case"ssh-rsa":case"ssh-dss":case"ecdsa-sha2-nistp256":case"ecdsa-sha2-nistp384":case"ecdsa-sha2-nistp521":break;default:if(g&&"ssh-ed25519"===i)break;return p("DEBUG: Agent: Skipping unsupported key type: "+i),q()}b.authPK(t.config.username,e,(function(r,s){y(t.config.agent,e,n,r,(function(e,r){if(e)e.level="agent",t.emit("error",e);else{var n=w(r,0);if(4+n+40&&(t._readyTimeout=setTimeout((function(){var e=new Error("Timed out while waiting for handshake");e.level="client-timeout",t.emit("error",e),S.destroy()}),t.config.readyTimeout))}},T.prototype.end=function(){return!!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable)&&this._sshstream.disconnect()},T.prototype.destroy=function(){this._sock&&this._sock.destroy()},T.prototype.exec=function(e,t,r){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");"function"==typeof t&&(r=t,t={});var i=this;return A(this,"session",{allowHalfOpen:!1!==t.allowHalfOpen},(function(n,s){if(n)return r(n);var o=[];function a(e){if(e)return s.close(),r(e);o.length&&o.shift()()}(!0===i.config.allowAgentFwd||t&&!0===t.agentForward&&void 0!==i.config.agent)&&o.push((function(){N(s,a)})),"object"==typeof t&&null!==t&&("object"==typeof t.env&&null!==t.env&&P(s,t.env),("object"==typeof t.pty&&null!==t.pty||!0===t.pty)&&o.push((function(){R(s,t.pty,a)})),("object"==typeof t.x11&&null!==t.x11||"number"===t.x11||!0===t.x11)&&o.push((function(){B(s,t.x11,a)}))),o.push((function(){!function(e,t,r,i){if("open"!==e.outgoing.state)return i(new Error("Channel is not open")),!0;e._callbacks.push((function(t){if(t)return i(!0!==t?t:new Error("Unable to exec"));e.subtype="exec",e.allowHalfOpen=!1!==r.allowHalfOpen,i(void 0,e)})),e._client._sshstream.exec(e.outgoing.id,t,!0)}(s,e,t,r)})),o.shift()()}))},T.prototype.shell=function(e,t,r){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var i=this;return"function"==typeof e?(r=e,e=t=void 0):"function"==typeof t&&(r=t,t=void 0),!e||void 0===e.x11&&void 0===e.env||(t=e,e=void 0),A(this,"session",(function(n,s){if(n)return r(n);var o=[];function a(e){if(e)return s.close(),r(e);o.length&&o.shift()()}(!0===i.config.allowAgentFwd||t&&!0===t.agentForward&&void 0!==i.config.agent)&&o.push((function(){N(s,a)})),!1!==e&&o.push((function(){R(s,e,a)})),"object"==typeof t&&null!==t&&("object"==typeof t.env&&null!==t.env&&P(s,t.env),("object"==typeof t.x11&&null!==t.x11||"number"===t.x11||!0===t.x11)&&o.push((function(){B(s,t.x11,a)}))),o.push((function(){!function(e,t){if("open"!==e.outgoing.state)return t(new Error("Channel is not open")),!0;e._callbacks.push((function(r){if(r)return t(!0!==r?r:new Error("Unable to open shell"));e.subtype="shell",t(void 0,e)})),e._client._sshstream.shell(e.outgoing.id,!0)}(s,r)})),o.shift()()}))},T.prototype.subsys=function(e,t){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");return A(this,"session",(function(r,i){if(r)return t(r);D(i,e,(function(e,r){if(e)return t(e);t(void 0,r)}))}))},T.prototype.sftp=function(e){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var t=this;return A(this,"session",(function(r,i){if(r)return e(r);D(i,"sftp",(function(r,i){if(r)return e(r);var n=t._sshstream._state.incoming.identRaw,s={debug:t.config.debug},o=new u(s,n);function a(t){o.removeListener("ready",c),i.removeListener("exit",h),e(t)}function c(){o.removeListener("error",a),i.removeListener("exit",h),e(void 0,new _(o))}function h(t,r){o.removeListener("ready",c),o.removeListener("error",a);var i=new Error("number"==typeof t?"Received exit code "+t+" while establishing SFTP session":"Received signal "+r+" while establishing SFTP session");i.code=t,i.signal=r,e(i)}o.once("error",a).once("ready",c).once("close",(function(){i.end()})),i.once("exit",h),o.pipe(i).pipe(o)}))}))},T.prototype.forwardIn=function(e,t,r){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var i=this,n="function"==typeof r;return n&&this._callbacks.push((function(n,s){if(n)return r(!0!==n?n:new Error("Unable to bind to "+e+":"+t));var o=t;0===t&&s&&s.length>=4&&(o=w(s,0),i._sshstream.remoteBugs&p.DYN_RPORT_BUG||(t=o)),i._forwarding[e+":"+t]=o,r(void 0,o)})),this._sshstream.tcpipForward(e,t,n)},T.prototype.unforwardIn=function(e,t,r){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var i=this,n="function"==typeof r;return n&&this._callbacks.push((function(n){if(n)return r(!0!==n?n:new Error("Unable to unbind from "+e+":"+t));delete i._forwarding[e+":"+t],r()})),this._sshstream.cancelTcpipForward(e,t,n)},T.prototype.forwardOut=function(e,t,r,i,n){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");return A(this,"direct-tcpip",{srcIP:e,srcPort:t,dstIP:r,dstPort:i},n)},T.prototype.openssh_noMoreSessions=function(e){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var t="function"==typeof e;return!this.config.strictVendor||this.config.strictVendor&&S.test(this._remoteVer)?(t&&this._callbacks.push((function(t){if(t)return e(!0!==t?t:new Error("Unable to disable future sessions"));e()})),this._sshstream.openssh_noMoreSessions(t)):(t&&process.nextTick((function(){e(new Error("strictVendor enabled and server is not OpenSSH or compatible version"))})),!0)},T.prototype.openssh_forwardInStreamLocal=function(e,t){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var r="function"==typeof t,i=this;return!this.config.strictVendor||this.config.strictVendor&&S.test(this._remoteVer)?(r&&this._callbacks.push((function(r){if(r)return t(!0!==r?r:new Error("Unable to bind to "+e));i._forwardingUnix[e]=!0,t()})),this._sshstream.openssh_streamLocalForward(e,r)):(r&&process.nextTick((function(){t(new Error("strictVendor enabled and server is not OpenSSH or compatible version"))})),!0)},T.prototype.openssh_unforwardInStreamLocal=function(e,t){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");var r="function"==typeof t,i=this;return!this.config.strictVendor||this.config.strictVendor&&S.test(this._remoteVer)?(r&&this._callbacks.push((function(r){if(r)return t(!0!==r?r:new Error("Unable to unbind on "+e));delete i._forwardingUnix[e],t()})),this._sshstream.openssh_cancelStreamLocalForward(e,r)):(r&&process.nextTick((function(){t(new Error("strictVendor enabled and server is not OpenSSH or compatible version"))})),!0)},T.prototype.openssh_forwardOutStreamLocal=function(e,t){if(!(this._sock&&this._sock.writable&&this._sshstream&&this._sshstream.writable))throw new Error("Not connected");return!this.config.strictVendor||this.config.strictVendor&&S.test(this._remoteVer)?A(this,"direct-streamlocal@openssh.com",{socketPath:e},t):(process.nextTick((function(){t(new Error("strictVendor enabled and server is not OpenSSH or compatible version"))})),!0)};var O=function(){if("function"==typeof i.randomFillSync){var e=Buffer.alloc(16);return function(){return i.randomFillSync(e,0,16),e.toString("hex")}}return function(){return i.randomBytes(16).toString("hex")}}();T.Client=T,T.Server=r(2188),T.utils=h.utils,T.SFTP_STATUS_CODE=u.STATUS_CODE,T.SFTP_OPEN_MODE=u.OPEN_MODE,T.HTTPAgent=m.SSHTTPAgent,T.HTTPSAgent=m.SSHTTPSAgent,e.exports=T},2492:(e,t,r)=>{var i,n=r(6136).Agent,s=r(8876).Agent,o=r(970).inherits;function a(e,t){var n=e&&e.localAddress||this._defaultSrcIP,s=e&&e.localPort||0,o=e.host,a=e.port;void 0===i&&(i=r(461).Client);var h=new i,f=!1;h.on("ready",(()=>{h.forwardOut(n,s,o,a,((e,r)=>{if(f=!0,e)return h.end(),t(e);r.once("close",(()=>{h.end()})),t(null,function(e){return e.setKeepAlive=c,e.setNoDelay=c,e.setTimeout=c,e.ref=c,e.unref=c,e.destroySoon=e.destroy,e}(r))}))})).on("error",t).on("close",(()=>{f||t(new Error("Unexpected connection loss"))})).connect(this._connectCfg)}function c(){}[n,s].forEach((e=>{function r(t,i){if(!(this instanceof r))return new r(t,i);e.call(this,i),this._connectCfg=t,this._defaultSrcIP=i&&i.srcIP||"localhost"}o(r,e),r.prototype.createConnection=a,t[e===n?"SSHTTPAgent":"SSHTTPSAgent"]=r}))},7788:e=>{function t(e,t){for(var r=t,i=r+1,n=e.length;i=r)if(++e._kacnt>i){var h=new Error("Keepalive timeout");h.level="client-timeout",e.emit("error",h),e.disconnect(),t(n,a),--a,c=n.length}else e._kalast=o,e.ping()}}r.prototype.start=function(){this._timer&&this.stop(),this._timer=setInterval(this._timerfn,this._timerInterval)},r.prototype.stop=function(){this._timer&&(clearInterval(this._timer),this._timer=void 0)},r.prototype.add=function(e){var t=this._streams,r=this;function i(){e._kalast=Date.now(),e._kacnt=0}e.once("end",(function(){r.remove(e)})).on("packet",i),t[t.length]=e,i(),this._timer||this.start()},r.prototype.remove=function(e){var r=this._streams,i=r.indexOf(e);i>-1&&t(r,i),r.length||this.stop()},e.exports=r},2188:(e,t,r)=>{var i,n=r(5256),s=r(467).EventEmitter,o=s.listenerCount,a=r(970).inherits,c=r(6728),h=c.utils.parseKey,f=c.SSH2Stream,u=c.SFTPStream,l=c.constants,p=l.DISCONNECT_REASON,d=l.CHANNEL_OPEN_FAILURE,g=l.ALGORITHMS,E=r(5248),m=r(7788),v=r(9224).writeUInt32BE,y=Math.pow(2,32)-1,_=10;function w(e,t){if(!(this instanceof w))return new w(e,t);var r,a={"ssh-rsa":null,"ssh-dss":null,"ssh-ed25519":null,"ecdsa-sha2-nistp256":null,"ecdsa-sha2-nistp384":null,"ecdsa-sha2-nistp521":null},c=e.hostKeys;if(!Array.isArray(c))throw new Error("hostKeys must be an array");for(r=0;r0){for(d=g.SUPPORTED_KEX,r=0;r0){for(d=g.SUPPORTED_CIPHER,r=0;r0){for(d=g.SUPPORTED_SERVER_HOST_KEY,r=E.length-1;r>=0;--r){if(-1===d.indexOf(E[r]))throw new Error("Unsupported server host key algorithm: "+E[r]);a[E[r]]||(v||(E=E.slice(),v=!0),E.splice(r,1))}E.length>0&&(l.serverHostKey=E)}if(E=e.algorithms.hmac,Array.isArray(E)&&E.length>0){for(d=g.SUPPORTED_HMAC,r=0;r0){for(d=g.SUPPORTED_COMPRESS,r=0;r=0;--r)a[y[r]]||y.splice(r,1);l.serverHostKey=y}!i&&w.KEEPALIVE_INTERVAL>0&&w.KEEPALIVE_CLIENT_INTERVAL>0&&w.KEEPALIVE_CLIENT_COUNT_MAX>=0&&(i=new m(w.KEEPALIVE_INTERVAL,w.KEEPALIVE_CLIENT_INTERVAL,w.KEEPALIVE_CLIENT_COUNT_MAX));var _=this;s.call(this),"function"==typeof t&&_.on("connection",t);var S,k,T={algorithms:l,hostKeys:a,server:!0};for(r=0,k=(S=Object.keys(e)).length;r=_.maxConnections)e.destroy();else{++_._connections,e.once("close",(function(e){--_._connections,s.read()})).on("error",(function(e){s.reset(),s.emit("error",e)}));var t=T;if(U){t={};for(var r,i=0;i0&&g[0].type;)"SUCCESS"===(t=g.shift()).type&&e.requestSuccess(t.buf),"FAILURE"===t.type&&e.requestFailure()}()}if(i&&g.push(s),("tcpip-forward"===t||"cancel-tcpip-forward"===t||"no-more-sessions@openssh.com"===t||"streamlocal-forward@openssh.com"===t||"cancel-streamlocal-forward@openssh.com"===t)&&o(r,"request")&&r.authenticated){var c,h;if(i){var f=!1;c=function(e){var r;f||(f=!0,"tcpip-forward"===t&&0===n.bindPort&&"number"==typeof e&&(r=Buffer.allocUnsafe(4),v(r,e,0)),a("SUCCESS",r))},h=function(){f||(f=!0,a("FAILURE"))}}if("no-more-sessions@openssh.com"===t)return r.noMoreSessions=!0,void(c&&c());r.emit("request",c,h,t,n)}else i&&a("FAILURE")})),e.on("CHANNEL_OPEN",(function(t){if("session"===t.type&&r.noMoreSessions||!r.authenticated){var i=d.ADMINISTRATIVELY_PROHIBITED;return e.channelOpenFail(t.sender,i)}var s,a,c=P(r),h=!1;if(!1===c)return e.channelOpenFail(t.sender,d.RESOURCE_SHORTAGE);switch(n[c]=!0,a=function(){if(!h){h=!0,delete n[c];var r=d.ADMINISTRATIVELY_PROHIBITED;return e.channelOpenFail(t.sender,r)}},t.type){case"session":o(r,"session")?(s=function(){if(!h)return h=!0,e.channelOpenConfirm(t.sender,c,E.MAX_WINDOW,E.PACKET_SIZE),new S(r,t,c)},r.emit("session",s,a)):a();break;case"direct-tcpip":o(r,"tcpip")?(s=function(){if(!h){h=!0,e.channelOpenConfirm(t.sender,c,E.MAX_WINDOW,E.PACKET_SIZE);var i={type:void 0,incoming:{id:c,window:E.MAX_WINDOW,packetSize:E.PACKET_SIZE,state:"open"},outgoing:{id:t.sender,window:t.window,packetSize:t.packetSize,state:"open"}};return new E(i,r)}},r.emit("tcpip",s,a,t.data)):a();break;case"direct-streamlocal@openssh.com":o(r,"openssh.streamlocal")?(s=function(){if(!h){h=!0,e.channelOpenConfirm(t.sender,c,E.MAX_WINDOW,E.PACKET_SIZE);var i={type:void 0,incoming:{id:c,window:E.MAX_WINDOW,packetSize:E.PACKET_SIZE,state:"open"},outgoing:{id:t.sender,window:t.window,packetSize:t.packetSize,state:"open"}};return new E(i,r)}},r.emit("openssh.streamlocal",s,a,t.data)):a();break;default:a()}})),e.on("NEWKEYS",(function(){++c>1&&r.emit("rekey")})),i&&this.once("ready",(function(){i.add(e)}))}function S(e,t,r){this.subtype=void 0;var i,n=!1,s=this,a=t.sender,c={type:"session",incoming:{id:r,window:E.MAX_WINDOW,packetSize:E.PACKET_SIZE,state:"open"},outgoing:{id:t.sender,window:t.window,packetSize:t.packetSize,state:"open"}};e._sshstream.on("CHANNEL_REQUEST:"+r,(function(t){var r,h,f=!1;if(t.wantReply&&("shell"!==t.request&&"exec"!==t.request&&"subsystem"!==t.request&&(r=function(){if(!(f||n||i))return f=!0,e._sshstream.channelSuccess(a)}),h=function(){if(!(f||n||i))return f=!0,e._sshstream.channelFailure(a)}),n)h&&h();else switch(t.request){case"env":o(s,"env")?s.emit("env",r,h,{key:t.key,val:t.val}):h&&h();break;case"pty-req":o(s,"pty")?s.emit("pty",r,h,{cols:t.cols,rows:t.rows,width:t.width,height:t.height,term:t.term,modes:t.modes}):h&&h();break;case"window-change":o(s,"window-change")?s.emit("window-change",r,h,{cols:t.cols,rows:t.rows,width:t.width,height:t.height}):h&&h();break;case"x11-req":o(s,"x11")?s.emit("x11",r,h,{single:t.single,protocol:t.protocol,cookie:t.cookie,screen:t.screen}):h&&h();break;case"signal":o(s,"signal")?s.emit("signal",r,h,{name:t.signal}):h&&h();break;case"auth-agent-req@openssh.com":o(s,"auth-agent")?s.emit("auth-agent",r,h):h&&h();break;case"shell":o(s,"shell")?(r=function(){if(!(f||n||i))return f=!0,t.wantReply&&e._sshstream.channelSuccess(a),(i=new E(c,e,{server:!0})).subtype=s.subtype=t.request,i},s.emit("shell",r,h)):h&&h();break;case"exec":o(s,"exec")?(r=function(){if(!(f||n||i))return f=!0,t.wantReply&&e._sshstream.channelSuccess(a),(i=new E(c,e,{server:!0})).subtype=s.subtype=t.request,i},s.emit("exec",r,h,{command:t.command})):h&&h();break;case"subsystem":r=function(){if(!(f||n||i)){if(f=!0,t.wantReply&&e._sshstream.channelSuccess(a),(i=new E(c,e,{server:!0})).subtype=s.subtype=t.request+":"+t.subsystem,"sftp"===t.subsystem){var r=new u({server:!0,debug:e._sshstream.debug});return i.pipe(r).pipe(i),r}return i}},"sftp"===t.subsystem&&o(s,"sftp")?s.emit("sftp",r,h):"sftp"!==t.subsystem&&o(s,"subsystem")?s.emit("subsystem",r,h,{name:t.subsystem}):h&&h();break;default:h&&h()}})).once("CHANNEL_EOF:"+r,(function(){n=!0,s.emit("eof"),s.emit("end")})).once("CHANNEL_CLOSE:"+r,(function(){n=!0,s.emit("close")}))}function k(e,t,r,i,n){s.call(this);var o=this;this.username=this.user=t,this.service=r,this.method=i,this._initialResponse=!1,this._finalResponse=!1,this._multistep=!1,this._cbfinal=function(e,t,r){o._finalResponse||(o._finalResponse=!0,n(o,e,t,r))},this._stream=e}a(w,s),w.prototype.listen=function(){return this._srv.listen.apply(this._srv,arguments),this},w.prototype.address=function(){return this._srv.address()},w.prototype.getConnections=function(e){this._srv.getConnections(e)},w.prototype.close=function(e){return this._srv.close(e),this},w.prototype.ref=function(){this._srv.ref()},w.prototype.unref=function(){this._srv.unref()},a(b,s),b.prototype.end=function(){return this._sshstream.disconnect(p.BY_APPLICATION)},b.prototype.x11=function(e,t,r){return N(this,"x11",{originAddr:e,originPort:t},r)},b.prototype.forwardOut=function(e,t,r,i,n){return N(this,"forwarded-tcpip",{boundAddr:e,boundPort:t,remoteAddr:r,remotePort:i},n)},b.prototype.openssh_forwardOutStreamLocal=function(e,t){return N(this,"forwarded-streamlocal@openssh.com",{socketPath:e},t)},b.prototype.rekey=function(e){var t,r=this._sshstream,i=!0;try{i=r.rekey()}catch(e){t=e}return"function"==typeof e&&(t?process.nextTick((function(){e(t)})):this.once("rekey",e)),i},a(S,s),a(k,s),k.prototype.accept=function(){this._cleanup&&this._cleanup(),this._initialResponse=!0,this._cbfinal(!0)},k.prototype.reject=function(e,t){this._cleanup&&this._cleanup(),this._initialResponse=!0,this._cbfinal(!1,e,t)};var T=/[ \t\r\n]*,[ \t\r\n]*/g;function A(e,t,r,i,n,s){k.call(this,e,t,r,i,s),this._multistep=!0;var o=this;this._cb=void 0,this._onInfoResponse=function(e){if(o._cb){var t=o._cb;o._cb=void 0,t(e)}},this.submethods=n.split(T),this.on("abort",(function(){o._cb&&o._cb(new Error("Authentication request aborted"))}))}function U(e,t,r,i,n,s){var o;if(k.call(this,e,t,r,i,s),this.key={algo:n.keyAlgo,data:n.key},this.signature=n.signature,this.signature)switch(n.keyAlgo){case"ssh-rsa":case"ssh-dss":o="sha1";break;case"ssh-ed25519":o=null;break;case"ecdsa-sha2-nistp256":o="sha256";break;case"ecdsa-sha2-nistp384":o="sha384";break;case"ecdsa-sha2-nistp521":o="sha512"}this.sigAlgo=o,this.blob=n.blob}function B(e,t,r,i,n,s){var o;if(k.call(this,e,t,r,i,s),this.key={algo:n.keyAlgo,data:n.key},this.signature=n.signature,this.signature)switch(n.keyAlgo){case"ssh-rsa":case"ssh-dss":o="sha1";break;case"ssh-ed25519":o=null;break;case"ecdsa-sha2-nistp256":o="sha256";break;case"ecdsa-sha2-nistp384":o="sha384";break;case"ecdsa-sha2-nistp521":o="sha512"}this.sigAlgo=o,this.blob=n.blob,this.localHostname=n.localHostname,this.localUsername=n.localUsername}function R(e,t,r,i,n,s){k.call(this,e,t,r,i,s),this.password=n}function N(e,t,r,i){var n=P(e),s=E.MAX_WINDOW,o=E.PACKET_SIZE,a=!0;if(!1===n)return i(new Error("No free channels available"));"function"==typeof r&&(i=r,r={}),e._channels[n]=!0;var c=e._sshstream;return c.once("CHANNEL_OPEN_CONFIRMATION:"+n,(function(r){c.removeAllListeners("CHANNEL_OPEN_FAILURE:"+n);var a={type:t,incoming:{id:n,window:s,packetSize:o,state:"open"},outgoing:{id:r.sender,window:r.window,packetSize:r.packetSize,state:"open"}};i(void 0,new E(a,e,{server:!0}))})).once("CHANNEL_OPEN_FAILURE:"+n,(function(t){c.removeAllListeners("CHANNEL_OPEN_CONFIRMATION:"+n),delete e._channels[n];var r=new Error("(SSH) Channel open failure: "+t.description);r.reason=t.reason,r.lang=t.lang,i(r)})),"forwarded-tcpip"===t?a=c.forwardedTcpip(n,s,o,r):"x11"===t?a=c.x11(n,s,o,r):"forwarded-streamlocal@openssh.com"===t&&(a=c.openssh_forwardedStreamLocal(n,s,o,r)),a}function P(e){if(e._curChan{e.exports={newInvalidAsn1Error:function(e){var t=new Error;return t.name="InvalidAsn1Error",t.message=e||"",t}}},1256:(e,t,r)=>{var i=r(560),n=r(2720),s=r(8124),o=r(1156);for(var a in e.exports={Reader:s,Writer:o},n)n.hasOwnProperty(a)&&(e.exports[a]=n[a]);for(var c in i)i.hasOwnProperty(c)&&(e.exports[c]=i[c])},8124:(e,t,r)=>{var i=r(6608),n=r(6968).Buffer,s=r(2720),o=r(560).newInvalidAsn1Error;function a(e){if(!e||!n.isBuffer(e))throw new TypeError("data must be a node Buffer");this._buf=e,this._size=e.length,this._len=0,this._offset=0}Object.defineProperty(a.prototype,"length",{enumerable:!0,get:function(){return this._len}}),Object.defineProperty(a.prototype,"offset",{enumerable:!0,get:function(){return this._offset}}),Object.defineProperty(a.prototype,"remain",{get:function(){return this._size-this._offset}}),Object.defineProperty(a.prototype,"buffer",{get:function(){return this._buf.slice(this._offset)}}),a.prototype.readByte=function(e){if(this._size-this._offset<1)return null;var t=255&this._buf[this._offset];return e||(this._offset+=1),t},a.prototype.peek=function(){return this.readByte(!0)},a.prototype.readLength=function(e){if(void 0===e&&(e=this._offset),e>=this._size)return null;var t=255&this._buf[e++];if(null===t)return null;if(128==(128&t)){if(0==(t&=127))throw o("Indefinite length not supported");if(t>4)throw o("encoding too long");if(this._size-ethis._size-i)return null;if(this._offset=i,0===this.length)return t?n.alloc(0):"";var a=this._buf.slice(this._offset,this._offset+this.length);return this._offset+=this.length,t?a:a.toString("utf8")},a.prototype.readOID=function(e){e||(e=s.OID);var t=this.readString(e,!0);if(null===t)return null;for(var r=[],i=0,n=0;n>0),r.join(".")},a.prototype._readTag=function(e){i.ok(void 0!==e);var t=this.peek();if(null===t)return null;if(t!==e)throw o("Expected 0x"+e.toString(16)+": got 0x"+t.toString(16));var r=this.readLength(this._offset+1);if(null===r)return null;if(this.length>4)throw o("Integer too long: "+this.length);if(this.length>this._size-r)return null;this._offset=r;for(var n=this._buf[this._offset],s=0,a=0;a>0},e.exports=a},2720:e=>{e.exports={EOC:0,Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,ObjectDescriptor:7,External:8,Real:9,Enumeration:10,PDV:11,Utf8String:12,RelativeOID:13,Sequence:16,Set:17,NumericString:18,PrintableString:19,T61String:20,VideotexString:21,IA5String:22,UTCTime:23,GeneralizedTime:24,GraphicString:25,VisibleString:26,GeneralString:28,UniversalString:29,CharacterString:30,BMPString:31,Constructor:32,Context:128}},1156:(e,t,r)=>{var i=r(6608),n=r(6968).Buffer,s=r(2720),o=r(560).newInvalidAsn1Error,a={size:1024,growthFactor:8};function c(e){var t,r;t=a,r=e||{},i.ok(t),i.equal(typeof t,"object"),i.ok(r),i.equal(typeof r,"object"),Object.getOwnPropertyNames(t).forEach((function(e){if(!r[e]){var i=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(r,e,i)}})),e=r,this._buf=n.alloc(e.size||1024),this._size=this._buf.length,this._offset=0,this._options=e,this._seq=[]}Object.defineProperty(c.prototype,"buffer",{get:function(){if(this._seq.length)throw o(this._seq.length+" unended sequence(s)");return this._buf.slice(0,this._offset)}}),c.prototype.writeByte=function(e){if("number"!=typeof e)throw new TypeError("argument must be a Number");this._ensure(1),this._buf[this._offset++]=e},c.prototype.writeInt=function(e,t){if("number"!=typeof e)throw new TypeError("argument must be a Number");"number"!=typeof t&&(t=s.Integer);for(var r=4;(0==(4286578688&e)||-8388608==(4286578688&e))&&r>1;)r--,e<<=8;if(r>4)throw o("BER ints cannot be > 0xffffffff");for(this._ensure(2+r),this._buf[this._offset++]=t,this._buf[this._offset++]=r;r-- >0;)this._buf[this._offset++]=(4278190080&e)>>>24,e<<=8},c.prototype.writeNull=function(){this.writeByte(s.Null),this.writeByte(0)},c.prototype.writeEnumeration=function(e,t){if("number"!=typeof e)throw new TypeError("argument must be a Number");return"number"!=typeof t&&(t=s.Enumeration),this.writeInt(e,t)},c.prototype.writeBoolean=function(e,t){if("boolean"!=typeof e)throw new TypeError("argument must be a Boolean");"number"!=typeof t&&(t=s.Boolean),this._ensure(3),this._buf[this._offset++]=t,this._buf[this._offset++]=1,this._buf[this._offset++]=e?255:0},c.prototype.writeString=function(e,t){if("string"!=typeof e)throw new TypeError("argument must be a string (was: "+typeof e+")");"number"!=typeof t&&(t=s.OctetString);var r=n.byteLength(e);this.writeByte(t),this.writeLength(r),r&&(this._ensure(r),this._buf.write(e,this._offset),this._offset+=r)},c.prototype.writeBuffer=function(e,t){if("number"!=typeof t)throw new TypeError("tag must be a number");if(!n.isBuffer(e))throw new TypeError("argument must be a buffer");this.writeByte(t),this.writeLength(e.length),this._ensure(e.length),e.copy(this._buf,this._offset,0,e.length),this._offset+=e.length},c.prototype.writeStringArray=function(e){if(!e instanceof Array)throw new TypeError("argument must be an Array[String]");var t=this;e.forEach((function(e){t.writeString(e)}))},c.prototype.writeOID=function(e,t){if("string"!=typeof e)throw new TypeError("argument must be a string");if("number"!=typeof t&&(t=s.OID),!/^([0-9]+\.){3,}[0-9]+$/.test(e))throw new Error("argument is not a valid OID string");var r=e.split("."),i=[];i.push(40*parseInt(r[0],10)+parseInt(r[1],10)),r.slice(2).forEach((function(e){!function(e,t){t<128?e.push(t):t<16384?(e.push(t>>>7|128),e.push(127&t)):t<2097152?(e.push(t>>>14|128),e.push(255&(t>>>7|128)),e.push(127&t)):t<268435456?(e.push(t>>>21|128),e.push(255&(t>>>14|128)),e.push(255&(t>>>7|128)),e.push(127&t)):(e.push(255&(t>>>28|128)),e.push(255&(t>>>21|128)),e.push(255&(t>>>14|128)),e.push(255&(t>>>7|128)),e.push(127&t))}(i,parseInt(e,10))}));var n=this;this._ensure(2+i.length),this.writeByte(t),this.writeLength(i.length),i.forEach((function(e){n.writeByte(e)}))},c.prototype.writeLength=function(e){if("number"!=typeof e)throw new TypeError("argument must be a Number");if(this._ensure(4),e<=127)this._buf[this._offset++]=e;else if(e<=255)this._buf[this._offset++]=129,this._buf[this._offset++]=e;else if(e<=65535)this._buf[this._offset++]=130,this._buf[this._offset++]=e>>8,this._buf[this._offset++]=e;else{if(!(e<=16777215))throw o("Length too long (> 4 bytes)");this._buf[this._offset++]=131,this._buf[this._offset++]=e>>16,this._buf[this._offset++]=e>>8,this._buf[this._offset++]=e}},c.prototype.startSequence=function(e){"number"!=typeof e&&(e=s.Sequence|s.Constructor),this.writeByte(e),this._seq.push(this._offset),this._ensure(3),this._offset+=3},c.prototype.endSequence=function(){var e=this._seq.pop(),t=e+3,r=this._offset-t;if(r<=127)this._shift(t,r,-2),this._buf[e]=r;else if(r<=255)this._shift(t,r,-1),this._buf[e]=129,this._buf[e+1]=r;else if(r<=65535)this._buf[e]=130,this._buf[e+1]=r>>8,this._buf[e+2]=r;else{if(!(r<=16777215))throw o("Sequence too long");this._shift(t,r,1),this._buf[e]=131,this._buf[e+1]=r>>16,this._buf[e+2]=r>>8,this._buf[e+3]=r}},c.prototype._shift=function(e,t,r){i.ok(void 0!==e),i.ok(void 0!==t),i.ok(r),this._buf.copy(this._buf,e+r,e,e+t),this._offset+=r},c.prototype._ensure=function(e){if(i.ok(e),this._size-this._offset{var i=r(1256);e.exports={Ber:i,BerReader:i.Reader,BerWriter:i.Writer}},8327:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Client=void 0;const i=r(2058),n=r(7072),s=r(192),o=r(970),a=r(4096),c=r(3704),h=r(4200),f=r(344),u=r(9660),l=r(6708),p=r(5224),d=r(3512),g=o.promisify(i.readdir),E=o.promisify(i.mkdir),m=o.promisify(i.stat),v=o.promisify(i.open),y=o.promisify(i.close),_=o.promisify(i.unlink);async function w(e){try{return await e()}catch(e){return}}t.Client=class{constructor(e=3e4){this.availableListCommands=["MLSD","LIST -a","LIST"],this.ftp=new a.FTPContext(e),this.prepareTransfer=this._enterFirstCompatibleMode([p.enterPassiveModeIPv6,p.enterPassiveModeIPv4]),this.parseList=c.parseList,this._progressTracker=new h.ProgressTracker}close(){this.ftp.close(),this._progressTracker.stop()}get closed(){return this.ftp.closed}connect(e="localhost",t=21){return this.ftp.reset(),this.ftp.socket.connect({host:e,port:t,family:this.ftp.ipFamily},(()=>this.ftp.log(`Connected to ${l.describeAddress(this.ftp.socket)} (${l.describeTLS(this.ftp.socket)})`))),this._handleConnectResponse()}connectImplicitTLS(e="localhost",t=21,r={}){return this.ftp.reset(),this.ftp.socket=s.connect(t,e,r,(()=>this.ftp.log(`Connected to ${l.describeAddress(this.ftp.socket)} (${l.describeTLS(this.ftp.socket)})`))),this.ftp.tlsOptions=r,this._handleConnectResponse()}_handleConnectResponse(){return this.ftp.handle(void 0,((e,t)=>{e instanceof Error?t.reject(e):d.positiveCompletion(e.code)?t.resolve(e):(this.ftp.socket.destroy(),t.reject(new a.FTPError(e)))}))}send(e,t=!1){return t?(this.ftp.log("Deprecated call using send(command, flag) with boolean flag to ignore errors. Use sendIgnoringError(command)."),this.sendIgnoringError(e)):this.ftp.request(e)}sendIgnoringError(e){return this.ftp.handle(e,((e,t)=>{e instanceof a.FTPError?t.resolve({code:e.code,message:e.message}):e instanceof Error?t.reject(e):t.resolve(e)}))}async useTLS(e={},t="AUTH TLS"){const r=await this.send(t);return this.ftp.socket=await l.upgradeSocket(this.ftp.socket,e),this.ftp.tlsOptions=e,this.ftp.log(`Control socket is using: ${l.describeTLS(this.ftp.socket)}`),r}login(e="anonymous",t="guest"){return this.ftp.log(`Login security: ${l.describeTLS(this.ftp.socket)}`),this.ftp.handle("USER "+e,((e,r)=>{e instanceof Error?r.reject(e):d.positiveCompletion(e.code)?r.resolve(e):331===e.code?this.ftp.send("PASS "+t):r.reject(new a.FTPError(e))}))}async useDefaultSettings(){await this.send("TYPE I"),await this.sendIgnoringError("STRU F"),await this.sendIgnoringError("OPTS UTF8 ON"),await this.sendIgnoringError("OPTS MLST type;size;modify;unique;unix.mode;unix.owner;unix.group;unix.ownername;unix.groupname;"),this.ftp.hasTLS&&(await this.sendIgnoringError("PBSZ 0"),await this.sendIgnoringError("PROT P"))}async access(e={}){const t=!0===e.secure;let r;return r="implicit"===e.secure?await this.connectImplicitTLS(e.host,e.port,e.secureOptions):await this.connect(e.host,e.port),t&&await this.useTLS(e.secureOptions),await this.login(e.user,e.password),await this.useDefaultSettings(),r}async pwd(){const e=await this.send("PWD"),t=e.message.match(/"(.+)"/);if(null===t||void 0===t[1])throw new Error(`Can't parse response to command 'PWD': ${e.message}`);return t[1]}async features(){const e=await this.sendIgnoringError("FEAT"),t=new Map;return e.code<400&&d.isMultiline(e.message)&&e.message.split("\n").slice(1,-1).forEach((e=>{const r=e.trim().split(" ");t.set(r[0],r[1]||"")})),t}async cd(e){const t=await this.protectWhitespace(e);return this.send("CWD "+t)}async cdup(){return this.send("CDUP")}async lastMod(e){const t=await this.protectWhitespace(e),r=(await this.send(`MDTM ${t}`)).message.slice(4);return u.parseMLSxDate(r)}async size(e){const t=`SIZE ${await this.protectWhitespace(e)}`,r=await this.send(t),i=parseInt(r.message.slice(4),10);if(Number.isNaN(i))throw new Error(`Can't parse response to command '${t}' as a numerical value: ${r.message}`);return i}async rename(e,t){const r=await this.protectWhitespace(e),i=await this.protectWhitespace(t);return await this.send("RNFR "+r),this.send("RNTO "+i)}async remove(e,t=!1){const r=await this.protectWhitespace(e);return this.send(`DELE ${r}`,t)}trackProgress(e){this._progressTracker.bytesOverall=0,this._progressTracker.reportTo(e)}async uploadFrom(e,t,r={}){return this._uploadWithCommand(e,t,"STOR",r)}async appendFrom(e,t,r={}){return this._uploadWithCommand(e,t,"APPE",r)}async _uploadWithCommand(e,t,r,i){return"string"==typeof e?this._uploadLocalFile(e,t,r,i):this._uploadFromStream(e,t,r)}async _uploadLocalFile(e,t,r,n){const s=await v(e,"r"),o=i.createReadStream("",{fd:s,start:n.localStart,end:n.localEndInclusive,autoClose:!1});try{return await this._uploadFromStream(o,t,r)}finally{await w((()=>y(s)))}}async _uploadFromStream(e,t,r){const i=e=>this.ftp.closeWithError(e);e.once("error",i);try{const i=await this.protectWhitespace(t);return await this.prepareTransfer(this.ftp),await p.uploadFrom(e,{ftp:this.ftp,tracker:this._progressTracker,command:r,remotePath:i,type:"upload"})}finally{e.removeListener("error",i)}}async downloadTo(e,t,r=0){return"string"==typeof e?this._downloadToFile(e,t,r):this._downloadToStream(e,t,r)}async _downloadToFile(e,t,r){const n=r>0,s=n?"r+":"w",o=await v(e,s),a=i.createWriteStream("",{fd:o,start:r,autoClose:!1});try{return await this._downloadToStream(a,t,r)}catch(t){const r=await w((()=>m(e))),i=r&&r.size>0;throw!n&&!i&&await w((()=>_(e))),t}finally{await w((()=>y(o)))}}async _downloadToStream(e,t,r){const i=e=>this.ftp.closeWithError(e);e.once("error",i);try{const i=await this.protectWhitespace(t);return await this.prepareTransfer(this.ftp),await p.downloadTo(e,{ftp:this.ftp,tracker:this._progressTracker,command:r>0?`REST ${r}`:`RETR ${i}`,remotePath:i,type:"download"})}finally{e.removeListener("error",i),e.end()}}async list(e=""){const t=await this.protectWhitespace(e);let r;for(const e of this.availableListCommands){const i=`${e} ${t}`.trim();await this.prepareTransfer(this.ftp);try{const t=await this._requestListWithCommand(i);return this.availableListCommands=[e],t}catch(e){if(!(e instanceof a.FTPError))throw e;r=e}}throw r}async _requestListWithCommand(e){const t=new f.StringWriter;await p.downloadTo(t,{ftp:this.ftp,tracker:this._progressTracker,command:e,remotePath:"",type:"list"});const r=t.getText(this.ftp.encoding);return this.ftp.log(r),this.parseList(r)}async removeDir(e){return this._exitAtCurrentDirectory((async()=>{await this.cd(e),await this.clearWorkingDir(),"/"!==e&&(await this.cdup(),await this.removeEmptyDir(e))}))}async clearWorkingDir(){for(const e of await this.list())e.isDirectory?(await this.cd(e.name),await this.clearWorkingDir(),await this.cdup(),await this.removeEmptyDir(e.name)):await this.remove(e.name)}async uploadFromDir(e,t){return this._exitAtCurrentDirectory((async()=>(t&&await this.ensureDir(t),await this._uploadToWorkingDir(e))))}async _uploadToWorkingDir(e){const t=await g(e);for(const r of t){const t=n.join(e,r),i=await m(t);i.isFile()?await this.uploadFrom(t,r):i.isDirectory()&&(await this._openDir(r),await this._uploadToWorkingDir(t),await this.cdup())}}async downloadToDir(e,t){return this._exitAtCurrentDirectory((async()=>(t&&await this.cd(t),await this._downloadFromWorkingDir(e))))}async _downloadFromWorkingDir(e){await async function(e){try{await m(e)}catch(t){await E(e,{recursive:!0})}}(e);for(const t of await this.list()){const r=n.join(e,t.name);t.isDirectory?(await this.cd(t.name),await this._downloadFromWorkingDir(r),await this.cdup()):t.isFile&&await this.downloadTo(r,t.name)}}async ensureDir(e){e.startsWith("/")&&await this.cd("/");const t=e.split("/").filter((e=>""!==e));for(const e of t)await this._openDir(e)}async _openDir(e){await this.sendIgnoringError("MKD "+e),await this.cd(e)}async removeEmptyDir(e){const t=await this.protectWhitespace(e);return this.send(`RMD ${t}`)}async protectWhitespace(e){if(!e.startsWith(" "))return e;const t=await this.pwd();return(t.endsWith("/")?t:t+"/")+e}async _exitAtCurrentDirectory(e){const t=await this.pwd();try{return await e()}finally{this.closed||await w((()=>this.cd(t)))}}_enterFirstCompatibleMode(e){return async t=>{t.log("Trying to find optimal transfer strategy...");for(const r of e)try{const e=await r(t);return t.log("Optimal transfer strategy found."),this.prepareTransfer=r,e}catch(e){if(!(e instanceof a.FTPError))throw e}throw new Error("None of the available transfer strategies work.")}}async upload(e,t,r={}){return this.ftp.log("Warning: upload() has been deprecated, use uploadFrom()."),this.uploadFrom(e,t,r)}async append(e,t,r={}){return this.ftp.log("Warning: append() has been deprecated, use appendFrom()."),this.appendFrom(e,t,r)}async download(e,t,r=0){return this.ftp.log("Warning: download() has been deprecated, use downloadTo()."),this.downloadTo(e,t,r)}async uploadDir(e,t){return this.ftp.log("Warning: uploadDir() has been deprecated, use uploadFromDir()."),this.uploadFromDir(e,t)}async downloadDir(e){return this.ftp.log("Warning: downloadDir() has been deprecated, use downloadToDir()."),this.downloadToDir(e)}}},4020:(e,t)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.FileInfo=t.FileType=void 0,function(e){e[e.Unknown=0]="Unknown",e[e.File=1]="File",e[e.Directory=2]="Directory",e[e.SymbolicLink=3]="SymbolicLink"}(r=t.FileType||(t.FileType={}));class i{constructor(e){this.name=e,this.type=r.Unknown,this.size=0,this.rawModifiedAt="",this.modifiedAt=void 0,this.permissions=void 0,this.hardLinkCount=void 0,this.link=void 0,this.group=void 0,this.user=void 0,this.uniqueID=void 0,this.name=e}get isDirectory(){return this.type===r.Directory}get isSymbolicLink(){return this.type===r.SymbolicLink}get isFile(){return this.type===r.File}get date(){return this.rawModifiedAt}set date(e){this.rawModifiedAt=e}}t.FileInfo=i,i.UnixPermission={Read:4,Write:2,Execute:1}},4096:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FTPContext=t.FTPError=void 0;const i=r(5256),n=r(3512);class s extends Error{constructor(e){super(e.message),this.name=this.constructor.name,this.code=e.code}}t.FTPError=s,t.FTPContext=class{constructor(e=0,t="utf8"){this.timeout=e,this.verbose=!1,this.ipFamily=void 0,this.tlsOptions={},this._partialResponse="",this._encoding=t,this._socket=this.socket=this._newSocket(),this._dataSocket=void 0}close(){const e=this._task?"User closed client during task":"User closed client",t=new Error(e);this.closeWithError(t)}closeWithError(e){this._closingError||(this._closingError=e,this._closeSocket(this._socket),this._closeSocket(this._dataSocket),this._passToHandler(e),this._stopTrackingTask())}get closed(){return void 0===this.socket.remoteAddress||void 0!==this._closingError}reset(){this.socket=this._newSocket()}get socket(){return this._socket}set socket(e){this.dataSocket=void 0,this.tlsOptions={},this._partialResponse="",this._socket&&(e.localPort===this._socket.localPort||this._socket.destroy(),this._removeSocketListeners(this._socket)),e&&(this._closingError=void 0,e.setTimeout(0),e.setEncoding(this._encoding),e.setKeepAlive(!0),e.on("data",(e=>this._onControlSocketData(e))),e.on("end",(()=>this.closeWithError(new Error("Server sent FIN packet unexpectedly, closing connection.")))),e.on("close",(e=>{e||this.closeWithError(new Error("Server closed connection unexpectedly."))})),this._setupDefaultErrorHandlers(e,"control socket")),this._socket=e}get dataSocket(){return this._dataSocket}set dataSocket(e){this._closeSocket(this._dataSocket),e&&(e.setTimeout(0),this._setupDefaultErrorHandlers(e,"data socket")),this._dataSocket=e}get encoding(){return this._encoding}set encoding(e){this._encoding=e,this.socket&&this.socket.setEncoding(e)}send(e){const t=e.startsWith("PASS")?"> PASS ###":`> ${e}`;this.log(t),this._socket.write(e+"\r\n",this.encoding)}request(e){return this.handle(e,((e,t)=>{e instanceof Error?t.reject(e):t.resolve(e)}))}handle(e,t){if(this._task){const e=new Error("User launched a task while another one is still running. Forgot to use 'await' or '.then()'?");e.stack+=`\nRunning task launched at: ${this._task.stack}`,this.closeWithError(e)}return new Promise(((r,i)=>{const n=(new Error).stack||"Unknown call stack",s={resolve:(...e)=>{this._stopTrackingTask(),r(...e)},reject:e=>{this._stopTrackingTask(),i(e)}};if(this._task={stack:n,resolver:s,responseHandler:t},this._closingError){const e=new Error("Client is closed");return e.stack+=`\nClosing reason: ${this._closingError.stack}`,e.code=void 0!==this._closingError.code?this._closingError.code:"0",void this._passToHandler(e)}this.socket.setTimeout(this.timeout),e&&this.send(e)}))}log(e){this.verbose&&console.log(e)}get hasTLS(){return"encrypted"in this._socket}_stopTrackingTask(){this.socket.setTimeout(0),this._task=void 0}_onControlSocketData(e){const t=e.trim();this.log(`< ${t}`);const r=this._partialResponse+t,i=n.parseControlResponse(r);this._partialResponse=i.rest;for(const e of i.messages){const t=parseInt(e.substr(0,3),10),r={code:t,message:e},i=t>=400?new s(r):void 0;this._passToHandler(i||r)}}_passToHandler(e){this._task&&this._task.responseHandler(e,this._task.resolver)}_setupDefaultErrorHandlers(e,t){e.once("error",(e=>{e.message+=` (${t})`,this.closeWithError(e)})),e.once("close",(e=>{e&&this.closeWithError(new Error(`Socket closed due to transmission error (${t})`))})),e.once("timeout",(()=>this.closeWithError(new Error(`Timeout (${t})`))))}_closeSocket(e){e&&(e.destroy(),this._removeSocketListeners(e))}_removeSocketListeners(e){e.removeAllListeners(),e.removeAllListeners("timeout"),e.removeAllListeners("data"),e.removeAllListeners("end"),e.removeAllListeners("error"),e.removeAllListeners("close"),e.removeAllListeners("connect")}_newSocket(){return new i.Socket}}},4200:(e,t)=>{"use strict";function r(){}Object.defineProperty(t,"__esModule",{value:!0}),t.ProgressTracker=void 0,t.ProgressTracker=class{constructor(){this.bytesOverall=0,this.intervalMs=500,this.onStop=r,this.onHandle=r}reportTo(e=r){this.onHandle=e}start(e,t,i){let n=0;this.onStop=function(e,t){const i=setInterval(t,e);return t(),e=>{clearInterval(i),e&&t(),t=r}}(this.intervalMs,(()=>{const r=e.bytesRead+e.bytesWritten;this.bytesOverall+=r-n,n=r,this.onHandle({name:t,type:i,bytes:r,bytesOverall:this.bytesOverall})}))}stop(){this.onStop(!1)}updateAndStop(){this.onStop(!0)}}},5111:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},344:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StringWriter=void 0;const i=r(8378);class n extends i.Writable{constructor(){super(...arguments),this.buf=Buffer.alloc(0)}_write(e,t,r){e instanceof Buffer?(this.buf=Buffer.concat([this.buf,e]),r(null)):r(new Error("StringWriter expects chunks of type 'Buffer'."))}getText(e){return this.buf.toString(e)}}t.StringWriter=n},7636:function(e,t,r){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||t.hasOwnProperty(r)||i(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),n(r(8327),t),n(r(4096),t),n(r(4020),t),n(r(3704),t),n(r(5111),t);var s=r(5224);Object.defineProperty(t,"enterPassiveModeIPv4",{enumerable:!0,get:function(){return s.enterPassiveModeIPv4}}),Object.defineProperty(t,"enterPassiveModeIPv6",{enumerable:!0,get:function(){return s.enterPassiveModeIPv6}})},6708:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ipIsPrivateV4Address=t.upgradeSocket=t.describeAddress=t.describeTLS=void 0;const i=r(192);t.describeTLS=function(e){if(e instanceof i.TLSSocket){return e.getProtocol()||"Server socket or disconnected client socket"}return"No encryption"},t.describeAddress=function(e){return"IPv6"===e.remoteFamily?`[${e.remoteAddress}]:${e.remotePort}`:`${e.remoteAddress}:${e.remotePort}`},t.upgradeSocket=function(e,t){return new Promise(((r,n)=>{const s=Object.assign({},t,{socket:e}),o=i.connect(s,(()=>{!1===s.rejectUnauthorized||o.authorized?(o.removeAllListeners("error"),r(o)):n(o.authorizationError)})).once("error",(e=>{n(e)}))}))},t.ipIsPrivateV4Address=function(e=""){e.startsWith("::ffff:")&&(e=e.substr(7));const t=e.split(".").map((e=>parseInt(e,10)));return 10===t[0]||172===t[0]&&t[1]>=16&&t[1]<=31||192===t[0]&&168===t[1]}},3512:(e,t)=>{"use strict";function r(e){return/^\d\d\d(?:$| )/.test(e)}function i(e){return/^\d\d\d-/.test(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.positiveIntermediate=t.positiveCompletion=t.isMultiline=t.isSingleLine=t.parseControlResponse=void 0,t.parseControlResponse=function(e){const t=e.split(/\r?\n/),n=[];let s,o=0;for(let e=0;e=200&&e<300},t.positiveIntermediate=function(e){return e>=300&&e<400}},3704:function(e,t,r){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.hasOwnProperty.call(e,r)&&i(t,e,r);return n(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.parseList=void 0;const o=[s(r(5908)),s(r(8512)),s(r(9660))];function a(e){return""!==e.trim()}const c=/\r?\n/;t.parseList=function(e){const t=e.split(c).filter(a);if(0===t.length)return[];const r=t[t.length-1],i=(n=r,o.find((e=>!0===e.testLine(n))));var n;if(!i)throw new Error("This library only supports MLSD, Unix- or DOS-style directory listing. Your FTP server seems to be using another format. You can see the transmitted listing when setting `client.ftp.verbose = true`. You can then provide a custom parser to `client.parseList`, see the documentation for details.");const s=t.map(i.parseLine).filter((e=>void 0!==e));return i.transformList(s)}},5908:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.transformList=t.parseLine=t.testLine=void 0;const i=r(4020),n=new RegExp("(\\S+)\\s+(\\S+)\\s+(?:()|([0-9]+))\\s+(\\S.*)");t.testLine=function(e){return/^\d{2}/.test(e)&&n.test(e)},t.parseLine=function(e){const t=e.match(n);if(null===t)return;const r=t[5];if("."===r||".."===r)return;const s=new i.FileInfo(r);return""===t[3]?(s.type=i.FileType.Directory,s.size=0):(s.type=i.FileType.File,s.size=parseInt(t[4],10)),s.rawModifiedAt=t[1]+" "+t[2],s},t.transformList=function(e){return e}},9660:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseMLSxDate=t.transformList=t.parseLine=t.testLine=void 0;const i=r(4020);function n(e,t){t.size=parseInt(e,10)}const s={size:n,sizd:n,unique:(e,t)=>{t.uniqueID=e},modify:(e,t)=>{t.modifiedAt=a(e),t.rawModifiedAt=t.modifiedAt.toISOString()},type:(e,t)=>{if(e.startsWith("OS.unix=slink"))return t.type=i.FileType.SymbolicLink,t.link=e.substr(e.indexOf(":")+1),1;switch(e){case"file":t.type=i.FileType.File;break;case"dir":t.type=i.FileType.Directory;break;case"OS.unix=symlink":t.type=i.FileType.SymbolicLink;break;case"cdir":case"pdir":return 2;default:t.type=i.FileType.Unknown}return 1},"unix.mode":(e,t)=>{const r=e.substr(-3);t.permissions={user:parseInt(r[0],10),group:parseInt(r[1],10),world:parseInt(r[2],10)}},"unix.ownername":(e,t)=>{t.user=e},"unix.owner":(e,t)=>{void 0===t.user&&(t.user=e)},get"unix.uid"(){return this["unix.owner"]},"unix.groupname":(e,t)=>{t.group=e},"unix.group":(e,t)=>{void 0===t.group&&(t.group=e)},get"unix.gid"(){return this["unix.group"]}};function o(e,t){const r=e.indexOf(t);return[e.substr(0,r),e.substr(r+t.length)]}function a(e){return new Date(Date.UTC(+e.slice(0,4),+e.slice(4,6)-1,+e.slice(6,8),+e.slice(8,10),+e.slice(10,12),+e.slice(12,14),+e.slice(15,18)))}t.testLine=function(e){return/^\S+=\S+;/.test(e)||e.startsWith(" ")},t.parseLine=function(e){const[t,r]=o(e," ");if(""===r||"."===r||".."===r)return;const n=new i.FileInfo(r),a=t.split(";");for(const e of a){const[t,r]=o(e,"=");if(!r)continue;const i=s[t.toLowerCase()];if(i&&2===i(r,n))return}return n},t.transformList=function(e){const t=new Map;for(const r of e)r.isSymbolicLink||void 0===r.uniqueID||t.set(r.uniqueID,r);const r=[];for(const i of e){if(i.isSymbolicLink&&void 0!==i.uniqueID&&void 0===i.link){const e=t.get(i.uniqueID);void 0!==e&&(i.link=e.name)}!i.name.includes("/")&&r.push(i)}return r},t.parseMLSxDate=a},8512:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.transformList=t.parseLine=t.testLine=void 0;const i=r(4020),n=new RegExp("([bcdelfmpSs-])(((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-])))\\+?\\s*(\\d+)\\s+(?:(\\S+(?:\\s\\S+)*?)\\s+)?(?:(\\S+(?:\\s\\S+)*)\\s+)?(\\d+(?:,\\s*\\d+)?)\\s+((?:\\d+[-/]\\d+[-/]\\d+)|(?:\\S{3}\\s+\\d{1,2})|(?:\\d{1,2}\\s+\\S{3})|(?:\\d{1,2}月\\s+\\d{1,2}日))\\s+((?:\\d+(?::\\d+)?)|(?:\\d{4}年))\\s(.*)");function s(e,t,r){let n=0;"-"!==e&&(n+=i.FileInfo.UnixPermission.Read),"-"!==t&&(n+=i.FileInfo.UnixPermission.Write);const s=r.charAt(0);return"-"!==s&&s.toUpperCase()!==s&&(n+=i.FileInfo.UnixPermission.Execute),n}t.testLine=function(e){return n.test(e)},t.parseLine=function(e){const t=e.match(n);if(null===t)return;const r=t[21];if("."===r||".."===r)return;const o=new i.FileInfo(r);switch(o.size=parseInt(t[18],10),o.user=t[16],o.group=t[17],o.hardLinkCount=parseInt(t[15],10),o.rawModifiedAt=t[19]+" "+t[20],o.permissions={user:s(t[4],t[5],t[6]),group:s(t[8],t[9],t[10]),world:s(t[12],t[13],t[14])},t[1].charAt(0)){case"d":o.type=i.FileType.Directory;break;case"e":case"l":o.type=i.FileType.SymbolicLink;break;case"b":case"c":case"f":case"-":o.type=i.FileType.File;break;default:o.type=i.FileType.Unknown}if(o.isSymbolicLink){const e=r.indexOf(" -> ");-1!==e&&(o.name=r.substring(0,e),o.link=r.substring(e+4))}return o},t.transformList=function(e){return e}},5224:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.downloadTo=t.uploadFrom=t.connectForPassiveTransfer=t.parsePasvResponse=t.enterPassiveModeIPv4=t.parseEpsvResponse=t.enterPassiveModeIPv6=void 0;const i=r(6708),n=r(192),s=r(3512);function o(e){const t=e.match(/[|!]{3}(.+)[|!]/);if(null===t||void 0===t[1])throw new Error(`Can't parse response to 'EPSV': ${e}`);const r=parseInt(t[1],10);if(Number.isNaN(r))throw new Error(`Can't parse response to 'EPSV', port is not a number: ${e}`);return r}function a(e){const t=e.match(/([-\d]+,[-\d]+,[-\d]+,[-\d]+),([-\d]+),([-\d]+)/);if(null===t||4!==t.length)throw new Error(`Can't parse response to 'PASV': ${e}`);return{host:t[1].replace(/,/g,"."),port:256*(255&parseInt(t[2],10))+(255&parseInt(t[3],10))}}function c(e,t,r){return new Promise(((i,s)=>{const o=function(e){e.message="Can't open data connection in passive mode: "+e.message,s(e)};let a=r._newSocket();a.on("error",o),a.connect({port:t,host:e,family:r.ipFamily},(()=>{r.socket instanceof n.TLSSocket&&(a=n.connect(Object.assign({},r.tlsOptions,{socket:a,session:r.socket.getSession()}))),a.removeListener("error",o),r.dataSocket=a,i()}))}))}t.enterPassiveModeIPv6=async function(e){const t=await e.request("EPSV"),r=o(t.message);if(!r)throw new Error("Can't parse EPSV response: "+t.message);const i=e.socket.remoteAddress;if(void 0===i)throw new Error("Control socket is disconnected, can't get remote address.");return await c(i,r,e),t},t.parseEpsvResponse=o,t.enterPassiveModeIPv4=async function(e){const t=await e.request("PASV"),r=a(t.message);if(!r)throw new Error("Can't parse PASV response: "+t.message);const n=e.socket.remoteAddress;return i.ipIsPrivateV4Address(r.host)&&n&&!i.ipIsPrivateV4Address(n)&&(r.host=n),await c(r.host,r.port,e),t},t.parsePasvResponse=a,t.connectForPassiveTransfer=c;class h{constructor(e,t){this.ftp=e,this.progress=t,this.response=void 0,this.dataTransferDone=!1}onDataStart(e,t){if(void 0===this.ftp.dataSocket)throw new Error("Data transfer should start but there is no data connection.");this.ftp.socket.setTimeout(0),this.ftp.dataSocket.setTimeout(this.ftp.timeout),this.progress.start(this.ftp.dataSocket,e,t)}onDataDone(e){this.progress.updateAndStop(),this.ftp.socket.setTimeout(this.ftp.timeout),this.ftp.dataSocket&&this.ftp.dataSocket.setTimeout(0),this.dataTransferDone=!0,this.tryResolve(e)}onControlDone(e,t){this.response=t,this.tryResolve(e)}onError(e,t){this.progress.updateAndStop(),this.ftp.socket.setTimeout(this.ftp.timeout),this.ftp.dataSocket=void 0,e.reject(t)}onUnexpectedRequest(e){const t=new Error(`Unexpected FTP response is requesting an answer: ${e.message}`);this.ftp.closeWithError(t)}tryResolve(e){this.dataTransferDone&&void 0!==this.response&&(this.ftp.dataSocket=void 0,e.resolve(this.response))}}function f(e,t,r,i){!0===e?i():t.once(r,(()=>i()))}t.uploadFrom=function(e,t){const r=new h(t.ftp,t.tracker),n=`${t.command} ${t.remotePath}`;return t.ftp.handle(n,((n,o)=>{if(n instanceof Error)r.onError(o,n);else if(150===n.code||125===n.code){const n=t.ftp.dataSocket;if(!n)return void r.onError(o,new Error("Upload should begin but no data connection is available."));f(!("getCipher"in n)||void 0!==n.getCipher(),n,"secureConnect",(()=>{t.ftp.log(`Uploading to ${i.describeAddress(n)} (${i.describeTLS(n)})`),r.onDataStart(t.remotePath,t.type),e.pipe(n).once("finish",(()=>{n.destroy(),r.onDataDone(o)}))}))}else s.positiveCompletion(n.code)?r.onControlDone(o,n):s.positiveIntermediate(n.code)&&r.onUnexpectedRequest(n)}))},t.downloadTo=function(e,t){if(!t.ftp.dataSocket)throw new Error("Download will be initiated but no data connection is available.");t.ftp.dataSocket.pipe(e);const r=new h(t.ftp,t.tracker);return t.ftp.handle(t.command,((n,o)=>{if(n instanceof Error)r.onError(o,n);else if(150===n.code||125===n.code){const n=t.ftp.dataSocket;if(!n)return void r.onError(o,new Error("Download should begin but no data connection is available."));t.ftp.log(`Downloading from ${i.describeAddress(n)} (${i.describeTLS(n)})`),r.onDataStart(t.remotePath,t.type),f(function(e){if(e.writableFinished)return!0;const t=e._writableState;return!(!t||t.errored)&&(t.finished||t.ended&&0===t.length)}(e),e,"finish",(()=>r.onDataDone(o)))}else 350===n.code?t.ftp.send("RETR "+t.remotePath):s.positiveCompletion(n.code)?r.onControlDone(o,n):s.positiveIntermediate(n.code)&&r.onUnexpectedRequest(n)}))}},4688:(e,t,r)=>{"use strict";var i=r(9268).lowlevel.crypto_hash,n=0,s=function(){this.S=[new Uint32Array([3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946]),new Uint32Array([1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055]),new Uint32Array([3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504]),new Uint32Array([976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462])],this.P=new Uint32Array([608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731])};function o(e,t,r){return(e[0][t[r+3]]+e[1][t[r+2]]^e[2][t[r+1]])+e[3][t[r]]}function a(e,t){var r,i=0;for(r=0;r<4;r++,n++)n>=t&&(n=0),i=i<<8|e[n];return i}s.prototype.encipher=function(e,t){void 0===t&&(t=new Uint8Array(e.buffer),0!==e.byteOffset&&(t=t.subarray(e.byteOffset))),e[0]^=this.P[0];for(var r=1;r<16;r+=2)e[1]^=o(this.S,t,0)^this.P[r],e[0]^=o(this.S,t,4)^this.P[r+1];var i=e[0];e[0]=e[1]^this.P[17],e[1]=i},s.prototype.decipher=function(e){var t=new Uint8Array(e.buffer);0!==e.byteOffset&&(t=t.subarray(e.byteOffset)),e[0]^=this.P[17];for(var r=16;r>0;r-=2)e[1]^=o(this.S,t,0)^this.P[r],e[0]^=o(this.S,t,4)^this.P[r-1];var i=e[0];e[0]=e[1]^this.P[0],e[1]=i},s.prototype.expand0state=function(e,t){var r,i,s=new Uint32Array(2),o=new Uint8Array(s.buffer);for(r=0,n=0;r<18;r++)this.P[r]^=a(e,t);for(n=0,r=0;r<18;r+=2)this.encipher(s,o),this.P[r]=s[0],this.P[r+1]=s[1];for(r=0;r<4;r++)for(i=0;i<256;i+=2)this.encipher(s,o),this.S[r][i]=s[0],this.S[r][i+1]=s[1]},s.prototype.expandstate=function(e,t,r,i){var s,o,c=new Uint32Array(2);for(s=0,n=0;s<18;s++)this.P[s]^=a(r,i);for(s=0,n=0;s<18;s+=2)c[0]^=a(e,t),c[1]^=a(e,t),this.encipher(c),this.P[s]=c[0],this.P[s+1]=c[1];for(s=0;s<4;s++)for(o=0;o<256;o+=2)c[0]^=a(e,t),c[1]^=a(e,t),this.encipher(c),this.S[s][o]=c[0],this.S[s][o+1]=c[1];n=0},s.prototype.enc=function(e,t){for(var r=0;r>>24,r[4*i+2]=o[i]>>>16,r[4*i+1]=o[i]>>>8,r[4*i+0]=o[i]}e.exports={BLOCKS:8,HASHSIZE:32,hash:c,pbkdf:function(e,t,r,n,s,o,a){var h,f,u,l,p,d,g=new Uint8Array(64),E=new Uint8Array(64),m=new Uint8Array(32),v=new Uint8Array(32),y=new Uint8Array(n+4),_=o;if(a<1)return-1;if(0===t||0===n||0===o||o>m.byteLength*m.byteLength||n>1<<20)return-1;for(l=Math.floor((o+m.byteLength-1)/m.byteLength),u=Math.floor((o+l-1)/l),h=0;h0;d++){for(y[n+0]=d>>>24,y[n+1]=d>>>16,y[n+2]=d>>>8,y[n+3]=d,i(E,y,n+4),c(g,E,v),h=m.byteLength;h--;)m[h]=v[h];for(h=1;h=_);h++)s[p]=m[h];o-=h}return 0}}},6968:(e,t,r)=>{"use strict";var i,n=r(2588),s=n.Buffer,o={};for(i in n)n.hasOwnProperty(i)&&"SlowBuffer"!==i&&"Buffer"!==i&&(o[i]=n[i]);var a=o.Buffer={};for(i in s)s.hasOwnProperty(i)&&"allocUnsafe"!==i&&"allocUnsafeSlow"!==i&&(a[i]=s[i]);if(o.Buffer.prototype=s.prototype,a.from&&a.from!==Uint8Array.from||(a.from=function(e,t,r){if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type '+typeof e);if(e&&void 0===e.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);return s(e,t,r)}),a.alloc||(a.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError('The "size" argument must be of type number. Received type '+typeof e);if(e<0||e>=2*(1<<30))throw new RangeError('The value "'+e+'" is invalid for option "size"');var i=s(e);return t&&0!==t.length?"string"==typeof r?i.fill(t,r):i.fill(t):i.fill(0),i}),!o.kStringMaxLength)try{o.kStringMaxLength=process.binding("buffer").kStringMaxLength}catch(e){}o.constants||(o.constants={MAX_LENGTH:o.kMaxLength},o.kStringMaxLength&&(o.constants.MAX_STRING_LENGTH=o.kStringMaxLength)),e.exports=o},1240:(e,t,r)=>{var i=r(467).EventEmitter;function n(e,t,r,i,n){for(var s=0;s=1)for(t=0;t-this._lookbehind_size?this.emit("info",!0,c,0,this._lookbehind_size+s):this.emit("info",!0),this._bufpos=s+i,s+i;s+=a[f]}if(s<0)for(;s<0&&!this._sbmh_memcmp(e,s,t-s);)s++;if(!(s>=0)){var h=this._lookbehind_size+s;return h>0&&this.emit("info",!1,c,0,h),c.copy(c,0,h,this._lookbehind_size-h),this._lookbehind_size-=h,e.copy(c,this._lookbehind_size),this._lookbehind_size+=t,this._bufpos=t,t}this.emit("info",!1,c,0,this._lookbehind_size),this._lookbehind_size=0}for(s>=0&&(s+=this._bufpos);s<=t-i;){var f;if((f=e[s+i-1])===o&&e[s]===r[0]&&n(r,0,e,s,i-1))return++this.matches,s>0?this.emit("info",!0,e,this._bufpos,s):this.emit("info",!0),this._bufpos=s+i,s+i;s+=a[f]}if(s0&&this.emit("info",!1,e,this._bufpos,s{e.on("connect",this.onConnect),e.on("disconnect",this.onDisconnect),e.on("progress",this.onProgress)},this.clearWorkerEvents=e=>{e.removeListener("connect",this.onConnect),e.removeListener("disconnect",this.onDisconnect),e.removeListener("progress",this.onProgress)},this.getWorkerInstance=e=>this.workers[e],this.workerFilter=(e,t)=>"all"===e.group||!t&&"misc"===e.group||e.group===t,this.onConnect=()=>{this.emit("connect")},this.onDisconnect=()=>{this.emit("disconnect")},this.onProgress=(e,t)=>{this.emit("transfer-progress",e,t)},this.options=Object.assign({pool:1},e),this.tasks.getWorkerInstance=this.getWorkerInstance,this.tasks.workerFilter=this.workerFilter}registerProtocol(e,t){this.strategies[e]=t}unregisterProtocol(e){delete this.strategies[e]}createWorker(){const{protocol:e}=this.config,t=this.strategies[e];if(!t)throw new Error(`Strategy for protocol ${e} not found.`);return new t(this.config,this._connectionOptions)}setWorkers(){this.workers.forEach(this.clearWorkerEvents),this.workers=[];const{pool:e}=this.options;for(let t=0;te.connect())))}))}disconnect(){return i(this,void 0,void 0,(function*(){yield Promise.all(this.workers.map((e=>e.disconnect())))}))}abort(){return i(this,void 0,void 0,(function*(){this.emit("transfer-abort",...this.transfers.keys()),this.tasks.deleteAllTasks(),yield Promise.all(this.workers.map((e=>e.abort())))}))}abortTransfer(...e){return i(this,void 0,void 0,(function*(){const t=[],r=[];e.forEach((e=>{const i=this.transfers.get(e);null!=i&&r.push(this.workers[i]),t.push(i),this.emit("transfer-abort",e)})),this.tasks.deleteTasks(...e),this.tasks.pauseWorkers(...t),yield Promise.all(r.map((e=>e.abort()))),this.tasks.resumeWorkers(...t)}))}download(e,t,r){let n,o;return"string"==typeof e?(n=(0,s.createWriteStream)(e,{flags:r?"a":"w",start:r}),o=e):(n=e,o=(0,h.getPathFromStream)(e)),this.handleTransfer((({instance:e,taskId:s})=>i(this,void 0,void 0,(function*(){const i=yield e.size(t);yield e.download(n,{id:s,startAt:r,localPath:o,remotePath:t,totalBytes:i})}))),{remotePath:t,localPath:o})}upload(e,t){let r,n;return"string"==typeof e?(r=(0,s.createReadStream)(e),n=e):(r=e,n=(0,h.getPathFromStream)(e)),this.handleTransfer((({instance:e,taskId:s})=>i(this,void 0,void 0,(function*(){const i=yield(0,h.getFileSize)(n);yield e.upload(r,{id:s,localPath:n,remotePath:t,totalBytes:i})}))),{remotePath:t,localPath:n})}list(e){return this.tasks.handle((({instance:t})=>t.list(e)))}size(e){return this.tasks.handle((({instance:t})=>t.size(e)))}exists(e){return this.tasks.handle((({instance:t})=>t.exists(e)))}move(e,t){return this.tasks.handle((({instance:r})=>r.move(e,t)))}removeFile(e){return this.tasks.handle((({instance:t})=>t.removeFile(e)))}removeEmptyFolder(e){return this.tasks.handle((({instance:t})=>t.removeEmptyFolder(e)))}removeFolder(e){return this.tasks.handle((({instance:t})=>t.removeFolder(e)))}createFolder(e){return this.tasks.handle((({instance:t})=>t.createFolder(e)))}createEmptyFile(e){return this.tasks.handle((({instance:t})=>t.createEmptyFile(e)))}pwd(){return this.tasks.handle((({instance:e})=>e.pwd()))}send(e){return this.tasks.handle((({instance:t})=>t.send(e)))}handleTransfer(e,t){return i(this,void 0,void 0,(function*(){const r=this.tasks.createTaskId(),n=Object.assign({id:r},t);this.transfers.set(r,null),this.emit("transfer-new",n);try{yield this.tasks.handle((t=>i(this,void 0,void 0,(function*(){this.transfers.set(r,t.workerIndex),yield e(t)}))),"transfer-transfer",r)}catch(e){throw e}finally{this.transfers.delete(r),this.emit("transfer-finish",n)}}))}}t.Client=u},8652:function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.FtpStrategy=void 0;const n=r(7636),s=r(8378),o=r(3911),a=r(3828);class c extends o.Strategy{constructor(){super(...arguments),this.connect=()=>i(this,void 0,void 0,(function*(){var e;this.connected||(this.client||(this.client=new n.Client),yield this.client.access(Object.assign({secure:this.isFTPS,secureOptions:null===(e=this.options)||void 0===e?void 0:e.secureOptions},this.config)),this.emit("connect"))})),this.disconnect=()=>i(this,void 0,void 0,(function*(){return this.connected?(this.emit("disconnect"),new Promise((e=>{this.client.close(),this.client.ftp.socket.once("close",(()=>{this.client=null,e()}))}))):null})),this.download=(e,t,r)=>i(this,void 0,void 0,(function*(){return this.handleTransfer((()=>this.client.downloadTo(e,t.remotePath,t.startAt)),t,r)})),this.upload=(e,t,r)=>i(this,void 0,void 0,(function*(){return this.handleTransfer((()=>this.client.uploadFrom(e,t.remotePath)),t,r)})),this.list=e=>this.handle((()=>this.client.list(e).then((e=>e.map(this.formatFile))))),this.size=e=>this.handle((()=>this.client.size(e))),this.exists=e=>i(this,void 0,void 0,(function*(){try{yield this.client.rename(e,e)}catch(e){return!1}return!0})),this.move=(e,t)=>this.handle((()=>this.client.rename(e,t))),this.removeFile=e=>this.handle((()=>this.client.remove(e))),this.removeEmptyFolder=e=>this.handle((()=>this.client.removeEmptyDir(e))),this.removeFolder=e=>this.handle((()=>this.client.removeDir(e))),this.createFolder=e=>i(this,void 0,void 0,(function*(){yield this.send(`MKD ${e}`)})),this.createEmptyFile=e=>i(this,void 0,void 0,(function*(){const t=s.Readable.from("\n");yield this.upload(t,{remotePath:e},{quiet:!0})})),this.pwd=()=>this.handle((()=>this.client.pwd())),this.send=e=>this.handle((()=>this.client.send(e).then((e=>e.message)))),this.formatFile=e=>Object.assign(Object.assign({},a.FtpUtils.formatFile(e)),{lastModified:a.FtpUtils.getValidDate(e.date)}),this.handle=e=>i(this,void 0,void 0,(function*(){try{return yield e()}catch(e){const t=e.message;if("Client is closed"!==t&&!t.startsWith("User closed client during task"))throw e}return null})),this.handleTransfer=(e,t,r)=>i(this,void 0,void 0,(function*(){var i;const n=this.prepareTransfer(t,r);this.client.trackProgress((e=>n(e.bytes))),yield this.handle(e),null===(i=this.client)||void 0===i||i.trackProgress(void 0),this.finishTransfer()}))}get connected(){var e;return!1===(null===(e=this.client)||void 0===e?void 0:e.closed)}get isFTPS(){return"ftps"===this.config.protocol}get socket(){var e,t;return null===(t=null===(e=this.client)||void 0===e?void 0:e.ftp)||void 0===t?void 0:t.socket}}t.FtpStrategy=c},6711:function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.SftpStrategy=void 0;const n=r(970),s=r(461),o=r(7636),a=r(3911),c=r(3828);class h extends a.Strategy{constructor(){super(...arguments),this.connected=!1,this.connect=()=>new Promise(((e,t)=>{var r,n;if(this.connected)return e();this.client=new s.Client;const o=()=>{this.client.removeListener("error",a),this.client.removeListener("ready",c),this.client.removeListener("keyboard-interactive",this.onKeyboardInteractive)},a=e=>{o(),t(e)},c=()=>i(this,void 0,void 0,(function*(){o();try{this.wrapper=yield this.getWrapper(),this.connected=!0,this.emit("connect"),e()}catch(e){t(e)}finally{o()}}));this.client.once("error",a),this.client.once("ready",c),this.client.once("end",this.onDisconnect),(null===(r=this.options)||void 0===r?void 0:r.tryKeyboard)&&this.client.once("keyboard-interactive",this.onKeyboardInteractive),this.client.connect(Object.assign(Object.assign({},this.config),{username:this.config.user,readyTimeout:null===(n=this.options)||void 0===n?void 0:n.timeout}))})),this.onKeyboardInteractive=(e,t,r,i,n)=>{n([this.config.password])},this.onDisconnect=()=>{this.connected=!1,this.client=null,this.wrapper=null,this.emit("disconnect")},this.disconnect=()=>this.connected?new Promise((e=>{this.socket.once("close",(()=>{e()})),this.client.end()})):null,this.download=(e,t,r)=>i(this,void 0,void 0,(function*(){var i;const n=null===(i=this.wrapper)||void 0===i?void 0:i.createReadStream(t.remotePath,{start:t.startAt,autoClose:!0});return this.handleTransfer(n,e,t,r)})),this.upload=(e,t,r)=>i(this,void 0,void 0,(function*(){var i;const n=null===(i=this.wrapper)||void 0===i?void 0:i.createWriteStream(t.remotePath);return this.handleTransfer(e,n,t,r)})),this.list=(e="./")=>this._list(e).then((e=>null==e?void 0:e.map((e=>this.formatFile((0,o.parseList)(e.longname)[0],e))))),this.formatFile=(e,t)=>Object.assign(Object.assign({},c.FtpUtils.formatFile(e)),{lastModified:c.FtpUtils.getDateFromUnixTime(t.attrs.mtime)}),this.size=e=>this._stat(e).then((e=>null==e?void 0:e.size)),this.exists=e=>i(this,void 0,void 0,(function*(){try{yield this._stat(e)}catch(e){return!1}return!0})),this.move=(e,t)=>{var r;return this.handle(null===(r=this.wrapper)||void 0===r?void 0:r.rename,e,t)},this.removeFile=e=>{var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.unlink,e)},this.removeEmptyFolder=e=>{var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.rmdir,e)},this.removeFolder=e=>i(this,void 0,void 0,(function*(){const t=yield this._list(e);if(t.length)for(const r of t){const t=e+"/"+r.filename;r.attrs.isDirectory()?yield this.removeFolder(t):yield this.removeFile(t)}yield this.removeEmptyFolder(e)})),this.createFolder=e=>{var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.mkdir,e)},this.createEmptyFile=e=>i(this,void 0,void 0,(function*(){const t=yield this._open(e,"w");t&&(yield this._close(t))})),this.pwd=()=>{var e;return this.handle(null===(e=this.wrapper)||void 0===e?void 0:e.realpath,"./")},this.send=e=>i(this,void 0,void 0,(function*(){let t="";return yield this.handleNetwork(((r,i)=>{this.client.exec(e,((e,n)=>{if(e)return i(e);n.on("data",(e=>{t+=e})),n.once("error",i),n.once("close",r)}))}),(()=>{})),t})),this.handle=(e,...t)=>this.handleNetwork(((r,i)=>{if(!e)return r(null);e.bind(this.wrapper)(...t,((e,...t)=>{if(e)return i(e);r(...t)}))})),this.handleTransfer=(e,t,r,i)=>{if(!e||!t)return null;const n=this.prepareTransfer(r,i);return this.handleNetwork(((r,i)=>{let s=0;e.on("data",(e=>{s+=e.byteLength,n(s)})),e.once("error",i),e.once("close",r),e.pipe(t)}),(()=>{e.unpipe(t),e.removeAllListeners(),this.finishTransfer()}))}}get socket(){return this.client._sock}getWrapper(){return(0,n.promisify)(this.client.sftp).bind(this.client)()}_list(e){var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.readdir,e)}_stat(e){var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.stat,e)}_open(e,t){var r;return this.handle(null===(r=this.wrapper)||void 0===r?void 0:r.open,e,t)}_close(e){var t;return this.handle(null===(t=this.wrapper)||void 0===t?void 0:t.close,e)}}t.SftpStrategy=h},3911:function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.Strategy=void 0;const n=r(467),s=r(9992);class o extends n.EventEmitter{abort(){return i(this,void 0,void 0,(function*(){yield this.disconnect(),yield this.connect()}))}constructor(e,t){super(),this.config=e,this.options=t}prepareTransfer(e,t){return this.transfer=new s.Transfer(e,t,((e,t)=>{this.emit("progress",e,t)})),this.transfer.handleProgress}finishTransfer(){this.transfer=null}handleNetwork(e,t){return new Promise(((r,i)=>{const n=()=>{this.removeListener("disconnect",s),t&&t(o,a)},s=()=>o(null),o=e=>{n(),r(e)},a=e=>{n(),i(e)};this.once("disconnect",s),e(o,a)}))}}t.Strategy=o},9748:function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.TasksManager=void 0;const n=r(467),s=r(9512),o=(e,t)=>e.group===t;class a extends n.EventEmitter{constructor(){super(...arguments),this.workers=[],this.queue=[],this.taskCounter=-1,this.unavailableWorkers=0,this.process=(e,t)=>i(this,void 0,void 0,(function*(){if(t=t||this.getWorker(e.group)){t.busy=!0,this.unavailableWorkers++;const r=this.getWorkerInstance?this.getWorkerInstance(t.index,e.group):t.index,{data:i,error:n}=yield(0,s.execFunction)(e.fn,{instance:r,taskId:e.id,workerIndex:t.index});t.busy=!1,this.unavailableWorkers--,this.finishTask(e.id,i,n),this.processNext()}else this.queue.push(e)}))}getWorker(e){if(this.unavailableWorkers===this.workers.length)return null;const t=this.workerFilter||o;return this.workers.find((r=>!r.busy&&!r.paused&&t(r,e)))}getWorkers(e){return(null==e?void 0:e.length)?e.map((e=>this.workers[e])):this.workers}setWorkers(...e){this.workers=e.map(((e,t)=>({busy:!1,group:e,index:t})))}handle(e,t,r){return i(this,void 0,void 0,(function*(){return this.workersCheck(),new Promise(((i,n)=>{const s={id:null!=r?r:this.createTaskId(),fn:e,group:t},o=e=>{if(e.taskId===s.id){if(this.removeListener("change",o),e.error)return n(e.error);i(e.data)}};this.on("change",o),this.process(s)}))}))}processNext(){return i(this,void 0,void 0,(function*(){if(this.queue.length){const e=[];for(const t of this.queue){const r=this.getWorker(t.group);r?this.process(t,r):e.push(t)}this.queue=e}}))}workersCheck(){if(!this.workers.length)throw new Error("No workers set")}pauseWorkers(...e){this.unavailableWorkers+=e.length,this.getWorkers(e).forEach((e=>e.paused=!0))}resumeWorkers(...e){this.unavailableWorkers-=e.length,this.getWorkers(e).forEach((e=>e.paused=!1)),this.processNext()}deleteTasks(...e){const t=[];this.queue.forEach((r=>{e.includes(r.id)?this.finishTask(r.id):t.push(r)})),this.queue=t}deleteAllTasks(){this.queue.forEach((e=>this.finishTask(e.id))),this.queue=[]}createTaskId(){return++this.taskCounter}finishTask(e,t,r){this.emit("change",{taskId:e,data:t,error:r,type:"finished"})}}t.TasksManager=a},9992:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Transfer=void 0,t.Transfer=class{constructor(e,t,r){var i;this.info=e,this.options=t,this.onProgress=r,this.handleProgress=e=>{var t;this.bytes=e;const{id:r,localPath:i,remotePath:n,totalBytes:s}=this.info;(null===(t=this.options)||void 0===t?void 0:t.quiet)||this.onProgress({id:r,localPath:i,remotePath:n},{bytes:e,totalBytes:s,speed:this.speed,eta:this.eta,percent:this.percent})},this.startTime=Date.now(),this.bytes=null!==(i=null==e?void 0:e.startAt)&&void 0!==i?i:0}get elapsed(){return(Date.now()-this.startTime)/1e3}get speed(){const e=this.elapsed;return 0===e?0:Math.round(this.bytes/e)}get eta(){if(0===this.speed)return null;const e=this.info.totalBytes/this.speed;return Math.round(e-this.elapsed)}get percent(){return Math.round(this.bytes/this.info.totalBytes*100)}}},5520:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.repeat=void 0,t.repeat=(e,t)=>Array(t).fill(e)},5712:function(e,t,r){"use strict";var i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.getFileSize=t.getPathFromStream=void 0;const n=r(2058);t.getPathFromStream=e=>e.path,t.getFileSize=e=>i(void 0,void 0,void 0,(function*(){if(!e)return-1;const{size:t}=yield n.promises.stat(e);return t}))},3828:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FtpUtils=void 0;const i=r(7636),n=/[0-9][0-9]-[0-9][0-9]-[0-9][0-9]\s[0-9][0-9]\:[0-9][0-9][PA]M/gi;t.FtpUtils=class{static formatFile(e){const{permissions:t,name:r,size:i,user:n,group:s,type:o}=e;return{name:r,type:this.getFileType(o),size:i,owner:n,group:s,permissions:{owner:null==t?void 0:t.user,group:null==t?void 0:t.group}}}static getFileType(e){switch(e){case i.FileType.Directory:return"folder";case i.FileType.File:return"file";case i.FileType.SymbolicLink:return"symbolic-link"}return"unknown"}static getValidDate(e){const t=e.trim();if(!t.match(n))return new Date(t);const[r,i,s,o,a]=t.match(/[0-9][0-9]/g);let c=parseInt(o);return"P"===t[t.length-2]&&(c+=12),new Date(parseInt(`20${s}`),parseInt(r)-1,parseInt(i),c,parseInt(a))}static getDateFromUnixTime(e){return new Date(1e3*e)}}},9512:function(e,t){"use strict";var r=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function a(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.execFunction=void 0,t.execFunction=(e,...t)=>r(void 0,void 0,void 0,(function*(){let r,i;try{r=yield e(...t)}catch(e){i=e}return{data:r,error:i}}))},9268:(e,t,r)=>{!function(e){"use strict";var t=function(e){var t,r=new Float64Array(16);if(e)for(t=0;t>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r,e[t+4]=i>>24&255,e[t+5]=i>>16&255,e[t+6]=i>>8&255,e[t+7]=255&i}function g(e,t,r,i,n){var s,o=0;for(s=0;s>>8)-1}function E(e,t,r,i){return g(e,t,r,i,16)}function m(e,t,r,i){return g(e,t,r,i,32)}function v(e,t,r,i){!function(e,t,r,i){for(var n,s=255&i[0]|(255&i[1])<<8|(255&i[2])<<16|(255&i[3])<<24,o=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,a=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,c=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,h=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,f=255&i[4]|(255&i[5])<<8|(255&i[6])<<16|(255&i[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,l=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,p=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,d=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,g=255&i[8]|(255&i[9])<<8|(255&i[10])<<16|(255&i[11])<<24,E=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,m=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,v=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,y=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,_=255&i[12]|(255&i[13])<<8|(255&i[14])<<16|(255&i[15])<<24,w=s,b=o,S=a,k=c,T=h,A=f,U=u,B=l,R=p,N=d,P=g,D=E,O=m,I=v,C=y,L=_,H=0;H<20;H+=2)w^=(n=(O^=(n=(R^=(n=(T^=(n=w+O|0)<<7|n>>>25)+w|0)<<9|n>>>23)+T|0)<<13|n>>>19)+R|0)<<18|n>>>14,A^=(n=(b^=(n=(I^=(n=(N^=(n=A+b|0)<<7|n>>>25)+A|0)<<9|n>>>23)+N|0)<<13|n>>>19)+I|0)<<18|n>>>14,P^=(n=(U^=(n=(S^=(n=(C^=(n=P+U|0)<<7|n>>>25)+P|0)<<9|n>>>23)+C|0)<<13|n>>>19)+S|0)<<18|n>>>14,L^=(n=(D^=(n=(B^=(n=(k^=(n=L+D|0)<<7|n>>>25)+L|0)<<9|n>>>23)+k|0)<<13|n>>>19)+B|0)<<18|n>>>14,w^=(n=(k^=(n=(S^=(n=(b^=(n=w+k|0)<<7|n>>>25)+w|0)<<9|n>>>23)+b|0)<<13|n>>>19)+S|0)<<18|n>>>14,A^=(n=(T^=(n=(B^=(n=(U^=(n=A+T|0)<<7|n>>>25)+A|0)<<9|n>>>23)+U|0)<<13|n>>>19)+B|0)<<18|n>>>14,P^=(n=(N^=(n=(R^=(n=(D^=(n=P+N|0)<<7|n>>>25)+P|0)<<9|n>>>23)+D|0)<<13|n>>>19)+R|0)<<18|n>>>14,L^=(n=(C^=(n=(I^=(n=(O^=(n=L+C|0)<<7|n>>>25)+L|0)<<9|n>>>23)+O|0)<<13|n>>>19)+I|0)<<18|n>>>14;w=w+s|0,b=b+o|0,S=S+a|0,k=k+c|0,T=T+h|0,A=A+f|0,U=U+u|0,B=B+l|0,R=R+p|0,N=N+d|0,P=P+g|0,D=D+E|0,O=O+m|0,I=I+v|0,C=C+y|0,L=L+_|0,e[0]=w>>>0&255,e[1]=w>>>8&255,e[2]=w>>>16&255,e[3]=w>>>24&255,e[4]=b>>>0&255,e[5]=b>>>8&255,e[6]=b>>>16&255,e[7]=b>>>24&255,e[8]=S>>>0&255,e[9]=S>>>8&255,e[10]=S>>>16&255,e[11]=S>>>24&255,e[12]=k>>>0&255,e[13]=k>>>8&255,e[14]=k>>>16&255,e[15]=k>>>24&255,e[16]=T>>>0&255,e[17]=T>>>8&255,e[18]=T>>>16&255,e[19]=T>>>24&255,e[20]=A>>>0&255,e[21]=A>>>8&255,e[22]=A>>>16&255,e[23]=A>>>24&255,e[24]=U>>>0&255,e[25]=U>>>8&255,e[26]=U>>>16&255,e[27]=U>>>24&255,e[28]=B>>>0&255,e[29]=B>>>8&255,e[30]=B>>>16&255,e[31]=B>>>24&255,e[32]=R>>>0&255,e[33]=R>>>8&255,e[34]=R>>>16&255,e[35]=R>>>24&255,e[36]=N>>>0&255,e[37]=N>>>8&255,e[38]=N>>>16&255,e[39]=N>>>24&255,e[40]=P>>>0&255,e[41]=P>>>8&255,e[42]=P>>>16&255,e[43]=P>>>24&255,e[44]=D>>>0&255,e[45]=D>>>8&255,e[46]=D>>>16&255,e[47]=D>>>24&255,e[48]=O>>>0&255,e[49]=O>>>8&255,e[50]=O>>>16&255,e[51]=O>>>24&255,e[52]=I>>>0&255,e[53]=I>>>8&255,e[54]=I>>>16&255,e[55]=I>>>24&255,e[56]=C>>>0&255,e[57]=C>>>8&255,e[58]=C>>>16&255,e[59]=C>>>24&255,e[60]=L>>>0&255,e[61]=L>>>8&255,e[62]=L>>>16&255,e[63]=L>>>24&255}(e,t,r,i)}function y(e,t,r,i){!function(e,t,r,i){for(var n,s=255&i[0]|(255&i[1])<<8|(255&i[2])<<16|(255&i[3])<<24,o=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,a=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,c=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,h=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,f=255&i[4]|(255&i[5])<<8|(255&i[6])<<16|(255&i[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,l=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,p=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,d=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,g=255&i[8]|(255&i[9])<<8|(255&i[10])<<16|(255&i[11])<<24,E=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,m=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,v=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,y=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,_=255&i[12]|(255&i[13])<<8|(255&i[14])<<16|(255&i[15])<<24,w=0;w<20;w+=2)s^=(n=(m^=(n=(p^=(n=(h^=(n=s+m|0)<<7|n>>>25)+s|0)<<9|n>>>23)+h|0)<<13|n>>>19)+p|0)<<18|n>>>14,f^=(n=(o^=(n=(v^=(n=(d^=(n=f+o|0)<<7|n>>>25)+f|0)<<9|n>>>23)+d|0)<<13|n>>>19)+v|0)<<18|n>>>14,g^=(n=(u^=(n=(a^=(n=(y^=(n=g+u|0)<<7|n>>>25)+g|0)<<9|n>>>23)+y|0)<<13|n>>>19)+a|0)<<18|n>>>14,_^=(n=(E^=(n=(l^=(n=(c^=(n=_+E|0)<<7|n>>>25)+_|0)<<9|n>>>23)+c|0)<<13|n>>>19)+l|0)<<18|n>>>14,s^=(n=(c^=(n=(a^=(n=(o^=(n=s+c|0)<<7|n>>>25)+s|0)<<9|n>>>23)+o|0)<<13|n>>>19)+a|0)<<18|n>>>14,f^=(n=(h^=(n=(l^=(n=(u^=(n=f+h|0)<<7|n>>>25)+f|0)<<9|n>>>23)+u|0)<<13|n>>>19)+l|0)<<18|n>>>14,g^=(n=(d^=(n=(p^=(n=(E^=(n=g+d|0)<<7|n>>>25)+g|0)<<9|n>>>23)+E|0)<<13|n>>>19)+p|0)<<18|n>>>14,_^=(n=(y^=(n=(v^=(n=(m^=(n=_+y|0)<<7|n>>>25)+_|0)<<9|n>>>23)+m|0)<<13|n>>>19)+v|0)<<18|n>>>14;e[0]=s>>>0&255,e[1]=s>>>8&255,e[2]=s>>>16&255,e[3]=s>>>24&255,e[4]=f>>>0&255,e[5]=f>>>8&255,e[6]=f>>>16&255,e[7]=f>>>24&255,e[8]=g>>>0&255,e[9]=g>>>8&255,e[10]=g>>>16&255,e[11]=g>>>24&255,e[12]=_>>>0&255,e[13]=_>>>8&255,e[14]=_>>>16&255,e[15]=_>>>24&255,e[16]=u>>>0&255,e[17]=u>>>8&255,e[18]=u>>>16&255,e[19]=u>>>24&255,e[20]=l>>>0&255,e[21]=l>>>8&255,e[22]=l>>>16&255,e[23]=l>>>24&255,e[24]=p>>>0&255,e[25]=p>>>8&255,e[26]=p>>>16&255,e[27]=p>>>24&255,e[28]=d>>>0&255,e[29]=d>>>8&255,e[30]=d>>>16&255,e[31]=d>>>24&255}(e,t,r,i)}var _=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function w(e,t,r,i,n,s,o){var a,c,h=new Uint8Array(16),f=new Uint8Array(64);for(c=0;c<16;c++)h[c]=0;for(c=0;c<8;c++)h[c]=s[c];for(;n>=64;){for(v(f,h,o,_),c=0;c<64;c++)e[t+c]=r[i+c]^f[c];for(a=1,c=8;c<16;c++)a=a+(255&h[c])|0,h[c]=255&a,a>>>=8;n-=64,t+=64,i+=64}if(n>0)for(v(f,h,o,_),c=0;c=64;){for(v(c,a,n,_),o=0;o<64;o++)e[t+o]=c[o];for(s=1,o=8;o<16;o++)s=s+(255&a[o])|0,a[o]=255&s,s>>>=8;r-=64,t+=64}if(r>0)for(v(c,a,n,_),o=0;o>>13|r<<3),i=255&e[4]|(255&e[5])<<8,this.r[2]=7939&(r>>>10|i<<6),n=255&e[6]|(255&e[7])<<8,this.r[3]=8191&(i>>>7|n<<9),s=255&e[8]|(255&e[9])<<8,this.r[4]=255&(n>>>4|s<<12),this.r[5]=s>>>1&8190,o=255&e[10]|(255&e[11])<<8,this.r[6]=8191&(s>>>14|o<<2),a=255&e[12]|(255&e[13])<<8,this.r[7]=8065&(o>>>11|a<<5),c=255&e[14]|(255&e[15])<<8,this.r[8]=8191&(a>>>8|c<<8),this.r[9]=c>>>5&127,this.pad[0]=255&e[16]|(255&e[17])<<8,this.pad[1]=255&e[18]|(255&e[19])<<8,this.pad[2]=255&e[20]|(255&e[21])<<8,this.pad[3]=255&e[22]|(255&e[23])<<8,this.pad[4]=255&e[24]|(255&e[25])<<8,this.pad[5]=255&e[26]|(255&e[27])<<8,this.pad[6]=255&e[28]|(255&e[29])<<8,this.pad[7]=255&e[30]|(255&e[31])<<8};function A(e,t,r,i,n,s){var o=new T(s);return o.update(r,i,n),o.finish(e,t),0}function U(e,t,r,i,n,s){var o=new Uint8Array(16);return A(o,0,r,i,n,s),E(e,t,o,0)}function B(e,t,r,i,n){var s;if(r<32)return-1;for(k(e,0,t,0,r,i,n),A(e,16,e,32,r-32,e),s=0;s<16;s++)e[s]=0;return 0}function R(e,t,r,i,n){var s,o=new Uint8Array(32);if(r<32)return-1;if(S(o,0,32,i,n),0!==U(t,16,t,32,r-32,o))return-1;for(k(e,0,t,0,r,i,n),s=0;s<32;s++)e[s]=0;return 0}function N(e,t){var r;for(r=0;r<16;r++)e[r]=0|t[r]}function P(e){var t,r,i=1;for(t=0;t<16;t++)r=e[t]+i+65535,i=Math.floor(r/65536),e[t]=r-65536*i;e[0]+=i-1+37*(i-1)}function D(e,t,r){for(var i,n=~(r-1),s=0;s<16;s++)i=n&(e[s]^t[s]),e[s]^=i,t[s]^=i}function O(e,r){var i,n,s,o=t(),a=t();for(i=0;i<16;i++)a[i]=r[i];for(P(a),P(a),P(a),n=0;n<2;n++){for(o[0]=a[0]-65517,i=1;i<15;i++)o[i]=a[i]-65535-(o[i-1]>>16&1),o[i-1]&=65535;o[15]=a[15]-32767-(o[14]>>16&1),s=o[15]>>16&1,o[14]&=65535,D(a,o,1-s)}for(i=0;i<16;i++)e[2*i]=255&a[i],e[2*i+1]=a[i]>>8}function I(e,t){var r=new Uint8Array(32),i=new Uint8Array(32);return O(r,e),O(i,t),m(r,0,i,0)}function C(e){var t=new Uint8Array(32);return O(t,e),1&t[0]}function L(e,t){var r;for(r=0;r<16;r++)e[r]=t[2*r]+(t[2*r+1]<<8);e[15]&=32767}function H(e,t,r){for(var i=0;i<16;i++)e[i]=t[i]+r[i]}function x(e,t,r){for(var i=0;i<16;i++)e[i]=t[i]-r[i]}function F(e,t,r){var i,n,s=0,o=0,a=0,c=0,h=0,f=0,u=0,l=0,p=0,d=0,g=0,E=0,m=0,v=0,y=0,_=0,w=0,b=0,S=0,k=0,T=0,A=0,U=0,B=0,R=0,N=0,P=0,D=0,O=0,I=0,C=0,L=r[0],H=r[1],x=r[2],F=r[3],M=r[4],K=r[5],G=r[6],W=r[7],q=r[8],X=r[9],j=r[10],V=r[11],Y=r[12],Q=r[13],z=r[14],$=r[15];s+=(i=t[0])*L,o+=i*H,a+=i*x,c+=i*F,h+=i*M,f+=i*K,u+=i*G,l+=i*W,p+=i*q,d+=i*X,g+=i*j,E+=i*V,m+=i*Y,v+=i*Q,y+=i*z,_+=i*$,o+=(i=t[1])*L,a+=i*H,c+=i*x,h+=i*F,f+=i*M,u+=i*K,l+=i*G,p+=i*W,d+=i*q,g+=i*X,E+=i*j,m+=i*V,v+=i*Y,y+=i*Q,_+=i*z,w+=i*$,a+=(i=t[2])*L,c+=i*H,h+=i*x,f+=i*F,u+=i*M,l+=i*K,p+=i*G,d+=i*W,g+=i*q,E+=i*X,m+=i*j,v+=i*V,y+=i*Y,_+=i*Q,w+=i*z,b+=i*$,c+=(i=t[3])*L,h+=i*H,f+=i*x,u+=i*F,l+=i*M,p+=i*K,d+=i*G,g+=i*W,E+=i*q,m+=i*X,v+=i*j,y+=i*V,_+=i*Y,w+=i*Q,b+=i*z,S+=i*$,h+=(i=t[4])*L,f+=i*H,u+=i*x,l+=i*F,p+=i*M,d+=i*K,g+=i*G,E+=i*W,m+=i*q,v+=i*X,y+=i*j,_+=i*V,w+=i*Y,b+=i*Q,S+=i*z,k+=i*$,f+=(i=t[5])*L,u+=i*H,l+=i*x,p+=i*F,d+=i*M,g+=i*K,E+=i*G,m+=i*W,v+=i*q,y+=i*X,_+=i*j,w+=i*V,b+=i*Y,S+=i*Q,k+=i*z,T+=i*$,u+=(i=t[6])*L,l+=i*H,p+=i*x,d+=i*F,g+=i*M,E+=i*K,m+=i*G,v+=i*W,y+=i*q,_+=i*X,w+=i*j,b+=i*V,S+=i*Y,k+=i*Q,T+=i*z,A+=i*$,l+=(i=t[7])*L,p+=i*H,d+=i*x,g+=i*F,E+=i*M,m+=i*K,v+=i*G,y+=i*W,_+=i*q,w+=i*X,b+=i*j,S+=i*V,k+=i*Y,T+=i*Q,A+=i*z,U+=i*$,p+=(i=t[8])*L,d+=i*H,g+=i*x,E+=i*F,m+=i*M,v+=i*K,y+=i*G,_+=i*W,w+=i*q,b+=i*X,S+=i*j,k+=i*V,T+=i*Y,A+=i*Q,U+=i*z,B+=i*$,d+=(i=t[9])*L,g+=i*H,E+=i*x,m+=i*F,v+=i*M,y+=i*K,_+=i*G,w+=i*W,b+=i*q,S+=i*X,k+=i*j,T+=i*V,A+=i*Y,U+=i*Q,B+=i*z,R+=i*$,g+=(i=t[10])*L,E+=i*H,m+=i*x,v+=i*F,y+=i*M,_+=i*K,w+=i*G,b+=i*W,S+=i*q,k+=i*X,T+=i*j,A+=i*V,U+=i*Y,B+=i*Q,R+=i*z,N+=i*$,E+=(i=t[11])*L,m+=i*H,v+=i*x,y+=i*F,_+=i*M,w+=i*K,b+=i*G,S+=i*W,k+=i*q,T+=i*X,A+=i*j,U+=i*V,B+=i*Y,R+=i*Q,N+=i*z,P+=i*$,m+=(i=t[12])*L,v+=i*H,y+=i*x,_+=i*F,w+=i*M,b+=i*K,S+=i*G,k+=i*W,T+=i*q,A+=i*X,U+=i*j,B+=i*V,R+=i*Y,N+=i*Q,P+=i*z,D+=i*$,v+=(i=t[13])*L,y+=i*H,_+=i*x,w+=i*F,b+=i*M,S+=i*K,k+=i*G,T+=i*W,A+=i*q,U+=i*X,B+=i*j,R+=i*V,N+=i*Y,P+=i*Q,D+=i*z,O+=i*$,y+=(i=t[14])*L,_+=i*H,w+=i*x,b+=i*F,S+=i*M,k+=i*K,T+=i*G,A+=i*W,U+=i*q,B+=i*X,R+=i*j,N+=i*V,P+=i*Y,D+=i*Q,O+=i*z,I+=i*$,_+=(i=t[15])*L,o+=38*(b+=i*x),a+=38*(S+=i*F),c+=38*(k+=i*M),h+=38*(T+=i*K),f+=38*(A+=i*G),u+=38*(U+=i*W),l+=38*(B+=i*q),p+=38*(R+=i*X),d+=38*(N+=i*j),g+=38*(P+=i*V),E+=38*(D+=i*Y),m+=38*(O+=i*Q),v+=38*(I+=i*z),y+=38*(C+=i*$),s=(i=(s+=38*(w+=i*H))+(n=1)+65535)-65536*(n=Math.floor(i/65536)),o=(i=o+n+65535)-65536*(n=Math.floor(i/65536)),a=(i=a+n+65535)-65536*(n=Math.floor(i/65536)),c=(i=c+n+65535)-65536*(n=Math.floor(i/65536)),h=(i=h+n+65535)-65536*(n=Math.floor(i/65536)),f=(i=f+n+65535)-65536*(n=Math.floor(i/65536)),u=(i=u+n+65535)-65536*(n=Math.floor(i/65536)),l=(i=l+n+65535)-65536*(n=Math.floor(i/65536)),p=(i=p+n+65535)-65536*(n=Math.floor(i/65536)),d=(i=d+n+65535)-65536*(n=Math.floor(i/65536)),g=(i=g+n+65535)-65536*(n=Math.floor(i/65536)),E=(i=E+n+65535)-65536*(n=Math.floor(i/65536)),m=(i=m+n+65535)-65536*(n=Math.floor(i/65536)),v=(i=v+n+65535)-65536*(n=Math.floor(i/65536)),y=(i=y+n+65535)-65536*(n=Math.floor(i/65536)),_=(i=_+n+65535)-65536*(n=Math.floor(i/65536)),s=(i=(s+=n-1+37*(n-1))+(n=1)+65535)-65536*(n=Math.floor(i/65536)),o=(i=o+n+65535)-65536*(n=Math.floor(i/65536)),a=(i=a+n+65535)-65536*(n=Math.floor(i/65536)),c=(i=c+n+65535)-65536*(n=Math.floor(i/65536)),h=(i=h+n+65535)-65536*(n=Math.floor(i/65536)),f=(i=f+n+65535)-65536*(n=Math.floor(i/65536)),u=(i=u+n+65535)-65536*(n=Math.floor(i/65536)),l=(i=l+n+65535)-65536*(n=Math.floor(i/65536)),p=(i=p+n+65535)-65536*(n=Math.floor(i/65536)),d=(i=d+n+65535)-65536*(n=Math.floor(i/65536)),g=(i=g+n+65535)-65536*(n=Math.floor(i/65536)),E=(i=E+n+65535)-65536*(n=Math.floor(i/65536)),m=(i=m+n+65535)-65536*(n=Math.floor(i/65536)),v=(i=v+n+65535)-65536*(n=Math.floor(i/65536)),y=(i=y+n+65535)-65536*(n=Math.floor(i/65536)),_=(i=_+n+65535)-65536*(n=Math.floor(i/65536)),s+=n-1+37*(n-1),e[0]=s,e[1]=o,e[2]=a,e[3]=c,e[4]=h,e[5]=f,e[6]=u,e[7]=l,e[8]=p,e[9]=d,e[10]=g,e[11]=E,e[12]=m,e[13]=v,e[14]=y,e[15]=_}function M(e,t){F(e,t,t)}function K(e,r){var i,n=t();for(i=0;i<16;i++)n[i]=r[i];for(i=253;i>=0;i--)M(n,n),2!==i&&4!==i&&F(n,n,r);for(i=0;i<16;i++)e[i]=n[i]}function G(e,r,i){var n,s,o=new Uint8Array(32),a=new Float64Array(80),h=t(),f=t(),u=t(),l=t(),p=t(),d=t();for(s=0;s<31;s++)o[s]=r[s];for(o[31]=127&r[31]|64,o[0]&=248,L(a,i),s=0;s<16;s++)f[s]=a[s],l[s]=h[s]=u[s]=0;for(h[0]=l[0]=1,s=254;s>=0;--s)D(h,f,n=o[s>>>3]>>>(7&s)&1),D(u,l,n),H(p,h,u),x(h,h,u),H(u,f,l),x(f,f,l),M(l,p),M(d,h),F(h,u,h),F(u,f,p),H(p,h,u),x(h,h,u),M(f,h),x(u,l,d),F(h,u,c),H(h,h,l),F(u,u,h),F(h,l,d),F(l,f,a),M(f,p),D(h,f,n),D(u,l,n);for(s=0;s<16;s++)a[s+16]=h[s],a[s+32]=u[s],a[s+48]=f[s],a[s+64]=l[s];var g=a.subarray(32),E=a.subarray(16);return K(g,g),F(E,E,g),O(e,E),0}function W(e,t){return G(e,t,s)}function q(e,t){return i(t,32),W(e,t)}function X(e,t,r){var i=new Uint8Array(32);return G(i,r,t),y(e,n,i,_)}T.prototype.blocks=function(e,t,r){for(var i,n,s,o,a,c,h,f,u,l,p,d,g,E,m,v,y,_,w,b=this.fin?0:2048,S=this.h[0],k=this.h[1],T=this.h[2],A=this.h[3],U=this.h[4],B=this.h[5],R=this.h[6],N=this.h[7],P=this.h[8],D=this.h[9],O=this.r[0],I=this.r[1],C=this.r[2],L=this.r[3],H=this.r[4],x=this.r[5],F=this.r[6],M=this.r[7],K=this.r[8],G=this.r[9];r>=16;)l=u=0,l+=(S+=8191&(i=255&e[t+0]|(255&e[t+1])<<8))*O,l+=(k+=8191&(i>>>13|(n=255&e[t+2]|(255&e[t+3])<<8)<<3))*(5*G),l+=(T+=8191&(n>>>10|(s=255&e[t+4]|(255&e[t+5])<<8)<<6))*(5*K),l+=(A+=8191&(s>>>7|(o=255&e[t+6]|(255&e[t+7])<<8)<<9))*(5*M),u=(l+=(U+=8191&(o>>>4|(a=255&e[t+8]|(255&e[t+9])<<8)<<12))*(5*F))>>>13,l&=8191,l+=(B+=a>>>1&8191)*(5*x),l+=(R+=8191&(a>>>14|(c=255&e[t+10]|(255&e[t+11])<<8)<<2))*(5*H),l+=(N+=8191&(c>>>11|(h=255&e[t+12]|(255&e[t+13])<<8)<<5))*(5*L),l+=(P+=8191&(h>>>8|(f=255&e[t+14]|(255&e[t+15])<<8)<<8))*(5*C),p=u+=(l+=(D+=f>>>5|b)*(5*I))>>>13,p+=S*I,p+=k*O,p+=T*(5*G),p+=A*(5*K),u=(p+=U*(5*M))>>>13,p&=8191,p+=B*(5*F),p+=R*(5*x),p+=N*(5*H),p+=P*(5*L),u+=(p+=D*(5*C))>>>13,p&=8191,d=u,d+=S*C,d+=k*I,d+=T*O,d+=A*(5*G),u=(d+=U*(5*K))>>>13,d&=8191,d+=B*(5*M),d+=R*(5*F),d+=N*(5*x),d+=P*(5*H),g=u+=(d+=D*(5*L))>>>13,g+=S*L,g+=k*C,g+=T*I,g+=A*O,u=(g+=U*(5*G))>>>13,g&=8191,g+=B*(5*K),g+=R*(5*M),g+=N*(5*F),g+=P*(5*x),E=u+=(g+=D*(5*H))>>>13,E+=S*H,E+=k*L,E+=T*C,E+=A*I,u=(E+=U*O)>>>13,E&=8191,E+=B*(5*G),E+=R*(5*K),E+=N*(5*M),E+=P*(5*F),m=u+=(E+=D*(5*x))>>>13,m+=S*x,m+=k*H,m+=T*L,m+=A*C,u=(m+=U*I)>>>13,m&=8191,m+=B*O,m+=R*(5*G),m+=N*(5*K),m+=P*(5*M),v=u+=(m+=D*(5*F))>>>13,v+=S*F,v+=k*x,v+=T*H,v+=A*L,u=(v+=U*C)>>>13,v&=8191,v+=B*I,v+=R*O,v+=N*(5*G),v+=P*(5*K),y=u+=(v+=D*(5*M))>>>13,y+=S*M,y+=k*F,y+=T*x,y+=A*H,u=(y+=U*L)>>>13,y&=8191,y+=B*C,y+=R*I,y+=N*O,y+=P*(5*G),_=u+=(y+=D*(5*K))>>>13,_+=S*K,_+=k*M,_+=T*F,_+=A*x,u=(_+=U*H)>>>13,_&=8191,_+=B*L,_+=R*C,_+=N*I,_+=P*O,w=u+=(_+=D*(5*G))>>>13,w+=S*G,w+=k*K,w+=T*M,w+=A*F,u=(w+=U*x)>>>13,w&=8191,w+=B*H,w+=R*L,w+=N*C,w+=P*I,S=l=8191&(u=(u=((u+=(w+=D*O)>>>13)<<2)+u|0)+(l&=8191)|0),k=p+=u>>>=13,T=d&=8191,A=g&=8191,U=E&=8191,B=m&=8191,R=v&=8191,N=y&=8191,P=_&=8191,D=w&=8191,t+=16,r-=16;this.h[0]=S,this.h[1]=k,this.h[2]=T,this.h[3]=A,this.h[4]=U,this.h[5]=B,this.h[6]=R,this.h[7]=N,this.h[8]=P,this.h[9]=D},T.prototype.finish=function(e,t){var r,i,n,s,o=new Uint16Array(10);if(this.leftover){for(s=this.leftover,this.buffer[s++]=1;s<16;s++)this.buffer[s]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(r=this.h[1]>>>13,this.h[1]&=8191,s=2;s<10;s++)this.h[s]+=r,r=this.h[s]>>>13,this.h[s]&=8191;for(this.h[0]+=5*r,r=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=r,r=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=r,o[0]=this.h[0]+5,r=o[0]>>>13,o[0]&=8191,s=1;s<10;s++)o[s]=this.h[s]+r,r=o[s]>>>13,o[s]&=8191;for(o[9]-=8192,i=(1^r)-1,s=0;s<10;s++)o[s]&=i;for(i=~i,s=0;s<10;s++)this.h[s]=this.h[s]&i|o[s];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),n=this.h[0]+this.pad[0],this.h[0]=65535&n,s=1;s<8;s++)n=(this.h[s]+this.pad[s]|0)+(n>>>16)|0,this.h[s]=65535&n;e[t+0]=this.h[0]>>>0&255,e[t+1]=this.h[0]>>>8&255,e[t+2]=this.h[1]>>>0&255,e[t+3]=this.h[1]>>>8&255,e[t+4]=this.h[2]>>>0&255,e[t+5]=this.h[2]>>>8&255,e[t+6]=this.h[3]>>>0&255,e[t+7]=this.h[3]>>>8&255,e[t+8]=this.h[4]>>>0&255,e[t+9]=this.h[4]>>>8&255,e[t+10]=this.h[5]>>>0&255,e[t+11]=this.h[5]>>>8&255,e[t+12]=this.h[6]>>>0&255,e[t+13]=this.h[6]>>>8&255,e[t+14]=this.h[7]>>>0&255,e[t+15]=this.h[7]>>>8&255},T.prototype.update=function(e,t,r){var i,n;if(this.leftover){for((n=16-this.leftover)>r&&(n=r),i=0;i=16&&(n=r-r%16,this.blocks(e,t,n),t+=n,r-=n),r){for(i=0;i=128;){for(b=0;b<16;b++)S=8*b+Q,N[b]=r[S+0]<<24|r[S+1]<<16|r[S+2]<<8|r[S+3],P[b]=r[S+4]<<24|r[S+5]<<16|r[S+6]<<8|r[S+7];for(b=0;b<80;b++)if(n=D,s=O,o=I,a=C,c=L,h=H,f=x,l=M,p=K,d=G,g=W,E=q,m=X,v=j,A=65535&(T=V),U=T>>>16,B=65535&(k=F),R=k>>>16,A+=65535&(T=(q>>>14|L<<18)^(q>>>18|L<<14)^(L>>>9|q<<23)),U+=T>>>16,B+=65535&(k=(L>>>14|q<<18)^(L>>>18|q<<14)^(q>>>9|L<<23)),R+=k>>>16,A+=65535&(T=q&X^~q&j),U+=T>>>16,B+=65535&(k=L&H^~L&x),R+=k>>>16,k=Y[2*b],A+=65535&(T=Y[2*b+1]),U+=T>>>16,B+=65535&k,R+=k>>>16,k=N[b%16],U+=(T=P[b%16])>>>16,B+=65535&k,R+=k>>>16,B+=(U+=(A+=65535&T)>>>16)>>>16,A=65535&(T=w=65535&A|U<<16),U=T>>>16,B=65535&(k=_=65535&B|(R+=B>>>16)<<16),R=k>>>16,A+=65535&(T=(M>>>28|D<<4)^(D>>>2|M<<30)^(D>>>7|M<<25)),U+=T>>>16,B+=65535&(k=(D>>>28|M<<4)^(M>>>2|D<<30)^(M>>>7|D<<25)),R+=k>>>16,U+=(T=M&K^M&G^K&G)>>>16,B+=65535&(k=D&O^D&I^O&I),R+=k>>>16,u=65535&(B+=(U+=(A+=65535&T)>>>16)>>>16)|(R+=B>>>16)<<16,y=65535&A|U<<16,A=65535&(T=g),U=T>>>16,B=65535&(k=a),R=k>>>16,U+=(T=w)>>>16,B+=65535&(k=_),R+=k>>>16,O=n,I=s,C=o,L=a=65535&(B+=(U+=(A+=65535&T)>>>16)>>>16)|(R+=B>>>16)<<16,H=c,x=h,F=f,D=u,K=l,G=p,W=d,q=g=65535&A|U<<16,X=E,j=m,V=v,M=y,b%16==15)for(S=0;S<16;S++)k=N[S],A=65535&(T=P[S]),U=T>>>16,B=65535&k,R=k>>>16,k=N[(S+9)%16],A+=65535&(T=P[(S+9)%16]),U+=T>>>16,B+=65535&k,R+=k>>>16,_=N[(S+1)%16],A+=65535&(T=((w=P[(S+1)%16])>>>1|_<<31)^(w>>>8|_<<24)^(w>>>7|_<<25)),U+=T>>>16,B+=65535&(k=(_>>>1|w<<31)^(_>>>8|w<<24)^_>>>7),R+=k>>>16,_=N[(S+14)%16],U+=(T=((w=P[(S+14)%16])>>>19|_<<13)^(_>>>29|w<<3)^(w>>>6|_<<26))>>>16,B+=65535&(k=(_>>>19|w<<13)^(w>>>29|_<<3)^_>>>6),R+=k>>>16,R+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,N[S]=65535&B|R<<16,P[S]=65535&A|U<<16;A=65535&(T=M),U=T>>>16,B=65535&(k=D),R=k>>>16,k=e[0],U+=(T=t[0])>>>16,B+=65535&k,R+=k>>>16,R+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[0]=D=65535&B|R<<16,t[0]=M=65535&A|U<<16,A=65535&(T=K),U=T>>>16,B=65535&(k=O),R=k>>>16,k=e[1],U+=(T=t[1])>>>16,B+=65535&k,R+=k>>>16,R+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[1]=O=65535&B|R<<16,t[1]=K=65535&A|U<<16,A=65535&(T=G),U=T>>>16,B=65535&(k=I),R=k>>>16,k=e[2],U+=(T=t[2])>>>16,B+=65535&k,R+=k>>>16,R+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[2]=I=65535&B|R<<16,t[2]=G=65535&A|U<<16,A=65535&(T=W),U=T>>>16,B=65535&(k=C),R=k>>>16,k=e[3],U+=(T=t[3])>>>16,B+=65535&k,R+=k>>>16,R+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[3]=C=65535&B|R<<16,t[3]=W=65535&A|U<<16,A=65535&(T=q),U=T>>>16,B=65535&(k=L),R=k>>>16,k=e[4],U+=(T=t[4])>>>16,B+=65535&k,R+=k>>>16,R+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[4]=L=65535&B|R<<16,t[4]=q=65535&A|U<<16,A=65535&(T=X),U=T>>>16,B=65535&(k=H),R=k>>>16,k=e[5],U+=(T=t[5])>>>16,B+=65535&k,R+=k>>>16,R+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[5]=H=65535&B|R<<16,t[5]=X=65535&A|U<<16,A=65535&(T=j),U=T>>>16,B=65535&(k=x),R=k>>>16,k=e[6],U+=(T=t[6])>>>16,B+=65535&k,R+=k>>>16,R+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[6]=x=65535&B|R<<16,t[6]=j=65535&A|U<<16,A=65535&(T=V),U=T>>>16,B=65535&(k=F),R=k>>>16,k=e[7],U+=(T=t[7])>>>16,B+=65535&k,R+=k>>>16,R+=(B+=(U+=(A+=65535&T)>>>16)>>>16)>>>16,e[7]=F=65535&B|R<<16,t[7]=V=65535&A|U<<16,Q+=128,i-=128}return i}function z(e,t,r){var i,n=new Int32Array(8),s=new Int32Array(8),o=new Uint8Array(256),a=r;for(n[0]=1779033703,n[1]=3144134277,n[2]=1013904242,n[3]=2773480762,n[4]=1359893119,n[5]=2600822924,n[6]=528734635,n[7]=1541459225,s[0]=4089235720,s[1]=2227873595,s[2]=4271175723,s[3]=1595750129,s[4]=2917565137,s[5]=725511199,s[6]=4215389547,s[7]=327033209,Q(n,s,t,r),r%=128,i=0;i=0;--n)Z(e,t,i=r[n/8|0]>>(7&n)&1),$(t,e),$(e,e),Z(e,t,i)}function te(e,r){var i=[t(),t(),t(),t()];N(i[0],u),N(i[1],l),N(i[2],a),F(i[3],u,l),ee(e,i,r)}function re(e,r,n){var s,o=new Uint8Array(64),a=[t(),t(),t(),t()];for(n||i(r,32),z(o,r,32),o[0]&=248,o[31]&=127,o[31]|=64,te(a,o),J(e,a),s=0;s<32;s++)r[s+32]=e[s];return 0}var ie=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function ne(e,t){var r,i,n,s;for(i=63;i>=32;--i){for(r=0,n=i-32,s=i-12;n>8,t[n]-=256*r;t[n]+=r,t[i]=0}for(r=0,n=0;n<32;n++)t[n]+=r-(t[31]>>4)*ie[n],r=t[n]>>8,t[n]&=255;for(n=0;n<32;n++)t[n]-=r*ie[n];for(i=0;i<32;i++)t[i+1]+=t[i]>>8,e[i]=255&t[i]}function se(e){var t,r=new Float64Array(64);for(t=0;t<64;t++)r[t]=e[t];for(t=0;t<64;t++)e[t]=0;ne(e,r)}function oe(e,r,i,n){var s,o,a=new Uint8Array(64),c=new Uint8Array(64),h=new Uint8Array(64),f=new Float64Array(64),u=[t(),t(),t(),t()];z(a,n,32),a[0]&=248,a[31]&=127,a[31]|=64;var l=i+64;for(s=0;s=0;i--)M(n,n),1!==i&&F(n,n,r);for(i=0;i<16;i++)e[i]=n[i]}(i,i),F(i,i,s),F(i,i,c),F(i,i,c),F(e[0],i,c),M(n,e[0]),F(n,n,c),I(n,s)&&F(e[0],e[0],p),M(n,e[0]),F(n,n,c),I(n,s)?-1:(C(e[0])===r[31]>>7&&x(e[0],o,e[0]),F(e[3],e[0],e[1]),0)}(l,n))return-1;for(s=0;s=0},e.sign.keyPair=function(){var e=new Uint8Array(fe),t=new Uint8Array(ue);return re(e,t),{publicKey:e,secretKey:t}},e.sign.keyPair.fromSecretKey=function(e){if(pe(e),e.length!==ue)throw new Error("bad secret key size");for(var t=new Uint8Array(fe),r=0;r{"use strict";e.exports=__nccwpck_require__(9491)},2588:e=>{"use strict";e.exports=__nccwpck_require__(4300)},1984:e=>{"use strict";e.exports=__nccwpck_require__(2081)},7968:e=>{"use strict";e.exports=__nccwpck_require__(6113)},9880:e=>{"use strict";e.exports=__nccwpck_require__(9523)},467:e=>{"use strict";e.exports=__nccwpck_require__(2361)},2058:e=>{"use strict";e.exports=__nccwpck_require__(7147)},6136:e=>{"use strict";e.exports=__nccwpck_require__(3685)},8876:e=>{"use strict";e.exports=__nccwpck_require__(5687)},5256:e=>{"use strict";e.exports=__nccwpck_require__(1808)},7072:e=>{"use strict";e.exports=__nccwpck_require__(1017)},8378:e=>{"use strict";e.exports=__nccwpck_require__(2781)},192:e=>{"use strict";e.exports=__nccwpck_require__(4404)},970:e=>{"use strict";e.exports=__nccwpck_require__(3837)},592:e=>{"use strict";e.exports=__nccwpck_require__(9796)},2968:e=>{"use strict";e.exports={WU:"0.4.34"}}},t={};function r(i){var n=t[i];if(void 0!==n)return n.exports;var s=t[i]={exports:{}};return e[i].call(s.exports,s,s.exports,r),s.exports}var i={};return(()=>{"use strict";var e=i;Object.defineProperty(e,"__esModule",{value:!0}),e.execFunction=e.SftpStrategy=e.FtpStrategy=e.Strategy=e.Client=void 0;var t=r(9668);Object.defineProperty(e,"Client",{enumerable:!0,get:function(){return t.Client}});var n=r(3911);Object.defineProperty(e,"Strategy",{enumerable:!0,get:function(){return n.Strategy}});var s=r(8652);Object.defineProperty(e,"FtpStrategy",{enumerable:!0,get:function(){return s.FtpStrategy}});var o=r(6711);Object.defineProperty(e,"SftpStrategy",{enumerable:!0,get:function(){return o.SftpStrategy}});var a=r(9512);Object.defineProperty(e,"execFunction",{enumerable:!0,get:function(){return a.execFunction}})})(),i})())); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFZLFdBQVksV0FBWSxVQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksVUFBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksVUFBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxTQUNwQyxXQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksVUFBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxRQUFZLFVBQVksVUFBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxTQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksVUFBWSxhQUN0QyxJQUFJQSxZQUFZLENBQ2QsV0FBWSxXQUFZLFdBQVksV0FDcEMsU0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksU0FDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksU0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsVUFBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksVUFDcEMsVUFBWSxVQUFZLFdBQVksVUFDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsU0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxVQUFZLFVBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksU0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsVUFBWSxVQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFNBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFVBQVksVUFDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFVBQVksVUFDcEMsV0FBWSxVQUFZLFVBQVksVUFDcEMsVUFBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksVUFDcEMsV0FBWSxVQUFZLFdBQVksV0FDcEMsV0FBWSxXQUFZLFdBQVksV0FDcEMsVUFBWSxXQUFZLFdBQVksYUFDdEMsSUFBSUEsWUFBWSxDQUNkLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksU0FBWSxXQUFZLFVBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFVBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxXQUFZLFVBQ3BDLFVBQVksV0FBWSxVQUFZLFdBQ3BDLFVBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksU0FBWSxXQUFZLFNBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxXQUFZLFVBQ3BDLFVBQVksU0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFVBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFVBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFVBQ3BDLFVBQVksVUFBWSxXQUFZLFVBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFVBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxRQUFZLFVBQ3BDLFVBQVksVUFBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksVUFBWSxXQUFZLFdBQ3BDLFVBQVksV0FBWSxXQUFZLFdBQ3BDLFdBQVksV0FBWSxVQUFZLFdBQ3BDLFdBQVksV0FBWSxXQUFZLGFBQ3RDLElBQUlBLFlBQVksQ0FDZCxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksVUFBWSxTQUNwQyxXQUFZLFNBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFdBQVksU0FBWSxTQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxVQUFZLFVBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksU0FBWSxXQUNwQyxVQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFdBQVksV0FBWSxVQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFVBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxXQUNwQyxX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UUFBVWsrRSxRQUFRLE8sd0JDQXpCaitFLEVBQU9ELFFBQVVrK0UsUUFBUSxTLHVCQ0F6QmorRSxFQUFPRCxRQUFVaytFLFFBQVEsTSx1QkNBekJqK0UsRUFBT0QsUUFBVWsrRSxRQUFRLE8sdUJDQXpCaitFLEVBQU9ELFFBQVVrK0UsUUFBUSxPLGtEQ0NyQkMsRUFBMkIsQ0FBQyxFQUdoQyxTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCci9ELElBQWpCcy9ELEVBQ0gsT0FBT0EsRUFBYXQrRSxRQUdyQixJQUFJQyxFQUFTaytFLEVBQXlCRSxHQUFZLENBR2pEcitFLFFBQVMsQ0FBQyxHQU9YLE9BSEF1K0UsRUFBb0JGLEdBQVV0ekQsS0FBSzlxQixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTbytFLEdBR3BFbitFLEVBQU9ELE9BQ2YsQyxrS0NMQSxjQUFTLHdFQUFBcytDLE1BQU0sSUFDZixjQUFTLDBFQUFBNHBCLFFBQVEsSUFDakIsY0FBUyw2RUFBQTlDLFdBQVcsSUFDcEIsY0FBUyw4RUFBQUUsWUFBWSxJQUVyQixjQUFTLDhFQUFBK0UsWUFBWSxHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcXVzbHktY29yZS93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi1zdHJlYW1zL2luZGV4LmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDItc3RyZWFtcy9saWIvYnVmZmVyLWhlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi1zdHJlYW1zL2xpYi9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi1zdHJlYW1zL2xpYi9qc2JuLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDItc3RyZWFtcy9saWIva2V5UGFyc2VyLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDItc3RyZWFtcy9saWIvbm9kZS1mcy1jb21wYXQuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi1zdHJlYW1zL2xpYi9zZnRwLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDItc3RyZWFtcy9saWIvc3NoLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDItc3RyZWFtcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi9saWIvQ2hhbm5lbC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL0BvbHppZS0xMi9zc2gyL2xpYi9TRlRQV3JhcHBlci5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL0BvbHppZS0xMi9zc2gyL2xpYi9hZ2VudC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL0BvbHppZS0xMi9zc2gyL2xpYi9idWZmZXItaGVscGVycy5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL0BvbHppZS0xMi9zc2gyL2xpYi9jbGllbnQuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi9saWIvaHR0cC1hZ2VudHMuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9Ab2x6aWUtMTIvc3NoMi9saWIva2VlcGFsaXZlbWdyLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvQG9semllLTEyL3NzaDIvbGliL3NlcnZlci5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2FzbjEvbGliL2Jlci9lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9hc24xL2xpYi9iZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9hc24xL2xpYi9iZXIvcmVhZGVyLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYXNuMS9saWIvYmVyL3R5cGVzLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYXNuMS9saWIvYmVyL3dyaXRlci5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2FzbjEvbGliL2luZGV4LmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvQ2xpZW50LmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvRmlsZUluZm8uanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9iYXNpYy1mdHAvZGlzdC9GdHBDb250ZXh0LmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvUHJvZ3Jlc3NUcmFja2VyLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvU3RyaW5nRW5jb2RpbmcuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9iYXNpYy1mdHAvZGlzdC9TdHJpbmdXcml0ZXIuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9iYXNpYy1mdHAvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2Jhc2ljLWZ0cC9kaXN0L25ldFV0aWxzLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvcGFyc2VDb250cm9sUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9iYXNpYy1mdHAvZGlzdC9wYXJzZUxpc3QuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9iYXNpYy1mdHAvZGlzdC9wYXJzZUxpc3RET1MuanMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL25vZGVfbW9kdWxlcy9iYXNpYy1mdHAvZGlzdC9wYXJzZUxpc3RNTFNELmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmFzaWMtZnRwL2Rpc3QvcGFyc2VMaXN0VW5peC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vbm9kZV9tb2R1bGVzL2Jhc2ljLWZ0cC9kaXN0L3RyYW5zZmVyLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvYmNyeXB0LXBia2RmL2luZGV4LmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvc2FmZXItYnVmZmVyL3NhZmVyLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvc3RyZWFtc2VhcmNoL2xpYi9zYm1oLmpzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9zcmMvY2xpZW50LnRzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9zcmMvc3RyYXRlZ2llcy9mdHAudHMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL3NyYy9zdHJhdGVnaWVzL3NmdHAudHMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL3NyYy9zdHJhdGVnaWVzL3N0cmF0ZWd5LnRzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9zcmMvdGFza3MudHMiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS8uL3NyYy90cmFuc2Zlci50cyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vc3JjL3V0aWxzL2FycmF5LnRzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9zcmMvdXRpbHMvZmlsZS50cyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vc3JjL3V0aWxzL2Z0cC50cyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlLy4vc3JjL3V0aWxzL2Z1bmN0aW9uLnRzIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9ub2RlX21vZHVsZXMvdHdlZXRuYWNsL25hY2wtZmFzdC5qcyIsIndlYnBhY2s6Ly9xdXNseS1jb3JlL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJhc3NlcnRcIiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJidWZmZXJcIiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJjaGlsZF9wcm9jZXNzXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZG5zXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZnNcIiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJodHRwXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cHNcIiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJuZXRcIiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidGxzXCIiLCJ3ZWJwYWNrOi8vcXVzbHktY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwidXRpbFwiIiwid2VicGFjazovL3F1c2x5LWNvcmUvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInpsaWJcIiIsIndlYnBhY2s6Ly9xdXNseS1jb3JlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3F1c2x5LWNvcmUvLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicXVzbHktY29yZVwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJxdXNseS1jb3JlXCJdID0gZmFjdG9yeSgpO1xufSkoZ2xvYmFsLCAoKSA9PiB7XG5yZXR1cm4gIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFNGVFBTdHJlYW06IHJlcXVpcmUoJy4vbGliL3NmdHAnKSxcbiAgU1NIMlN0cmVhbTogcmVxdWlyZSgnLi9saWIvc3NoJyksXG4gIHV0aWxzOiByZXF1aXJlKCcuL2xpYi91dGlscycpLFxuICBjb25zdGFudHM6IHJlcXVpcmUoJy4vbGliL2NvbnN0YW50cycpXG59OyIsIm1vZHVsZS5leHBvcnRzID0ge1xuICByZWFkVUludDMyQkU6IGZ1bmN0aW9uIHJlYWRVSW50MzJCRShidWYsIG9mZnNldCkge1xuICAgIHJldHVybiBidWZbb2Zmc2V0KytdICogMTY3NzcyMTZcbiAgICAgICAgICAgKyBidWZbb2Zmc2V0KytdICogNjU1MzZcbiAgICAgICAgICAgKyBidWZbb2Zmc2V0KytdICogMjU2XG4gICAgICAgICAgICsgYnVmW29mZnNldF07XG4gIH0sXG4gIHdyaXRlVUludDMyQkU6IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUoYnVmLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gICAgYnVmW29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gMjQpO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAodmFsdWUgPj4+IDE2KTtcbiAgICBidWZbb2Zmc2V0KytdID0gKHZhbHVlID4+PiA4KTtcbiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfSxcbiAgd3JpdGVVSW50MzJMRTogZnVuY3Rpb24gd3JpdGVVSW50MzJMRShidWYsIHZhbHVlLCBvZmZzZXQpIHtcbiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7XG4gICAgYnVmW29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gOCk7XG4gICAgYnVmW29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gMTYpO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAodmFsdWUgPj4+IDI0KTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG59O1xuIiwidmFyIGk7XG52YXIga2V5cztcbnZhciBsZW47XG5cbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBlZGRzYVN1cHBvcnRlZCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHR5cGVvZiBjcnlwdG8uc2lnbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgJiYgdHlwZW9mIGNyeXB0by52ZXJpZnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIga2V5ID0gJy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcclxcbk1DNENBUUF3QlFZREsyVndCQ0lFSUhLaitzVmE5V2NEJ1xuICAgICAgICAgICAgICArICcvcTJESlVKYWY0M0twdGM4eFl1VVFBNGJPRmo5dkM4VFxcclxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0nO1xuICAgIHZhciBkYXRhID0gQnVmZmVyLmZyb20oJ2EnKTtcbiAgICB2YXIgc2lnO1xuICAgIHZhciB2ZXJpZmllZDtcbiAgICB0cnkge1xuICAgICAgc2lnID0gY3J5cHRvLnNpZ24obnVsbCwgZGF0YSwga2V5KTtcbiAgICAgIHZlcmlmaWVkID0gY3J5cHRvLnZlcmlmeShudWxsLCBkYXRhLCBrZXksIHNpZyk7XG4gICAgfSBjYXRjaCAoZXgpIHt9XG4gICAgcmV0dXJuIChCdWZmZXIuaXNCdWZmZXIoc2lnKSAmJiBzaWcubGVuZ3RoID09PSA2NCAmJiB2ZXJpZmllZCA9PT0gdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG52YXIgY3VydmUyNTUxOVN1cHBvcnRlZCA9ICh0eXBlb2YgY3J5cHRvLmRpZmZpZUhlbGxtYW4gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIGNyeXB0by5jcmVhdGVQdWJsaWNLZXkgPT09ICdmdW5jdGlvbicpO1xuXG52YXIgTUVTU0FHRSA9IGV4cG9ydHMuTUVTU0FHRSA9IHtcbiAgLy8gVHJhbnNwb3J0IGxheWVyIHByb3RvY29sIC0tIGdlbmVyaWMgKDEtMTkpXG4gIERJU0NPTk5FQ1Q6IDEsXG4gIElHTk9SRTogMixcbiAgVU5JTVBMRU1FTlRFRDogMyxcbiAgREVCVUc6IDQsXG4gIFNFUlZJQ0VfUkVRVUVTVDogNSxcbiAgU0VSVklDRV9BQ0NFUFQ6IDYsXG5cbiAgLy8gVHJhbnNwb3J0IGxheWVyIHByb3RvY29sIC0tIGFsZ29yaXRobSBuZWdvdGlhdGlvbiAoMjAtMjkpXG4gIEtFWElOSVQ6IDIwLFxuICBORVdLRVlTOiAyMSxcblxuICAvLyBUcmFuc3BvcnQgbGF5ZXIgcHJvdG9jb2wgLS0ga2V5IGV4Y2hhbmdlIG1ldGhvZC1zcGVjaWZpYyAoMzAtNDkpXG5cbiAgLy8gVXNlciBhdXRoIHByb3RvY29sIC0tIGdlbmVyaWMgKDUwLTU5KVxuICBVU0VSQVVUSF9SRVFVRVNUOiA1MCxcbiAgVVNFUkFVVEhfRkFJTFVSRTogNTEsXG4gIFVTRVJBVVRIX1NVQ0NFU1M6IDUyLFxuICBVU0VSQVVUSF9CQU5ORVI6IDUzLFxuXG4gIC8vIFVzZXIgYXV0aCBwcm90b2NvbCAtLSB1c2VyIGF1dGggbWV0aG9kLXNwZWNpZmljICg2MC03OSlcblxuICAvLyBDb25uZWN0aW9uIHByb3RvY29sIC0tIGdlbmVyaWMgKDgwLTg5KVxuICBHTE9CQUxfUkVRVUVTVDogODAsXG4gIFJFUVVFU1RfU1VDQ0VTUzogODEsXG4gIFJFUVVFU1RfRkFJTFVSRTogODIsXG5cbiAgLy8gQ29ubmVjdGlvbiBwcm90b2NvbCAtLSBjaGFubmVsLXJlbGF0ZWQgKDkwLTEyNylcbiAgQ0hBTk5FTF9PUEVOOiA5MCxcbiAgQ0hBTk5FTF9PUEVOX0NPTkZJUk1BVElPTjogOTEsXG4gIENIQU5ORUxfT1BFTl9GQUlMVVJFOiA5MixcbiAgQ0hBTk5FTF9XSU5ET1dfQURKVVNUOiA5MyxcbiAgQ0hBTk5FTF9EQVRBOiA5NCxcbiAgQ0hBTk5FTF9FWFRFTkRFRF9EQVRBOiA5NSxcbiAgQ0hBTk5FTF9FT0Y6IDk2LFxuICBDSEFOTkVMX0NMT1NFOiA5NyxcbiAgQ0hBTk5FTF9SRVFVRVNUOiA5OCxcbiAgQ0hBTk5FTF9TVUNDRVNTOiA5OSxcbiAgQ0hBTk5FTF9GQUlMVVJFOiAxMDBcblxuICAvLyBSZXNlcnZlZCBmb3IgY2xpZW50IHByb3RvY29scyAoMTI4LTE5MSlcblxuICAvLyBMb2NhbCBleHRlbnNpb25zICgxOTItMTU1KVxufTtcbmZvciAoaSA9IDAsIGtleXMgPSBPYmplY3Qua2V5cyhNRVNTQUdFKSwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47ICsraSlcbiAgTUVTU0FHRVtNRVNTQUdFW2tleXNbaV1dXSA9IGtleXNbaV07XG4vLyBjb250ZXh0LXNwZWNpZmljIG1lc3NhZ2UgY29kZXM6XG5NRVNTQUdFLktFWERIX0lOSVQgPSAzMDtcbk1FU1NBR0UuS0VYREhfUkVQTFkgPSAzMTtcbk1FU1NBR0UuS0VYREhfR0VYX1JFUVVFU1QgPSAzNDtcbk1FU1NBR0UuS0VYREhfR0VYX0dST1VQID0gMzE7XG5NRVNTQUdFLktFWERIX0dFWF9JTklUID0gMzI7XG5NRVNTQUdFLktFWERIX0dFWF9SRVBMWSA9IDMzO1xuTUVTU0FHRS5LRVhFQ0RIX0lOSVQgPSAzMDsgLy8gaW5jbHVkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzXG5NRVNTQUdFLktFWEVDREhfUkVQTFkgPSAzMTsgLy8gaW5jbHVkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzXG5NRVNTQUdFLlVTRVJBVVRIX1BBU1NXRF9DSEFOR0VSRVEgPSA2MDtcbk1FU1NBR0UuVVNFUkFVVEhfUEtfT0sgPSA2MDtcbk1FU1NBR0UuVVNFUkFVVEhfSU5GT19SRVFVRVNUID0gNjA7XG5NRVNTQUdFLlVTRVJBVVRIX0lORk9fUkVTUE9OU0UgPSA2MTtcblxudmFyIERZTkFNSUNfS0VYREhfTUVTU0FHRSA9IGV4cG9ydHMuRFlOQU1JQ19LRVhESF9NRVNTQUdFID0ge307XG5EWU5BTUlDX0tFWERIX01FU1NBR0VbTUVTU0FHRS5LRVhESF9HRVhfR1JPVVBdID0gJ0tFWERIX0dFWF9HUk9VUCc7XG5EWU5BTUlDX0tFWERIX01FU1NBR0VbTUVTU0FHRS5LRVhESF9HRVhfUkVQTFldID0gJ0tFWERIX0dFWF9SRVBMWSc7XG5cbnZhciBLRVhESF9NRVNTQUdFID0gZXhwb3J0cy5LRVhESF9NRVNTQUdFID0ge307XG5LRVhESF9NRVNTQUdFW01FU1NBR0UuS0VYREhfSU5JVF0gPSAnS0VYREhfSU5JVCc7XG5LRVhESF9NRVNTQUdFW01FU1NBR0UuS0VYREhfUkVQTFldID0gJ0tFWERIX1JFUExZJztcblxudmFyIERJU0NPTk5FQ1RfUkVBU09OID0gZXhwb3J0cy5ESVNDT05ORUNUX1JFQVNPTiA9IHtcbiAgSE9TVF9OT1RfQUxMT1dFRF9UT19DT05ORUNUOiAxLFxuICBQUk9UT0NPTF9FUlJPUjogMixcbiAgS0VZX0VYQ0hBTkdFX0ZBSUxFRDogMyxcbiAgUkVTRVJWRUQ6IDQsXG4gIE1BQ19FUlJPUjogNSxcbiAgQ09NUFJFU1NJT05fRVJST1I6IDYsXG4gIFNFUlZJQ0VfTk9UX0FWQUlMQUJMRTogNyxcbiAgUFJPVE9DT0xfVkVSU0lPTl9OT1RfU1VQUE9SVEVEOiA4LFxuICBIT1NUX0tFWV9OT1RfVkVSSUZJQUJMRTogOSxcbiAgQ09OTkVDVElPTl9MT1NUOiAxMCxcbiAgQllfQVBQTElDQVRJT046IDExLFxuICBUT09fTUFOWV9DT05ORUNUSU9OUzogMTIsXG4gIEFVVEhfQ0FOQ0VMRURfQllfVVNFUjogMTMsXG4gIE5PX01PUkVfQVVUSF9NRVRIT0RTX0FWQUlMQUJMRTogMTQsXG4gIElMTEVHQUxfVVNFUl9OQU1FOiAxNVxufTtcbmZvciAoaSA9IDAsIGtleXMgPSBPYmplY3Qua2V5cyhESVNDT05ORUNUX1JFQVNPTiksIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICBpIDwgbGVuO1xuICAgICArK2kpIHtcbiAgRElTQ09OTkVDVF9SRUFTT05bRElTQ09OTkVDVF9SRUFTT05ba2V5c1tpXV1dID0ga2V5c1tpXTtcbn1cblxudmFyIENIQU5ORUxfT1BFTl9GQUlMVVJFID0gZXhwb3J0cy5DSEFOTkVMX09QRU5fRkFJTFVSRSA9IHtcbiAgQURNSU5JU1RSQVRJVkVMWV9QUk9ISUJJVEVEOiAxLFxuICBDT05ORUNUX0ZBSUxFRDogMixcbiAgVU5LTk9XTl9DSEFOTkVMX1RZUEU6IDMsXG4gIFJFU09VUkNFX1NIT1JUQUdFOiA0XG59O1xuZm9yIChpID0gMCwga2V5cyA9IE9iamVjdC5rZXlzKENIQU5ORUxfT1BFTl9GQUlMVVJFKSwgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgIGkgPCBsZW47XG4gICAgICsraSkge1xuICBDSEFOTkVMX09QRU5fRkFJTFVSRVtDSEFOTkVMX09QRU5fRkFJTFVSRVtrZXlzW2ldXV0gPSBrZXlzW2ldO1xufVxuXG52YXIgVEVSTUlOQUxfTU9ERSA9IGV4cG9ydHMuVEVSTUlOQUxfTU9ERSA9IHtcbiAgVFRZX09QX0VORDogMCwgICAgICAgIC8vIEluZGljYXRlcyBlbmQgb2Ygb3B0aW9ucy5cbiAgVklOVFI6IDEsICAgICAgICAgICAgIC8vIEludGVycnVwdCBjaGFyYWN0ZXI7IDI1NSBpZiBub25lLiBTaW1pbGFybHkgZm9yIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIG90aGVyIGNoYXJhY3RlcnMuICBOb3QgYWxsIG9mIHRoZXNlIGNoYXJhY3RlcnMgYXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgc3VwcG9ydGVkIG9uIGFsbCBzeXN0ZW1zLlxuICBWUVVJVDogMiwgICAgICAgICAgICAgLy8gVGhlIHF1aXQgY2hhcmFjdGVyIChzZW5kcyBTSUdRVUlUIHNpZ25hbCBvbiBQT1NJWFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHN5c3RlbXMpLlxuICBWRVJBU0U6IDMsICAgICAgICAgICAgLy8gRXJhc2UgdGhlIGNoYXJhY3RlciB0byBsZWZ0IG9mIHRoZSBjdXJzb3IuXG4gIFZLSUxMOiA0LCAgICAgICAgICAgICAvLyBLaWxsIHRoZSBjdXJyZW50IGlucHV0IGxpbmUuXG4gIFZFT0Y6IDUsICAgICAgICAgICAgICAvLyBFbmQtb2YtZmlsZSBjaGFyYWN0ZXIgKHNlbmRzIEVPRiBmcm9tIHRoZSB0ZXJtaW5hbCkuXG4gIFZFT0w6IDYsICAgICAgICAgICAgICAvLyBFbmQtb2YtbGluZSBjaGFyYWN0ZXIgaW4gYWRkaXRpb24gdG8gY2FycmlhZ2UgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgYW5kL29yIGxpbmVmZWVkLlxuICBWRU9MMjogNywgICAgICAgICAgICAgLy8gQWRkaXRpb25hbCBlbmQtb2YtbGluZSBjaGFyYWN0ZXIuXG4gIFZTVEFSVDogOCwgICAgICAgICAgICAvLyBDb250aW51ZXMgcGF1c2VkIG91dHB1dCAobm9ybWFsbHkgY29udHJvbC1RKS5cbiAgVlNUT1A6IDksICAgICAgICAgICAgIC8vIFBhdXNlcyBvdXRwdXQgKG5vcm1hbGx5IGNvbnRyb2wtUykuXG4gIFZTVVNQOiAxMCwgICAgICAgICAgICAvLyBTdXNwZW5kcyB0aGUgY3VycmVudCBwcm9ncmFtLlxuICBWRFNVU1A6IDExLCAgICAgICAgICAgLy8gQW5vdGhlciBzdXNwZW5kIGNoYXJhY3Rlci5cbiAgVlJFUFJJTlQ6IDEyLCAgICAgICAgIC8vIFJlcHJpbnRzIHRoZSBjdXJyZW50IGlucHV0IGxpbmUuXG4gIFZXRVJBU0U6IDEzLCAgICAgICAgICAvLyBFcmFzZXMgYSB3b3JkIGxlZnQgb2YgY3Vyc29yLlxuICBWTE5FWFQ6IDE0LCAgICAgICAgICAgLy8gRW50ZXIgdGhlIG5leHQgY2hhcmFjdGVyIHR5cGVkIGxpdGVyYWxseSwgZXZlbiBpZiBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGlzIGEgc3BlY2lhbCBjaGFyYWN0ZXJcbiAgVkZMVVNIOiAxNSwgICAgICAgICAgIC8vIENoYXJhY3RlciB0byBmbHVzaCBvdXRwdXQuXG4gIFZTV1RDSDogMTYsICAgICAgICAgICAvLyBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgc2hlbGwgbGF5ZXIuXG4gIFZTVEFUVVM6IDE3LCAgICAgICAgICAvLyBQcmludHMgc3lzdGVtIHN0YXR1cyBsaW5lIChsb2FkLCBjb21tYW5kLCBwaWQsIGV0YykuXG4gIFZESVNDQVJEOiAxOCwgICAgICAgICAvLyBUb2dnbGVzIHRoZSBmbHVzaGluZyBvZiB0ZXJtaW5hbCBvdXRwdXQuXG4gIElHTlBBUjogMzAsICAgICAgICAgICAvLyBUaGUgaWdub3JlIHBhcml0eSBmbGFnLiAgVGhlIHBhcmFtZXRlciBTSE9VTEQgYmUgMFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGlmIHRoaXMgZmxhZyBpcyBGQUxTRSwgYW5kIDEgaWYgaXQgaXMgVFJVRS5cbiAgUEFSTVJLOiAzMSwgICAgICAgICAgIC8vIE1hcmsgcGFyaXR5IGFuZCBmcmFtaW5nIGVycm9ycy5cbiAgSU5QQ0s6IDMyLCAgICAgICAgICAgIC8vIEVuYWJsZSBjaGVja2luZyBvZiBwYXJpdHkgZXJyb3JzLlxuICBJU1RSSVA6IDMzLCAgICAgICAgICAgLy8gU3RyaXAgOHRoIGJpdCBvZmYgY2hhcmFjdGVycy5cbiAgSU5MQ1I6IDM0LCAgICAgICAgICAgIC8vIE1hcCBOTCBpbnRvIENSIG9uIGlucHV0LlxuICBJR05DUjogMzUsICAgICAgICAgICAgLy8gSWdub3JlIENSIG9uIGlucHV0LlxuICBJQ1JOTDogMzYsICAgICAgICAgICAgLy8gTWFwIENSIHRvIE5MIG9uIGlucHV0LlxuICBJVUNMQzogMzcsICAgICAgICAgICAgLy8gVHJhbnNsYXRlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZS5cbiAgSVhPTjogMzgsICAgICAgICAgICAgIC8vIEVuYWJsZSBvdXRwdXQgZmxvdyBjb250cm9sLlxuICBJWEFOWTogMzksICAgICAgICAgICAgLy8gQW55IGNoYXIgd2lsbCByZXN0YXJ0IGFmdGVyIHN0b3AuXG4gIElYT0ZGOiA0MCwgICAgICAgICAgICAvLyBFbmFibGUgaW5wdXQgZmxvdyBjb250cm9sLlxuICBJTUFYQkVMOiA0MSwgICAgICAgICAgLy8gUmluZyBiZWxsIG9uIGlucHV0IHF1ZXVlIGZ1bGwuXG4gIElTSUc6IDUwLCAgICAgICAgICAgICAvLyBFbmFibGUgc2lnbmFscyBJTlRSLCBRVUlULCBbRF1TVVNQLlxuICBJQ0FOT046IDUxLCAgICAgICAgICAgLy8gQ2Fub25pY2FsaXplIGlucHV0IGxpbmVzLlxuICBYQ0FTRTogNTIsICAgICAgICAgICAgLy8gRW5hYmxlIGlucHV0IGFuZCBvdXRwdXQgb2YgdXBwZXJjYXNlIGNoYXJhY3RlcnMgYnlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBwcmVjZWRpbmcgdGhlaXIgbG93ZXJjYXNlIGVxdWl2YWxlbnRzIHdpdGggXCJcXFwiLlxuICBFQ0hPOiA1MywgICAgICAgICAgICAgLy8gRW5hYmxlIGVjaG9pbmcuXG4gIEVDSE9FOiA1NCwgICAgICAgICAgICAvLyBWaXN1YWxseSBlcmFzZSBjaGFycy5cbiAgRUNIT0s6IDU1LCAgICAgICAgICAgIC8vIEtpbGwgY2hhcmFjdGVyIGRpc2NhcmRzIGN1cnJlbnQgbGluZS5cbiAgRUNIT05MOiA1NiwgICAgICAgICAgIC8vIEVjaG8gTkwgZXZlbiBpZiBFQ0hPIGlzIG9mZi5cbiAgTk9GTFNIOiA1NywgICAgICAgICAgIC8vIERvbid0IGZsdXNoIGFmdGVyIGludGVycnVwdC5cbiAgVE9TVE9QOiA1OCwgICAgICAgICAgIC8vIFN0b3AgYmFja2dyb3VuZCBqb2JzIGZyb20gb3V0cHV0LlxuICBJRVhURU46IDU5LCAgICAgICAgICAgLy8gRW5hYmxlIGV4dGVuc2lvbnMuXG4gIEVDSE9DVEw6IDYwLCAgICAgICAgICAvLyBFY2hvIGNvbnRyb2wgY2hhcmFjdGVycyBhcyBeKENoYXIpLlxuICBFQ0hPS0U6IDYxLCAgICAgICAgICAgLy8gVmlzdWFsIGVyYXNlIGZvciBsaW5lIGtpbGwuXG4gIFBFTkRJTjogNjIsICAgICAgICAgICAvLyBSZXR5cGUgcGVuZGluZyBpbnB1dC5cbiAgT1BPU1Q6IDcwLCAgICAgICAgICAgIC8vIEVuYWJsZSBvdXRwdXQgcHJvY2Vzc2luZy5cbiAgT0xDVUM6IDcxLCAgICAgICAgICAgIC8vIENvbnZlcnQgbG93ZXJjYXNlIHRvIHVwcGVyY2FzZS5cbiAgT05MQ1I6IDcyLCAgICAgICAgICAgIC8vIE1hcCBOTCB0byBDUi1OTC5cbiAgT0NSTkw6IDczLCAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSBjYXJyaWFnZSByZXR1cm4gdG8gbmV3bGluZSAob3V0cHV0KS5cbiAgT05PQ1I6IDc0LCAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSBuZXdsaW5lIHRvIGNhcnJpYWdlIHJldHVybi1uZXdsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAob3V0cHV0KS5cbiAgT05MUkVUOiA3NSwgICAgICAgICAgIC8vIE5ld2xpbmUgcGVyZm9ybXMgYSBjYXJyaWFnZSByZXR1cm4gKG91dHB1dCkuXG4gIENTNzogOTAsICAgICAgICAgICAgICAvLyA3IGJpdCBtb2RlLlxuICBDUzg6IDkxLCAgICAgICAgICAgICAgLy8gOCBiaXQgbW9kZS5cbiAgUEFSRU5COiA5MiwgICAgICAgICAgIC8vIFBhcml0eSBlbmFibGUuXG4gIFBBUk9ERDogOTMsICAgICAgICAgICAvLyBPZGQgcGFyaXR5LCBlbHNlIGV2ZW4uXG4gIFRUWV9PUF9JU1BFRUQ6IDEyOCwgICAvLyBTcGVjaWZpZXMgdGhlIGlucHV0IGJhdWQgcmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuXG4gIFRUWV9PUF9PU1BFRUQ6IDEyOSAgICAvLyBTcGVjaWZpZXMgdGhlIG91dHB1dCBiYXVkIHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kLlxufTtcbmZvciAoaSA9IDAsIGtleXMgPSBPYmplY3Qua2V5cyhURVJNSU5BTF9NT0RFKSwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47ICsraSlcbiAgVEVSTUlOQUxfTU9ERVtURVJNSU5BTF9NT0RFW2tleXNbaV1dXSA9IGtleXNbaV07XG5cbnZhciBDSEFOTkVMX0VYVEVOREVEX0RBVEFUWVBFID0gZXhwb3J0cy5DSEFOTkVMX0VYVEVOREVEX0RBVEFUWVBFID0ge1xuICBTVERFUlI6IDFcbn07XG5mb3IgKGkgPSAwLCBrZXlzID0gT2JqZWN0LmtleXMoQ0hBTk5FTF9FWFRFTkRFRF9EQVRBVFlQRSksIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICBpIDwgbGVuO1xuICAgICArK2kpIHtcbiAgQ0hBTk5FTF9FWFRFTkRFRF9EQVRBVFlQRVtDSEFOTkVMX0VYVEVOREVEX0RBVEFUWVBFW2tleXNbaV1dXSA9IGtleXNbaV07XG59XG5cbmV4cG9ydHMuU0lHTkFMUyA9IFsnQUJSVCcsICdBTFJNJywgJ0ZQRScsICdIVVAnLCAnSUxMJywgJ0lOVCcsXG4gICAgICAgICAgICAgICAgICAgJ1FVSVQnLCAnU0VHVicsICdURVJNJywgJ1VTUjEnLCAnVVNSMicsICdLSUxMJyxcbiAgICAgICAgICAgICAgICAgICAnUElQRSddO1xuXG52YXIgREVGQVVMVF9LRVggPSBbXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1NjU2I3NlY3Rpb24tMTAuMVxuICAnZWNkaC1zaGEyLW5pc3RwMjU2JyxcbiAgJ2VjZGgtc2hhMi1uaXN0cDM4NCcsXG4gICdlY2RoLXNoYTItbmlzdHA1MjEnLFxuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NDE5I3NlY3Rpb24tNFxuICAnZGlmZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMjU2JyxcblxuICAnZGlmZmllLWhlbGxtYW4tZ3JvdXAxNC1zaGEyNTYnLFxuICAnZGlmZmllLWhlbGxtYW4tZ3JvdXAxNi1zaGE1MTInLFxuICAnZGlmZmllLWhlbGxtYW4tZ3JvdXAxOC1zaGE1MTInLFxuXG4gICdkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEnLCAvLyBSRVFVSVJFRFxuXTtcbmlmIChjdXJ2ZTI1NTE5U3VwcG9ydGVkKSB7XG4gIERFRkFVTFRfS0VYLnVuc2hpZnQoJ2N1cnZlMjU1MTktc2hhMjU2Jyk7XG4gIERFRkFVTFRfS0VYLnVuc2hpZnQoJ2N1cnZlMjU1MTktc2hhMjU2QGxpYnNzaC5vcmcnKTtcbn1cbnZhciBTVVBQT1JURURfS0VYID0gW1xuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDQxOSNzZWN0aW9uLTRcbiAgJ2RpZmZpZS1oZWxsbWFuLWdyb3VwLWV4Y2hhbmdlLXNoYTEnLFxuXG4gICdkaWZmaWUtaGVsbG1hbi1ncm91cDEtc2hhMScgIC8vIFJFUVVJUkVEXG5dO1xudmFyIEtFWF9CVUYgPSBCdWZmZXIuZnJvbShERUZBVUxUX0tFWC5qb2luKCcsJyksICdhc2NpaScpO1xuU1VQUE9SVEVEX0tFWCA9IERFRkFVTFRfS0VYLmNvbmNhdChTVVBQT1JURURfS0VYKTtcblxudmFyIERFRkFVTFRfU0VSVkVSX0hPU1RfS0VZID0gW1xuICAnZWNkc2Etc2hhMi1uaXN0cDI1NicsXG4gICdlY2RzYS1zaGEyLW5pc3RwMzg0JyxcbiAgJ2VjZHNhLXNoYTItbmlzdHA1MjEnLFxuICAnc3NoLXJzYScsXG5dO1xuaWYgKGVkZHNhU3VwcG9ydGVkKVxuICBERUZBVUxUX1NFUlZFUl9IT1NUX0tFWS51bnNoaWZ0KCdzc2gtZWQyNTUxOScpO1xudmFyIFNVUFBPUlRFRF9TRVJWRVJfSE9TVF9LRVkgPSBbXG4gICdzc2gtZHNzJ1xuXTtcbnZhciBTRVJWRVJfSE9TVF9LRVlfQlVGID0gQnVmZmVyLmZyb20oREVGQVVMVF9TRVJWRVJfSE9TVF9LRVkuam9pbignLCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNjaWknKTtcblNVUFBPUlRFRF9TRVJWRVJfSE9TVF9LRVkgPSBERUZBVUxUX1NFUlZFUl9IT1NUX0tFWS5jb25jYXQoXG4gIFNVUFBPUlRFRF9TRVJWRVJfSE9TVF9LRVlcbik7XG5cbnZhciBERUZBVUxUX0NJUEhFUiA9IFtcbiAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDM0NCNzZWN0aW9uLTRcbiAgJ2FlczEyOC1jdHInLFxuICAnYWVzMTkyLWN0cicsXG4gICdhZXMyNTYtY3RyJyxcblxuICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1NjQ3XG4gICdhZXMxMjgtZ2NtJyxcbiAgJ2FlczEyOC1nY21Ab3BlbnNzaC5jb20nLFxuICAnYWVzMjU2LWdjbScsXG4gICdhZXMyNTYtZ2NtQG9wZW5zc2guY29tJ1xuXTtcbnZhciBTVVBQT1JURURfQ0lQSEVSID0gW1xuICAnYWVzMjU2LWNiYycsXG4gICdhZXMxOTItY2JjJyxcbiAgJ2FlczEyOC1jYmMnLFxuICAnYmxvd2Zpc2gtY2JjJyxcbiAgJzNkZXMtY2JjJyxcblxuICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MzQ1I3NlY3Rpb24tNDpcbiAgJ2FyY2ZvdXIyNTYnLFxuICAnYXJjZm91cjEyOCcsXG5cbiAgJ2Nhc3QxMjgtY2JjJyxcbiAgJ2FyY2ZvdXInXG5dO1xudmFyIENJUEhFUl9CVUYgPSBCdWZmZXIuZnJvbShERUZBVUxUX0NJUEhFUi5qb2luKCcsJyksICdhc2NpaScpO1xuU1VQUE9SVEVEX0NJUEhFUiA9IERFRkFVTFRfQ0lQSEVSLmNvbmNhdChTVVBQT1JURURfQ0lQSEVSKTtcblxudmFyIERFRkFVTFRfSE1BQyA9IFtcbiAgJ2htYWMtc2hhMi0yNTYnLFxuICAnaG1hYy1zaGEyLTUxMicsXG4gICdobWFjLXNoYTEnLFxuXTtcbnZhciBTVVBQT1JURURfSE1BQyA9IFtcbiAgJ2htYWMtbWQ1JyxcbiAgJ2htYWMtc2hhMi0yNTYtOTYnLCAvLyBmaXJzdCA5NiBiaXRzIG9mIEhNQUMtU0hBMjU2XG4gICdobWFjLXNoYTItNTEyLTk2JywgLy8gZmlyc3QgOTYgYml0cyBvZiBITUFDLVNIQTUxMlxuICAnaG1hYy1yaXBlbWQxNjAnLFxuICAnaG1hYy1zaGExLTk2JywgICAgIC8vIGZpcnN0IDk2IGJpdHMgb2YgSE1BQy1TSEExXG4gICdobWFjLW1kNS05NicgICAgICAgLy8gZmlyc3QgOTYgYml0cyBvZiBITUFDLU1ENVxuXTtcbnZhciBITUFDX0JVRiA9IEJ1ZmZlci5mcm9tKERFRkFVTFRfSE1BQy5qb2luKCcsJyksICdhc2NpaScpO1xuU1VQUE9SVEVEX0hNQUMgPSBERUZBVUxUX0hNQUMuY29uY2F0KFNVUFBPUlRFRF9ITUFDKTtcblxudmFyIERFRkFVTFRfQ09NUFJFU1MgPSBbXG4gICdub25lJyxcbiAgJ3psaWJAb3BlbnNzaC5jb20nLCAvLyBaTElCIChMWjc3KSBjb21wcmVzc2lvbiwgZXhjZXB0XG4gICAgICAgICAgICAgICAgICAgICAgLy8gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBkb2VzIG5vdCBzdGFydCB1bnRpbCBhZnRlclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3NmdWwgdXNlciBhdXRoZW50aWNhdGlvblxuICAnemxpYicgICAgICAgICAgICAgIC8vIFpMSUIgKExaNzcpIGNvbXByZXNzaW9uXG5dO1xudmFyIFNVUFBPUlRFRF9DT01QUkVTUyA9IFtdO1xudmFyIENPTVBSRVNTX0JVRiA9IEJ1ZmZlci5mcm9tKERFRkFVTFRfQ09NUFJFU1Muam9pbignLCcpLCAnYXNjaWknKTtcblNVUFBPUlRFRF9DT01QUkVTUyA9IERFRkFVTFRfQ09NUFJFU1MuY29uY2F0KFNVUFBPUlRFRF9DT01QUkVTUyk7XG5cbmZ1bmN0aW9uIG1ha2VDaXBoZXJJbmZvKGJsb2NrTGVuLCBrZXlMZW4sIGl2TGVuLCBhdXRoTGVuLCBkaXNjYXJkTGVuLCBzdHJlYW0pIHtcbiAgcmV0dXJuIHtcbiAgICBibG9ja0xlbjogYmxvY2tMZW4sXG4gICAga2V5TGVuOiBrZXlMZW4sXG4gICAgaXZMZW46IGl2TGVuID09PSAwID8gYmxvY2tMZW4gOiBpdkxlbixcbiAgICBhdXRoTGVuOiBhdXRoTGVuLFxuICAgIGRpc2NhcmRMZW46IGRpc2NhcmRMZW4sXG4gICAgc3RyZWFtOiBzdHJlYW0sXG4gIH07XG59XG5leHBvcnRzLkNJUEhFUl9JTkZPID0ge1xuICAnYWVzMTI4LWdjbSc6IG1ha2VDaXBoZXJJbmZvKDE2LCAxNiwgMTIsIDE2LCAwLCBmYWxzZSksXG4gICdhZXMyNTYtZ2NtJzogbWFrZUNpcGhlckluZm8oMTYsIDMyLCAxMiwgMTYsIDAsIGZhbHNlKSxcbiAgJ2FlczEyOC1nY21Ab3BlbnNzaC5jb20nOiBtYWtlQ2lwaGVySW5mbygxNiwgMTYsIDEyLCAxNiwgMCwgZmFsc2UpLFxuICAnYWVzMjU2LWdjbUBvcGVuc3NoLmNvbSc6IG1ha2VDaXBoZXJJbmZvKDE2LCAzMiwgMTIsIDE2LCAwLCBmYWxzZSksXG5cbiAgJ2FlczEyOC1jYmMnOiBtYWtlQ2lwaGVySW5mbygxNiwgMTYsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2FlczE5Mi1jYmMnOiBtYWtlQ2lwaGVySW5mbygxNiwgMjQsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2FlczI1Ni1jYmMnOiBtYWtlQ2lwaGVySW5mbygxNiwgMzIsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ3Jpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSc6IG1ha2VDaXBoZXJJbmZvKDE2LCAzMiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnM2Rlcy1jYmMnOiBtYWtlQ2lwaGVySW5mbyg4LCAyNCwgMCwgMCwgMCwgZmFsc2UpLFxuICAnYmxvd2Zpc2gtY2JjJzogbWFrZUNpcGhlckluZm8oOCwgMTYsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2lkZWEtY2JjJzogbWFrZUNpcGhlckluZm8oOCwgMTYsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2Nhc3QxMjgtY2JjJzogbWFrZUNpcGhlckluZm8oOCwgMTYsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2NhbWVsbGlhMTI4LWNiYyc6IG1ha2VDaXBoZXJJbmZvKDE2LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnY2FtZWxsaWExOTItY2JjJzogbWFrZUNpcGhlckluZm8oMTYsIDI0LCAwLCAwLCAwLCBmYWxzZSksXG4gICdjYW1lbGxpYTI1Ni1jYmMnOiBtYWtlQ2lwaGVySW5mbygxNiwgMzIsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2NhbWVsbGlhMTI4LWNiY0BvcGVuc3NoLmNvbSc6IG1ha2VDaXBoZXJJbmZvKDE2LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnY2FtZWxsaWExOTItY2JjQG9wZW5zc2guY29tJzogbWFrZUNpcGhlckluZm8oMTYsIDI0LCAwLCAwLCAwLCBmYWxzZSksXG4gICdjYW1lbGxpYTI1Ni1jYmNAb3BlbnNzaC5jb20nOiBtYWtlQ2lwaGVySW5mbygxNiwgMzIsIDAsIDAsIDAsIGZhbHNlKSxcblxuICAnYWVzMTI4LWN0cic6IG1ha2VDaXBoZXJJbmZvKDE2LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnYWVzMTkyLWN0cic6IG1ha2VDaXBoZXJJbmZvKDE2LCAyNCwgMCwgMCwgMCwgZmFsc2UpLFxuICAnYWVzMjU2LWN0cic6IG1ha2VDaXBoZXJJbmZvKDE2LCAzMiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnM2Rlcy1jdHInOiBtYWtlQ2lwaGVySW5mbyg4LCAyNCwgMCwgMCwgMCwgZmFsc2UpLFxuICAnYmxvd2Zpc2gtY3RyJzogbWFrZUNpcGhlckluZm8oOCwgMTYsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2Nhc3QxMjgtY3RyJzogbWFrZUNpcGhlckluZm8oOCwgMTYsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2NhbWVsbGlhMTI4LWN0cic6IG1ha2VDaXBoZXJJbmZvKDE2LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnY2FtZWxsaWExOTItY3RyJzogbWFrZUNpcGhlckluZm8oMTYsIDI0LCAwLCAwLCAwLCBmYWxzZSksXG4gICdjYW1lbGxpYTI1Ni1jdHInOiBtYWtlQ2lwaGVySW5mbygxNiwgMzIsIDAsIDAsIDAsIGZhbHNlKSxcbiAgJ2NhbWVsbGlhMTI4LWN0ckBvcGVuc3NoLmNvbSc6IG1ha2VDaXBoZXJJbmZvKDE2LCAxNiwgMCwgMCwgMCwgZmFsc2UpLFxuICAnY2FtZWxsaWExOTItY3RyQG9wZW5zc2guY29tJzogbWFrZUNpcGhlckluZm8oMTYsIDI0LCAwLCAwLCAwLCBmYWxzZSksXG4gICdjYW1lbGxpYTI1Ni1jdHJAb3BlbnNzaC5jb20nOiBtYWtlQ2lwaGVySW5mbygxNiwgMzIsIDAsIDAsIDAsIGZhbHNlKSxcblxuICAvKiBUaGUgXCJhcmNmb3VyMTI4XCIgYWxnb3JpdGhtIGlzIHRoZSBSQzQgY2lwaGVyLCBhcyBkZXNjcmliZWQgaW5cbiAgICAgW1NDSE5FSUVSXSwgdXNpbmcgYSAxMjgtYml0IGtleS4gIFRoZSBmaXJzdCAxNTM2IGJ5dGVzIG9mIGtleXN0cmVhbVxuICAgICBnZW5lcmF0ZWQgYnkgdGhlIGNpcGhlciBNVVNUIGJlIGRpc2NhcmRlZCwgYW5kIHRoZSBmaXJzdCBieXRlIG9mIHRoZVxuICAgICBmaXJzdCBlbmNyeXB0ZWQgcGFja2V0IE1VU1QgYmUgZW5jcnlwdGVkIHVzaW5nIHRoZSAxNTM3dGggYnl0ZSBvZlxuICAgICBrZXlzdHJlYW0uXG5cbiAgICAgLS0gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDM0NSNzZWN0aW9uLTQgKi9cbiAgJ2FyY2ZvdXInOiBtYWtlQ2lwaGVySW5mbyg4LCAxNiwgMCwgMCwgMTUzNiwgdHJ1ZSksXG4gICdhcmNmb3VyMTI4JzogbWFrZUNpcGhlckluZm8oOCwgMTYsIDAsIDAsIDE1MzYsIHRydWUpLFxuICAnYXJjZm91cjI1Nic6IG1ha2VDaXBoZXJJbmZvKDgsIDMyLCAwLCAwLCAxNTM2LCB0cnVlKSxcbiAgJ2FyY2ZvdXI1MTInOiBtYWtlQ2lwaGVySW5mbyg4LCA2NCwgMCwgMCwgMTUzNiwgdHJ1ZSksXG59O1xuXG5mdW5jdGlvbiBtYWtlSE1BQ0luZm8obGVuLCBhY3R1YWxMZW4pIHtcbiAgcmV0dXJuIHsgbGVuOiBsZW4sIGFjdHVhbExlbjogYWN0dWFsTGVuIH07XG59XG5leHBvcnRzLkhNQUNfSU5GTyA9IHtcbiAgJ2htYWMtbWQ1JzogbWFrZUhNQUNJbmZvKDE2LCAxNiksXG4gICdobWFjLW1kNS05Nic6IG1ha2VITUFDSW5mbygxNiwgMTIpLFxuICAnaG1hYy1yaXBlbWQxNjAnOiBtYWtlSE1BQ0luZm8oMjAsIDIwKSxcbiAgJ2htYWMtc2hhMSc6IG1ha2VITUFDSW5mbygyMCwgMjApLFxuICAnaG1hYy1zaGExLTk2JzogbWFrZUhNQUNJbmZvKDIwLCAxMiksXG4gICdobWFjLXNoYTItMjU2JzogbWFrZUhNQUNJbmZvKDMyLCAzMiksXG4gICdobWFjLXNoYTItMjU2LTk2JzogbWFrZUhNQUNJbmZvKDMyLCAxMiksXG4gICdobWFjLXNoYTItNTEyJzogbWFrZUhNQUNJbmZvKDY0LCA2NCksXG4gICdobWFjLXNoYTItNTEyLTk2JzogbWFrZUhNQUNJbmZvKDY0LCAxMiksXG59O1xuXG5leHBvcnRzLkFMR09SSVRITVMgPSB7XG4gIEtFWDogREVGQVVMVF9LRVgsXG4gIEtFWF9CVUY6IEtFWF9CVUYsXG4gIFNVUFBPUlRFRF9LRVg6IFNVUFBPUlRFRF9LRVgsXG5cbiAgU0VSVkVSX0hPU1RfS0VZOiBERUZBVUxUX1NFUlZFUl9IT1NUX0tFWSxcbiAgU0VSVkVSX0hPU1RfS0VZX0JVRjogU0VSVkVSX0hPU1RfS0VZX0JVRixcbiAgU1VQUE9SVEVEX1NFUlZFUl9IT1NUX0tFWTogU1VQUE9SVEVEX1NFUlZFUl9IT1NUX0tFWSxcblxuICBDSVBIRVI6IERFRkFVTFRfQ0lQSEVSLFxuICBDSVBIRVJfQlVGOiBDSVBIRVJfQlVGLFxuICBTVVBQT1JURURfQ0lQSEVSOiBTVVBQT1JURURfQ0lQSEVSLFxuXG4gIEhNQUM6IERFRkFVTFRfSE1BQyxcbiAgSE1BQ19CVUY6IEhNQUNfQlVGLFxuICBTVVBQT1JURURfSE1BQzogU1VQUE9SVEVEX0hNQUMsXG5cbiAgQ09NUFJFU1M6IERFRkFVTFRfQ09NUFJFU1MsXG4gIENPTVBSRVNTX0JVRjogQ09NUFJFU1NfQlVGLFxuICBTVVBQT1JURURfQ09NUFJFU1M6IFNVUFBPUlRFRF9DT01QUkVTU1xufTtcbmV4cG9ydHMuU1NIX1RPX09QRU5TU0wgPSB7XG4gIC8vIEVDREgga2V5IGV4Y2hhbmdlXG4gICdlY2RoLXNoYTItbmlzdHAyNTYnOiAncHJpbWUyNTZ2MScsIC8vIE9wZW5TU0wncyBuYW1lIGZvciAnc2VjcDI1NnIxJ1xuICAnZWNkaC1zaGEyLW5pc3RwMzg0JzogJ3NlY3AzODRyMScsXG4gICdlY2RoLXNoYTItbmlzdHA1MjEnOiAnc2VjcDUyMXIxJyxcbiAgLy8gQ2lwaGVyc1xuICAnYWVzMTI4LWdjbSc6ICdhZXMtMTI4LWdjbScsXG4gICdhZXMyNTYtZ2NtJzogJ2Flcy0yNTYtZ2NtJyxcbiAgJ2FlczEyOC1nY21Ab3BlbnNzaC5jb20nOiAnYWVzLTEyOC1nY20nLFxuICAnYWVzMjU2LWdjbUBvcGVuc3NoLmNvbSc6ICdhZXMtMjU2LWdjbScsXG4gICczZGVzLWNiYyc6ICdkZXMtZWRlMy1jYmMnLFxuICAnYmxvd2Zpc2gtY2JjJzogJ2JmLWNiYycsXG4gICdhZXMyNTYtY2JjJzogJ2Flcy0yNTYtY2JjJyxcbiAgJ2FlczE5Mi1jYmMnOiAnYWVzLTE5Mi1jYmMnLFxuICAnYWVzMTI4LWNiYyc6ICdhZXMtMTI4LWNiYycsXG4gICdpZGVhLWNiYyc6ICdpZGVhLWNiYycsXG4gICdjYXN0MTI4LWNiYyc6ICdjYXN0LWNiYycsXG4gICdyaWpuZGFlbC1jYmNAbHlzYXRvci5saXUuc2UnOiAnYWVzLTI1Ni1jYmMnLFxuICAnYXJjZm91cjEyOCc6ICdyYzQnLFxuICAnYXJjZm91cjI1Nic6ICdyYzQnLFxuICAnYXJjZm91cjUxMic6ICdyYzQnLFxuICAnYXJjZm91cic6ICdyYzQnLFxuICAnY2FtZWxsaWExMjgtY2JjJzogJ2NhbWVsbGlhLTEyOC1jYmMnLFxuICAnY2FtZWxsaWExOTItY2JjJzogJ2NhbWVsbGlhLTE5Mi1jYmMnLFxuICAnY2FtZWxsaWEyNTYtY2JjJzogJ2NhbWVsbGlhLTI1Ni1jYmMnLFxuICAnY2FtZWxsaWExMjgtY2JjQG9wZW5zc2guY29tJzogJ2NhbWVsbGlhLTEyOC1jYmMnLFxuICAnY2FtZWxsaWExOTItY2JjQG9wZW5zc2guY29tJzogJ2NhbWVsbGlhLTE5Mi1jYmMnLFxuICAnY2FtZWxsaWEyNTYtY2JjQG9wZW5zc2guY29tJzogJ2NhbWVsbGlhLTI1Ni1jYmMnLFxuICAnM2Rlcy1jdHInOiAnZGVzLWVkZTMnLFxuICAnYmxvd2Zpc2gtY3RyJzogJ2JmLWVjYicsXG4gICdhZXMyNTYtY3RyJzogJ2Flcy0yNTYtY3RyJyxcbiAgJ2FlczE5Mi1jdHInOiAnYWVzLTE5Mi1jdHInLFxuICAnYWVzMTI4LWN0cic6ICdhZXMtMTI4LWN0cicsXG4gICdjYXN0MTI4LWN0cic6ICdjYXN0NS1lY2InLFxuICAnY2FtZWxsaWExMjgtY3RyJzogJ2NhbWVsbGlhLTEyOC1lY2InLFxuICAnY2FtZWxsaWExOTItY3RyJzogJ2NhbWVsbGlhLTE5Mi1lY2InLFxuICAnY2FtZWxsaWEyNTYtY3RyJzogJ2NhbWVsbGlhLTI1Ni1lY2InLFxuICAnY2FtZWxsaWExMjgtY3RyQG9wZW5zc2guY29tJzogJ2NhbWVsbGlhLTEyOC1lY2InLFxuICAnY2FtZWxsaWExOTItY3RyQG9wZW5zc2guY29tJzogJ2NhbWVsbGlhLTE5Mi1lY2InLFxuICAnY2FtZWxsaWEyNTYtY3RyQG9wZW5zc2guY29tJzogJ2NhbWVsbGlhLTI1Ni1lY2InLFxuICAvLyBITUFDXG4gICdobWFjLXNoYTEtOTYnOiAnc2hhMScsXG4gICdobWFjLXNoYTEnOiAnc2hhMScsXG4gICdobWFjLXNoYTItMjU2JzogJ3NoYTI1NicsXG4gICdobWFjLXNoYTItMjU2LTk2JzogJ3NoYTI1NicsXG4gICdobWFjLXNoYTItNTEyJzogJ3NoYTUxMicsXG4gICdobWFjLXNoYTItNTEyLTk2JzogJ3NoYTUxMicsXG4gICdobWFjLW1kNS05Nic6ICdtZDUnLFxuICAnaG1hYy1tZDUnOiAnbWQ1JyxcbiAgJ2htYWMtcmlwZW1kMTYwJzogJ3JpcGVtZDE2MCdcbn07XG5cbnZhciBCVUdTID0gZXhwb3J0cy5CVUdTID0ge1xuICBCQURfREhHRVg6IDEsXG4gIE9MRF9FWElUOiAyLFxuICBEWU5fUlBPUlRfQlVHOiA0XG59O1xuXG5leHBvcnRzLkJVR0dZX0lNUExTID0gW1xuICBbICdDaXNjby0xLjI1JywgQlVHUy5CQURfREhHRVggXSxcbiAgWyAvXlswLTkuXSskLywgQlVHUy5PTERfRVhJVCBdLCAvLyBvbGQgU1NILmNvbSBpbXBsZW1lbnRhdGlvbnNcbiAgWyAvXk9wZW5TU0hfNVxcLlxcZCsvLCBCVUdTLkRZTl9SUE9SVF9CVUcgXVxuXTtcblxuZXhwb3J0cy5FRERTQV9TVVBQT1JURUQgPSBlZGRzYVN1cHBvcnRlZDtcbmV4cG9ydHMuQ1VSVkUyNTUxOV9TVVBQT1JURUQgPSBjdXJ2ZTI1NTE5U3VwcG9ydGVkO1xuIiwiLy8gQ29weXJpZ2h0IChjKSAyMDA1ICBUb20gV3Vcbi8vIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTZWUgXCJMSUNFTlNFXCIgZm9yIGRldGFpbHMuXG5cbi8vIEJhc2ljIEphdmFTY3JpcHQgQk4gbGlicmFyeSAtIHN1YnNldCB1c2VmdWwgZm9yIFJTQSBlbmNyeXB0aW9uLlxuXG4vLyBCaXRzIHBlciBkaWdpdFxudmFyIGRiaXRzO1xuXG4vLyBKYXZhU2NyaXB0IGVuZ2luZSBhbmFseXNpc1xudmFyIGNhbmFyeSA9IDB4ZGVhZGJlZWZjYWZlO1xudmFyIGpfbG0gPSAoKGNhbmFyeSYweGZmZmZmZik9PTB4ZWZjYWZlKTtcblxuLy8gKHB1YmxpYykgQ29uc3RydWN0b3JcbmZ1bmN0aW9uIEJpZ0ludGVnZXIoYSxiLGMpIHtcbiAgaWYoYSAhPSBudWxsKVxuICAgIGlmKFwibnVtYmVyXCIgPT0gdHlwZW9mIGEpIHRoaXMuZnJvbU51bWJlcihhLGIsYyk7XG4gICAgZWxzZSBpZihiID09IG51bGwgJiYgXCJzdHJpbmdcIiAhPSB0eXBlb2YgYSkgdGhpcy5mcm9tU3RyaW5nKGEsMjU2KTtcbiAgICBlbHNlIHRoaXMuZnJvbVN0cmluZyhhLGIpO1xufVxuXG4vLyByZXR1cm4gbmV3LCB1bnNldCBCaWdJbnRlZ2VyXG5mdW5jdGlvbiBuYmkoKSB7IHJldHVybiBuZXcgQmlnSW50ZWdlcihudWxsKTsgfVxuXG4vLyBhbTogQ29tcHV0ZSB3X2ogKz0gKHgqdGhpc19pKSwgcHJvcGFnYXRlIGNhcnJpZXMsXG4vLyBjIGlzIGluaXRpYWwgY2FycnksIHJldHVybnMgZmluYWwgY2FycnkuXG4vLyBjIDwgMypkdmFsdWUsIHggPCAyKmR2YWx1ZSwgdGhpc19pIDwgZHZhbHVlXG4vLyBXZSBuZWVkIHRvIHNlbGVjdCB0aGUgZmFzdGVzdCBvbmUgdGhhdCB3b3JrcyBpbiB0aGlzIGVudmlyb25tZW50LlxuXG4vLyBTZXQgbWF4IGRpZ2l0IGJpdHMgdG8gMjggc2luY2Ugc29tZVxuLy8gYnJvd3NlcnMgc2xvdyBkb3duIHdoZW4gZGVhbGluZyB3aXRoIDMyLWJpdCBudW1iZXJzLlxuZnVuY3Rpb24gYW0zKGkseCx3LGosYyxuKSB7XG4gIHZhciB4bCA9IHgmMHgzZmZmLCB4aCA9IHg+PjE0O1xuICB3aGlsZSgtLW4gPj0gMCkge1xuICAgIHZhciBsID0gdGhpc1tpXSYweDNmZmY7XG4gICAgdmFyIGggPSB0aGlzW2krK10+PjE0O1xuICAgIHZhciBtID0geGgqbCtoKnhsO1xuICAgIGwgPSB4bCpsKygobSYweDNmZmYpPDwxNCkrd1tqXStjO1xuICAgIGMgPSAobD4+MjgpKyhtPj4xNCkreGgqaDtcbiAgICB3W2orK10gPSBsJjB4ZmZmZmZmZjtcbiAgfVxuICByZXR1cm4gYztcbn1cbkJpZ0ludGVnZXIucHJvdG90eXBlLmFtID0gYW0zO1xuZGJpdHMgPSAyODtcblxuQmlnSW50ZWdlci5wcm90b3R5cGUuREIgPSBkYml0cztcbkJpZ0ludGVnZXIucHJvdG90eXBlLkRNID0gKCgxPDxkYml0cyktMSk7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5EViA9ICgxPDxkYml0cyk7XG5cbnZhciBCSV9GUCA9IDUyO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuRlYgPSBNYXRoLnBvdygyLEJJX0ZQKTtcbkJpZ0ludGVnZXIucHJvdG90eXBlLkYxID0gQklfRlAtZGJpdHM7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5GMiA9IDIqZGJpdHMtQklfRlA7XG5cbi8vIERpZ2l0IGNvbnZlcnNpb25zXG52YXIgQklfUk0gPSBcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO1xudmFyIEJJX1JDID0gbmV3IEFycmF5KCk7XG52YXIgcnIsdnY7XG5yciA9IFwiMFwiLmNoYXJDb2RlQXQoMCk7XG5mb3IodnYgPSAwOyB2diA8PSA5OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2O1xucnIgPSBcImFcIi5jaGFyQ29kZUF0KDApO1xuZm9yKHZ2ID0gMTA7IHZ2IDwgMzY7ICsrdnYpIEJJX1JDW3JyKytdID0gdnY7XG5yciA9IFwiQVwiLmNoYXJDb2RlQXQoMCk7XG5mb3IodnYgPSAxMDsgdnYgPCAzNjsgKyt2dikgQklfUkNbcnIrK10gPSB2djtcblxuZnVuY3Rpb24gaW50MmNoYXIobikgeyByZXR1cm4gQklfUk0uY2hhckF0KG4pOyB9XG5mdW5jdGlvbiBpbnRBdChzLGkpIHtcbiAgdmFyIGMgPSBCSV9SQ1tzLmNoYXJDb2RlQXQoaSldO1xuICByZXR1cm4gKGM9PW51bGwpPy0xOmM7XG59XG5cbi8vIChwcm90ZWN0ZWQpIGNvcHkgdGhpcyB0byByXG5mdW5jdGlvbiBibnBDb3B5VG8ocikge1xuICBmb3IodmFyIGkgPSB0aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHJbaV0gPSB0aGlzW2ldO1xuICByLnQgPSB0aGlzLnQ7XG4gIHIucyA9IHRoaXMucztcbn1cblxuLy8gKHByb3RlY3RlZCkgc2V0IGZyb20gaW50ZWdlciB2YWx1ZSB4LCAtRFYgPD0geCA8IERWXG5mdW5jdGlvbiBibnBGcm9tSW50KHgpIHtcbiAgdGhpcy50ID0gMTtcbiAgdGhpcy5zID0gKHg8MCk/LTE6MDtcbiAgaWYoeCA+IDApIHRoaXNbMF0gPSB4O1xuICBlbHNlIGlmKHggPCAtMSkgdGhpc1swXSA9IHgrdGhpcy5EVjtcbiAgZWxzZSB0aGlzLnQgPSAwO1xufVxuXG4vLyByZXR1cm4gYmlnaW50IGluaXRpYWxpemVkIHRvIHZhbHVlXG5mdW5jdGlvbiBuYnYoaSkgeyB2YXIgciA9IG5iaSgpOyByLmZyb21JbnQoaSk7IHJldHVybiByOyB9XG5cbi8vIChwcm90ZWN0ZWQpIHNldCBmcm9tIHN0cmluZyBhbmQgcmFkaXhcbmZ1bmN0aW9uIGJucEZyb21TdHJpbmcocyxiKSB7XG4gIHZhciBrO1xuICBpZihiID09IDE2KSBrID0gNDtcbiAgZWxzZSBpZihiID09IDgpIGsgPSAzO1xuICBlbHNlIGlmKGIgPT0gMjU2KSBrID0gODsgLy8gYnl0ZSBhcnJheVxuICBlbHNlIGlmKGIgPT0gMikgayA9IDE7XG4gIGVsc2UgaWYoYiA9PSAzMikgayA9IDU7XG4gIGVsc2UgaWYoYiA9PSA0KSBrID0gMjtcbiAgZWxzZSB7IHRoaXMuZnJvbVJhZGl4KHMsYik7IHJldHVybjsgfVxuICB0aGlzLnQgPSAwO1xuICB0aGlzLnMgPSAwO1xuICB2YXIgaSA9IHMubGVuZ3RoLCBtaSA9IGZhbHNlLCBzaCA9IDA7XG4gIHdoaWxlKC0taSA+PSAwKSB7XG4gICAgdmFyIHggPSAoaz09OCk/c1tpXSYweGZmOmludEF0KHMsaSk7XG4gICAgaWYoeCA8IDApIHtcbiAgICAgIGlmKHMuY2hhckF0KGkpID09IFwiLVwiKSBtaSA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbWkgPSBmYWxzZTtcbiAgICBpZihzaCA9PSAwKVxuICAgICAgdGhpc1t0aGlzLnQrK10gPSB4O1xuICAgIGVsc2UgaWYoc2grayA+IHRoaXMuREIpIHtcbiAgICAgIHRoaXNbdGhpcy50LTFdIHw9ICh4JigoMTw8KHRoaXMuREItc2gpKS0xKSk8PHNoO1xuICAgICAgdGhpc1t0aGlzLnQrK10gPSAoeD4+KHRoaXMuREItc2gpKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgdGhpc1t0aGlzLnQtMV0gfD0geDw8c2g7XG4gICAgc2ggKz0gaztcbiAgICBpZihzaCA+PSB0aGlzLkRCKSBzaCAtPSB0aGlzLkRCO1xuICB9XG4gIGlmKGsgPT0gOCAmJiAoc1swXSYweDgwKSAhPSAwKSB7XG4gICAgdGhpcy5zID0gLTE7XG4gICAgaWYoc2ggPiAwKSB0aGlzW3RoaXMudC0xXSB8PSAoKDE8PCh0aGlzLkRCLXNoKSktMSk8PHNoO1xuICB9XG4gIHRoaXMuY2xhbXAoKTtcbiAgaWYobWkpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpO1xufVxuXG4vLyAocHJvdGVjdGVkKSBjbGFtcCBvZmYgZXhjZXNzIGhpZ2ggd29yZHNcbmZ1bmN0aW9uIGJucENsYW1wKCkge1xuICB2YXIgYyA9IHRoaXMucyZ0aGlzLkRNO1xuICB3aGlsZSh0aGlzLnQgPiAwICYmIHRoaXNbdGhpcy50LTFdID09IGMpIC0tdGhpcy50O1xufVxuXG4vLyAocHVibGljKSByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIGluIGdpdmVuIHJhZGl4XG5mdW5jdGlvbiBiblRvU3RyaW5nKGIpIHtcbiAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIFwiLVwiK3RoaXMubmVnYXRlKCkudG9TdHJpbmcoYik7XG4gIHZhciBrO1xuICBpZihiID09IDE2KSBrID0gNDtcbiAgZWxzZSBpZihiID09IDgpIGsgPSAzO1xuICBlbHNlIGlmKGIgPT0gMikgayA9IDE7XG4gIGVsc2UgaWYoYiA9PSAzMikgayA9IDU7XG4gIGVsc2UgaWYoYiA9PSA0KSBrID0gMjtcbiAgZWxzZSByZXR1cm4gdGhpcy50b1JhZGl4KGIpO1xuICB2YXIga20gPSAoMTw8ayktMSwgZCwgbSA9IGZhbHNlLCByID0gXCJcIiwgaSA9IHRoaXMudDtcbiAgdmFyIHAgPSB0aGlzLkRCLShpKnRoaXMuREIpJWs7XG4gIGlmKGktLSA+IDApIHtcbiAgICBpZihwIDwgdGhpcy5EQiAmJiAoZCA9IHRoaXNbaV0+PnApID4gMCkgeyBtID0gdHJ1ZTsgciA9IGludDJjaGFyKGQpOyB9XG4gICAgd2hpbGUoaSA+PSAwKSB7XG4gICAgICBpZihwIDwgaykge1xuICAgICAgICBkID0gKHRoaXNbaV0mKCgxPDxwKS0xKSk8PChrLXApO1xuICAgICAgICBkIHw9IHRoaXNbLS1pXT4+KHArPXRoaXMuREItayk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZCA9ICh0aGlzW2ldPj4ocC09aykpJmttO1xuICAgICAgICBpZihwIDw9IDApIHsgcCArPSB0aGlzLkRCOyAtLWk7IH1cbiAgICAgIH1cbiAgICAgIGlmKGQgPiAwKSBtID0gdHJ1ZTtcbiAgICAgIGlmKG0pIHIgKz0gaW50MmNoYXIoZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtP3I6XCIwXCI7XG59XG5cbi8vIChwdWJsaWMpIC10aGlzXG5mdW5jdGlvbiBibk5lZ2F0ZSgpIHsgdmFyIHIgPSBuYmkoKTsgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMscik7IHJldHVybiByOyB9XG5cbi8vIChwdWJsaWMpIHx0aGlzfFxuZnVuY3Rpb24gYm5BYnMoKSB7IHJldHVybiAodGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpczsgfVxuXG4vLyAocHVibGljKSByZXR1cm4gKyBpZiB0aGlzID4gYSwgLSBpZiB0aGlzIDwgYSwgMCBpZiBlcXVhbFxuZnVuY3Rpb24gYm5Db21wYXJlVG8oYSkge1xuICB2YXIgciA9IHRoaXMucy1hLnM7XG4gIGlmKHIgIT0gMCkgcmV0dXJuIHI7XG4gIHZhciBpID0gdGhpcy50O1xuICByID0gaS1hLnQ7XG4gIGlmKHIgIT0gMCkgcmV0dXJuICh0aGlzLnM8MCk/LXI6cjtcbiAgd2hpbGUoLS1pID49IDApIGlmKChyPXRoaXNbaV0tYVtpXSkgIT0gMCkgcmV0dXJuIHI7XG4gIHJldHVybiAwO1xufVxuXG4vLyByZXR1cm5zIGJpdCBsZW5ndGggb2YgdGhlIGludGVnZXIgeFxuZnVuY3Rpb24gbmJpdHMoeCkge1xuICB2YXIgciA9IDEsIHQ7XG4gIGlmKCh0PXg+Pj4xNikgIT0gMCkgeyB4ID0gdDsgciArPSAxNjsgfVxuICBpZigodD14Pj44KSAhPSAwKSB7IHggPSB0OyByICs9IDg7IH1cbiAgaWYoKHQ9eD4+NCkgIT0gMCkgeyB4ID0gdDsgciArPSA0OyB9XG4gIGlmKCh0PXg+PjIpICE9IDApIHsgeCA9IHQ7IHIgKz0gMjsgfVxuICBpZigodD14Pj4xKSAhPSAwKSB7IHggPSB0OyByICs9IDE7IH1cbiAgcmV0dXJuIHI7XG59XG5cbi8vIChwdWJsaWMpIHJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gXCJ0aGlzXCJcbmZ1bmN0aW9uIGJuQml0TGVuZ3RoKCkge1xuICBpZih0aGlzLnQgPD0gMCkgcmV0dXJuIDA7XG4gIHJldHVybiB0aGlzLkRCKih0aGlzLnQtMSkrbmJpdHModGhpc1t0aGlzLnQtMV1eKHRoaXMucyZ0aGlzLkRNKSk7XG59XG5cbi8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIDw8IG4qREJcbmZ1bmN0aW9uIGJucERMU2hpZnRUbyhuLHIpIHtcbiAgdmFyIGk7XG4gIGZvcihpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByW2krbl0gPSB0aGlzW2ldO1xuICBmb3IoaSA9IG4tMTsgaSA+PSAwOyAtLWkpIHJbaV0gPSAwO1xuICByLnQgPSB0aGlzLnQrbjtcbiAgci5zID0gdGhpcy5zO1xufVxuXG4vLyAocHJvdGVjdGVkKSByID0gdGhpcyA+PiBuKkRCXG5mdW5jdGlvbiBibnBEUlNoaWZ0VG8obixyKSB7XG4gIGZvcih2YXIgaSA9IG47IGkgPCB0aGlzLnQ7ICsraSkgcltpLW5dID0gdGhpc1tpXTtcbiAgci50ID0gTWF0aC5tYXgodGhpcy50LW4sMCk7XG4gIHIucyA9IHRoaXMucztcbn1cblxuLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPDwgblxuZnVuY3Rpb24gYm5wTFNoaWZ0VG8obixyKSB7XG4gIHZhciBicyA9IG4ldGhpcy5EQjtcbiAgdmFyIGNicyA9IHRoaXMuREItYnM7XG4gIHZhciBibSA9ICgxPDxjYnMpLTE7XG4gIHZhciBkcyA9IE1hdGguZmxvb3Iobi90aGlzLkRCKSwgYyA9ICh0aGlzLnM8PGJzKSZ0aGlzLkRNLCBpO1xuICBmb3IoaSA9IHRoaXMudC0xOyBpID49IDA7IC0taSkge1xuICAgIHJbaStkcysxXSA9ICh0aGlzW2ldPj5jYnMpfGM7XG4gICAgYyA9ICh0aGlzW2ldJmJtKTw8YnM7XG4gIH1cbiAgZm9yKGkgPSBkcy0xOyBpID49IDA7IC0taSkgcltpXSA9IDA7XG4gIHJbZHNdID0gYztcbiAgci50ID0gdGhpcy50K2RzKzE7XG4gIHIucyA9IHRoaXMucztcbiAgci5jbGFtcCgpO1xufVxuXG4vLyAocHJvdGVjdGVkKSByID0gdGhpcyA+PiBuXG5mdW5jdGlvbiBibnBSU2hpZnRUbyhuLHIpIHtcbiAgci5zID0gdGhpcy5zO1xuICB2YXIgZHMgPSBNYXRoLmZsb29yKG4vdGhpcy5EQik7XG4gIGlmKGRzID49IHRoaXMudCkgeyByLnQgPSAwOyByZXR1cm47IH1cbiAgdmFyIGJzID0gbiV0aGlzLkRCO1xuICB2YXIgY2JzID0gdGhpcy5EQi1icztcbiAgdmFyIGJtID0gKDE8PGJzKS0xO1xuICByWzBdID0gdGhpc1tkc10+PmJzO1xuICBmb3IodmFyIGkgPSBkcysxOyBpIDwgdGhpcy50OyArK2kpIHtcbiAgICByW2ktZHMtMV0gfD0gKHRoaXNbaV0mYm0pPDxjYnM7XG4gICAgcltpLWRzXSA9IHRoaXNbaV0+PmJzO1xuICB9XG4gIGlmKGJzID4gMCkgclt0aGlzLnQtZHMtMV0gfD0gKHRoaXMucyZibSk8PGNicztcbiAgci50ID0gdGhpcy50LWRzO1xuICByLmNsYW1wKCk7XG59XG5cbi8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIC0gYVxuZnVuY3Rpb24gYm5wU3ViVG8oYSxyKSB7XG4gIHZhciBpID0gMCwgYyA9IDAsIG0gPSBNYXRoLm1pbihhLnQsdGhpcy50KTtcbiAgd2hpbGUoaSA8IG0pIHtcbiAgICBjICs9IHRoaXNbaV0tYVtpXTtcbiAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgYyA+Pj0gdGhpcy5EQjtcbiAgfVxuICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICBjIC09IGEucztcbiAgICB3aGlsZShpIDwgdGhpcy50KSB7XG4gICAgICBjICs9IHRoaXNbaV07XG4gICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICBjID4+PSB0aGlzLkRCO1xuICAgIH1cbiAgICBjICs9IHRoaXMucztcbiAgfVxuICBlbHNlIHtcbiAgICBjICs9IHRoaXMucztcbiAgICB3aGlsZShpIDwgYS50KSB7XG4gICAgICBjIC09IGFbaV07XG4gICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICBjID4+PSB0aGlzLkRCO1xuICAgIH1cbiAgICBjIC09IGEucztcbiAgfVxuICByLnMgPSAoYzwwKT8tMTowO1xuICBpZihjIDwgLTEpIHJbaSsrXSA9IHRoaXMuRFYrYztcbiAgZWxzZSBpZihjID4gMCkgcltpKytdID0gYztcbiAgci50ID0gaTtcbiAgci5jbGFtcCgpO1xufVxuXG4vLyAocHJvdGVjdGVkKSByID0gdGhpcyAqIGEsIHIgIT0gdGhpcyxhIChIQUMgMTQuMTIpXG4vLyBcInRoaXNcIiBzaG91bGQgYmUgdGhlIGxhcmdlciBvbmUgaWYgYXBwcm9wcmlhdGUuXG5mdW5jdGlvbiBibnBNdWx0aXBseVRvKGEscikge1xuICB2YXIgeCA9IHRoaXMuYWJzKCksIHkgPSBhLmFicygpO1xuICB2YXIgaSA9IHgudDtcbiAgci50ID0gaSt5LnQ7XG4gIHdoaWxlKC0taSA+PSAwKSByW2ldID0gMDtcbiAgZm9yKGkgPSAwOyBpIDwgeS50OyArK2kpIHJbaSt4LnRdID0geC5hbSgwLHlbaV0scixpLDAseC50KTtcbiAgci5zID0gMDtcbiAgci5jbGFtcCgpO1xuICBpZih0aGlzLnMgIT0gYS5zKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8ocixyKTtcbn1cblxuLy8gKHByb3RlY3RlZCkgciA9IHRoaXNeMiwgciAhPSB0aGlzIChIQUMgMTQuMTYpXG5mdW5jdGlvbiBibnBTcXVhcmVUbyhyKSB7XG4gIHZhciB4ID0gdGhpcy5hYnMoKTtcbiAgdmFyIGkgPSByLnQgPSAyKngudDtcbiAgd2hpbGUoLS1pID49IDApIHJbaV0gPSAwO1xuICBmb3IoaSA9IDA7IGkgPCB4LnQtMTsgKytpKSB7XG4gICAgdmFyIGMgPSB4LmFtKGkseFtpXSxyLDIqaSwwLDEpO1xuICAgIGlmKChyW2kreC50XSs9eC5hbShpKzEsMip4W2ldLHIsMippKzEsYyx4LnQtaS0xKSkgPj0geC5EVikge1xuICAgICAgcltpK3gudF0gLT0geC5EVjtcbiAgICAgIHJbaSt4LnQrMV0gPSAxO1xuICAgIH1cbiAgfVxuICBpZihyLnQgPiAwKSByW3IudC0xXSArPSB4LmFtKGkseFtpXSxyLDIqaSwwLDEpO1xuICByLnMgPSAwO1xuICByLmNsYW1wKCk7XG59XG5cbi8vIChwcm90ZWN0ZWQpIGRpdmlkZSB0aGlzIGJ5IG0sIHF1b3RpZW50IGFuZCByZW1haW5kZXIgdG8gcSwgciAoSEFDIDE0LjIwKVxuLy8gciAhPSBxLCB0aGlzICE9IG0uICBxIG9yIHIgbWF5IGJlIG51bGwuXG5mdW5jdGlvbiBibnBEaXZSZW1UbyhtLHEscikge1xuICB2YXIgcG0gPSBtLmFicygpO1xuICBpZihwbS50IDw9IDApIHJldHVybjtcbiAgdmFyIHB0ID0gdGhpcy5hYnMoKTtcbiAgaWYocHQudCA8IHBtLnQpIHtcbiAgICBpZihxICE9IG51bGwpIHEuZnJvbUludCgwKTtcbiAgICBpZihyICE9IG51bGwpIHRoaXMuY29weVRvKHIpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZihyID09IG51bGwpIHIgPSBuYmkoKTtcbiAgdmFyIHkgPSBuYmkoKSwgdHMgPSB0aGlzLnMsIG1zID0gbS5zO1xuICB2YXIgbnNoID0gdGhpcy5EQi1uYml0cyhwbVtwbS50LTFdKTsgICAvLyBub3JtYWxpemUgbW9kdWx1c1xuICBpZihuc2ggPiAwKSB7IHBtLmxTaGlmdFRvKG5zaCx5KTsgcHQubFNoaWZ0VG8obnNoLHIpOyB9XG4gIGVsc2UgeyBwbS5jb3B5VG8oeSk7IHB0LmNvcHlUbyhyKTsgfVxuICB2YXIgeXMgPSB5LnQ7XG4gIHZhciB5MCA9IHlbeXMtMV07XG4gIGlmKHkwID09IDApIHJldHVybjtcbiAgdmFyIHl0ID0geTAqKDE8PHRoaXMuRjEpKygoeXM+MSk/eVt5cy0yXT4+dGhpcy5GMjowKTtcbiAgdmFyIGQxID0gdGhpcy5GVi95dCwgZDIgPSAoMTw8dGhpcy5GMSkveXQsIGUgPSAxPDx0aGlzLkYyO1xuICB2YXIgaSA9IHIudCwgaiA9IGkteXMsIHQgPSAocT09bnVsbCk/bmJpKCk6cTtcbiAgeS5kbFNoaWZ0VG8oaix0KTtcbiAgaWYoci5jb21wYXJlVG8odCkgPj0gMCkge1xuICAgIHJbci50KytdID0gMTtcbiAgICByLnN1YlRvKHQscik7XG4gIH1cbiAgQmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHlzLHQpO1xuICB0LnN1YlRvKHkseSk7ICAvLyBcIm5lZ2F0aXZlXCIgeSBzbyB3ZSBjYW4gcmVwbGFjZSBzdWIgd2l0aCBhbSBsYXRlclxuICB3aGlsZSh5LnQgPCB5cykgeVt5LnQrK10gPSAwO1xuICB3aGlsZSgtLWogPj0gMCkge1xuICAgIC8vIEVzdGltYXRlIHF1b3RpZW50IGRpZ2l0XG4gICAgdmFyIHFkID0gKHJbLS1pXT09eTApP3RoaXMuRE06TWF0aC5mbG9vcihyW2ldKmQxKyhyW2ktMV0rZSkqZDIpO1xuICAgIGlmKChyW2ldKz15LmFtKDAscWQscixqLDAseXMpKSA8IHFkKSB7ICAgLy8gVHJ5IGl0IG91dFxuICAgICAgeS5kbFNoaWZ0VG8oaix0KTtcbiAgICAgIHIuc3ViVG8odCxyKTtcbiAgICAgIHdoaWxlKHJbaV0gPCAtLXFkKSByLnN1YlRvKHQscik7XG4gICAgfVxuICB9XG4gIGlmKHEgIT0gbnVsbCkge1xuICAgIHIuZHJTaGlmdFRvKHlzLHEpO1xuICAgIGlmKHRzICE9IG1zKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8ocSxxKTtcbiAgfVxuICByLnQgPSB5cztcbiAgci5jbGFtcCgpO1xuICBpZihuc2ggPiAwKSByLnJTaGlmdFRvKG5zaCxyKTsgLy8gRGVub3JtYWxpemUgcmVtYWluZGVyXG4gIGlmKHRzIDwgMCkgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHIscik7XG59XG5cbi8vIChwdWJsaWMpIHRoaXMgbW9kIGFcbmZ1bmN0aW9uIGJuTW9kKGEpIHtcbiAgdmFyIHIgPSBuYmkoKTtcbiAgdGhpcy5hYnMoKS5kaXZSZW1UbyhhLG51bGwscik7XG4gIGlmKHRoaXMucyA8IDAgJiYgci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA+IDApIGEuc3ViVG8ocixyKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIE1vZHVsYXIgcmVkdWN0aW9uIHVzaW5nIFwiY2xhc3NpY1wiIGFsZ29yaXRobVxuZnVuY3Rpb24gQ2xhc3NpYyhtKSB7IHRoaXMubSA9IG07IH1cbmZ1bmN0aW9uIGNDb252ZXJ0KHgpIHtcbiAgaWYoeC5zIDwgMCB8fCB4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHJldHVybiB4Lm1vZCh0aGlzLm0pO1xuICBlbHNlIHJldHVybiB4O1xufVxuZnVuY3Rpb24gY1JldmVydCh4KSB7IHJldHVybiB4OyB9XG5mdW5jdGlvbiBjUmVkdWNlKHgpIHsgeC5kaXZSZW1Ubyh0aGlzLm0sbnVsbCx4KTsgfVxuZnVuY3Rpb24gY011bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuZnVuY3Rpb24gY1NxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG5DbGFzc2ljLnByb3RvdHlwZS5jb252ZXJ0ID0gY0NvbnZlcnQ7XG5DbGFzc2ljLnByb3RvdHlwZS5yZXZlcnQgPSBjUmV2ZXJ0O1xuQ2xhc3NpYy5wcm90b3R5cGUucmVkdWNlID0gY1JlZHVjZTtcbkNsYXNzaWMucHJvdG90eXBlLm11bFRvID0gY011bFRvO1xuQ2xhc3NpYy5wcm90b3R5cGUuc3FyVG8gPSBjU3FyVG87XG5cbi8vIChwcm90ZWN0ZWQpIHJldHVybiBcIi0xL3RoaXMgJSAyXkRCXCI7IHVzZWZ1bCBmb3IgTW9udC4gcmVkdWN0aW9uXG4vLyBqdXN0aWZpY2F0aW9uOlxuLy8gICAgICAgICB4eSA9PSAxIChtb2QgbSlcbi8vICAgICAgICAgeHkgPSAgMStrbVxuLy8gICB4eSgyLXh5KSA9ICgxK2ttKSgxLWttKVxuLy8geFt5KDIteHkpXSA9IDEta14ybV4yXG4vLyB4W3koMi14eSldID09IDEgKG1vZCBtXjIpXG4vLyBpZiB5IGlzIDEveCBtb2QgbSwgdGhlbiB5KDIteHkpIGlzIDEveCBtb2QgbV4yXG4vLyBzaG91bGQgcmVkdWNlIHggYW5kIHkoMi14eSkgYnkgbV4yIGF0IGVhY2ggc3RlcCB0byBrZWVwIHNpemUgYm91bmRlZC5cbi8vIEpTIG11bHRpcGx5IFwib3ZlcmZsb3dzXCIgZGlmZmVyZW50bHkgZnJvbSBDL0MrKywgc28gY2FyZSBpcyBuZWVkZWQgaGVyZS5cbmZ1bmN0aW9uIGJucEludkRpZ2l0KCkge1xuICBpZih0aGlzLnQgPCAxKSByZXR1cm4gMDtcbiAgdmFyIHggPSB0aGlzWzBdO1xuICBpZigoeCYxKSA9PSAwKSByZXR1cm4gMDtcbiAgdmFyIHkgPSB4JjM7ICAgICAgIC8vIHkgPT0gMS94IG1vZCAyXjJcbiAgeSA9ICh5KigyLSh4JjB4ZikqeSkpJjB4ZjsgLy8geSA9PSAxL3ggbW9kIDJeNFxuICB5ID0gKHkqKDItKHgmMHhmZikqeSkpJjB4ZmY7ICAgLy8geSA9PSAxL3ggbW9kIDJeOFxuICB5ID0gKHkqKDItKCgoeCYweGZmZmYpKnkpJjB4ZmZmZikpKSYweGZmZmY7ICAgIC8vIHkgPT0gMS94IG1vZCAyXjE2XG4gIC8vIGxhc3Qgc3RlcCAtIGNhbGN1bGF0ZSBpbnZlcnNlIG1vZCBEViBkaXJlY3RseTtcbiAgLy8gYXNzdW1lcyAxNiA8IERCIDw9IDMyIGFuZCBhc3N1bWVzIGFiaWxpdHkgdG8gaGFuZGxlIDQ4LWJpdCBpbnRzXG4gIHkgPSAoeSooMi14KnkldGhpcy5EVikpJXRoaXMuRFY7ICAgICAgIC8vIHkgPT0gMS94IG1vZCAyXmRiaXRzXG4gIC8vIHdlIHJlYWxseSB3YW50IHRoZSBuZWdhdGl2ZSBpbnZlcnNlLCBhbmQgLURWIDwgeSA8IERWXG4gIHJldHVybiAoeT4wKT90aGlzLkRWLXk6LXk7XG59XG5cbi8vIE1vbnRnb21lcnkgcmVkdWN0aW9uXG5mdW5jdGlvbiBNb250Z29tZXJ5KG0pIHtcbiAgdGhpcy5tID0gbTtcbiAgdGhpcy5tcCA9IG0uaW52RGlnaXQoKTtcbiAgdGhpcy5tcGwgPSB0aGlzLm1wJjB4N2ZmZjtcbiAgdGhpcy5tcGggPSB0aGlzLm1wPj4xNTtcbiAgdGhpcy51bSA9ICgxPDwobS5EQi0xNSkpLTE7XG4gIHRoaXMubXQyID0gMiptLnQ7XG59XG5cbi8vIHhSIG1vZCBtXG5mdW5jdGlvbiBtb250Q29udmVydCh4KSB7XG4gIHZhciByID0gbmJpKCk7XG4gIHguYWJzKCkuZGxTaGlmdFRvKHRoaXMubS50LHIpO1xuICByLmRpdlJlbVRvKHRoaXMubSxudWxsLHIpO1xuICBpZih4LnMgPCAwICYmIHIuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTykgPiAwKSB0aGlzLm0uc3ViVG8ocixyKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIHgvUiBtb2QgbVxuZnVuY3Rpb24gbW9udFJldmVydCh4KSB7XG4gIHZhciByID0gbmJpKCk7XG4gIHguY29weVRvKHIpO1xuICB0aGlzLnJlZHVjZShyKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIHggPSB4L1IgbW9kIG0gKEhBQyAxNC4zMilcbmZ1bmN0aW9uIG1vbnRSZWR1Y2UoeCkge1xuICB3aGlsZSh4LnQgPD0gdGhpcy5tdDIpIC8vIHBhZCB4IHNvIGFtIGhhcyBlbm91Z2ggcm9vbSBsYXRlclxuICAgIHhbeC50KytdID0gMDtcbiAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMubS50OyArK2kpIHtcbiAgICAvLyBmYXN0ZXIgd2F5IG9mIGNhbGN1bGF0aW5nIHUwID0geFtpXSptcCBtb2QgRFZcbiAgICB2YXIgaiA9IHhbaV0mMHg3ZmZmO1xuICAgIHZhciB1MCA9IChqKnRoaXMubXBsKygoKGoqdGhpcy5tcGgrKHhbaV0+PjE1KSp0aGlzLm1wbCkmdGhpcy51bSk8PDE1KSkmeC5ETTtcbiAgICAvLyB1c2UgYW0gdG8gY29tYmluZSB0aGUgbXVsdGlwbHktc2hpZnQtYWRkIGludG8gb25lIGNhbGxcbiAgICBqID0gaSt0aGlzLm0udDtcbiAgICB4W2pdICs9IHRoaXMubS5hbSgwLHUwLHgsaSwwLHRoaXMubS50KTtcbiAgICAvLyBwcm9wYWdhdGUgY2FycnlcbiAgICB3aGlsZSh4W2pdID49IHguRFYpIHsgeFtqXSAtPSB4LkRWOyB4Wysral0rKzsgfVxuICB9XG4gIHguY2xhbXAoKTtcbiAgeC5kclNoaWZ0VG8odGhpcy5tLnQseCk7XG4gIGlmKHguY29tcGFyZVRvKHRoaXMubSkgPj0gMCkgeC5zdWJUbyh0aGlzLm0seCk7XG59XG5cbi8vIHIgPSBcInheMi9SIG1vZCBtXCI7IHggIT0gclxuZnVuY3Rpb24gbW9udFNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4vLyByID0gXCJ4eS9SIG1vZCBtXCI7IHgseSAhPSByXG5mdW5jdGlvbiBtb250TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbk1vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQgPSBtb250Q29udmVydDtcbk1vbnRnb21lcnkucHJvdG90eXBlLnJldmVydCA9IG1vbnRSZXZlcnQ7XG5Nb250Z29tZXJ5LnByb3RvdHlwZS5yZWR1Y2UgPSBtb250UmVkdWNlO1xuTW9udGdvbWVyeS5wcm90b3R5cGUubXVsVG8gPSBtb250TXVsVG87XG5Nb250Z29tZXJ5LnByb3RvdHlwZS5zcXJUbyA9IG1vbnRTcXJUbztcblxuLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZmYgdGhpcyBpcyBldmVuXG5mdW5jdGlvbiBibnBJc0V2ZW4oKSB7IHJldHVybiAoKHRoaXMudD4wKT8odGhpc1swXSYxKTp0aGlzLnMpID09IDA7IH1cblxuLy8gKHByb3RlY3RlZCkgdGhpc15lLCBlIDwgMl4zMiwgZG9pbmcgc3FyIGFuZCBtdWwgd2l0aCBcInJcIiAoSEFDIDE0Ljc5KVxuZnVuY3Rpb24gYm5wRXhwKGUseikge1xuICBpZihlID4gMHhmZmZmZmZmZiB8fCBlIDwgMSkgcmV0dXJuIEJpZ0ludGVnZXIuT05FO1xuICB2YXIgciA9IG5iaSgpLCByMiA9IG5iaSgpLCBnID0gei5jb252ZXJ0KHRoaXMpLCBpID0gbmJpdHMoZSktMTtcbiAgZy5jb3B5VG8ocik7XG4gIHdoaWxlKC0taSA+PSAwKSB7XG4gICAgei5zcXJUbyhyLHIyKTtcbiAgICBpZigoZSYoMTw8aSkpID4gMCkgei5tdWxUbyhyMixnLHIpO1xuICAgIGVsc2UgeyB2YXIgdCA9IHI7IHIgPSByMjsgcjIgPSB0OyB9XG4gIH1cbiAgcmV0dXJuIHoucmV2ZXJ0KHIpO1xufVxuXG4vLyAocHVibGljKSB0aGlzXmUgJSBtLCAwIDw9IGUgPCAyXjMyXG5mdW5jdGlvbiBibk1vZFBvd0ludChlLG0pIHtcbiAgdmFyIHo7XG4gIGlmKGUgPCAyNTYgfHwgbS5pc0V2ZW4oKSkgeiA9IG5ldyBDbGFzc2ljKG0pOyBlbHNlIHogPSBuZXcgTW9udGdvbWVyeShtKTtcbiAgcmV0dXJuIHRoaXMuZXhwKGUseik7XG59XG5cbi8vIHByb3RlY3RlZFxuQmlnSW50ZWdlci5wcm90b3R5cGUuY29weVRvID0gYm5wQ29weVRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbUludCA9IGJucEZyb21JbnQ7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tU3RyaW5nID0gYm5wRnJvbVN0cmluZztcbkJpZ0ludGVnZXIucHJvdG90eXBlLmNsYW1wID0gYm5wQ2xhbXA7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5kbFNoaWZ0VG8gPSBibnBETFNoaWZ0VG87XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5kclNoaWZ0VG8gPSBibnBEUlNoaWZ0VG87XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5sU2hpZnRUbyA9IGJucExTaGlmdFRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuclNoaWZ0VG8gPSBibnBSU2hpZnRUbztcbkJpZ0ludGVnZXIucHJvdG90eXBlLnN1YlRvID0gYm5wU3ViVG87XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseVRvID0gYm5wTXVsdGlwbHlUbztcbkJpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZVRvID0gYm5wU3F1YXJlVG87XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZSZW1UbyA9IGJucERpdlJlbVRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuaW52RGlnaXQgPSBibnBJbnZEaWdpdDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmlzRXZlbiA9IGJucElzRXZlbjtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmV4cCA9IGJucEV4cDtcblxuLy8gcHVibGljXG5CaWdJbnRlZ2VyLnByb3RvdHlwZS50b1N0cmluZyA9IGJuVG9TdHJpbmc7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5uZWdhdGUgPSBibk5lZ2F0ZTtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmFicyA9IGJuQWJzO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuY29tcGFyZVRvID0gYm5Db21wYXJlVG87XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXRMZW5ndGggPSBibkJpdExlbmd0aDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLm1vZCA9IGJuTW9kO1xuQmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93SW50ID0gYm5Nb2RQb3dJbnQ7XG5cbi8vIFwiY29uc3RhbnRzXCJcbkJpZ0ludGVnZXIuWkVSTyA9IG5idigwKTtcbkJpZ0ludGVnZXIuT05FID0gbmJ2KDEpO1xuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSAgVG9tIFd1XG4vLyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU2VlIFwiTElDRU5TRVwiIGZvciBkZXRhaWxzLlxuXG4vLyBFeHRlbmRlZCBKYXZhU2NyaXB0IEJOIGZ1bmN0aW9ucywgcmVxdWlyZWQgZm9yIFJTQSBwcml2YXRlIG9wcy5cblxuLy8gVmVyc2lvbiAxLjE6IG5ldyBCaWdJbnRlZ2VyKFwiMFwiLCAxMCkgcmV0dXJucyBcInByb3BlclwiIHplcm9cbi8vIFZlcnNpb24gMS4yOiBzcXVhcmUoKSBBUEksIGlzUHJvYmFibGVQcmltZSBmaXhcblxuLy8gKHB1YmxpYylcbmZ1bmN0aW9uIGJuQ2xvbmUoKSB7IHZhciByID0gbmJpKCk7IHRoaXMuY29weVRvKHIpOyByZXR1cm4gcjsgfVxuXG4vLyAocHVibGljKSByZXR1cm4gdmFsdWUgYXMgaW50ZWdlclxuZnVuY3Rpb24gYm5JbnRWYWx1ZSgpIHtcbiAgaWYodGhpcy5zIDwgMCkge1xuICAgIGlmKHRoaXMudCA9PSAxKSByZXR1cm4gdGhpc1swXS10aGlzLkRWO1xuICAgIGVsc2UgaWYodGhpcy50ID09IDApIHJldHVybiAtMTtcbiAgfVxuICBlbHNlIGlmKHRoaXMudCA9PSAxKSByZXR1cm4gdGhpc1swXTtcbiAgZWxzZSBpZih0aGlzLnQgPT0gMCkgcmV0dXJuIDA7XG4gIC8vIGFzc3VtZXMgMTYgPCBEQiA8IDMyXG4gIHJldHVybiAoKHRoaXNbMV0mKCgxPDwoMzItdGhpcy5EQikpLTEpKTw8dGhpcy5EQil8dGhpc1swXTtcbn1cblxuLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIGJ5dGVcbmZ1bmN0aW9uIGJuQnl0ZVZhbHVlKCkgeyByZXR1cm4gKHRoaXMudD09MCk/dGhpcy5zOih0aGlzWzBdPDwyNCk+PjI0OyB9XG5cbi8vIChwdWJsaWMpIHJldHVybiB2YWx1ZSBhcyBzaG9ydCAoYXNzdW1lcyBEQj49MTYpXG5mdW5jdGlvbiBiblNob3J0VmFsdWUoKSB7IHJldHVybiAodGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTY7IH1cblxuLy8gKHByb3RlY3RlZCkgcmV0dXJuIHggcy50LiByXnggPCBEVlxuZnVuY3Rpb24gYm5wQ2h1bmtTaXplKHIpIHsgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5MTjIqdGhpcy5EQi9NYXRoLmxvZyhyKSk7IH1cblxuLy8gKHB1YmxpYykgMCBpZiB0aGlzID09IDAsIDEgaWYgdGhpcyA+IDBcbmZ1bmN0aW9uIGJuU2lnTnVtKCkge1xuICBpZih0aGlzLnMgPCAwKSByZXR1cm4gLTE7XG4gIGVsc2UgaWYodGhpcy50IDw9IDAgfHwgKHRoaXMudCA9PSAxICYmIHRoaXNbMF0gPD0gMCkpIHJldHVybiAwO1xuICBlbHNlIHJldHVybiAxO1xufVxuXG4vLyAocHJvdGVjdGVkKSBjb252ZXJ0IHRvIHJhZGl4IHN0cmluZ1xuZnVuY3Rpb24gYm5wVG9SYWRpeChiKSB7XG4gIGlmKGIgPT0gbnVsbCkgYiA9IDEwO1xuICBpZih0aGlzLnNpZ251bSgpID09IDAgfHwgYiA8IDIgfHwgYiA+IDM2KSByZXR1cm4gXCIwXCI7XG4gIHZhciBjcyA9IHRoaXMuY2h1bmtTaXplKGIpO1xuICB2YXIgYSA9IE1hdGgucG93KGIsY3MpO1xuICB2YXIgZCA9IG5idihhKSwgeSA9IG5iaSgpLCB6ID0gbmJpKCksIHIgPSBcIlwiO1xuICB0aGlzLmRpdlJlbVRvKGQseSx6KTtcbiAgd2hpbGUoeS5zaWdudW0oKSA+IDApIHtcbiAgICByID0gKGErei5pbnRWYWx1ZSgpKS50b1N0cmluZyhiKS5zdWJzdHIoMSkgKyByO1xuICAgIHkuZGl2UmVtVG8oZCx5LHopO1xuICB9XG4gIHJldHVybiB6LmludFZhbHVlKCkudG9TdHJpbmcoYikgKyByO1xufVxuXG4vLyAocHJvdGVjdGVkKSBjb252ZXJ0IGZyb20gcmFkaXggc3RyaW5nXG5mdW5jdGlvbiBibnBGcm9tUmFkaXgocyxiKSB7XG4gIHRoaXMuZnJvbUludCgwKTtcbiAgaWYoYiA9PSBudWxsKSBiID0gMTA7XG4gIHZhciBjcyA9IHRoaXMuY2h1bmtTaXplKGIpO1xuICB2YXIgZCA9IE1hdGgucG93KGIsY3MpLCBtaSA9IGZhbHNlLCBqID0gMCwgdyA9IDA7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHggPSBpbnRBdChzLGkpO1xuICAgIGlmKHggPCAwKSB7XG4gICAgICBpZihzLmNoYXJBdChpKSA9PSBcIi1cIiAmJiB0aGlzLnNpZ251bSgpID09IDApIG1pID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB3ID0gYip3K3g7XG4gICAgaWYoKytqID49IGNzKSB7XG4gICAgICB0aGlzLmRNdWx0aXBseShkKTtcbiAgICAgIHRoaXMuZEFkZE9mZnNldCh3LDApO1xuICAgICAgaiA9IDA7XG4gICAgICB3ID0gMDtcbiAgICB9XG4gIH1cbiAgaWYoaiA+IDApIHtcbiAgICB0aGlzLmRNdWx0aXBseShNYXRoLnBvdyhiLGopKTtcbiAgICB0aGlzLmRBZGRPZmZzZXQodywwKTtcbiAgfVxuICBpZihtaSkgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyk7XG59XG5cbi8vIChwcm90ZWN0ZWQpIGFsdGVybmF0ZSBjb25zdHJ1Y3RvclxuZnVuY3Rpb24gYm5wRnJvbU51bWJlcihhLGIsYykge1xuICBpZihcIm51bWJlclwiID09IHR5cGVvZiBiKSB7XG4gICAgLy8gbmV3IEJpZ0ludGVnZXIoaW50LGludCxSTkcpXG4gICAgaWYoYSA8IDIpIHRoaXMuZnJvbUludCgxKTtcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuZnJvbU51bWJlcihhLGMpO1xuICAgICAgaWYoIXRoaXMudGVzdEJpdChhLTEpKSAgLy8gZm9yY2UgTVNCIHNldFxuICAgICAgICB0aGlzLmJpdHdpc2VUbyhCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQoYS0xKSxvcF9vcix0aGlzKTtcbiAgICAgIGlmKHRoaXMuaXNFdmVuKCkpIHRoaXMuZEFkZE9mZnNldCgxLDApOyAvLyBmb3JjZSBvZGRcbiAgICAgIHdoaWxlKCF0aGlzLmlzUHJvYmFibGVQcmltZShiKSkge1xuICAgICAgICB0aGlzLmRBZGRPZmZzZXQoMiwwKTtcbiAgICAgICAgaWYodGhpcy5iaXRMZW5ndGgoKSA+IGEpIHRoaXMuc3ViVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGEtMSksdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIG5ldyBCaWdJbnRlZ2VyKGludCxSTkcpXG4gICAgdmFyIHggPSBuZXcgQXJyYXkoKSwgdCA9IGEmNztcbiAgICB4Lmxlbmd0aCA9IChhPj4zKSsxO1xuICAgIGIubmV4dEJ5dGVzKHgpO1xuICAgIGlmKHQgPiAwKSB4WzBdICY9ICgoMTw8dCktMSk7IGVsc2UgeFswXSA9IDA7XG4gICAgdGhpcy5mcm9tU3RyaW5nKHgsMjU2KTtcbiAgfVxufVxuXG4vLyAocHVibGljKSBjb252ZXJ0IHRvIGJpZ2VuZGlhbiBieXRlIGFycmF5XG5mdW5jdGlvbiBiblRvQnl0ZUFycmF5KCkge1xuICB2YXIgaSA9IHRoaXMudCwgciA9IG5ldyBBcnJheSgpO1xuICByWzBdID0gdGhpcy5zO1xuICB2YXIgcCA9IHRoaXMuREItKGkqdGhpcy5EQiklOCwgZCwgayA9IDA7XG4gIGlmKGktLSA+IDApIHtcbiAgICBpZihwIDwgdGhpcy5EQiAmJiAoZCA9IHRoaXNbaV0+PnApICE9ICh0aGlzLnMmdGhpcy5ETSk+PnApXG4gICAgICByW2srK10gPSBkfCh0aGlzLnM8PCh0aGlzLkRCLXApKTtcbiAgICB3aGlsZShpID49IDApIHtcbiAgICAgIGlmKHAgPCA4KSB7XG4gICAgICAgIGQgPSAodGhpc1tpXSYoKDE8PHApLTEpKTw8KDgtcCk7XG4gICAgICAgIGQgfD0gdGhpc1stLWldPj4ocCs9dGhpcy5EQi04KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkID0gKHRoaXNbaV0+PihwLT04KSkmMHhmZjtcbiAgICAgICAgaWYocCA8PSAwKSB7IHAgKz0gdGhpcy5EQjsgLS1pOyB9XG4gICAgICB9XG4gICAgICBpZigoZCYweDgwKSAhPSAwKSBkIHw9IC0yNTY7XG4gICAgICBpZihrID09IDAgJiYgKHRoaXMucyYweDgwKSAhPSAoZCYweDgwKSkgKytrO1xuICAgICAgaWYoayA+IDAgfHwgZCAhPSB0aGlzLnMpIHJbaysrXSA9IGQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBibkVxdWFscyhhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKT09MCk7IH1cbmZ1bmN0aW9uIGJuTWluKGEpIHsgcmV0dXJuKHRoaXMuY29tcGFyZVRvKGEpPDApP3RoaXM6YTsgfVxuZnVuY3Rpb24gYm5NYXgoYSkgeyByZXR1cm4odGhpcy5jb21wYXJlVG8oYSk+MCk/dGhpczphOyB9XG5cbi8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIG9wIGEgKGJpdHdpc2UpXG5mdW5jdGlvbiBibnBCaXR3aXNlVG8oYSxvcCxyKSB7XG4gIHZhciBpLCBmLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7XG4gIGZvcihpID0gMDsgaSA8IG07ICsraSkgcltpXSA9IG9wKHRoaXNbaV0sYVtpXSk7XG4gIGlmKGEudCA8IHRoaXMudCkge1xuICAgIGYgPSBhLnMmdGhpcy5ETTtcbiAgICBmb3IoaSA9IG07IGkgPCB0aGlzLnQ7ICsraSkgcltpXSA9IG9wKHRoaXNbaV0sZik7XG4gICAgci50ID0gdGhpcy50O1xuICB9XG4gIGVsc2Uge1xuICAgIGYgPSB0aGlzLnMmdGhpcy5ETTtcbiAgICBmb3IoaSA9IG07IGkgPCBhLnQ7ICsraSkgcltpXSA9IG9wKGYsYVtpXSk7XG4gICAgci50ID0gYS50O1xuICB9XG4gIHIucyA9IG9wKHRoaXMucyxhLnMpO1xuICByLmNsYW1wKCk7XG59XG5cbi8vIChwdWJsaWMpIHRoaXMgJiBhXG5mdW5jdGlvbiBvcF9hbmQoeCx5KSB7IHJldHVybiB4Jnk7IH1cbmZ1bmN0aW9uIGJuQW5kKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNlVG8oYSxvcF9hbmQscik7IHJldHVybiByOyB9XG5cbi8vIChwdWJsaWMpIHRoaXMgfCBhXG5mdW5jdGlvbiBvcF9vcih4LHkpIHsgcmV0dXJuIHh8eTsgfVxuZnVuY3Rpb24gYm5PcihhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3Bfb3Iscik7IHJldHVybiByOyB9XG5cbi8vIChwdWJsaWMpIHRoaXMgXiBhXG5mdW5jdGlvbiBvcF94b3IoeCx5KSB7IHJldHVybiB4Xnk7IH1cbmZ1bmN0aW9uIGJuWG9yKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNlVG8oYSxvcF94b3Iscik7IHJldHVybiByOyB9XG5cbi8vIChwdWJsaWMpIHRoaXMgJiB+YVxuZnVuY3Rpb24gb3BfYW5kbm90KHgseSkgeyByZXR1cm4geCZ+eTsgfVxuZnVuY3Rpb24gYm5BbmROb3QoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX2FuZG5vdCxyKTsgcmV0dXJuIHI7IH1cblxuLy8gKHB1YmxpYykgfnRoaXNcbmZ1bmN0aW9uIGJuTm90KCkge1xuICB2YXIgciA9IG5iaSgpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy50OyArK2kpIHJbaV0gPSB0aGlzLkRNJn50aGlzW2ldO1xuICByLnQgPSB0aGlzLnQ7XG4gIHIucyA9IH50aGlzLnM7XG4gIHJldHVybiByO1xufVxuXG4vLyAocHVibGljKSB0aGlzIDw8IG5cbmZ1bmN0aW9uIGJuU2hpZnRMZWZ0KG4pIHtcbiAgdmFyIHIgPSBuYmkoKTtcbiAgaWYobiA8IDApIHRoaXMuclNoaWZ0VG8oLW4scik7IGVsc2UgdGhpcy5sU2hpZnRUbyhuLHIpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gKHB1YmxpYykgdGhpcyA+PiBuXG5mdW5jdGlvbiBiblNoaWZ0UmlnaHQobikge1xuICB2YXIgciA9IG5iaSgpO1xuICBpZihuIDwgMCkgdGhpcy5sU2hpZnRUbygtbixyKTsgZWxzZSB0aGlzLnJTaGlmdFRvKG4scik7XG4gIHJldHVybiByO1xufVxuXG4vLyByZXR1cm4gaW5kZXggb2YgbG93ZXN0IDEtYml0IGluIHgsIHggPCAyXjMxXG5mdW5jdGlvbiBsYml0KHgpIHtcbiAgaWYoeCA9PSAwKSByZXR1cm4gLTE7XG4gIHZhciByID0gMDtcbiAgaWYoKHgmMHhmZmZmKSA9PSAwKSB7IHggPj49IDE2OyByICs9IDE2OyB9XG4gIGlmKCh4JjB4ZmYpID09IDApIHsgeCA+Pj0gODsgciArPSA4OyB9XG4gIGlmKCh4JjB4ZikgPT0gMCkgeyB4ID4+PSA0OyByICs9IDQ7IH1cbiAgaWYoKHgmMykgPT0gMCkgeyB4ID4+PSAyOyByICs9IDI7IH1cbiAgaWYoKHgmMSkgPT0gMCkgKytyO1xuICByZXR1cm4gcjtcbn1cblxuLy8gKHB1YmxpYykgcmV0dXJucyBpbmRleCBvZiBsb3dlc3QgMS1iaXQgKG9yIC0xIGlmIG5vbmUpXG5mdW5jdGlvbiBibkdldExvd2VzdFNldEJpdCgpIHtcbiAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKVxuICAgIGlmKHRoaXNbaV0gIT0gMCkgcmV0dXJuIGkqdGhpcy5EQitsYml0KHRoaXNbaV0pO1xuICBpZih0aGlzLnMgPCAwKSByZXR1cm4gdGhpcy50KnRoaXMuREI7XG4gIHJldHVybiAtMTtcbn1cblxuLy8gcmV0dXJuIG51bWJlciBvZiAxIGJpdHMgaW4geFxuZnVuY3Rpb24gY2JpdCh4KSB7XG4gIHZhciByID0gMDtcbiAgd2hpbGUoeCAhPSAwKSB7IHggJj0geC0xOyArK3I7IH1cbiAgcmV0dXJuIHI7XG59XG5cbi8vIChwdWJsaWMpIHJldHVybiBudW1iZXIgb2Ygc2V0IGJpdHNcbmZ1bmN0aW9uIGJuQml0Q291bnQoKSB7XG4gIHZhciByID0gMCwgeCA9IHRoaXMucyZ0aGlzLkRNO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy50OyArK2kpIHIgKz0gY2JpdCh0aGlzW2ldXngpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gKHB1YmxpYykgdHJ1ZSBpZmYgbnRoIGJpdCBpcyBzZXRcbmZ1bmN0aW9uIGJuVGVzdEJpdChuKSB7XG4gIHZhciBqID0gTWF0aC5mbG9vcihuL3RoaXMuREIpO1xuICBpZihqID49IHRoaXMudCkgcmV0dXJuKHRoaXMucyE9MCk7XG4gIHJldHVybigodGhpc1tqXSYoMTw8KG4ldGhpcy5EQikpKSE9MCk7XG59XG5cbi8vIChwcm90ZWN0ZWQpIHRoaXMgb3AgKDE8PG4pXG5mdW5jdGlvbiBibnBDaGFuZ2VCaXQobixvcCkge1xuICB2YXIgciA9IEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChuKTtcbiAgdGhpcy5iaXR3aXNlVG8ocixvcCxyKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIChwdWJsaWMpIHRoaXMgfCAoMTw8bilcbmZ1bmN0aW9uIGJuU2V0Qml0KG4pIHsgcmV0dXJuIHRoaXMuY2hhbmdlQml0KG4sb3Bfb3IpOyB9XG5cbi8vIChwdWJsaWMpIHRoaXMgJiB+KDE8PG4pXG5mdW5jdGlvbiBibkNsZWFyQml0KG4pIHsgcmV0dXJuIHRoaXMuY2hhbmdlQml0KG4sb3BfYW5kbm90KTsgfVxuXG4vLyAocHVibGljKSB0aGlzIF4gKDE8PG4pXG5mdW5jdGlvbiBibkZsaXBCaXQobikgeyByZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF94b3IpOyB9XG5cbi8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzICsgYVxuZnVuY3Rpb24gYm5wQWRkVG8oYSxyKSB7XG4gIHZhciBpID0gMCwgYyA9IDAsIG0gPSBNYXRoLm1pbihhLnQsdGhpcy50KTtcbiAgd2hpbGUoaSA8IG0pIHtcbiAgICBjICs9IHRoaXNbaV0rYVtpXTtcbiAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgYyA+Pj0gdGhpcy5EQjtcbiAgfVxuICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICBjICs9IGEucztcbiAgICB3aGlsZShpIDwgdGhpcy50KSB7XG4gICAgICBjICs9IHRoaXNbaV07XG4gICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICBjID4+PSB0aGlzLkRCO1xuICAgIH1cbiAgICBjICs9IHRoaXMucztcbiAgfVxuICBlbHNlIHtcbiAgICBjICs9IHRoaXMucztcbiAgICB3aGlsZShpIDwgYS50KSB7XG4gICAgICBjICs9IGFbaV07XG4gICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICBjID4+PSB0aGlzLkRCO1xuICAgIH1cbiAgICBjICs9IGEucztcbiAgfVxuICByLnMgPSAoYzwwKT8tMTowO1xuICBpZihjID4gMCkgcltpKytdID0gYztcbiAgZWxzZSBpZihjIDwgLTEpIHJbaSsrXSA9IHRoaXMuRFYrYztcbiAgci50ID0gaTtcbiAgci5jbGFtcCgpO1xufVxuXG4vLyAocHVibGljKSB0aGlzICsgYVxuZnVuY3Rpb24gYm5BZGQoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmFkZFRvKGEscik7IHJldHVybiByOyB9XG5cbi8vIChwdWJsaWMpIHRoaXMgLSBhXG5mdW5jdGlvbiBiblN1YnRyYWN0KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5zdWJUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4vLyAocHVibGljKSB0aGlzICogYVxuZnVuY3Rpb24gYm5NdWx0aXBseShhKSB7IHZhciByID0gbmJpKCk7IHRoaXMubXVsdGlwbHlUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4vLyAocHVibGljKSB0aGlzXjJcbmZ1bmN0aW9uIGJuU3F1YXJlKCkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLnNxdWFyZVRvKHIpOyByZXR1cm4gcjsgfVxuXG4vLyAocHVibGljKSB0aGlzIC8gYVxuZnVuY3Rpb24gYm5EaXZpZGUoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmRpdlJlbVRvKGEscixudWxsKTsgcmV0dXJuIHI7IH1cblxuLy8gKHB1YmxpYykgdGhpcyAlIGFcbmZ1bmN0aW9uIGJuUmVtYWluZGVyKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5kaXZSZW1UbyhhLG51bGwscik7IHJldHVybiByOyB9XG5cbi8vIChwdWJsaWMpIFt0aGlzL2EsdGhpcyVhXVxuZnVuY3Rpb24gYm5EaXZpZGVBbmRSZW1haW5kZXIoYSkge1xuICB2YXIgcSA9IG5iaSgpLCByID0gbmJpKCk7XG4gIHRoaXMuZGl2UmVtVG8oYSxxLHIpO1xuICByZXR1cm4gbmV3IEFycmF5KHEscik7XG59XG5cbi8vIChwcm90ZWN0ZWQpIHRoaXMgKj0gbiwgdGhpcyA+PSAwLCAxIDwgbiA8IERWXG5mdW5jdGlvbiBibnBETXVsdGlwbHkobikge1xuICB0aGlzW3RoaXMudF0gPSB0aGlzLmFtKDAsbi0xLHRoaXMsMCwwLHRoaXMudCk7XG4gICsrdGhpcy50O1xuICB0aGlzLmNsYW1wKCk7XG59XG5cbi8vIChwcm90ZWN0ZWQpIHRoaXMgKz0gbiA8PCB3IHdvcmRzLCB0aGlzID49IDBcbmZ1bmN0aW9uIGJucERBZGRPZmZzZXQobix3KSB7XG4gIGlmKG4gPT0gMCkgcmV0dXJuO1xuICB3aGlsZSh0aGlzLnQgPD0gdykgdGhpc1t0aGlzLnQrK10gPSAwO1xuICB0aGlzW3ddICs9IG47XG4gIHdoaWxlKHRoaXNbd10gPj0gdGhpcy5EVikge1xuICAgIHRoaXNbd10gLT0gdGhpcy5EVjtcbiAgICBpZigrK3cgPj0gdGhpcy50KSB0aGlzW3RoaXMudCsrXSA9IDA7XG4gICAgKyt0aGlzW3ddO1xuICB9XG59XG5cbi8vIEEgXCJudWxsXCIgcmVkdWNlclxuZnVuY3Rpb24gTnVsbEV4cCgpIHt9XG5mdW5jdGlvbiBuTm9wKHgpIHsgcmV0dXJuIHg7IH1cbmZ1bmN0aW9uIG5NdWxUbyh4LHkscikgeyB4Lm11bHRpcGx5VG8oeSxyKTsgfVxuZnVuY3Rpb24gblNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB9XG5cbk51bGxFeHAucHJvdG90eXBlLmNvbnZlcnQgPSBuTm9wO1xuTnVsbEV4cC5wcm90b3R5cGUucmV2ZXJ0ID0gbk5vcDtcbk51bGxFeHAucHJvdG90eXBlLm11bFRvID0gbk11bFRvO1xuTnVsbEV4cC5wcm90b3R5cGUuc3FyVG8gPSBuU3FyVG87XG5cbi8vIChwdWJsaWMpIHRoaXNeZVxuZnVuY3Rpb24gYm5Qb3coZSkgeyByZXR1cm4gdGhpcy5leHAoZSxuZXcgTnVsbEV4cCgpKTsgfVxuXG4vLyAocHJvdGVjdGVkKSByID0gbG93ZXIgbiB3b3JkcyBvZiBcInRoaXMgKiBhXCIsIGEudCA8PSBuXG4vLyBcInRoaXNcIiBzaG91bGQgYmUgdGhlIGxhcmdlciBvbmUgaWYgYXBwcm9wcmlhdGUuXG5mdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYSxuLHIpIHtcbiAgdmFyIGkgPSBNYXRoLm1pbih0aGlzLnQrYS50LG4pO1xuICByLnMgPSAwOyAvLyBhc3N1bWVzIGEsdGhpcyA+PSAwXG4gIHIudCA9IGk7XG4gIHdoaWxlKGkgPiAwKSByWy0taV0gPSAwO1xuICB2YXIgajtcbiAgZm9yKGogPSByLnQtdGhpcy50OyBpIDwgajsgKytpKSByW2krdGhpcy50XSA9IHRoaXMuYW0oMCxhW2ldLHIsaSwwLHRoaXMudCk7XG4gIGZvcihqID0gTWF0aC5taW4oYS50LG4pOyBpIDwgajsgKytpKSB0aGlzLmFtKDAsYVtpXSxyLGksMCxuLWkpO1xuICByLmNsYW1wKCk7XG59XG5cbi8vIChwcm90ZWN0ZWQpIHIgPSBcInRoaXMgKiBhXCIgd2l0aG91dCBsb3dlciBuIHdvcmRzLCBuID4gMFxuLy8gXCJ0aGlzXCIgc2hvdWxkIGJlIHRoZSBsYXJnZXIgb25lIGlmIGFwcHJvcHJpYXRlLlxuZnVuY3Rpb24gYm5wTXVsdGlwbHlVcHBlclRvKGEsbixyKSB7XG4gIC0tbjtcbiAgdmFyIGkgPSByLnQgPSB0aGlzLnQrYS50LW47XG4gIHIucyA9IDA7IC8vIGFzc3VtZXMgYSx0aGlzID49IDBcbiAgd2hpbGUoLS1pID49IDApIHJbaV0gPSAwO1xuICBmb3IoaSA9IE1hdGgubWF4KG4tdGhpcy50LDApOyBpIDwgYS50OyArK2kpXG4gICAgclt0aGlzLnQraS1uXSA9IHRoaXMuYW0obi1pLGFbaV0sciwwLDAsdGhpcy50K2ktbik7XG4gIHIuY2xhbXAoKTtcbiAgci5kclNoaWZ0VG8oMSxyKTtcbn1cblxuLy8gQmFycmV0dCBtb2R1bGFyIHJlZHVjdGlvblxuZnVuY3Rpb24gQmFycmV0dChtKSB7XG4gIC8vIHNldHVwIEJhcnJldHRcbiAgdGhpcy5yMiA9IG5iaSgpO1xuICB0aGlzLnEzID0gbmJpKCk7XG4gIEJpZ0ludGVnZXIuT05FLmRsU2hpZnRUbygyKm0udCx0aGlzLnIyKTtcbiAgdGhpcy5tdSA9IHRoaXMucjIuZGl2aWRlKG0pO1xuICB0aGlzLm0gPSBtO1xufVxuXG5mdW5jdGlvbiBiYXJyZXR0Q29udmVydCh4KSB7XG4gIGlmKHgucyA8IDAgfHwgeC50ID4gMip0aGlzLm0udCkgcmV0dXJuIHgubW9kKHRoaXMubSk7XG4gIGVsc2UgaWYoeC5jb21wYXJlVG8odGhpcy5tKSA8IDApIHJldHVybiB4O1xuICBlbHNlIHsgdmFyIHIgPSBuYmkoKTsgeC5jb3B5VG8ocik7IHRoaXMucmVkdWNlKHIpOyByZXR1cm4gcjsgfVxufVxuXG5mdW5jdGlvbiBiYXJyZXR0UmV2ZXJ0KHgpIHsgcmV0dXJuIHg7IH1cblxuLy8geCA9IHggbW9kIG0gKEhBQyAxNC40MilcbmZ1bmN0aW9uIGJhcnJldHRSZWR1Y2UoeCkge1xuICB4LmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpO1xuICBpZih4LnQgPiB0aGlzLm0udCsxKSB7IHgudCA9IHRoaXMubS50KzE7IHguY2xhbXAoKTsgfVxuICB0aGlzLm11Lm11bHRpcGx5VXBwZXJUbyh0aGlzLnIyLHRoaXMubS50KzEsdGhpcy5xMyk7XG4gIHRoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO1xuICB3aGlsZSh4LmNvbXBhcmVUbyh0aGlzLnIyKSA8IDApIHguZEFkZE9mZnNldCgxLHRoaXMubS50KzEpO1xuICB4LnN1YlRvKHRoaXMucjIseCk7XG4gIHdoaWxlKHguY29tcGFyZVRvKHRoaXMubSkgPj0gMCkgeC5zdWJUbyh0aGlzLm0seCk7XG59XG5cbi8vIHIgPSB4XjIgbW9kIG07IHggIT0gclxuZnVuY3Rpb24gYmFycmV0dFNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4vLyByID0geCp5IG1vZCBtOyB4LHkgIT0gclxuZnVuY3Rpb24gYmFycmV0dE11bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG5CYXJyZXR0LnByb3RvdHlwZS5jb252ZXJ0ID0gYmFycmV0dENvbnZlcnQ7XG5CYXJyZXR0LnByb3RvdHlwZS5yZXZlcnQgPSBiYXJyZXR0UmV2ZXJ0O1xuQmFycmV0dC5wcm90b3R5cGUucmVkdWNlID0gYmFycmV0dFJlZHVjZTtcbkJhcnJldHQucHJvdG90eXBlLm11bFRvID0gYmFycmV0dE11bFRvO1xuQmFycmV0dC5wcm90b3R5cGUuc3FyVG8gPSBiYXJyZXR0U3FyVG87XG5cbi8vIChwdWJsaWMpIHRoaXNeZSAlIG0gKEhBQyAxNC44NSlcbmZ1bmN0aW9uIGJuTW9kUG93KGUsbSkge1xuICB2YXIgaSA9IGUuYml0TGVuZ3RoKCksIGssIHIgPSBuYnYoMSksIHo7XG4gIGlmKGkgPD0gMCkgcmV0dXJuIHI7XG4gIGVsc2UgaWYoaSA8IDE4KSBrID0gMTtcbiAgZWxzZSBpZihpIDwgNDgpIGsgPSAzO1xuICBlbHNlIGlmKGkgPCAxNDQpIGsgPSA0O1xuICBlbHNlIGlmKGkgPCA3NjgpIGsgPSA1O1xuICBlbHNlIGsgPSA2O1xuICBpZihpIDwgOClcbiAgICB6ID0gbmV3IENsYXNzaWMobSk7XG4gIGVsc2UgaWYobS5pc0V2ZW4oKSlcbiAgICB6ID0gbmV3IEJhcnJldHQobSk7XG4gIGVsc2VcbiAgICB6ID0gbmV3IE1vbnRnb21lcnkobSk7XG5cbiAgLy8gcHJlY29tcHV0YXRpb25cbiAgdmFyIGcgPSBuZXcgQXJyYXkoKSwgbiA9IDMsIGsxID0gay0xLCBrbSA9ICgxPDxrKS0xO1xuICBnWzFdID0gei5jb252ZXJ0KHRoaXMpO1xuICBpZihrID4gMSkge1xuICAgIHZhciBnMiA9IG5iaSgpO1xuICAgIHouc3FyVG8oZ1sxXSxnMik7XG4gICAgd2hpbGUobiA8PSBrbSkge1xuICAgICAgZ1tuXSA9IG5iaSgpO1xuICAgICAgei5tdWxUbyhnMixnW24tMl0sZ1tuXSk7XG4gICAgICBuICs9IDI7XG4gICAgfVxuICB9XG5cbiAgdmFyIGogPSBlLnQtMSwgdywgaXMxID0gdHJ1ZSwgcjIgPSBuYmkoKSwgdDtcbiAgaSA9IG5iaXRzKGVbal0pLTE7XG4gIHdoaWxlKGogPj0gMCkge1xuICAgIGlmKGkgPj0gazEpIHcgPSAoZVtqXT4+KGktazEpKSZrbTtcbiAgICBlbHNlIHtcbiAgICAgIHcgPSAoZVtqXSYoKDE8PChpKzEpKS0xKSk8PChrMS1pKTtcbiAgICAgIGlmKGogPiAwKSB3IHw9IGVbai0xXT4+KHRoaXMuREIraS1rMSk7XG4gICAgfVxuXG4gICAgbiA9IGs7XG4gICAgd2hpbGUoKHcmMSkgPT0gMCkgeyB3ID4+PSAxOyAtLW47IH1cbiAgICBpZigoaSAtPSBuKSA8IDApIHsgaSArPSB0aGlzLkRCOyAtLWo7IH1cbiAgICBpZihpczEpIHsgIC8vIHJldCA9PSAxLCBkb24ndCBib3RoZXIgc3F1YXJpbmcgb3IgbXVsdGlwbHlpbmcgaXRcbiAgICAgIGdbd10uY29weVRvKHIpO1xuICAgICAgaXMxID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgd2hpbGUobiA+IDEpIHsgei5zcXJUbyhyLHIyKTsgei5zcXJUbyhyMixyKTsgbiAtPSAyOyB9XG4gICAgICBpZihuID4gMCkgei5zcXJUbyhyLHIyKTsgZWxzZSB7IHQgPSByOyByID0gcjI7IHIyID0gdDsgfVxuICAgICAgei5tdWxUbyhyMixnW3ddLHIpO1xuICAgIH1cblxuICAgIHdoaWxlKGogPj0gMCAmJiAoZVtqXSYoMTw8aSkpID09IDApIHtcbiAgICAgIHouc3FyVG8ocixyMik7IHQgPSByOyByID0gcjI7IHIyID0gdDtcbiAgICAgIGlmKC0taSA8IDApIHsgaSA9IHRoaXMuREItMTsgLS1qOyB9XG4gICAgfVxuICB9XG4gIHJldHVybiB6LnJldmVydChyKTtcbn1cblxuLy8gKHB1YmxpYykgZ2NkKHRoaXMsYSkgKEhBQyAxNC41NClcbmZ1bmN0aW9uIGJuR0NEKGEpIHtcbiAgdmFyIHggPSAodGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpcy5jbG9uZSgpO1xuICB2YXIgeSA9IChhLnM8MCk/YS5uZWdhdGUoKTphLmNsb25lKCk7XG4gIGlmKHguY29tcGFyZVRvKHkpIDwgMCkgeyB2YXIgdCA9IHg7IHggPSB5OyB5ID0gdDsgfVxuICB2YXIgaSA9IHguZ2V0TG93ZXN0U2V0Qml0KCksIGcgPSB5LmdldExvd2VzdFNldEJpdCgpO1xuICBpZihnIDwgMCkgcmV0dXJuIHg7XG4gIGlmKGkgPCBnKSBnID0gaTtcbiAgaWYoZyA+IDApIHtcbiAgICB4LnJTaGlmdFRvKGcseCk7XG4gICAgeS5yU2hpZnRUbyhnLHkpO1xuICB9XG4gIHdoaWxlKHguc2lnbnVtKCkgPiAwKSB7XG4gICAgaWYoKGkgPSB4LmdldExvd2VzdFNldEJpdCgpKSA+IDApIHguclNoaWZ0VG8oaSx4KTtcbiAgICBpZigoaSA9IHkuZ2V0TG93ZXN0U2V0Qml0KCkpID4gMCkgeS5yU2hpZnRUbyhpLHkpO1xuICAgIGlmKHguY29tcGFyZVRvKHkpID49IDApIHtcbiAgICAgIHguc3ViVG8oeSx4KTtcbiAgICAgIHguclNoaWZ0VG8oMSx4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB5LnN1YlRvKHgseSk7XG4gICAgICB5LnJTaGlmdFRvKDEseSk7XG4gICAgfVxuICB9XG4gIGlmKGcgPiAwKSB5LmxTaGlmdFRvKGcseSk7XG4gIHJldHVybiB5O1xufVxuXG4vLyAocHJvdGVjdGVkKSB0aGlzICUgbiwgbiA8IDJeMjZcbmZ1bmN0aW9uIGJucE1vZEludChuKSB7XG4gIGlmKG4gPD0gMCkgcmV0dXJuIDA7XG4gIHZhciBkID0gdGhpcy5EViVuLCByID0gKHRoaXMuczwwKT9uLTE6MDtcbiAgaWYodGhpcy50ID4gMClcbiAgICBpZihkID09IDApIHIgPSB0aGlzWzBdJW47XG4gICAgZWxzZSBmb3IodmFyIGkgPSB0aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHIgPSAoZCpyK3RoaXNbaV0pJW47XG4gIHJldHVybiByO1xufVxuXG4vLyAocHVibGljKSAxL3RoaXMgJSBtIChIQUMgMTQuNjEpXG5mdW5jdGlvbiBibk1vZEludmVyc2UobSkge1xuICB2YXIgYWMgPSBtLmlzRXZlbigpO1xuICBpZigodGhpcy5pc0V2ZW4oKSAmJiBhYykgfHwgbS5zaWdudW0oKSA9PSAwKSByZXR1cm4gQmlnSW50ZWdlci5aRVJPO1xuICB2YXIgdSA9IG0uY2xvbmUoKSwgdiA9IHRoaXMuY2xvbmUoKTtcbiAgdmFyIGEgPSBuYnYoMSksIGIgPSBuYnYoMCksIGMgPSBuYnYoMCksIGQgPSBuYnYoMSk7XG4gIHdoaWxlKHUuc2lnbnVtKCkgIT0gMCkge1xuICAgIHdoaWxlKHUuaXNFdmVuKCkpIHtcbiAgICAgIHUuclNoaWZ0VG8oMSx1KTtcbiAgICAgIGlmKGFjKSB7XG4gICAgICAgIGlmKCFhLmlzRXZlbigpIHx8ICFiLmlzRXZlbigpKSB7IGEuYWRkVG8odGhpcyxhKTsgYi5zdWJUbyhtLGIpOyB9XG4gICAgICAgIGEuclNoaWZ0VG8oMSxhKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoIWIuaXNFdmVuKCkpIGIuc3ViVG8obSxiKTtcbiAgICAgIGIuclNoaWZ0VG8oMSxiKTtcbiAgICB9XG4gICAgd2hpbGUodi5pc0V2ZW4oKSkge1xuICAgICAgdi5yU2hpZnRUbygxLHYpO1xuICAgICAgaWYoYWMpIHtcbiAgICAgICAgaWYoIWMuaXNFdmVuKCkgfHwgIWQuaXNFdmVuKCkpIHsgYy5hZGRUbyh0aGlzLGMpOyBkLnN1YlRvKG0sZCk7IH1cbiAgICAgICAgYy5yU2hpZnRUbygxLGMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZighZC5pc0V2ZW4oKSkgZC5zdWJUbyhtLGQpO1xuICAgICAgZC5yU2hpZnRUbygxLGQpO1xuICAgIH1cbiAgICBpZih1LmNvbXBhcmVUbyh2KSA+PSAwKSB7XG4gICAgICB1LnN1YlRvKHYsdSk7XG4gICAgICBpZihhYykgYS5zdWJUbyhjLGEpO1xuICAgICAgYi5zdWJUbyhkLGIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHYuc3ViVG8odSx2KTtcbiAgICAgIGlmKGFjKSBjLnN1YlRvKGEsYyk7XG4gICAgICBkLnN1YlRvKGIsZCk7XG4gICAgfVxuICB9XG4gIGlmKHYuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSAhPSAwKSByZXR1cm4gQmlnSW50ZWdlci5aRVJPO1xuICBpZihkLmNvbXBhcmVUbyhtKSA+PSAwKSByZXR1cm4gZC5zdWJ0cmFjdChtKTtcbiAgaWYoZC5zaWdudW0oKSA8IDApIGQuYWRkVG8obSxkKTsgZWxzZSByZXR1cm4gZDtcbiAgaWYoZC5zaWdudW0oKSA8IDApIHJldHVybiBkLmFkZChtKTsgZWxzZSByZXR1cm4gZDtcbn1cblxudmFyIGxvd3ByaW1lcyA9IFsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTddO1xudmFyIGxwbGltID0gKDE8PDI2KS9sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXTtcblxuLy8gKHB1YmxpYykgdGVzdCBwcmltYWxpdHkgd2l0aCBjZXJ0YWludHkgPj0gMS0uNV50XG5mdW5jdGlvbiBibklzUHJvYmFibGVQcmltZSh0KSB7XG4gIHZhciBpLCB4ID0gdGhpcy5hYnMoKTtcbiAgaWYoeC50ID09IDEgJiYgeFswXSA8PSBsb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSkge1xuICAgIGZvcihpID0gMDsgaSA8IGxvd3ByaW1lcy5sZW5ndGg7ICsraSlcbiAgICAgIGlmKHhbMF0gPT0gbG93cHJpbWVzW2ldKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYoeC5pc0V2ZW4oKSkgcmV0dXJuIGZhbHNlO1xuICBpID0gMTtcbiAgd2hpbGUoaSA8IGxvd3ByaW1lcy5sZW5ndGgpIHtcbiAgICB2YXIgbSA9IGxvd3ByaW1lc1tpXSwgaiA9IGkrMTtcbiAgICB3aGlsZShqIDwgbG93cHJpbWVzLmxlbmd0aCAmJiBtIDwgbHBsaW0pIG0gKj0gbG93cHJpbWVzW2orK107XG4gICAgbSA9IHgubW9kSW50KG0pO1xuICAgIHdoaWxlKGkgPCBqKSBpZihtJWxvd3ByaW1lc1tpKytdID09IDApIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4geC5taWxsZXJSYWJpbih0KTtcbn1cblxuLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZiBwcm9iYWJseSBwcmltZSAoSEFDIDQuMjQsIE1pbGxlci1SYWJpbilcbmZ1bmN0aW9uIGJucE1pbGxlclJhYmluKHQpIHtcbiAgdmFyIG4xID0gdGhpcy5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSk7XG4gIHZhciBrID0gbjEuZ2V0TG93ZXN0U2V0Qml0KCk7XG4gIGlmKGsgPD0gMCkgcmV0dXJuIGZhbHNlO1xuICB2YXIgciA9IG4xLnNoaWZ0UmlnaHQoayk7XG4gIHQgPSAodCsxKT4+MTtcbiAgaWYodCA+IGxvd3ByaW1lcy5sZW5ndGgpIHQgPSBsb3dwcmltZXMubGVuZ3RoO1xuICB2YXIgYSA9IG5iaSgpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgdDsgKytpKSB7XG4gICAgLy9QaWNrIGJhc2VzIGF0IHJhbmRvbSwgaW5zdGVhZCBvZiBzdGFydGluZyBhdCAyXG4gICAgYS5mcm9tSW50KGxvd3ByaW1lc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbG93cHJpbWVzLmxlbmd0aCldKTtcbiAgICB2YXIgeSA9IGEubW9kUG93KHIsdGhpcyk7XG4gICAgaWYoeS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpICE9IDAgJiYgeS5jb21wYXJlVG8objEpICE9IDApIHtcbiAgICAgIHZhciBqID0gMTtcbiAgICAgIHdoaWxlKGorKyA8IGsgJiYgeS5jb21wYXJlVG8objEpICE9IDApIHtcbiAgICAgICAgeSA9IHkubW9kUG93SW50KDIsdGhpcyk7XG4gICAgICAgIGlmKHkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZih5LmNvbXBhcmVUbyhuMSkgIT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gcHJvdGVjdGVkXG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5jaHVua1NpemUgPSBibnBDaHVua1NpemU7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS50b1JhZGl4ID0gYm5wVG9SYWRpeDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21SYWRpeCA9IGJucEZyb21SYWRpeDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21OdW1iZXIgPSBibnBGcm9tTnVtYmVyO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuYml0d2lzZVRvID0gYm5wQml0d2lzZVRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuY2hhbmdlQml0ID0gYm5wQ2hhbmdlQml0O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuYWRkVG8gPSBibnBBZGRUbztcbkJpZ0ludGVnZXIucHJvdG90eXBlLmRNdWx0aXBseSA9IGJucERNdWx0aXBseTtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmRBZGRPZmZzZXQgPSBibnBEQWRkT2Zmc2V0O1xuQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlMb3dlclRvID0gYm5wTXVsdGlwbHlMb3dlclRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlVcHBlclRvID0gYm5wTXVsdGlwbHlVcHBlclRvO1xuQmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW50ID0gYm5wTW9kSW50O1xuQmlnSW50ZWdlci5wcm90b3R5cGUubWlsbGVyUmFiaW4gPSBibnBNaWxsZXJSYWJpbjtcblxuLy8gcHVibGljXG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5jbG9uZSA9IGJuQ2xvbmU7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5pbnRWYWx1ZSA9IGJuSW50VmFsdWU7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5ieXRlVmFsdWUgPSBibkJ5dGVWYWx1ZTtcbkJpZ0ludGVnZXIucHJvdG90eXBlLnNob3J0VmFsdWUgPSBiblNob3J0VmFsdWU7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5zaWdudW0gPSBiblNpZ051bTtcbkJpZ0ludGVnZXIucHJvdG90eXBlLnRvQnl0ZUFycmF5ID0gYm5Ub0J5dGVBcnJheTtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmVxdWFscyA9IGJuRXF1YWxzO1xuQmlnSW50ZWdlci5wcm90b3R5cGUubWluID0gYm5NaW47XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5tYXggPSBibk1heDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLmFuZCA9IGJuQW5kO1xuQmlnSW50ZWdlci5wcm90b3R5cGUub3IgPSBibk9yO1xuQmlnSW50ZWdlci5wcm90b3R5cGUueG9yID0gYm5Yb3I7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmROb3QgPSBibkFuZE5vdDtcbkJpZ0ludGVnZXIucHJvdG90eXBlLm5vdCA9IGJuTm90O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuc2hpZnRMZWZ0ID0gYm5TaGlmdExlZnQ7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdFJpZ2h0ID0gYm5TaGlmdFJpZ2h0O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuZ2V0TG93ZXN0U2V0Qml0ID0gYm5HZXRMb3dlc3RTZXRCaXQ7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXRDb3VudCA9IGJuQml0Q291bnQ7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS50ZXN0Qml0ID0gYm5UZXN0Qml0O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuc2V0Qml0ID0gYm5TZXRCaXQ7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGVhckJpdCA9IGJuQ2xlYXJCaXQ7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5mbGlwQml0ID0gYm5GbGlwQml0O1xuQmlnSW50ZWdlci5wcm90b3R5cGUuYWRkID0gYm5BZGQ7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5zdWJ0cmFjdCA9IGJuU3VidHJhY3Q7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseSA9IGJuTXVsdGlwbHk7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGUgPSBibkRpdmlkZTtcbkJpZ0ludGVnZXIucHJvdG90eXBlLnJlbWFpbmRlciA9IGJuUmVtYWluZGVyO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyID0gYm5EaXZpZGVBbmRSZW1haW5kZXI7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RQb3cgPSBibk1vZFBvdztcbkJpZ0ludGVnZXIucHJvdG90eXBlLm1vZEludmVyc2UgPSBibk1vZEludmVyc2U7XG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5wb3cgPSBiblBvdztcbkJpZ0ludGVnZXIucHJvdG90eXBlLmdjZCA9IGJuR0NEO1xuQmlnSW50ZWdlci5wcm90b3R5cGUuaXNQcm9iYWJsZVByaW1lID0gYm5Jc1Byb2JhYmxlUHJpbWU7XG5cbi8vIEpTQk4tc3BlY2lmaWMgZXh0ZW5zaW9uXG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmUgPSBiblNxdWFyZTtcblxuLy8gRXhwb3NlIHRoZSBCYXJyZXR0IGZ1bmN0aW9uXG5CaWdJbnRlZ2VyLnByb3RvdHlwZS5CYXJyZXR0ID0gQmFycmV0dFxuXG4vLyBCaWdJbnRlZ2VyIGludGVyZmFjZXMgbm90IGltcGxlbWVudGVkIGluIGpzYm46XG5cbi8vIEJpZ0ludGVnZXIoaW50IHNpZ251bSwgYnl0ZVtdIG1hZ25pdHVkZSlcbi8vIGRvdWJsZSBkb3VibGVWYWx1ZSgpXG4vLyBmbG9hdCBmbG9hdFZhbHVlKClcbi8vIGludCBoYXNoQ29kZSgpXG4vLyBsb25nIGxvbmdWYWx1ZSgpXG4vLyBzdGF0aWMgQmlnSW50ZWdlciB2YWx1ZU9mKGxvbmcgdmFsKVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJpZ0ludGVnZXI7XG5cbiIsIi8vIFRPRE86XG4vLyAgICAqIHV0aWxpemUgYGNyeXB0by5jcmVhdGUoUHJpdmF0ZXxQdWJsaWMpS2V5KClgIGFuZCBga2V5T2JqZWN0LmV4cG9ydCgpYFxuLy8gICAgKiBoYW5kbGUgbXVsdGktbGluZSBoZWFkZXIgdmFsdWVzIChPcGVuU1NIKT9cbi8vICAgICogbW9yZSB0aG9yb3VnaCB2YWxpZGF0aW9uP1xuXG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgY3J5cHRvU2lnbiA9IGNyeXB0by5zaWduO1xudmFyIGNyeXB0b1ZlcmlmeSA9IGNyeXB0by52ZXJpZnk7XG52YXIgY3JlYXRlU2lnbiA9IGNyeXB0by5jcmVhdGVTaWduO1xudmFyIGNyZWF0ZVZlcmlmeSA9IGNyeXB0by5jcmVhdGVWZXJpZnk7XG52YXIgY3JlYXRlRGVjaXBoZXJpdiA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2O1xudmFyIGNyZWF0ZUhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaDtcbnZhciBjcmVhdGVIbWFjID0gY3J5cHRvLmNyZWF0ZUhtYWM7XG52YXIgc3VwcG9ydGVkT3BlblNTTENpcGhlcnMgPSBjcnlwdG8uZ2V0Q2lwaGVycygpO1xuXG52YXIgdXRpbHM7XG52YXIgQmVyID0gcmVxdWlyZSgnYXNuMScpLkJlcjtcbnZhciBiY3J5cHRfcGJrZGYgPSByZXF1aXJlKCdiY3J5cHQtcGJrZGYnKS5wYmtkZjtcblxudmFyIGJ1ZmZlckhlbHBlcnMgPSByZXF1aXJlKCcuL2J1ZmZlci1oZWxwZXJzJyk7XG52YXIgcmVhZFVJbnQzMkJFID0gYnVmZmVySGVscGVycy5yZWFkVUludDMyQkU7XG52YXIgd3JpdGVVSW50MzJCRSA9IGJ1ZmZlckhlbHBlcnMud3JpdGVVSW50MzJCRTtcbnZhciBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xudmFyIFNVUFBPUlRFRF9DSVBIRVIgPSBjb25zdGFudHMuQUxHT1JJVEhNUy5TVVBQT1JURURfQ0lQSEVSO1xudmFyIENJUEhFUl9JTkZPID0gY29uc3RhbnRzLkNJUEhFUl9JTkZPO1xudmFyIFNTSF9UT19PUEVOU1NMID0gY29uc3RhbnRzLlNTSF9UT19PUEVOU1NMO1xudmFyIEVERFNBX1NVUFBPUlRFRCA9IGNvbnN0YW50cy5FRERTQV9TVVBQT1JURUQ7XG5cbnZhciBTWU1fSEFTSF9BTEdPID0gU3ltYm9sKCdIYXNoIEFsZ29yaXRobScpO1xudmFyIFNZTV9QUklWX1BFTSA9IFN5bWJvbCgnUHJpdmF0ZSBrZXkgUEVNJyk7XG52YXIgU1lNX1BVQl9QRU0gPSBTeW1ib2woJ1B1YmxpYyBrZXkgUEVNJyk7XG52YXIgU1lNX1BVQl9TU0ggPSBTeW1ib2woJ1B1YmxpYyBrZXkgU1NIJyk7XG52YXIgU1lNX0RFQ1JZUFRFRCA9IFN5bWJvbCgnRGVjcnlwdGVkIEtleScpO1xuXG4vLyBDcmVhdGUgT3BlblNTTCBjaXBoZXIgbmFtZSAtPiBTU0ggY2lwaGVyIG5hbWUgY29udmVyc2lvbiB0YWJsZVxudmFyIENJUEhFUl9JTkZPX09QRU5TU0wgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuKGZ1bmN0aW9uKCkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKENJUEhFUl9JTkZPKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGNpcGhlck5hbWUgPSBTU0hfVE9fT1BFTlNTTFtrZXlzW2ldXTtcbiAgICBpZiAoIWNpcGhlck5hbWUgfHwgQ0lQSEVSX0lORk9fT1BFTlNTTFtjaXBoZXJOYW1lXSlcbiAgICAgIGNvbnRpbnVlO1xuICAgIENJUEhFUl9JTkZPX09QRU5TU0xbY2lwaGVyTmFtZV0gPSBDSVBIRVJfSU5GT1trZXlzW2ldXTtcbiAgfVxufSkoKTtcblxudmFyIHRyaW1TdGFydCA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHR5cGVvZiBTdHJpbmcucHJvdG90eXBlLnRyaW1TdGFydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiB0cmltU3RhcnQoc3RyKSB7XG4gICAgICByZXR1cm4gc3RyLnRyaW1TdGFydCgpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gdHJpbVN0YXJ0KHN0cikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAgIHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaSkpIHtcbiAgICAgICAgY2FzZSAzMjogLy8gJyAnXG4gICAgICAgIGNhc2UgOTogLy8gJ1xcdCdcbiAgICAgICAgY2FzZSAxMzogLy8gJ1xccidcbiAgICAgICAgY2FzZSAxMDogLy8gJ1xcbidcbiAgICAgICAgY2FzZSAxMjogLy8gJ1xcZidcbiAgICAgICAgICArK3N0YXJ0O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChzdGFydCA9PT0gMClcbiAgICAgIHJldHVybiBzdHI7XG4gICAgcmV0dXJuIHN0ci5zbGljZShzdGFydCk7XG4gIH07XG59KSgpO1xuXG5mdW5jdGlvbiBtYWtlUEVNKHR5cGUsIGRhdGEpIHtcbiAgZGF0YSA9IGRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICByZXR1cm4gJy0tLS0tQkVHSU4gJyArIHR5cGUgKyAnIEtFWS0tLS0tXFxuJ1xuICAgICAgICAgKyBkYXRhLnJlcGxhY2UoLy57NjR9L2csICckJlxcbicpXG4gICAgICAgICArIChkYXRhLmxlbmd0aCAlIDY0ID8gJ1xcbicgOiAnJylcbiAgICAgICAgICsgJy0tLS0tRU5EICcgKyB0eXBlICsgJyBLRVktLS0tLSc7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVCdWZmZXJzKGJ1ZjEsIGJ1ZjIpIHtcbiAgdmFyIHJlc3VsdCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShidWYxLmxlbmd0aCArIGJ1ZjIubGVuZ3RoKTtcbiAgYnVmMS5jb3B5KHJlc3VsdCwgMCk7XG4gIGJ1ZjIuY29weShyZXN1bHQsIGJ1ZjEubGVuZ3RoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gc2tpcEZpZWxkcyhidWYsIG5maWVsZHMpIHtcbiAgdmFyIGJ1ZkxlbiA9IGJ1Zi5sZW5ndGg7XG4gIHZhciBwb3MgPSAoYnVmLl9wb3MgfHwgMCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmZpZWxkczsgKytpKSB7XG4gICAgdmFyIGxlZnQgPSAoYnVmTGVuIC0gcG9zKTtcbiAgICBpZiAocG9zID49IGJ1ZkxlbiB8fCBsZWZ0IDwgNClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgbGVuID0gcmVhZFVJbnQzMkJFKGJ1ZiwgcG9zKTtcbiAgICBpZiAobGVmdCA8IDQgKyBsZW4pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcG9zICs9IDQgKyBsZW47XG4gIH1cbiAgYnVmLl9wb3MgPSBwb3M7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZW5PcGVuU1NMUlNBUHViKG4sIGUpIHtcbiAgdmFyIGFzbldyaXRlciA9IG5ldyBCZXIuV3JpdGVyKCk7XG4gIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgLy8gYWxnb3JpdGhtXG4gICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAgIGFzbldyaXRlci53cml0ZU9JRCgnMS4yLjg0MC4xMTM1NDkuMS4xLjEnKTsgLy8gcnNhRW5jcnlwdGlvblxuICAgICAgLy8gYWxnb3JpdGhtIHBhcmFtZXRlcnMgKFJTQSBoYXMgbm9uZSlcbiAgICAgIGFzbldyaXRlci53cml0ZU51bGwoKTtcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcblxuICAgIC8vIHN1YmplY3RQdWJsaWNLZXlcbiAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZShCZXIuQml0U3RyaW5nKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ5dGUoMHgwMCk7XG4gICAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIobiwgQmVyLkludGVnZXIpO1xuICAgICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIoZSwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICByZXR1cm4gbWFrZVBFTSgnUFVCTElDJywgYXNuV3JpdGVyLmJ1ZmZlcik7XG59XG5cbmZ1bmN0aW9uIGdlbk9wZW5TU0hSU0FQdWIobiwgZSkge1xuICB2YXIgcHVibGljS2V5ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyA3IC8vIFwic3NoLXJzYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgbi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBlLmxlbmd0aCk7XG5cbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIDcsIDApO1xuICBwdWJsaWNLZXkud3JpdGUoJ3NzaC1yc2EnLCA0LCA3LCAnYXNjaWknKTtcblxuICB2YXIgaSA9IDQgKyA3O1xuICB3cml0ZVVJbnQzMkJFKHB1YmxpY0tleSwgZS5sZW5ndGgsIGkpO1xuICBlLmNvcHkocHVibGljS2V5LCBpICs9IDQpO1xuXG4gIHdyaXRlVUludDMyQkUocHVibGljS2V5LCBuLmxlbmd0aCwgaSArPSBlLmxlbmd0aCk7XG4gIG4uY29weShwdWJsaWNLZXksIGkgKyA0KTtcblxuICByZXR1cm4gcHVibGljS2V5O1xufVxuXG52YXIgZ2VuT3BlblNTTFJTQVByaXYgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGdlblJTQUFTTjFCdWYobiwgZSwgZCwgcCwgcSwgZG1wMSwgZG1xMSwgaXFtcCkge1xuICAgIHZhciBhc25Xcml0ZXIgPSBuZXcgQmVyLldyaXRlcigpO1xuICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgICBhc25Xcml0ZXIud3JpdGVJbnQoMHgwMCwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKG4sIEJlci5JbnRlZ2VyKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihlLCBCZXIuSW50ZWdlcik7XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIoZCwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHAsIEJlci5JbnRlZ2VyKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihxLCBCZXIuSW50ZWdlcik7XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIoZG1wMSwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKGRtcTEsIEJlci5JbnRlZ2VyKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihpcW1wLCBCZXIuSW50ZWdlcik7XG4gICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gICAgcmV0dXJuIGFzbldyaXRlci5idWZmZXI7XG4gIH1cblxuICBmdW5jdGlvbiBiaWdJbnRGcm9tQnVmZmVyKGJ1Zikge1xuICAgIHJldHVybiBCaWdJbnQoJzB4JyArIGJ1Zi50b1N0cmluZygnaGV4JykpO1xuICB9XG5cbiAgZnVuY3Rpb24gYmlnSW50VG9CdWZmZXIoYm4pIHtcbiAgICB2YXIgaGV4ID0gYm4udG9TdHJpbmcoMTYpO1xuICAgIGlmICgoaGV4Lmxlbmd0aCAmIDEpICE9PSAwKSB7XG4gICAgICBoZXggPSAnMCcgKyBoZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzaWdiaXQgPSBoZXguY2hhckNvZGVBdCgwKTtcbiAgICAgIC8vIEJFUi9ERVIgaW50ZWdlcnMgcmVxdWlyZSBsZWFkaW5nIHplcm8gYnl0ZSB0byBkZW5vdGUgYSBwb3NpdGl2ZSB2YWx1ZVxuICAgICAgLy8gd2hlbiBmaXJzdCBieXRlID49IDB4ODBcbiAgICAgIGlmIChzaWdiaXQgPT09IDU2IHx8IChzaWdiaXQgPj0gOTcgJiYgc2lnYml0IDw9IDEwMikpXG4gICAgICAgIGhleCA9ICcwMCcgKyBoZXg7XG4gICAgfVxuICAgIHJldHVybiBCdWZmZXIuZnJvbShoZXgsICdoZXgnKTtcbiAgfVxuXG4gIC8vIEZlYXR1cmUgZGV0ZWN0IG5hdGl2ZSBCaWdJbnQgYXZhaWxhYmlsaXR5IGFuZCB1c2UgaXQgd2hlbiBwb3NzaWJsZVxuICB0cnkge1xuICAgIHZhciBjb2RlID0gW1xuICAgICAgJ3JldHVybiBmdW5jdGlvbiBnZW5PcGVuU1NMUlNBUHJpdihuLCBlLCBkLCBpcW1wLCBwLCBxKSB7JyxcbiAgICAgICcgIHZhciBibl9kID0gYmlnSW50RnJvbUJ1ZmZlcihkKTsnLFxuICAgICAgJyAgdmFyIGRtcDEgPSBiaWdJbnRUb0J1ZmZlcihibl9kICUgKGJpZ0ludEZyb21CdWZmZXIocCkgLSAxbikpOycsXG4gICAgICAnICB2YXIgZG1xMSA9IGJpZ0ludFRvQnVmZmVyKGJuX2QgJSAoYmlnSW50RnJvbUJ1ZmZlcihxKSAtIDFuKSk7JyxcbiAgICAgICcgIHJldHVybiBtYWtlUEVNKFxcJ1JTQSBQUklWQVRFXFwnLCAnXG4gICAgICAgICsgJ2dlblJTQUFTTjFCdWYobiwgZSwgZCwgcCwgcSwgZG1wMSwgZG1xMSwgaXFtcCkpOycsXG4gICAgICAnfTsnXG4gICAgXS5qb2luKCdcXG4nKTtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKFxuICAgICAgJ2JpZ0ludEZyb21CdWZmZXIsIGJpZ0ludFRvQnVmZmVyLCBtYWtlUEVNLCBnZW5SU0FBU04xQnVmJyxcbiAgICAgIGNvZGVcbiAgICApKGJpZ0ludEZyb21CdWZmZXIsIGJpZ0ludFRvQnVmZmVyLCBtYWtlUEVNLCBnZW5SU0FBU04xQnVmKTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICByZXR1cm4gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIEJpZ0ludGVnZXIgPSByZXF1aXJlKCcuL2pzYm4uanMnKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBnZW5PcGVuU1NMUlNBUHJpdihuLCBlLCBkLCBpcW1wLCBwLCBxKSB7XG4gICAgICAgIHZhciBwYmkgPSBuZXcgQmlnSW50ZWdlcihwLCAyNTYpO1xuICAgICAgICB2YXIgcWJpID0gbmV3IEJpZ0ludGVnZXIocSwgMjU2KTtcbiAgICAgICAgdmFyIGRiaSA9IG5ldyBCaWdJbnRlZ2VyKGQsIDI1Nik7XG4gICAgICAgIHZhciBkbXAxYmkgPSBkYmkubW9kKHBiaS5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSkpO1xuICAgICAgICB2YXIgZG1xMWJpID0gZGJpLm1vZChxYmkuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKTtcbiAgICAgICAgdmFyIGRtcDEgPSBCdWZmZXIuZnJvbShkbXAxYmkudG9CeXRlQXJyYXkoKSk7XG4gICAgICAgIHZhciBkbXExID0gQnVmZmVyLmZyb20oZG1xMWJpLnRvQnl0ZUFycmF5KCkpO1xuICAgICAgICByZXR1cm4gbWFrZVBFTSgnUlNBIFBSSVZBVEUnLFxuICAgICAgICAgICAgICAgICAgICAgICBnZW5SU0FBU04xQnVmKG4sIGUsIGQsIHAsIHEsIGRtcDEsIGRtcTEsIGlxbXApKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgfVxufSkoKTtcblxuZnVuY3Rpb24gZ2VuT3BlblNTTERTQVB1YihwLCBxLCBnLCB5KSB7XG4gIHZhciBhc25Xcml0ZXIgPSBuZXcgQmVyLldyaXRlcigpO1xuICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgIC8vIGFsZ29yaXRobVxuICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgICBhc25Xcml0ZXIud3JpdGVPSUQoJzEuMi44NDAuMTAwNDAuNC4xJyk7IC8vIGlkLWRzYVxuICAgICAgLy8gYWxnb3JpdGhtIHBhcmFtZXRlcnNcbiAgICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihwLCBCZXIuSW50ZWdlcik7XG4gICAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihxLCBCZXIuSW50ZWdlcik7XG4gICAgICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihnLCBCZXIuSW50ZWdlcik7XG4gICAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcblxuICAgIC8vIHN1YmplY3RQdWJsaWNLZXlcbiAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZShCZXIuQml0U3RyaW5nKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ5dGUoMHgwMCk7XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIoeSwgQmVyLkludGVnZXIpO1xuICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgcmV0dXJuIG1ha2VQRU0oJ1BVQkxJQycsIGFzbldyaXRlci5idWZmZXIpO1xufVxuXG5mdW5jdGlvbiBnZW5PcGVuU1NIRFNBUHViKHAsIHEsIGcsIHkpIHtcbiAgdmFyIHB1YmxpY0tleSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgNyAvLyBzc2gtZHNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgcC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBxLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIGcubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgeS5sZW5ndGgpO1xuXG4gIHdyaXRlVUludDMyQkUocHVibGljS2V5LCA3LCAwKTtcbiAgcHVibGljS2V5LndyaXRlKCdzc2gtZHNzJywgNCwgNywgJ2FzY2lpJyk7XG5cbiAgdmFyIGkgPSA0ICsgNztcbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIHAubGVuZ3RoLCBpKTtcbiAgcC5jb3B5KHB1YmxpY0tleSwgaSArPSA0KTtcblxuICB3cml0ZVVJbnQzMkJFKHB1YmxpY0tleSwgcS5sZW5ndGgsIGkgKz0gcC5sZW5ndGgpO1xuICBxLmNvcHkocHVibGljS2V5LCBpICs9IDQpO1xuXG4gIHdyaXRlVUludDMyQkUocHVibGljS2V5LCBnLmxlbmd0aCwgaSArPSBxLmxlbmd0aCk7XG4gIGcuY29weShwdWJsaWNLZXksIGkgKz0gNCk7XG5cbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIHkubGVuZ3RoLCBpICs9IGcubGVuZ3RoKTtcbiAgeS5jb3B5KHB1YmxpY0tleSwgaSArIDQpO1xuXG4gIHJldHVybiBwdWJsaWNLZXk7XG59XG5cbmZ1bmN0aW9uIGdlbk9wZW5TU0xEU0FQcml2KHAsIHEsIGcsIHksIHgpIHtcbiAgdmFyIGFzbldyaXRlciA9IG5ldyBCZXIuV3JpdGVyKCk7XG4gIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgYXNuV3JpdGVyLndyaXRlSW50KDB4MDAsIEJlci5JbnRlZ2VyKTtcbiAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIocCwgQmVyLkludGVnZXIpO1xuICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcihxLCBCZXIuSW50ZWdlcik7XG4gICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKGcsIEJlci5JbnRlZ2VyKTtcbiAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIoeSwgQmVyLkludGVnZXIpO1xuICAgIGFzbldyaXRlci53cml0ZUJ1ZmZlcih4LCBCZXIuSW50ZWdlcik7XG4gIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICByZXR1cm4gbWFrZVBFTSgnRFNBIFBSSVZBVEUnLCBhc25Xcml0ZXIuYnVmZmVyKTtcbn1cblxuZnVuY3Rpb24gZ2VuT3BlblNTTEVkUHViKHB1Yikge1xuICB2YXIgYXNuV3JpdGVyID0gbmV3IEJlci5Xcml0ZXIoKTtcbiAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAvLyBhbGdvcml0aG1cbiAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlT0lEKCcxLjMuMTAxLjExMicpOyAvLyBpZC1FZDI1NTE5XG4gICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG5cbiAgICAvLyBQdWJsaWNLZXlcbiAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZShCZXIuQml0U3RyaW5nKTtcbiAgICAgIGFzbldyaXRlci53cml0ZUJ5dGUoMHgwMCk7XG4gICAgICAvLyBYWFg6IGhhY2sgdG8gd3JpdGUgYSByYXcgYnVmZmVyIHdpdGhvdXQgYSB0YWcgLS0geXVja1xuICAgICAgYXNuV3JpdGVyLl9lbnN1cmUocHViLmxlbmd0aCk7XG4gICAgICBwdWIuY29weShhc25Xcml0ZXIuX2J1ZiwgYXNuV3JpdGVyLl9vZmZzZXQsIDAsIHB1Yi5sZW5ndGgpO1xuICAgICAgYXNuV3JpdGVyLl9vZmZzZXQgKz0gcHViLmxlbmd0aDtcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gIHJldHVybiBtYWtlUEVNKCdQVUJMSUMnLCBhc25Xcml0ZXIuYnVmZmVyKTtcbn1cblxuZnVuY3Rpb24gZ2VuT3BlblNTSEVkUHViKHB1Yikge1xuICB2YXIgcHVibGljS2V5ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxMSAvLyBzc2gtZWQyNTUxOVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIHB1Yi5sZW5ndGgpO1xuXG4gIHdyaXRlVUludDMyQkUocHVibGljS2V5LCAxMSwgMCk7XG4gIHB1YmxpY0tleS53cml0ZSgnc3NoLWVkMjU1MTknLCA0LCAxMSwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIHB1Yi5sZW5ndGgsIDE1KTtcbiAgcHViLmNvcHkocHVibGljS2V5LCAxOSk7XG5cbiAgcmV0dXJuIHB1YmxpY0tleTtcbn1cblxuZnVuY3Rpb24gZ2VuT3BlblNTTEVkUHJpdihwcml2KSB7XG4gIHZhciBhc25Xcml0ZXIgPSBuZXcgQmVyLldyaXRlcigpO1xuICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgIC8vIHZlcnNpb25cbiAgICBhc25Xcml0ZXIud3JpdGVJbnQoMHgwMCwgQmVyLkludGVnZXIpO1xuXG4gICAgLy8gYWxnb3JpdGhtXG4gICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAgIGFzbldyaXRlci53cml0ZU9JRCgnMS4zLjEwMS4xMTInKTsgLy8gaWQtRWQyNTUxOVxuICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuXG4gICAgLy8gUHJpdmF0ZUtleVxuICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKEJlci5PY3RldFN0cmluZyk7XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIocHJpdiwgQmVyLk9jdGV0U3RyaW5nKTtcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gIHJldHVybiBtYWtlUEVNKCdQUklWQVRFJywgYXNuV3JpdGVyLmJ1ZmZlcik7XG59XG5cbmZ1bmN0aW9uIGdlbk9wZW5TU0xFQ0RTQVB1YihvaWQsIFEpIHtcbiAgdmFyIGFzbldyaXRlciA9IG5ldyBCZXIuV3JpdGVyKCk7XG4gIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgLy8gYWxnb3JpdGhtXG4gICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAgIGFzbldyaXRlci53cml0ZU9JRCgnMS4yLjg0MC4xMDA0NS4yLjEnKTsgLy8gaWQtZWNQdWJsaWNLZXlcbiAgICAgIC8vIGFsZ29yaXRobSBwYXJhbWV0ZXJzIChuYW1lZEN1cnZlKVxuICAgICAgYXNuV3JpdGVyLndyaXRlT0lEKG9pZCk7XG4gICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG5cbiAgICAvLyBzdWJqZWN0UHVibGljS2V5XG4gICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoQmVyLkJpdFN0cmluZyk7XG4gICAgICBhc25Xcml0ZXIud3JpdGVCeXRlKDB4MDApO1xuICAgICAgLy8gWFhYOiBoYWNrIHRvIHdyaXRlIGEgcmF3IGJ1ZmZlciB3aXRob3V0IGEgdGFnIC0tIHl1Y2tcbiAgICAgIGFzbldyaXRlci5fZW5zdXJlKFEubGVuZ3RoKTtcbiAgICAgIFEuY29weShhc25Xcml0ZXIuX2J1ZiwgYXNuV3JpdGVyLl9vZmZzZXQsIDAsIFEubGVuZ3RoKTtcbiAgICAgIGFzbldyaXRlci5fb2Zmc2V0ICs9IFEubGVuZ3RoO1xuICAgICAgLy8gZW5kIGhhY2tcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gIHJldHVybiBtYWtlUEVNKCdQVUJMSUMnLCBhc25Xcml0ZXIuYnVmZmVyKTtcbn1cblxuZnVuY3Rpb24gZ2VuT3BlblNTSEVDRFNBUHViKG9pZCwgUSkge1xuICB2YXIgY3VydmVOYW1lO1xuICBzd2l0Y2ggKG9pZCkge1xuICAgIGNhc2UgJzEuMi44NDAuMTAwNDUuMy4xLjcnOlxuICAgICAgLy8gcHJpbWUyNTZ2MS9zZWNwMjU2cjFcbiAgICAgIGN1cnZlTmFtZSA9ICduaXN0cDI1Nic7XG4gICAgICBicmVhaztcbiAgICBjYXNlICcxLjMuMTMyLjAuMzQnOlxuICAgICAgLy8gc2VjcDM4NHIxXG4gICAgICBjdXJ2ZU5hbWUgPSAnbmlzdHAzODQnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnMS4zLjEzMi4wLjM1JzpcbiAgICAgIC8vIHNlY3A1MjFyMVxuICAgICAgY3VydmVOYW1lID0gJ25pc3RwNTIxJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcHVibGljS2V5ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxOSAvLyBlY2RzYS1zaGEyLTxjdXJ2ZSBuYW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDggLy8gPGN1cnZlIG5hbWU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgUS5sZW5ndGgpO1xuXG4gIHdyaXRlVUludDMyQkUocHVibGljS2V5LCAxOSwgMCk7XG4gIHB1YmxpY0tleS53cml0ZSgnZWNkc2Etc2hhMi0nICsgY3VydmVOYW1lLCA0LCAxOSwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShwdWJsaWNLZXksIDgsIDIzKTtcbiAgcHVibGljS2V5LndyaXRlKGN1cnZlTmFtZSwgMjcsIDgsICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUocHVibGljS2V5LCBRLmxlbmd0aCwgMzUpO1xuICBRLmNvcHkocHVibGljS2V5LCAzOSk7XG5cbiAgcmV0dXJuIHB1YmxpY0tleTtcbn1cblxuZnVuY3Rpb24gZ2VuT3BlblNTTEVDRFNBUHJpdihvaWQsIHB1YiwgcHJpdikge1xuICB2YXIgYXNuV3JpdGVyID0gbmV3IEJlci5Xcml0ZXIoKTtcbiAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAvLyB2ZXJzaW9uXG4gICAgYXNuV3JpdGVyLndyaXRlSW50KDB4MDEsIEJlci5JbnRlZ2VyKTtcbiAgICAvLyBwcml2YXRlS2V5XG4gICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHByaXYsIEJlci5PY3RldFN0cmluZyk7XG4gICAgLy8gcGFyYW1ldGVycyAob3B0aW9uYWwpXG4gICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoMHhBMCk7XG4gICAgICBhc25Xcml0ZXIud3JpdGVPSUQob2lkKTtcbiAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgICAvLyBwdWJsaWNLZXkgKG9wdGlvbmFsKVxuICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKDB4QTEpO1xuICAgICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoQmVyLkJpdFN0cmluZyk7XG4gICAgICAgIGFzbldyaXRlci53cml0ZUJ5dGUoMHgwMCk7XG4gICAgICAgIC8vIFhYWDogaGFjayB0byB3cml0ZSBhIHJhdyBidWZmZXIgd2l0aG91dCBhIHRhZyAtLSB5dWNrXG4gICAgICAgIGFzbldyaXRlci5fZW5zdXJlKHB1Yi5sZW5ndGgpO1xuICAgICAgICBwdWIuY29weShhc25Xcml0ZXIuX2J1ZiwgYXNuV3JpdGVyLl9vZmZzZXQsIDAsIHB1Yi5sZW5ndGgpO1xuICAgICAgICBhc25Xcml0ZXIuX29mZnNldCArPSBwdWIubGVuZ3RoO1xuICAgICAgICAvLyBlbmQgaGFja1xuICAgICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG4gIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICByZXR1cm4gbWFrZVBFTSgnRUMgUFJJVkFURScsIGFzbldyaXRlci5idWZmZXIpO1xufVxuXG5mdW5jdGlvbiBnZW5PcGVuU1NMRUNEU0FQdWJGcm9tUHJpdihjdXJ2ZU5hbWUsIHByaXYpIHtcbiAgdmFyIHRlbXBFQ0RIID0gY3J5cHRvLmNyZWF0ZUVDREgoY3VydmVOYW1lKTtcbiAgdGVtcEVDREguc2V0UHJpdmF0ZUtleShwcml2KTtcbiAgcmV0dXJuIHRlbXBFQ0RILmdldFB1YmxpY0tleSgpO1xufVxuXG52YXIgYmFzZUtleVNpZ24gPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2YgY3J5cHRvU2lnbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiBzaWduKGRhdGEpIHtcbiAgICAgIHZhciBwZW0gPSB0aGlzW1NZTV9QUklWX1BFTV07XG4gICAgICBpZiAocGVtID09PSBudWxsKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdObyBwcml2YXRlIGtleSBhdmFpbGFibGUnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjcnlwdG9TaWduKHRoaXNbU1lNX0hBU0hfQUxHT10sIGRhdGEsIHBlbSk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICByZXR1cm4gZXg7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBmdW5jdGlvbiB0cnlTaWduKHNpZ25hdHVyZSwgcHJpdktleSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS5zaWduKHByaXZLZXkpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcmV0dXJuIGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiBzaWduKGRhdGEpIHtcbiAgICAgIHZhciBwZW0gPSB0aGlzW1NZTV9QUklWX1BFTV07XG4gICAgICBpZiAocGVtID09PSBudWxsKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdObyBwcml2YXRlIGtleSBhdmFpbGFibGUnKTtcbiAgICAgIHZhciBzaWduYXR1cmUgPSBjcmVhdGVTaWduKHRoaXNbU1lNX0hBU0hfQUxHT10pO1xuICAgICAgc2lnbmF0dXJlLnVwZGF0ZShkYXRhKTtcbiAgICAgIHJldHVybiB0cnlTaWduKHNpZ25hdHVyZSwgcGVtKTtcbiAgICB9O1xuICB9XG59KSgpO1xuXG52YXIgYmFzZUtleVZlcmlmeSA9IChmdW5jdGlvbigpIHtcbiAgaWYgKHR5cGVvZiBjcnlwdG9WZXJpZnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KGRhdGEsIHNpZ25hdHVyZSkge1xuICAgICAgdmFyIHBlbSA9IHRoaXNbU1lNX1BVQl9QRU1dO1xuICAgICAgaWYgKHBlbSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTm8gcHVibGljIGtleSBhdmFpbGFibGUnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjcnlwdG9WZXJpZnkodGhpc1tTWU1fSEFTSF9BTEdPXSwgZGF0YSwgcGVtLCBzaWduYXR1cmUpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcmV0dXJuIGV4O1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZnVuY3Rpb24gdHJ5VmVyaWZ5KHZlcmlmaWVyLCBwdWJLZXksIHNpZ25hdHVyZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHZlcmlmaWVyLnZlcmlmeShwdWJLZXksIHNpZ25hdHVyZSk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICByZXR1cm4gZXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHZlcmlmeShkYXRhLCBzaWduYXR1cmUpIHtcbiAgICAgIHZhciBwZW0gPSB0aGlzW1NZTV9QVUJfUEVNXTtcbiAgICAgIGlmIChwZW0gPT09IG51bGwpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ05vIHB1YmxpYyBrZXkgYXZhaWxhYmxlJyk7XG4gICAgICB2YXIgdmVyaWZpZXIgPSBjcmVhdGVWZXJpZnkodGhpc1tTWU1fSEFTSF9BTEdPXSk7XG4gICAgICB2ZXJpZmllci51cGRhdGUoZGF0YSk7XG4gICAgICByZXR1cm4gdHJ5VmVyaWZ5KHZlcmlmaWVyLCBwZW0sIHNpZ25hdHVyZSk7XG4gICAgfTtcbiAgfVxufSkoKTtcblxudmFyIEJhc2VLZXkgPSB7XG4gIHNpZ246IGJhc2VLZXlTaWduLFxuICB2ZXJpZnk6IGJhc2VLZXlWZXJpZnksXG4gIGdldFByaXZhdGVQRU06IGZ1bmN0aW9uIGdldFByaXZhdGVQRU0oKSB7XG4gICAgcmV0dXJuIHRoaXNbU1lNX1BSSVZfUEVNXTtcbiAgfSxcbiAgZ2V0UHVibGljUEVNOiBmdW5jdGlvbiBnZXRQdWJsaWNQRU0oKSB7XG4gICAgcmV0dXJuIHRoaXNbU1lNX1BVQl9QRU1dO1xuICB9LFxuICBnZXRQdWJsaWNTU0g6IGZ1bmN0aW9uIGdldFB1YmxpY1NTSCgpIHtcbiAgICByZXR1cm4gdGhpc1tTWU1fUFVCX1NTSF07XG4gIH0sXG59O1xuXG5cblxuZnVuY3Rpb24gT3BlblNTSF9Qcml2YXRlKHR5cGUsIGNvbW1lbnQsIHByaXZQRU0sIHB1YlBFTSwgcHViU1NILCBhbGdvLCBkZWNyeXB0ZWQpIHtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5jb21tZW50ID0gY29tbWVudDtcbiAgdGhpc1tTWU1fUFJJVl9QRU1dID0gcHJpdlBFTTtcbiAgdGhpc1tTWU1fUFVCX1BFTV0gPSBwdWJQRU07XG4gIHRoaXNbU1lNX1BVQl9TU0hdID0gcHViU1NIO1xuICB0aGlzW1NZTV9IQVNIX0FMR09dID0gYWxnbztcbiAgdGhpc1tTWU1fREVDUllQVEVEXSA9IGRlY3J5cHRlZDtcbn1cbk9wZW5TU0hfUHJpdmF0ZS5wcm90b3R5cGUgPSBCYXNlS2V5O1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgcmVnZXhwID0gL14tLS0tLUJFR0lOIE9QRU5TU0ggUFJJVkFURSBLRVktLS0tLSg/OlxcclxcbnxcXG4pKFtcXHNcXFNdKykoPzpcXHJcXG58XFxuKS0tLS0tRU5EIE9QRU5TU0ggUFJJVkFURSBLRVktLS0tLSQvO1xuICBPcGVuU1NIX1ByaXZhdGUucGFyc2UgPSBmdW5jdGlvbihzdHIsIHBhc3NwaHJhc2UpIHtcbiAgICB2YXIgbSA9IHJlZ2V4cC5leGVjKHN0cik7XG4gICAgaWYgKG0gPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmV0O1xuICAgIHZhciBkYXRhID0gQnVmZmVyLmZyb20obVsxXSwgJ2Jhc2U2NCcpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA8IDMxKSAvLyBtYWdpYyAoKyBtYWdpYyBudWxsIHRlcm0uKSArIG1pbmltdW0gZmllbGQgbGVuZ3Roc1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICB2YXIgbWFnaWMgPSBkYXRhLnRvU3RyaW5nKCdhc2NpaScsIDAsIDE1KTtcbiAgICBpZiAobWFnaWMgIT09ICdvcGVuc3NoLWtleS12MVxcMCcpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBPcGVuU1NIIGtleSBtYWdpYzogJyArIG1hZ2ljKTtcblxuICAgIC8vIGF2b2lkIGN5Y2xpYyByZXF1aXJlIGJ5IHJlcXVpcmluZyBvbiBmaXJzdCB1c2VcbiAgICBpZiAoIXV0aWxzKVxuICAgICAgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbiAgICB2YXIgY2lwaGVyTmFtZSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgMTUsICdhc2NpaScpO1xuICAgIGlmIChjaXBoZXJOYW1lID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgaWYgKGNpcGhlck5hbWUgIT09ICdub25lJyAmJiBTVVBQT1JURURfQ0lQSEVSLmluZGV4T2YoY2lwaGVyTmFtZSkgPT09IC0xKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY2lwaGVyIGZvciBPcGVuU1NIIGtleTogJyArIGNpcGhlck5hbWUpO1xuXG4gICAgdmFyIGtkZk5hbWUgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3BvcywgJ2FzY2lpJyk7XG4gICAgaWYgKGtkZk5hbWUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICBpZiAoa2RmTmFtZSAhPT0gJ25vbmUnKSB7XG4gICAgICBpZiAoY2lwaGVyTmFtZSA9PT0gJ25vbmUnKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgaWYgKGtkZk5hbWUgIT09ICdiY3J5cHQnKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBrZGYgbmFtZSBmb3IgT3BlblNTSCBrZXk6ICcgKyBrZGZOYW1lKTtcbiAgICAgIGlmICghcGFzc3BocmFzZSkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAgICdFbmNyeXB0ZWQgcHJpdmF0ZSBPcGVuU1NIIGtleSBkZXRlY3RlZCwgYnV0IG5vIHBhc3NwaHJhc2UgZ2l2ZW4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaXBoZXJOYW1lICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuXG4gICAgdmFyIGVuY0luZm87XG4gICAgdmFyIGNpcGhlcktleTtcbiAgICB2YXIgY2lwaGVySVY7XG4gICAgaWYgKGNpcGhlck5hbWUgIT09ICdub25lJylcbiAgICAgIGVuY0luZm8gPSBDSVBIRVJfSU5GT1tjaXBoZXJOYW1lXTtcbiAgICB2YXIga2RmT3B0aW9ucyA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICBpZiAoa2RmT3B0aW9ucyA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgIGlmIChrZGZPcHRpb25zLmxlbmd0aCkge1xuICAgICAgc3dpdGNoIChrZGZOYW1lKSB7XG4gICAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgIGNhc2UgJ2JjcnlwdCc6XG4gICAgICAgICAgLypcbiAgICAgICAgICAgIHN0cmluZyBzYWx0XG4gICAgICAgICAgICB1aW50MzIgcm91bmRzXG4gICAgICAgICAgKi9cbiAgICAgICAgICB2YXIgc2FsdCA9IHV0aWxzLnJlYWRTdHJpbmcoa2RmT3B0aW9ucywgMCk7XG4gICAgICAgICAgaWYgKHNhbHQgPT09IGZhbHNlIHx8IGtkZk9wdGlvbnMuX3BvcyArIDQgPiBrZGZPcHRpb25zLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgdmFyIHJvdW5kcyA9IHJlYWRVSW50MzJCRShrZGZPcHRpb25zLCBrZGZPcHRpb25zLl9wb3MpO1xuICAgICAgICAgIHZhciBnZW4gPSBCdWZmZXIuYWxsb2NVbnNhZmUoZW5jSW5mby5rZXlMZW4gKyBlbmNJbmZvLml2TGVuKTtcbiAgICAgICAgICB2YXIgciA9IGJjcnlwdF9wYmtkZihwYXNzcGhyYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsdC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRzKTtcbiAgICAgICAgICBpZiAociAhPT0gMClcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBpbmZvcm1hdGlvbiB0byBkZWNyeXB0IGtleScpO1xuICAgICAgICAgIGNpcGhlcktleSA9IGdlbi5zbGljZSgwLCBlbmNJbmZvLmtleUxlbik7XG4gICAgICAgICAgY2lwaGVySVYgPSBnZW4uc2xpY2UoZW5jSW5mby5rZXlMZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2RmTmFtZSAhPT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgIH1cblxuICAgIHZhciBrZXlDb3VudCA9IHV0aWxzLnJlYWRJbnQoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICBpZiAoa2V5Q291bnQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICBkYXRhLl9wb3MgKz0gNDtcblxuICAgIGlmIChrZXlDb3VudCA+IDApIHtcbiAgICAgIC8vIFRPRE86IHBsYWNlIHNlbnNpYmxlIGxpbWl0IG9uIG1heCBga2V5Q291bnRgXG5cbiAgICAgIC8vIFJlYWQgcHVibGljIGtleXMgZmlyc3RcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Q291bnQ7ICsraSkge1xuICAgICAgICB2YXIgcHViRGF0YSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgaWYgKHB1YkRhdGEgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgIHZhciB0eXBlID0gdXRpbHMucmVhZFN0cmluZyhwdWJEYXRhLCAwLCAnYXNjaWknKTtcbiAgICAgICAgaWYgKHR5cGUgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcml2QmxvYiA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgIGlmIChwcml2QmxvYiA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG5cbiAgICAgIGlmIChjaXBoZXJLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXkocylcbiAgICAgICAgaWYgKHByaXZCbG9iLmxlbmd0aCA8IGVuY0luZm8uYmxvY2tMZW5cbiAgICAgICAgICAgIHx8IChwcml2QmxvYi5sZW5ndGggJSBlbmNJbmZvLmJsb2NrTGVuKSAhPT0gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgb3B0aW9ucyA9IHsgYXV0aFRhZ0xlbmd0aDogZW5jSW5mby5hdXRoTGVuIH07XG4gICAgICAgICAgdmFyIGRlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJpdihTU0hfVE9fT1BFTlNTTFtjaXBoZXJOYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcklWLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyk7XG4gICAgICAgICAgaWYgKGVuY0luZm8uYXV0aExlbiA+IDApIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCAtIGRhdGEuX3BvcyA8IGVuY0luZm8uYXV0aExlbilcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICAgIGRlY2lwaGVyLnNldEF1dGhUYWcoXG4gICAgICAgICAgICAgIGRhdGEuc2xpY2UoZGF0YS5fcG9zLCBkYXRhLl9wb3MgKz0gZW5jSW5mby5hdXRoTGVuKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpdkJsb2IgPSBjb21iaW5lQnVmZmVycyhkZWNpcGhlci51cGRhdGUocHJpdkJsb2IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXBoZXIuZmluYWwoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBOb3RoaW5nIHNob3VsZCB3ZSBmb2xsb3cgdGhlIHByaXZhdGUga2V5KHMpLCBleGNlcHQgYSBwb3NzaWJsZVxuICAgICAgLy8gYXV0aGVudGljYXRpb24gdGFnIGZvciByZWxldmFudCBjaXBoZXJzXG4gICAgICBpZiAoZGF0YS5fcG9zICE9PSBkYXRhLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcblxuICAgICAgcmV0ID0gcGFyc2VPcGVuU1NIUHJpdktleXMocHJpdkJsb2IsIGtleUNvdW50LCBjaXBoZXJLZXkgIT09IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldCA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHBhcnNlT3BlblNTSFByaXZLZXlzKGRhdGEsIG5rZXlzLCBkZWNyeXB0ZWQpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIC8qXG4gICAgICB1aW50MzJcdGNoZWNraW50XG4gICAgICB1aW50MzJcdGNoZWNraW50XG4gICAgICBzdHJpbmdcdHByaXZhdGVrZXkxXG4gICAgICBzdHJpbmdcdGNvbW1lbnQxXG4gICAgICBzdHJpbmdcdHByaXZhdGVrZXkyXG4gICAgICBzdHJpbmdcdGNvbW1lbnQyXG4gICAgICAuLi5cbiAgICAgIHN0cmluZ1x0cHJpdmF0ZWtleU5cbiAgICAgIHN0cmluZ1x0Y29tbWVudE5cbiAgICAgIGNoYXJcdDFcbiAgICAgIGNoYXJcdDJcbiAgICAgIGNoYXJcdDNcbiAgICAgIC4uLlxuICAgICAgY2hhclx0cGFkbGVuICUgMjU1XG4gICAgKi9cbiAgICBpZiAoZGF0YS5sZW5ndGggPCA4KVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICB2YXIgY2hlY2sxID0gcmVhZFVJbnQzMkJFKGRhdGEsIDApO1xuICAgIHZhciBjaGVjazIgPSByZWFkVUludDMyQkUoZGF0YSwgNCk7XG4gICAgaWYgKGNoZWNrMSAhPT0gY2hlY2syKSB7XG4gICAgICBpZiAoZGVjcnlwdGVkKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdPcGVuU1NIIGtleSBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkIC0tIGJhZCBwYXNzcGhyYXNlPycpO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignT3BlblNTSCBrZXkgaW50ZWdyaXR5IGNoZWNrIGZhaWxlZCcpO1xuICAgIH1cbiAgICBkYXRhLl9wb3MgPSA4O1xuICAgIHZhciBpO1xuICAgIHZhciBvaWQ7XG4gICAgZm9yIChpID0gMDsgaSA8IG5rZXlzOyArK2kpIHtcbiAgICAgIHZhciBhbGdvID0gdW5kZWZpbmVkO1xuICAgICAgdmFyIHByaXZQRU0gPSB1bmRlZmluZWQ7XG4gICAgICB2YXIgcHViUEVNID0gdW5kZWZpbmVkO1xuICAgICAgdmFyIHB1YlNTSCA9IHVuZGVmaW5lZDtcbiAgICAgIC8vIFRoZSBPcGVuU1NIIGRvY3VtZW50YXRpb24gZm9yIHRoZSBrZXkgZm9ybWF0IGFjdHVhbGx5IGxpZXMsIHRoZSBlbnRpcmV0eVxuICAgICAgLy8gb2YgdGhlIHByaXZhdGUga2V5IGNvbnRlbnQgaXMgbm90IGNvbnRhaW5lZCB3aXRoIGEgc3RyaW5nIGZpZWxkLCBpdCdzXG4gICAgICAvLyBhY3R1YWxseSB0aGUgbGl0ZXJhbCBjb250ZW50cyBvZiB0aGUgcHJpdmF0ZSBrZXksIHNvIHRvIGJlIGFibGUgdG8gZmluZFxuICAgICAgLy8gdGhlIGVuZCBvZiB0aGUga2V5IGRhdGEgeW91IG5lZWQgdG8ga25vdyB0aGUgbGF5b3V0L2Zvcm1hdCBvZiBlYWNoIGtleVxuICAgICAgLy8gdHlwZSAuLi5cbiAgICAgIHZhciB0eXBlID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MsICdhc2NpaScpO1xuICAgICAgaWYgKHR5cGUgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3NoLXJzYSc6XG4gICAgICAgICAgLypcbiAgICAgICAgICAgIHN0cmluZyAgbiAtLSBwdWJsaWNcbiAgICAgICAgICAgIHN0cmluZyAgZSAtLSBwdWJsaWNcbiAgICAgICAgICAgIHN0cmluZyAgZCAtLSBwcml2YXRlXG4gICAgICAgICAgICBzdHJpbmcgIGlxbXAgLS0gcHJpdmF0ZVxuICAgICAgICAgICAgc3RyaW5nICBwIC0tIHByaXZhdGVcbiAgICAgICAgICAgIHN0cmluZyAgcSAtLSBwcml2YXRlXG4gICAgICAgICAgKi9cbiAgICAgICAgICB2YXIgbiA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgICBpZiAobiA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgICAgIHZhciBlID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmIChlID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgdmFyIGQgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgICAgaWYgKGQgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICB2YXIgaXFtcCA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgICBpZiAoaXFtcCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgICAgIHZhciBwID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmIChwID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgdmFyIHEgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgICAgaWYgKHEgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcblxuICAgICAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xSU0FQdWIobiwgZSk7XG4gICAgICAgICAgcHViU1NIID0gZ2VuT3BlblNTSFJTQVB1YihuLCBlKTtcbiAgICAgICAgICBwcml2UEVNID0gZ2VuT3BlblNTTFJTQVByaXYobiwgZSwgZCwgaXFtcCwgcCwgcSk7XG4gICAgICAgICAgYWxnbyA9ICdzaGExJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3NoLWRzcyc6XG4gICAgICAgICAgLypcbiAgICAgICAgICAgIHN0cmluZyAgcCAtLSBwdWJsaWNcbiAgICAgICAgICAgIHN0cmluZyAgcSAtLSBwdWJsaWNcbiAgICAgICAgICAgIHN0cmluZyAgZyAtLSBwdWJsaWNcbiAgICAgICAgICAgIHN0cmluZyAgeSAtLSBwdWJsaWNcbiAgICAgICAgICAgIHN0cmluZyAgeCAtLSBwcml2YXRlXG4gICAgICAgICAgKi9cbiAgICAgICAgICB2YXIgcCA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgICBpZiAocCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgICAgIHZhciBxID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmIChxID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgdmFyIGcgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgICAgaWYgKGcgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICB2YXIgeSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgICBpZiAoeSA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgICAgIHZhciB4ID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmICh4ID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG5cbiAgICAgICAgICBwdWJQRU0gPSBnZW5PcGVuU1NMRFNBUHViKHAsIHEsIGcsIHkpO1xuICAgICAgICAgIHB1YlNTSCA9IGdlbk9wZW5TU0hEU0FQdWIocCwgcSwgZywgeSk7XG4gICAgICAgICAgcHJpdlBFTSA9IGdlbk9wZW5TU0xEU0FQcml2KHAsIHEsIGcsIHksIHgpO1xuICAgICAgICAgIGFsZ28gPSAnc2hhMSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NzaC1lZDI1NTE5JzpcbiAgICAgICAgICBpZiAoIUVERFNBX1NVUFBPUlRFRClcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIE9wZW5TU0ggcHJpdmF0ZSBrZXkgdHlwZTogJyArIHR5cGUpO1xuICAgICAgICAgIC8qXG4gICAgICAgICAgICAqIHN0cmluZyAgcHVibGljIGtleVxuICAgICAgICAgICAgKiBzdHJpbmcgIHByaXZhdGUga2V5ICsgcHVibGljIGtleVxuICAgICAgICAgICovXG4gICAgICAgICAgdmFyIGVkcHViID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmIChlZHB1YiA9PT0gZmFsc2UgfHwgZWRwdWIubGVuZ3RoICE9PSAzMilcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgdmFyIGVkcHJpdiA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgICBpZiAoZWRwcml2ID09PSBmYWxzZSB8fCBlZHByaXYubGVuZ3RoICE9PSA2NClcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHByaXZhdGUga2V5Jyk7XG5cbiAgICAgICAgICBwdWJQRU0gPSBnZW5PcGVuU1NMRWRQdWIoZWRwdWIpO1xuICAgICAgICAgIHB1YlNTSCA9IGdlbk9wZW5TU0hFZFB1YihlZHB1Yik7XG4gICAgICAgICAgcHJpdlBFTSA9IGdlbk9wZW5TU0xFZFByaXYoZWRwcml2LnNsaWNlKDAsIDMyKSk7XG4gICAgICAgICAgYWxnbyA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHAyNTYnOlxuICAgICAgICAgIGFsZ28gPSAnc2hhMjU2JztcbiAgICAgICAgICBvaWQgPSAnMS4yLjg0MC4xMDA0NS4zLjEuNyc7XG4gICAgICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHAzODQnOlxuICAgICAgICAgIGlmIChhbGdvID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFsZ28gPSAnc2hhMzg0JztcbiAgICAgICAgICAgIG9pZCA9ICcxLjMuMTMyLjAuMzQnO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDUyMSc6XG4gICAgICAgICAgaWYgKGFsZ28gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWxnbyA9ICdzaGE1MTInO1xuICAgICAgICAgICAgb2lkID0gJzEuMy4xMzIuMC4zNSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qXG4gICAgICAgICAgICBzdHJpbmcgIGN1cnZlIG5hbWVcbiAgICAgICAgICAgIHN0cmluZyAgUSAtLSBwdWJsaWNcbiAgICAgICAgICAgIHN0cmluZyAgZCAtLSBwcml2YXRlXG4gICAgICAgICAgKi9cbiAgICAgICAgICAvLyBUT0RPOiB2YWxpZGF0ZSBjdXJ2ZSBuYW1lIGFnYWluc3QgdHlwZVxuICAgICAgICAgIGlmICghc2tpcEZpZWxkcyhkYXRhLCAxKSkgLy8gU2tpcCBjdXJ2ZSBuYW1lXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgICAgIHZhciBlY3B1YiA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgICBpZiAoZWNwdWIgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICB2YXIgZWNwcml2ID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICAgIGlmIChlY3ByaXYgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknKTtcblxuICAgICAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xFQ0RTQVB1YihvaWQsIGVjcHViKTtcbiAgICAgICAgICBwdWJTU0ggPSBnZW5PcGVuU1NIRUNEU0FQdWIob2lkLCBlY3B1Yik7XG4gICAgICAgICAgcHJpdlBFTSA9IGdlbk9wZW5TU0xFQ0RTQVByaXYob2lkLCBlY3B1YiwgZWNwcml2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBPcGVuU1NIIHByaXZhdGUga2V5IHR5cGU6ICcgKyB0eXBlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByaXZDb21tZW50ID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MsICd1dGY4Jyk7XG4gICAgICBpZiAocHJpdkNvbW1lbnQgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuXG4gICAgICBrZXlzLnB1c2goXG4gICAgICAgIG5ldyBPcGVuU1NIX1ByaXZhdGUodHlwZSwgcHJpdkNvbW1lbnQsIHByaXZQRU0sIHB1YlBFTSwgcHViU1NILCBhbGdvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY3J5cHRlZClcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciBjbnQgPSAwO1xuICAgIGZvciAoaSA9IGRhdGEuX3BvczsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChkYXRhW2ldICE9PSAoKytjbnQgJSAyNTUpKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgIH1cblxuICAgIHJldHVybiBrZXlzO1xuICB9XG59KSgpO1xuXG5cblxuZnVuY3Rpb24gT3BlblNTSF9PbGRfUHJpdmF0ZSh0eXBlLCBjb21tZW50LCBwcml2UEVNLCBwdWJQRU0sIHB1YlNTSCwgYWxnbywgZGVjcnlwdGVkKSB7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7XG4gIHRoaXNbU1lNX1BSSVZfUEVNXSA9IHByaXZQRU07XG4gIHRoaXNbU1lNX1BVQl9QRU1dID0gcHViUEVNO1xuICB0aGlzW1NZTV9QVUJfU1NIXSA9IHB1YlNTSDtcbiAgdGhpc1tTWU1fSEFTSF9BTEdPXSA9IGFsZ287XG4gIHRoaXNbU1lNX0RFQ1JZUFRFRF0gPSBkZWNyeXB0ZWQ7XG59XG5PcGVuU1NIX09sZF9Qcml2YXRlLnByb3RvdHlwZSA9IEJhc2VLZXk7XG4oZnVuY3Rpb24oKSB7XG4gIHZhciByZWdleHAgPSAvXi0tLS0tQkVHSU4gKFJTQXxEU0F8RUMpIFBSSVZBVEUgS0VZLS0tLS0oPzpcXHJcXG58XFxuKSgoPzpbXjpdKzpcXHMqW1xcU10uKig/OlxcclxcbnxcXG4pKSopKFtcXHNcXFNdKykoPzpcXHJcXG58XFxuKS0tLS0tRU5EIChSU0F8RFNBfEVDKSBQUklWQVRFIEtFWS0tLS0tJC87XG4gIE9wZW5TU0hfT2xkX1ByaXZhdGUucGFyc2UgPSBmdW5jdGlvbihzdHIsIHBhc3NwaHJhc2UpIHtcbiAgICB2YXIgbSA9IHJlZ2V4cC5leGVjKHN0cik7XG4gICAgaWYgKG0gPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgcHJpdkJsb2IgPSBCdWZmZXIuZnJvbShtWzNdLCAnYmFzZTY0Jyk7XG4gICAgdmFyIGhlYWRlcnMgPSBtWzJdO1xuICAgIHZhciBkZWNyeXB0ZWQgPSBmYWxzZTtcbiAgICBpZiAoaGVhZGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBlbmNyeXB0ZWQga2V5XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zcGxpdCgvXFxyXFxufFxcbi9nKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgaGVhZGVyID0gaGVhZGVyc1tpXTtcbiAgICAgICAgdmFyIHNlcElkeCA9IGhlYWRlci5pbmRleE9mKCc6Jyk7XG4gICAgICAgIGlmIChoZWFkZXIuc2xpY2UoMCwgc2VwSWR4KSA9PT0gJ0RFSy1JbmZvJykge1xuICAgICAgICAgIHZhciB2YWwgPSBoZWFkZXIuc2xpY2Uoc2VwSWR4ICsgMik7XG4gICAgICAgICAgc2VwSWR4ID0gdmFsLmluZGV4T2YoJywnKTtcbiAgICAgICAgICBpZiAoc2VwSWR4ID09PSAtMSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIHZhciBjaXBoZXJOYW1lID0gdmFsLnNsaWNlKDAsIHNlcElkeCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoc3VwcG9ydGVkT3BlblNTTENpcGhlcnMuaW5kZXhPZihjaXBoZXJOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdDaXBoZXIgKCdcbiAgICAgICAgICAgICAgKyBjaXBoZXJOYW1lXG4gICAgICAgICAgICAgICsgJykgbm90IHN1cHBvcnRlZCBmb3IgZW5jcnlwdGVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgZW5jSW5mbyA9IENJUEhFUl9JTkZPX09QRU5TU0xbY2lwaGVyTmFtZV07XG4gICAgICAgICAgaWYgKCFlbmNJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnQ2lwaGVyICgnXG4gICAgICAgICAgICAgICsgY2lwaGVyTmFtZVxuICAgICAgICAgICAgICArICcpIG5vdCBzdXBwb3J0ZWQgZm9yIGVuY3J5cHRlZCBPcGVuU1NIIHByaXZhdGUga2V5J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGNpcGhlcklWID0gQnVmZmVyLmZyb20odmFsLnNsaWNlKHNlcElkeCArIDEpLCAnaGV4Jyk7XG4gICAgICAgICAgaWYgKGNpcGhlcklWLmxlbmd0aCAhPT0gZW5jSW5mby5pdkxlbilcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBlbmNyeXB0ZWQgT3BlblNTSCBwcml2YXRlIGtleScpO1xuICAgICAgICAgIGlmICghcGFzc3BocmFzZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0VuY3J5cHRlZCBPcGVuU1NIIHByaXZhdGUga2V5IGRldGVjdGVkLCBidXQgbm8gcGFzc3BocmFzZSBnaXZlbidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBpdlNsaWNlID0gY2lwaGVySVYuc2xpY2UoMCwgOCk7XG4gICAgICAgICAgdmFyIGNpcGhlcktleSA9IGNyZWF0ZUhhc2goJ21kNScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShwYXNzcGhyYXNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoaXZTbGljZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgICAgd2hpbGUgKGNpcGhlcktleS5sZW5ndGggPCBlbmNJbmZvLmtleUxlbikge1xuICAgICAgICAgICAgY2lwaGVyS2V5ID0gY29tYmluZUJ1ZmZlcnMoXG4gICAgICAgICAgICAgIGNpcGhlcktleSxcbiAgICAgICAgICAgICAgY3JlYXRlSGFzaCgnbWQ1JylcbiAgICAgICAgICAgICAgICAudXBkYXRlKGNpcGhlcktleSlcbiAgICAgICAgICAgICAgICAudXBkYXRlKHBhc3NwaHJhc2UpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShpdlNsaWNlKVxuICAgICAgICAgICAgICAgIC5kaWdlc3QoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNpcGhlcktleS5sZW5ndGggPiBlbmNJbmZvLmtleUxlbilcbiAgICAgICAgICAgIGNpcGhlcktleSA9IGNpcGhlcktleS5zbGljZSgwLCBlbmNJbmZvLmtleUxlbik7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBkZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyaXYoY2lwaGVyTmFtZSwgY2lwaGVyS2V5LCBjaXBoZXJJVik7XG4gICAgICAgICAgICBkZWNpcGhlci5zZXRBdXRvUGFkZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBwcml2QmxvYiA9IGNvbWJpbmVCdWZmZXJzKGRlY2lwaGVyLnVwZGF0ZShwcml2QmxvYiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lwaGVyLmZpbmFsKCkpO1xuICAgICAgICAgICAgZGVjcnlwdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0eXBlO1xuICAgIHZhciBwcml2UEVNO1xuICAgIHZhciBwdWJQRU07XG4gICAgdmFyIHB1YlNTSDtcbiAgICB2YXIgYWxnbztcbiAgICB2YXIgcmVhZGVyO1xuICAgIHZhciBlcnJNc2cgPSAnTWFsZm9ybWVkIE9wZW5TU0ggcHJpdmF0ZSBrZXknO1xuICAgIGlmIChkZWNyeXB0ZWQpXG4gICAgICBlcnJNc2cgKz0gJy4gQmFkIHBhc3NwaHJhc2U/JztcbiAgICBzd2l0Y2ggKG1bMV0pIHtcbiAgICAgIGNhc2UgJ1JTQSc6XG4gICAgICAgIHR5cGUgPSAnc3NoLXJzYSc7XG4gICAgICAgIHByaXZQRU0gPSBtYWtlUEVNKCdSU0EgUFJJVkFURScsIHByaXZCbG9iKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZWFkZXIgPSBuZXcgQmVyLlJlYWRlcihwcml2QmxvYik7XG4gICAgICAgICAgcmVhZGVyLnJlYWRTZXF1ZW5jZSgpO1xuICAgICAgICAgIHJlYWRlci5yZWFkSW50KCk7IC8vIHNraXAgdmVyc2lvblxuICAgICAgICAgIHZhciBuID0gcmVhZGVyLnJlYWRTdHJpbmcoQmVyLkludGVnZXIsIHRydWUpO1xuICAgICAgICAgIGlmIChuID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgIHZhciBlID0gcmVhZGVyLnJlYWRTdHJpbmcoQmVyLkludGVnZXIsIHRydWUpO1xuICAgICAgICAgIGlmIChlID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xSU0FQdWIobiwgZSk7XG4gICAgICAgICAgcHViU1NIID0gZ2VuT3BlblNTSFJTQVB1YihuLCBlKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgYWxnbyA9ICdzaGExJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdEU0EnOlxuICAgICAgICB0eXBlID0gJ3NzaC1kc3MnO1xuICAgICAgICBwcml2UEVNID0gbWFrZVBFTSgnRFNBIFBSSVZBVEUnLCBwcml2QmxvYik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVhZGVyID0gbmV3IEJlci5SZWFkZXIocHJpdkJsb2IpO1xuICAgICAgICAgIHJlYWRlci5yZWFkU2VxdWVuY2UoKTtcbiAgICAgICAgICByZWFkZXIucmVhZEludCgpOyAvLyBza2lwIHZlcnNpb25cbiAgICAgICAgICB2YXIgcCA9IHJlYWRlci5yZWFkU3RyaW5nKEJlci5JbnRlZ2VyLCB0cnVlKTtcbiAgICAgICAgICBpZiAocCA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICB2YXIgcSA9IHJlYWRlci5yZWFkU3RyaW5nKEJlci5JbnRlZ2VyLCB0cnVlKTtcbiAgICAgICAgICBpZiAocSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICB2YXIgZyA9IHJlYWRlci5yZWFkU3RyaW5nKEJlci5JbnRlZ2VyLCB0cnVlKTtcbiAgICAgICAgICBpZiAoZyA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICB2YXIgeSA9IHJlYWRlci5yZWFkU3RyaW5nKEJlci5JbnRlZ2VyLCB0cnVlKTtcbiAgICAgICAgICBpZiAoeSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICBwdWJQRU0gPSBnZW5PcGVuU1NMRFNBUHViKHAsIHEsIGcsIHkpO1xuICAgICAgICAgIHB1YlNTSCA9IGdlbk9wZW5TU0hEU0FQdWIocCwgcSwgZywgeSk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICB9XG4gICAgICAgIGFsZ28gPSAnc2hhMSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRUMnOlxuICAgICAgICB2YXIgZWNTU0xOYW1lO1xuICAgICAgICB2YXIgZWNQcml2O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlYWRlciA9IG5ldyBCZXIuUmVhZGVyKHByaXZCbG9iKTtcbiAgICAgICAgICByZWFkZXIucmVhZFNlcXVlbmNlKCk7XG4gICAgICAgICAgcmVhZGVyLnJlYWRJbnQoKTsgLy8gc2tpcCB2ZXJzaW9uXG4gICAgICAgICAgZWNQcml2ID0gcmVhZGVyLnJlYWRTdHJpbmcoQmVyLk9jdGV0U3RyaW5nLCB0cnVlKTtcbiAgICAgICAgICByZWFkZXIucmVhZEJ5dGUoKTsgLy8gU2tpcCBcImNvbXBsZXhcIiBjb250ZXh0IHR5cGUgYnl0ZVxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZExlbmd0aCgpOyAvLyBTa2lwIGNvbnRleHQgbGVuZ3RoXG4gICAgICAgICAgaWYgKG9mZnNldCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVhZGVyLl9vZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgICAgICB2YXIgb2lkID0gcmVhZGVyLnJlYWRPSUQoKTtcbiAgICAgICAgICAgIGlmIChvaWQgPT09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgIHN3aXRjaCAob2lkKSB7XG4gICAgICAgICAgICAgIGNhc2UgJzEuMi44NDAuMTAwNDUuMy4xLjcnOlxuICAgICAgICAgICAgICAgIC8vIHByaW1lMjU2djEvc2VjcDI1NnIxXG4gICAgICAgICAgICAgICAgZWNTU0xOYW1lID0gJ3ByaW1lMjU2djEnO1xuICAgICAgICAgICAgICAgIHR5cGUgPSAnZWNkc2Etc2hhMi1uaXN0cDI1Nic7XG4gICAgICAgICAgICAgICAgYWxnbyA9ICdzaGEyNTYnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICcxLjMuMTMyLjAuMzQnOlxuICAgICAgICAgICAgICAgIC8vIHNlY3AzODRyMVxuICAgICAgICAgICAgICAgIGVjU1NMTmFtZSA9ICdzZWNwMzg0cjEnO1xuICAgICAgICAgICAgICAgIHR5cGUgPSAnZWNkc2Etc2hhMi1uaXN0cDM4NCc7XG4gICAgICAgICAgICAgICAgYWxnbyA9ICdzaGEzODQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICcxLjMuMTMyLjAuMzUnOlxuICAgICAgICAgICAgICAgIC8vIHNlY3A1MjFyMVxuICAgICAgICAgICAgICAgIGVjU1NMTmFtZSA9ICdzZWNwNTIxcjEnO1xuICAgICAgICAgICAgICAgIHR5cGUgPSAnZWNkc2Etc2hhMi1uaXN0cDUyMSc7XG4gICAgICAgICAgICAgICAgYWxnbyA9ICdzaGE1MTInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5IEVDIE9JRDogJyArIG9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICB9XG4gICAgICAgIHByaXZQRU0gPSBtYWtlUEVNKCdFQyBQUklWQVRFJywgcHJpdkJsb2IpO1xuICAgICAgICB2YXIgcHViQmxvYiA9IGdlbk9wZW5TU0xFQ0RTQVB1YkZyb21Qcml2KGVjU1NMTmFtZSwgZWNQcml2KTtcbiAgICAgICAgcHViUEVNID0gZ2VuT3BlblNTTEVDRFNBUHViKG9pZCwgcHViQmxvYik7XG4gICAgICAgIHB1YlNTSCA9IGdlbk9wZW5TU0hFQ0RTQVB1YihvaWQsIHB1YkJsb2IpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9wZW5TU0hfT2xkX1ByaXZhdGUodHlwZSwgJycsIHByaXZQRU0sIHB1YlBFTSwgcHViU1NILCBhbGdvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0ZWQpO1xuICB9O1xufSkoKTtcblxuXG5cbmZ1bmN0aW9uIFBQS19Qcml2YXRlKHR5cGUsIGNvbW1lbnQsIHByaXZQRU0sIHB1YlBFTSwgcHViU1NILCBhbGdvLCBkZWNyeXB0ZWQpIHtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5jb21tZW50ID0gY29tbWVudDtcbiAgdGhpc1tTWU1fUFJJVl9QRU1dID0gcHJpdlBFTTtcbiAgdGhpc1tTWU1fUFVCX1BFTV0gPSBwdWJQRU07XG4gIHRoaXNbU1lNX1BVQl9TU0hdID0gcHViU1NIO1xuICB0aGlzW1NZTV9IQVNIX0FMR09dID0gYWxnbztcbiAgdGhpc1tTWU1fREVDUllQVEVEXSA9IGRlY3J5cHRlZDtcbn1cblBQS19Qcml2YXRlLnByb3RvdHlwZSA9IEJhc2VLZXk7XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBFTVBUWV9QQVNTUEhSQVNFID0gQnVmZmVyLmFsbG9jKDApO1xuICB2YXIgUFBLX0lWID0gQnVmZmVyLmZyb20oWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdKTtcbiAgdmFyIFBQS19QUDEgPSBCdWZmZXIuZnJvbShbMCwgMCwgMCwgMF0pO1xuICB2YXIgUFBLX1BQMiA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAxXSk7XG4gIHZhciByZWdleHAgPSAvXlB1VFRZLVVzZXItS2V5LUZpbGUtMjogKHNzaC0oPzpyc2F8ZHNzKSlcXHI/XFxuRW5jcnlwdGlvbjogKGFlczI1Ni1jYmN8bm9uZSlcXHI/XFxuQ29tbWVudDogKFteXFxyXFxuXSopXFxyP1xcblB1YmxpYy1MaW5lczogXFxkK1xccj9cXG4oW1xcc1xcU10rPylcXHI/XFxuUHJpdmF0ZS1MaW5lczogXFxkK1xccj9cXG4oW1xcc1xcU10rPylcXHI/XFxuUHJpdmF0ZS1NQUM6IChbXlxcclxcbl0rKS87XG4gIFBQS19Qcml2YXRlLnBhcnNlID0gZnVuY3Rpb24oc3RyLCBwYXNzcGhyYXNlKSB7XG4gICAgdmFyIG0gPSByZWdleHAuZXhlYyhzdHIpO1xuICAgIGlmIChtID09PSBudWxsKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gbVsxXSA9IGtleSB0eXBlXG4gICAgLy8gbVsyXSA9IGVuY3J5cHRpb24gdHlwZVxuICAgIC8vIG1bM10gPSBjb21tZW50XG4gICAgLy8gbVs0XSA9IGJhc2U2NC1lbmNvZGVkIHB1YmxpYyBrZXkgZGF0YTpcbiAgICAvLyAgICAgICAgIGZvciBcInNzaC1yc2FcIjpcbiAgICAvLyAgICAgICAgICBzdHJpbmcgXCJzc2gtcnNhXCJcbiAgICAvLyAgICAgICAgICBtcGludCAgZSAgICAocHVibGljIGV4cG9uZW50KVxuICAgIC8vICAgICAgICAgIG1waW50ICBuICAgIChtb2R1bHVzKVxuICAgIC8vICAgICAgICAgZm9yIFwic3NoLWRzc1wiOlxuICAgIC8vICAgICAgICAgIHN0cmluZyBcInNzaC1kc3NcIlxuICAgIC8vICAgICAgICAgIG1waW50IHAgICAgIChtb2R1bHVzKVxuICAgIC8vICAgICAgICAgIG1waW50IHEgICAgIChwcmltZSlcbiAgICAvLyAgICAgICAgICBtcGludCBnICAgICAoYmFzZSBudW1iZXIpXG4gICAgLy8gICAgICAgICAgbXBpbnQgeSAgICAgKHB1YmxpYyBrZXkgcGFyYW1ldGVyOiBnXnggbW9kIHApXG4gICAgLy8gbVs1XSA9IGJhc2U2NC1lbmNvZGVkIHByaXZhdGUga2V5IGRhdGE6XG4gICAgLy8gICAgICAgICBmb3IgXCJzc2gtcnNhXCI6XG4gICAgLy8gICAgICAgICAgbXBpbnQgIGQgICAgKHByaXZhdGUgZXhwb25lbnQpXG4gICAgLy8gICAgICAgICAgbXBpbnQgIHAgICAgKHByaW1lIDEpXG4gICAgLy8gICAgICAgICAgbXBpbnQgIHEgICAgKHByaW1lIDIpXG4gICAgLy8gICAgICAgICAgbXBpbnQgIGlxbXAgKFtpbnZlcnNlIG9mIHFdIG1vZCBwKVxuICAgIC8vICAgICAgICAgZm9yIFwic3NoLWRzc1wiOlxuICAgIC8vICAgICAgICAgIG1waW50IHggICAgIChwcml2YXRlIGtleSBwYXJhbWV0ZXIpXG4gICAgLy8gbVs2XSA9IFNIQTEgSE1BQyBvdmVyOlxuICAgIC8vICAgICAgICAgIHN0cmluZyAgbmFtZSBvZiBhbGdvcml0aG0gKFwic3NoLWRzc1wiLCBcInNzaC1yc2FcIilcbiAgICAvLyAgICAgICAgICBzdHJpbmcgIGVuY3J5cHRpb24gdHlwZVxuICAgIC8vICAgICAgICAgIHN0cmluZyAgY29tbWVudFxuICAgIC8vICAgICAgICAgIHN0cmluZyAgcHVibGljIGtleSBkYXRhXG4gICAgLy8gICAgICAgICAgc3RyaW5nICBwcml2YXRlLXBsYWludGV4dCAoaW5jbHVkaW5nIHRoZSBmaW5hbCBwYWRkaW5nKVxuICAgIHZhciBjaXBoZXJOYW1lID0gbVsyXTtcbiAgICB2YXIgZW5jcnlwdGVkID0gKGNpcGhlck5hbWUgIT09ICdub25lJyk7XG4gICAgaWYgKGVuY3J5cHRlZCAmJiAhcGFzc3BocmFzZSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgJ0VuY3J5cHRlZCBQUEsgcHJpdmF0ZSBrZXkgZGV0ZWN0ZWQsIGJ1dCBubyBwYXNzcGhyYXNlIGdpdmVuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgcHJpdkJsb2IgPSBCdWZmZXIuZnJvbShtWzVdLCAnYmFzZTY0Jyk7XG5cbiAgICBpZiAoZW5jcnlwdGVkKSB7XG4gICAgICB2YXIgZW5jSW5mbyA9IENJUEhFUl9JTkZPW2NpcGhlck5hbWVdO1xuICAgICAgdmFyIGNpcGhlcktleSA9IGNvbWJpbmVCdWZmZXJzKFxuICAgICAgICBjcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKFBQS19QUDEpLnVwZGF0ZShwYXNzcGhyYXNlKS5kaWdlc3QoKSxcbiAgICAgICAgY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZShQUEtfUFAyKS51cGRhdGUocGFzc3BocmFzZSkuZGlnZXN0KClcbiAgICAgICk7XG4gICAgICBpZiAoY2lwaGVyS2V5Lmxlbmd0aCA+IGVuY0luZm8ua2V5TGVuKVxuICAgICAgICBjaXBoZXJLZXkgPSBjaXBoZXJLZXkuc2xpY2UoMCwgZW5jSW5mby5rZXlMZW4pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGRlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJpdihTU0hfVE9fT1BFTlNTTFtjaXBoZXJOYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBLX0lWKTtcbiAgICAgICAgZGVjaXBoZXIuc2V0QXV0b1BhZGRpbmcoZmFsc2UpO1xuICAgICAgICBwcml2QmxvYiA9IGNvbWJpbmVCdWZmZXJzKGRlY2lwaGVyLnVwZGF0ZShwcml2QmxvYiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXBoZXIuZmluYWwoKSk7XG4gICAgICAgIGRlY3J5cHRlZCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICByZXR1cm4gZXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHR5cGUgPSBtWzFdO1xuICAgIHZhciBjb21tZW50ID0gbVszXTtcbiAgICB2YXIgcHViQmxvYiA9IEJ1ZmZlci5mcm9tKG1bNF0sICdiYXNlNjQnKTtcblxuICAgIHZhciBtYWMgPSBtWzZdO1xuICAgIHZhciB0eXBlTGVuID0gdHlwZS5sZW5ndGg7XG4gICAgdmFyIGNpcGhlck5hbWVMZW4gPSBjaXBoZXJOYW1lLmxlbmd0aDtcbiAgICB2YXIgY29tbWVudExlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNvbW1lbnQpO1xuICAgIHZhciBwdWJMZW4gPSBwdWJCbG9iLmxlbmd0aDtcbiAgICB2YXIgcHJpdkxlbiA9IHByaXZCbG9iLmxlbmd0aDtcbiAgICB2YXIgbWFjRGF0YSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgdHlwZUxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIGNpcGhlck5hbWVMZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBjb21tZW50TGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgcHViTGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgcHJpdkxlbik7XG4gICAgdmFyIHAgPSAwO1xuXG4gICAgd3JpdGVVSW50MzJCRShtYWNEYXRhLCB0eXBlTGVuLCBwKTtcbiAgICBtYWNEYXRhLndyaXRlKHR5cGUsIHAgKz0gNCwgdHlwZUxlbiwgJ2FzY2lpJyk7XG4gICAgd3JpdGVVSW50MzJCRShtYWNEYXRhLCBjaXBoZXJOYW1lTGVuLCBwICs9IHR5cGVMZW4pO1xuICAgIG1hY0RhdGEud3JpdGUoY2lwaGVyTmFtZSwgcCArPSA0LCBjaXBoZXJOYW1lTGVuLCAnYXNjaWknKTtcbiAgICB3cml0ZVVJbnQzMkJFKG1hY0RhdGEsIGNvbW1lbnRMZW4sIHAgKz0gY2lwaGVyTmFtZUxlbik7XG4gICAgbWFjRGF0YS53cml0ZShjb21tZW50LCBwICs9IDQsIGNvbW1lbnRMZW4sICd1dGY4Jyk7XG4gICAgd3JpdGVVSW50MzJCRShtYWNEYXRhLCBwdWJMZW4sIHAgKz0gY29tbWVudExlbik7XG4gICAgcHViQmxvYi5jb3B5KG1hY0RhdGEsIHAgKz0gNCk7XG4gICAgd3JpdGVVSW50MzJCRShtYWNEYXRhLCBwcml2TGVuLCBwICs9IHB1Ykxlbik7XG4gICAgcHJpdkJsb2IuY29weShtYWNEYXRhLCBwICsgNCk7XG5cbiAgICBpZiAoIXBhc3NwaHJhc2UpXG4gICAgICBwYXNzcGhyYXNlID0gRU1QVFlfUEFTU1BIUkFTRTtcblxuICAgIHZhciBjYWxjTUFDID0gY3JlYXRlSG1hYygnc2hhMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUhhc2goJ3NoYTEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoJ3B1dHR5LXByaXZhdGUta2V5LWZpbGUtbWFjLWtleScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShwYXNzcGhyYXNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWdlc3QoKSlcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShtYWNEYXRhKVxuICAgICAgICAgICAgICAgICAgICAuZGlnZXN0KCdoZXgnKTtcblxuICAgIGlmIChjYWxjTUFDICE9PSBtYWMpIHtcbiAgICAgIGlmIChlbmNyeXB0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgICAnUFBLIHByaXZhdGUga2V5IGludGVncml0eSBjaGVjayBmYWlsZWQgLS0gYmFkIHBhc3NwaHJhc2U/J1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignUFBLIHByaXZhdGUga2V5IGludGVncml0eSBjaGVjayBmYWlsZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdm9pZCBjeWNsaWMgcmVxdWlyZSBieSByZXF1aXJpbmcgb24gZmlyc3QgdXNlXG4gICAgaWYgKCF1dGlscylcbiAgICAgIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG4gICAgdmFyIHB1YlBFTTtcbiAgICB2YXIgcHViU1NIO1xuICAgIHZhciBwcml2UEVNO1xuICAgIHB1YkJsb2IuX3BvcyA9IDA7XG4gICAgc2tpcEZpZWxkcyhwdWJCbG9iLCAxKTsgLy8gc2tpcCAoZHVwbGljYXRlKSBrZXkgdHlwZVxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc3NoLXJzYSc6XG4gICAgICAgIHZhciBlID0gdXRpbHMucmVhZFN0cmluZyhwdWJCbG9iLCBwdWJCbG9iLl9wb3MpO1xuICAgICAgICBpZiAoZSA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIFBQSyBwdWJsaWMga2V5Jyk7XG4gICAgICAgIHZhciBuID0gdXRpbHMucmVhZFN0cmluZyhwdWJCbG9iLCBwdWJCbG9iLl9wb3MpO1xuICAgICAgICBpZiAobiA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIFBQSyBwdWJsaWMga2V5Jyk7XG4gICAgICAgIHZhciBkID0gdXRpbHMucmVhZFN0cmluZyhwcml2QmxvYiwgMCk7XG4gICAgICAgIGlmIChkID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUFBLIHByaXZhdGUga2V5Jyk7XG4gICAgICAgIHZhciBwID0gdXRpbHMucmVhZFN0cmluZyhwcml2QmxvYiwgcHJpdkJsb2IuX3Bvcyk7XG4gICAgICAgIGlmIChwID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUFBLIHByaXZhdGUga2V5Jyk7XG4gICAgICAgIHZhciBxID0gdXRpbHMucmVhZFN0cmluZyhwcml2QmxvYiwgcHJpdkJsb2IuX3Bvcyk7XG4gICAgICAgIGlmIChxID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUFBLIHByaXZhdGUga2V5Jyk7XG4gICAgICAgIHZhciBpcW1wID0gdXRpbHMucmVhZFN0cmluZyhwcml2QmxvYiwgcHJpdkJsb2IuX3Bvcyk7XG4gICAgICAgIGlmIChpcW1wID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUFBLIHByaXZhdGUga2V5Jyk7XG4gICAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xSU0FQdWIobiwgZSk7XG4gICAgICAgIHB1YlNTSCA9IGdlbk9wZW5TU0hSU0FQdWIobiwgZSk7XG4gICAgICAgIHByaXZQRU0gPSBnZW5PcGVuU1NMUlNBUHJpdihuLCBlLCBkLCBpcW1wLCBwLCBxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzc2gtZHNzJzpcbiAgICAgICAgdmFyIHAgPSB1dGlscy5yZWFkU3RyaW5nKHB1YkJsb2IsIHB1YkJsb2IuX3Bvcyk7XG4gICAgICAgIGlmIChwID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUFBLIHB1YmxpYyBrZXknKTtcbiAgICAgICAgdmFyIHEgPSB1dGlscy5yZWFkU3RyaW5nKHB1YkJsb2IsIHB1YkJsb2IuX3Bvcyk7XG4gICAgICAgIGlmIChxID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUFBLIHB1YmxpYyBrZXknKTtcbiAgICAgICAgdmFyIGcgPSB1dGlscy5yZWFkU3RyaW5nKHB1YkJsb2IsIHB1YkJsb2IuX3Bvcyk7XG4gICAgICAgIGlmIChnID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUFBLIHB1YmxpYyBrZXknKTtcbiAgICAgICAgdmFyIHkgPSB1dGlscy5yZWFkU3RyaW5nKHB1YkJsb2IsIHB1YkJsb2IuX3Bvcyk7XG4gICAgICAgIGlmICh5ID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUFBLIHB1YmxpYyBrZXknKTtcbiAgICAgICAgdmFyIHggPSB1dGlscy5yZWFkU3RyaW5nKHByaXZCbG9iLCAwKTtcbiAgICAgICAgaWYgKHggPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBQUEsgcHJpdmF0ZSBrZXknKTtcblxuICAgICAgICBwdWJQRU0gPSBnZW5PcGVuU1NMRFNBUHViKHAsIHEsIGcsIHkpO1xuICAgICAgICBwdWJTU0ggPSBnZW5PcGVuU1NIRFNBUHViKHAsIHEsIGcsIHkpO1xuICAgICAgICBwcml2UEVNID0gZ2VuT3BlblNTTERTQVByaXYocCwgcSwgZywgeSwgeCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUFBLX1ByaXZhdGUodHlwZSwgY29tbWVudCwgcHJpdlBFTSwgcHViUEVNLCBwdWJTU0gsICdzaGExJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRlZCk7XG4gIH07XG59KSgpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlREVSKGRhdGEsIGJhc2VUeXBlLCBjb21tZW50LCBmdWxsVHlwZSkge1xuICAvLyBhdm9pZCBjeWNsaWMgcmVxdWlyZSBieSByZXF1aXJpbmcgb24gZmlyc3QgdXNlXG4gIGlmICghdXRpbHMpXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbiAgdmFyIGFsZ287XG4gIHZhciBwdWJQRU0gPSBudWxsO1xuICB2YXIgcHViU1NIID0gbnVsbDtcbiAgc3dpdGNoIChiYXNlVHlwZSkge1xuICAgIGNhc2UgJ3NzaC1yc2EnOlxuICAgICAgdmFyIGUgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICBpZiAoZSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHB1YmxpYyBrZXknKTtcbiAgICAgIHZhciBuID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgaWYgKG4gPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwdWJsaWMga2V5Jyk7XG4gICAgICBwdWJQRU0gPSBnZW5PcGVuU1NMUlNBUHViKG4sIGUpO1xuICAgICAgcHViU1NIID0gZ2VuT3BlblNTSFJTQVB1YihuLCBlKTtcbiAgICAgIGFsZ28gPSAnc2hhMSc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzc2gtZHNzJzpcbiAgICAgIHZhciBwID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgaWYgKHAgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwdWJsaWMga2V5Jyk7XG4gICAgICB2YXIgcSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgIGlmIChxID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIE9wZW5TU0ggcHVibGljIGtleScpO1xuICAgICAgdmFyIGcgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICBpZiAoZyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHB1YmxpYyBrZXknKTtcbiAgICAgIHZhciB5ID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgaWYgKHkgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwdWJsaWMga2V5Jyk7XG4gICAgICBwdWJQRU0gPSBnZW5PcGVuU1NMRFNBUHViKHAsIHEsIGcsIHkpO1xuICAgICAgcHViU1NIID0gZ2VuT3BlblNTSERTQVB1YihwLCBxLCBnLCB5KTtcbiAgICAgIGFsZ28gPSAnc2hhMSc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzc2gtZWQyNTUxOSc6XG4gICAgICB2YXIgZWRwdWIgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICBpZiAoZWRwdWIgPT09IGZhbHNlIHx8IGVkcHViLmxlbmd0aCAhPT0gMzIpXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHB1YmxpYyBrZXknKTtcbiAgICAgIHB1YlBFTSA9IGdlbk9wZW5TU0xFZFB1YihlZHB1Yik7XG4gICAgICBwdWJTU0ggPSBnZW5PcGVuU1NIRWRQdWIoZWRwdWIpO1xuICAgICAgYWxnbyA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlY2RzYS1zaGEyLW5pc3RwMjU2JzpcbiAgICAgIGFsZ28gPSAnc2hhMjU2JztcbiAgICAgIG9pZCA9ICcxLjIuODQwLjEwMDQ1LjMuMS43JztcbiAgICBjYXNlICdlY2RzYS1zaGEyLW5pc3RwMzg0JzpcbiAgICAgIGlmIChhbGdvID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWxnbyA9ICdzaGEzODQnO1xuICAgICAgICBvaWQgPSAnMS4zLjEzMi4wLjM0JztcbiAgICAgIH1cbiAgICBjYXNlICdlY2RzYS1zaGEyLW5pc3RwNTIxJzpcbiAgICAgIGlmIChhbGdvID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWxnbyA9ICdzaGE1MTInO1xuICAgICAgICBvaWQgPSAnMS4zLjEzMi4wLjM1JztcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IHZhbGlkYXRlIGN1cnZlIG5hbWUgYWdhaW5zdCB0eXBlXG4gICAgICBpZiAoIXNraXBGaWVsZHMoZGF0YSwgMSkpIC8vIFNraXAgY3VydmUgbmFtZVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwdWJsaWMga2V5Jyk7XG4gICAgICB2YXIgZWNwdWIgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICBpZiAoZWNwdWIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgT3BlblNTSCBwdWJsaWMga2V5Jyk7XG4gICAgICBwdWJQRU0gPSBnZW5PcGVuU1NMRUNEU0FQdWIob2lkLCBlY3B1Yik7XG4gICAgICBwdWJTU0ggPSBnZW5PcGVuU1NIRUNEU0FQdWIob2lkLCBlY3B1Yik7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgT3BlblNTSCBwdWJsaWMga2V5IHR5cGU6ICcgKyBiYXNlVHlwZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IE9wZW5TU0hfUHVibGljKGZ1bGxUeXBlLCBjb21tZW50LCBwdWJQRU0sIHB1YlNTSCwgYWxnbyk7XG59XG5mdW5jdGlvbiBPcGVuU1NIX1B1YmxpYyh0eXBlLCBjb21tZW50LCBwdWJQRU0sIHB1YlNTSCwgYWxnbykge1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLmNvbW1lbnQgPSBjb21tZW50O1xuICB0aGlzW1NZTV9QUklWX1BFTV0gPSBudWxsO1xuICB0aGlzW1NZTV9QVUJfUEVNXSA9IHB1YlBFTTtcbiAgdGhpc1tTWU1fUFVCX1NTSF0gPSBwdWJTU0g7XG4gIHRoaXNbU1lNX0hBU0hfQUxHT10gPSBhbGdvO1xuICB0aGlzW1NZTV9ERUNSWVBURURdID0gZmFsc2U7XG59XG5PcGVuU1NIX1B1YmxpYy5wcm90b3R5cGUgPSBCYXNlS2V5O1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgcmVnZXhwO1xuICBpZiAoRUREU0FfU1VQUE9SVEVEKVxuICAgIHJlZ2V4cCA9IC9eKCgoPzpzc2gtKD86cnNhfGRzc3xlZDI1NTE5KSl8ZWNkc2Etc2hhMi1uaXN0cCg/OjI1NnwzODR8NTIxKSkoPzotY2VydC12MFswMV1Ab3BlbnNzaC5jb20pPykgKFtBLVowLTlhLXpcXC8rPV0rKSg/OiR8XFxzKyhbXFxTXS4qKT8pJC87XG4gIGVsc2VcbiAgICByZWdleHAgPSAvXigoKD86c3NoLSg/OnJzYXxkc3MpKXxlY2RzYS1zaGEyLW5pc3RwKD86MjU2fDM4NHw1MjEpKSg/Oi1jZXJ0LXYwWzAxXUBvcGVuc3NoLmNvbSk/KSAoW0EtWjAtOWEtelxcLys9XSspKD86JHxcXHMrKFtcXFNdLiopPykkLztcbiAgT3BlblNTSF9QdWJsaWMucGFyc2UgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgbSA9IHJlZ2V4cC5leGVjKHN0cik7XG4gICAgaWYgKG0gPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyBtWzFdID0gZnVsbCB0eXBlXG4gICAgLy8gbVsyXSA9IGJhc2UgdHlwZVxuICAgIC8vIG1bM10gPSBiYXNlNjQtZW5jb2RlZCBwdWJsaWMga2V5XG4gICAgLy8gbVs0XSA9IGNvbW1lbnRcblxuICAgIC8vIGF2b2lkIGN5Y2xpYyByZXF1aXJlIGJ5IHJlcXVpcmluZyBvbiBmaXJzdCB1c2VcbiAgICBpZiAoIXV0aWxzKVxuICAgICAgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbiAgICB2YXIgZnVsbFR5cGUgPSBtWzFdO1xuICAgIHZhciBiYXNlVHlwZSA9IG1bMl07XG4gICAgdmFyIGRhdGEgPSBCdWZmZXIuZnJvbShtWzNdLCAnYmFzZTY0Jyk7XG4gICAgdmFyIGNvbW1lbnQgPSAobVs0XSB8fCAnJyk7XG5cbiAgICB2YXIgdHlwZSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zLCAnYXNjaWknKTtcbiAgICBpZiAodHlwZSA9PT0gZmFsc2UgfHwgdHlwZS5pbmRleE9mKGJhc2VUeXBlKSAhPT0gMClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBPcGVuU1NIIHB1YmxpYyBrZXknKTtcblxuICAgIHJldHVybiBwYXJzZURFUihkYXRhLCBiYXNlVHlwZSwgY29tbWVudCwgZnVsbFR5cGUpO1xuICB9O1xufSkoKTtcblxuXG5cbmZ1bmN0aW9uIFJGQzQ3MTZfUHVibGljKHR5cGUsIGNvbW1lbnQsIHB1YlBFTSwgcHViU1NILCBhbGdvKSB7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7XG4gIHRoaXNbU1lNX1BSSVZfUEVNXSA9IG51bGw7XG4gIHRoaXNbU1lNX1BVQl9QRU1dID0gcHViUEVNO1xuICB0aGlzW1NZTV9QVUJfU1NIXSA9IHB1YlNTSDtcbiAgdGhpc1tTWU1fSEFTSF9BTEdPXSA9IGFsZ287XG4gIHRoaXNbU1lNX0RFQ1JZUFRFRF0gPSBmYWxzZTtcbn1cblJGQzQ3MTZfUHVibGljLnByb3RvdHlwZSA9IEJhc2VLZXk7XG4oZnVuY3Rpb24oKSB7XG4gIHZhciByZWdleHAgPSAvXi0tLS0gQkVHSU4gU1NIMiBQVUJMSUMgS0VZIC0tLS0oPzpcXHJcXG58XFxuKSgoPzooPzpbXFx4MjEtXFx4N0VdKz8pOig/Oig/Oi4qP1xcXFxcXHI/XFxuKSouKikoPzpcXHJcXG58XFxuKSkqKSgoPzpbQS1aMC05YS16XFwvKz1dKyg/OlxcclxcbnxcXG4pKSspLS0tLSBFTkQgU1NIMiBQVUJMSUMgS0VZIC0tLS0kLztcbiAgdmFyIFJFX0hFQURFUiA9IC9eKFtcXHgyMS1cXHg3RV0rPyk6KCg/Oi4qP1xcXFxcXHI/XFxuKSouKikkL2dtO1xuICB2YXIgUkVfSEVBREVSX0VORFMgPSAvXFxcXFxccj9cXG4vZztcbiAgUkZDNDcxNl9QdWJsaWMucGFyc2UgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgbSA9IHJlZ2V4cC5leGVjKHN0cik7XG4gICAgaWYgKG0gPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyBtWzFdID0gaGVhZGVyKHMpXG4gICAgLy8gbVsyXSA9IGJhc2U2NC1lbmNvZGVkIHB1YmxpYyBrZXlcblxuICAgIHZhciBoZWFkZXJzID0gbVsxXTtcbiAgICB2YXIgZGF0YSA9IEJ1ZmZlci5mcm9tKG1bMl0sICdiYXNlNjQnKTtcbiAgICB2YXIgY29tbWVudCA9ICcnO1xuXG4gICAgaWYgKGhlYWRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd2hpbGUgKG0gPSBSRV9IRUFERVIuZXhlYyhoZWFkZXJzKSkge1xuICAgICAgICBpZiAobVsxXS50b0xvd2VyQ2FzZSgpID09PSAnY29tbWVudCcpIHtcbiAgICAgICAgICBjb21tZW50ID0gdHJpbVN0YXJ0KG1bMl0ucmVwbGFjZShSRV9IRUFERVJfRU5EUywgJycpKTtcbiAgICAgICAgICBpZiAoY29tbWVudC5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICYmIGNvbW1lbnQuY2hhckNvZGVBdCgwKSA9PT0gMzQvKidcIicqL1xuICAgICAgICAgICAgICAmJiBjb21tZW50LmNoYXJDb2RlQXQoY29tbWVudC5sZW5ndGggLSAxKSA9PT0gMzQvKidcIicqLykge1xuICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnQuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF2b2lkIGN5Y2xpYyByZXF1aXJlIGJ5IHJlcXVpcmluZyBvbiBmaXJzdCB1c2VcbiAgICBpZiAoIXV0aWxzKVxuICAgICAgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbiAgICB2YXIgdHlwZSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgMCwgJ2FzY2lpJyk7XG4gICAgaWYgKHR5cGUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIFJGQzQ3MTYgcHVibGljIGtleScpO1xuXG4gICAgdmFyIHB1YlBFTSA9IG51bGw7XG4gICAgdmFyIHB1YlNTSCA9IG51bGw7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzc2gtcnNhJzpcbiAgICAgICAgdmFyIGUgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgIGlmIChlID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUkZDNDcxNiBwdWJsaWMga2V5Jyk7XG4gICAgICAgIHZhciBuID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICBpZiAobiA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIFJGQzQ3MTYgcHVibGljIGtleScpO1xuICAgICAgICBwdWJQRU0gPSBnZW5PcGVuU1NMUlNBUHViKG4sIGUpO1xuICAgICAgICBwdWJTU0ggPSBnZW5PcGVuU1NIUlNBUHViKG4sIGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NzaC1kc3MnOlxuICAgICAgICB2YXIgcCA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgaWYgKHAgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBSRkM0NzE2IHB1YmxpYyBrZXknKTtcbiAgICAgICAgdmFyIHEgPSB1dGlscy5yZWFkU3RyaW5nKGRhdGEsIGRhdGEuX3Bvcyk7XG4gICAgICAgIGlmIChxID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUkZDNDcxNiBwdWJsaWMga2V5Jyk7XG4gICAgICAgIHZhciBnID0gdXRpbHMucmVhZFN0cmluZyhkYXRhLCBkYXRhLl9wb3MpO1xuICAgICAgICBpZiAoZyA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignTWFsZm9ybWVkIFJGQzQ3MTYgcHVibGljIGtleScpO1xuICAgICAgICB2YXIgeSA9IHV0aWxzLnJlYWRTdHJpbmcoZGF0YSwgZGF0YS5fcG9zKTtcbiAgICAgICAgaWYgKHkgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01hbGZvcm1lZCBSRkM0NzE2IHB1YmxpYyBrZXknKTtcbiAgICAgICAgcHViUEVNID0gZ2VuT3BlblNTTERTQVB1YihwLCBxLCBnLCB5KTtcbiAgICAgICAgcHViU1NIID0gZ2VuT3BlblNTSERTQVB1YihwLCBxLCBnLCB5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdNYWxmb3JtZWQgUkZDNDcxNiBwdWJsaWMga2V5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSRkM0NzE2X1B1YmxpYyh0eXBlLCBjb21tZW50LCBwdWJQRU0sIHB1YlNTSCwgJ3NoYTEnKTtcbiAgfTtcbn0pKCk7XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2VERVJLZXk6IGZ1bmN0aW9uIHBhcnNlREVSS2V5KGRhdGEsIHR5cGUpIHtcbiAgICByZXR1cm4gcGFyc2VERVIoZGF0YSwgdHlwZSwgJycsIHR5cGUpO1xuICB9LFxuICBwYXJzZUtleTogZnVuY3Rpb24gcGFyc2VLZXkoZGF0YSwgcGFzc3BocmFzZSkge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpXG4gICAgICBkYXRhID0gZGF0YS50b1N0cmluZygndXRmOCcpLnRyaW0oKTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdLZXkgZGF0YSBtdXN0IGJlIGEgQnVmZmVyIG9yIHN0cmluZycpO1xuICAgIGVsc2VcbiAgICAgIGRhdGEgPSBkYXRhLnRyaW0oKTtcblxuICAgIC8vIGludGVudGlvbmFsICE9XG4gICAgaWYgKHBhc3NwaHJhc2UgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHBhc3NwaHJhc2UgPT09ICdzdHJpbmcnKVxuICAgICAgICBwYXNzcGhyYXNlID0gQnVmZmVyLmZyb20ocGFzc3BocmFzZSk7XG4gICAgICBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKHBhc3NwaHJhc2UpKVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdQYXNzcGhyYXNlIG11c3QgYmUgYSBzdHJpbmcgb3IgQnVmZmVyIHdoZW4gc3VwcGxpZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgcmV0O1xuXG4gICAgLy8gUHJpdmF0ZSBrZXlzXG4gICAgaWYgKChyZXQgPSBPcGVuU1NIX1ByaXZhdGUucGFyc2UoZGF0YSwgcGFzc3BocmFzZSkpICE9PSBudWxsKVxuICAgICAgcmV0dXJuIHJldDtcbiAgICBpZiAoKHJldCA9IE9wZW5TU0hfT2xkX1ByaXZhdGUucGFyc2UoZGF0YSwgcGFzc3BocmFzZSkpICE9PSBudWxsKVxuICAgICAgcmV0dXJuIHJldDtcbiAgICBpZiAoKHJldCA9IFBQS19Qcml2YXRlLnBhcnNlKGRhdGEsIHBhc3NwaHJhc2UpKSAhPT0gbnVsbClcbiAgICAgIHJldHVybiByZXQ7XG5cbiAgICAvLyBQdWJsaWMga2V5c1xuICAgIGlmICgocmV0ID0gT3BlblNTSF9QdWJsaWMucGFyc2UoZGF0YSkpICE9PSBudWxsKVxuICAgICAgcmV0dXJuIHJldDtcbiAgICBpZiAoKHJldCA9IFJGQzQ3MTZfUHVibGljLnBhcnNlKGRhdGEpKSAhPT0gbnVsbClcbiAgICAgIHJldHVybiByZXQ7XG5cbiAgICByZXR1cm4gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBrZXkgZm9ybWF0Jyk7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGluc3BlY3QgPSByZXF1aXJlKCd1dGlsJykuaW5zcGVjdDtcblxuZnVuY3Rpb24gYXNzZXJ0KHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpXG4gICAgdGhyb3cgbmV3IEVSUl9JTlRFUk5BTF9BU1NFUlRJT04obWVzc2FnZSk7XG59XG5hc3NlcnQuZmFpbCA9IGZ1bmN0aW9uIGZhaWwobWVzc2FnZSkge1xuICB0aHJvdyBuZXcgRVJSX0lOVEVSTkFMX0FTU0VSVElPTihtZXNzYWdlKTtcbn07XG5cbi8vIE9ubHkgdXNlIHRoaXMgZm9yIGludGVnZXJzISBEZWNpbWFsIG51bWJlcnMgZG8gbm90IHdvcmsgd2l0aCB0aGlzIGZ1bmN0aW9uLlxuZnVuY3Rpb24gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHZhbCkge1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBpID0gdmFsLmxlbmd0aDtcbiAgdmFyIHN0YXJ0ID0gdmFsWzBdID09PSAnLScgPyAxIDogMDtcbiAgZm9yICg7IGkgPj0gc3RhcnQgKyA0OyBpIC09IDMpXG4gICAgcmVzID0gYF8ke3ZhbC5zbGljZShpIC0gMywgaSl9JHtyZXN9YDtcbiAgcmV0dXJuIGAke3ZhbC5zbGljZSgwLCBpKX0ke3Jlc31gO1xufVxuXG5mdW5jdGlvbiBvbmVPZihleHBlY3RlZCwgdGhpbmcpIHtcbiAgYXNzZXJ0KHR5cGVvZiB0aGluZyA9PT0gJ3N0cmluZycsICdgdGhpbmdgIGhhcyB0byBiZSBvZiB0eXBlIHN0cmluZycpO1xuICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICB2YXIgbGVuID0gZXhwZWN0ZWQubGVuZ3RoO1xuICAgIGFzc2VydChsZW4gPiAwLCAnQXQgbGVhc3Qgb25lIGV4cGVjdGVkIHZhbHVlIG5lZWRzIHRvIGJlIHNwZWNpZmllZCcpO1xuICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQubWFwKChpKSA9PiBTdHJpbmcoaSkpO1xuICAgIGlmIChsZW4gPiAyKSB7XG4gICAgICByZXR1cm4gYG9uZSBvZiAke3RoaW5nfSAke2V4cGVjdGVkLnNsaWNlKDAsIGxlbiAtIDEpLmpvaW4oJywgJyl9LCBvciBgXG4gICAgICAgICAgICAgICsgZXhwZWN0ZWRbbGVuIC0gMV07XG4gICAgfSBlbHNlIGlmIChsZW4gPT09IDIpIHtcbiAgICAgIHJldHVybiBgb25lIG9mICR7dGhpbmd9ICR7ZXhwZWN0ZWRbMF19IG9yICR7ZXhwZWN0ZWRbMV19YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBvZiAke3RoaW5nfSAke2V4cGVjdGVkWzBdfWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBgb2YgJHt0aGluZ30gJHtTdHJpbmcoZXhwZWN0ZWQpfWA7XG4gIH1cbn1cblxuXG5cbmV4cG9ydHMuRVJSX0lOVEVSTkFMX0FTU0VSVElPTiA9IGNsYXNzIEVSUl9JTlRFUk5BTF9BU1NFUlRJT04gZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcigpO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEVSUl9JTlRFUk5BTF9BU1NFUlRJT04pO1xuXG4gICAgdmFyIHN1ZmZpeCA9ICdUaGlzIGlzIGNhdXNlZCBieSBlaXRoZXIgYSBidWcgaW4gc3NoMi1zdHJlYW1zICdcbiAgICAgICAgICAgICAgICAgKyAnb3IgaW5jb3JyZWN0IHVzYWdlIG9mIHNzaDItc3RyZWFtcyBpbnRlcm5hbHMuXFxuJ1xuICAgICAgICAgICAgICAgICArICdQbGVhc2Ugb3BlbiBhbiBpc3N1ZSB3aXRoIHRoaXMgc3RhY2sgdHJhY2UgYXQgJ1xuICAgICAgICAgICAgICAgICArICdodHRwczovL2dpdGh1Yi5jb20vbXNjZGV4L3NzaDItc3RyZWFtcy9pc3N1ZXNcXG4nO1xuXG4gICAgdGhpcy5tZXNzYWdlID0gKG1lc3NhZ2UgPT09IHVuZGVmaW5lZCA/IHN1ZmZpeCA6IGAke21lc3NhZ2V9XFxuJHtzdWZmaXh9YCk7XG4gIH1cbn07XG5cbnZhciBNQVhfMzJCSVRfSU5UID0gTWF0aC5wb3coMiwgMzIpO1xudmFyIE1BWF8zMkJJVF9CSUdJTlQgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbigncmV0dXJuIDJuICoqIDMybicpKCk7XG4gIH0gY2F0Y2ggKGV4KSB7fVxufSkoKTtcbmV4cG9ydHMuRVJSX09VVF9PRl9SQU5HRSA9IGNsYXNzIEVSUl9PVVRfT0ZfUkFOR0UgZXh0ZW5kcyBSYW5nZUVycm9yIHtcbiAgY29uc3RydWN0b3Ioc3RyLCByYW5nZSwgaW5wdXQsIHJlcGxhY2VEZWZhdWx0Qm9vbGVhbikge1xuICAgIHN1cGVyKCk7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRVJSX09VVF9PRl9SQU5HRSk7XG5cbiAgICBhc3NlcnQocmFuZ2UsICdNaXNzaW5nIFwicmFuZ2VcIiBhcmd1bWVudCcpO1xuICAgIHZhciBtc2cgPSAocmVwbGFjZURlZmF1bHRCb29sZWFuXG4gICAgICAgICAgICAgICA/IHN0clxuICAgICAgICAgICAgICAgOiBgVGhlIHZhbHVlIG9mIFwiJHtzdHJ9XCIgaXMgb3V0IG9mIHJhbmdlLmApO1xuICAgIHZhciByZWNlaXZlZDtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbnB1dCkgJiYgTWF0aC5hYnMoaW5wdXQpID4gTUFYXzMyQklUX0lOVCkge1xuICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IoU3RyaW5nKGlucHV0KSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdiaWdpbnQnKSB7XG4gICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dCk7XG4gICAgICBpZiAoaW5wdXQgPiBNQVhfMzJCSVRfQklHSU5UIHx8IGlucHV0IDwgLU1BWF8zMkJJVF9CSUdJTlQpXG4gICAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHJlY2VpdmVkKTtcbiAgICAgIHJlY2VpdmVkICs9ICduJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjZWl2ZWQgPSBpbnNwZWN0KGlucHV0KTtcbiAgICB9XG4gICAgbXNnICs9IGAgSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gO1xuXG4gICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICB9XG59O1xuXG5leHBvcnRzLkVSUl9JTlZBTElEX0FSR19UWVBFID0gY2xhc3MgRVJSX0lOVkFMSURfQVJHX1RZUEUgZXh0ZW5kcyBUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lLCBleHBlY3RlZCwgYWN0dWFsKSB7XG4gICAgc3VwZXIoKTtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBFUlJfSU5WQUxJRF9BUkdfVFlQRSk7XG5cbiAgICBhc3NlcnQodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnLCBgJ25hbWUnIG11c3QgYmUgYSBzdHJpbmdgKTtcblxuICAgIC8vIGRldGVybWluZXI6ICdtdXN0IGJlJyBvciAnbXVzdCBub3QgYmUnXG4gICAgdmFyIGRldGVybWluZXI7XG4gICAgaWYgKHR5cGVvZiBleHBlY3RlZCA9PT0gJ3N0cmluZycgJiYgZXhwZWN0ZWQuc3RhcnRzV2l0aCgnbm90ICcpKSB7XG4gICAgICBkZXRlcm1pbmVyID0gJ211c3Qgbm90IGJlJztcbiAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQucmVwbGFjZSgvXm5vdCAvLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRldGVybWluZXIgPSAnbXVzdCBiZSc7XG4gICAgfVxuXG4gICAgdmFyIG1zZztcbiAgICBpZiAobmFtZS5lbmRzV2l0aCgnIGFyZ3VtZW50JykpIHtcbiAgICAgIC8vIEZvciBjYXNlcyBsaWtlICdmaXJzdCBhcmd1bWVudCdcbiAgICAgIG1zZyA9IGBUaGUgJHtuYW1lfSAke2RldGVybWluZXJ9ICR7b25lT2YoZXhwZWN0ZWQsICd0eXBlJyl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHR5cGUgPSAobmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCcpO1xuICAgICAgbXNnID0gYFRoZSBcIiR7bmFtZX1cIiAke3R5cGV9ICR7ZGV0ZXJtaW5lcn0gJHtvbmVPZihleHBlY3RlZCwgJ3R5cGUnKX1gO1xuICAgIH1cblxuICAgIG1zZyArPSBgLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH1gO1xuXG4gICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICB9XG59O1xuXG5leHBvcnRzLnZhbGlkYXRlTnVtYmVyID0gZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdudW1iZXInLCB2YWx1ZSk7XG59O1xuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBGb2xsb3dpbmcgY29kZSBpcyBvbmx5IG5lZWRlZCB0byBzdXBwb3J0IG5vZGUgdjYueCAuLi4uXG5cbi8vIFVuZG9jdW1lbnRlZCBjYigpIEFQSSwgbmVlZGVkIGZvciBjb3JlLCBub3QgZm9yIHB1YmxpYyBBUElcbmV4cG9ydHMuZGVzdHJveUltcGwgPSBmdW5jdGlvbiBkZXN0cm95KGVyciwgY2IpIHtcbiAgY29uc3QgcmVhZGFibGVEZXN0cm95ZWQgPSB0aGlzLl9yZWFkYWJsZVN0YXRlICYmXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIGNvbnN0IHdyaXRhYmxlRGVzdHJveWVkID0gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJlxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuXG4gIGlmIChyZWFkYWJsZURlc3Ryb3llZCB8fCB3cml0YWJsZURlc3Ryb3llZCkge1xuICAgIGlmIChjYikge1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgaWYgKCF0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yTlQsIHRoaXMsIGVycik7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCkge1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yTlQsIHRoaXMsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBXZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICAvLyBJZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgdGhpcy5fZGVzdHJveShlcnIgfHwgbnVsbCwgKGVycikgPT4ge1xuICAgIGlmICghY2IgJiYgZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JBbmRDbG9zZU5ULCB0aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckFuZENsb3NlTlQsIHRoaXMsIGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCB0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNiKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCB0aGlzKTtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTlQsIHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBlbWl0RXJyb3JBbmRDbG9zZU5UKHNlbGYsIGVycikge1xuICBlbWl0RXJyb3JOVChzZWxmLCBlcnIpO1xuICBlbWl0Q2xvc2VOVChzZWxmKTtcbn1cblxuZnVuY3Rpb24gZW1pdENsb3NlTlQoc2VsZikge1xuICBpZiAoc2VsZi5fd3JpdGFibGVTdGF0ZSAmJiAhc2VsZi5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2UpXG4gICAgcmV0dXJuO1xuICBpZiAoc2VsZi5fcmVhZGFibGVTdGF0ZSAmJiAhc2VsZi5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2UpXG4gICAgcmV0dXJuO1xuICBzZWxmLmVtaXQoJ2Nsb3NlJyk7XG59XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIiwiLy8gVE9ETzogc3VwcG9ydCBFWFRFTkRFRCByZXF1ZXN0IHBhY2tldHNcblxudmFyIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybTtcbnZhciBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlJlYWRhYmxlO1xudmFyIFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuV3JpdGFibGU7XG52YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnZnMnKS5jb25zdGFudHMgfHwgcHJvY2Vzcy5iaW5kaW5nKCdjb25zdGFudHMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGluaGVyaXRzID0gdXRpbC5pbmhlcml0cztcbnZhciBpc0RhdGUgPSB1dGlsLmlzRGF0ZTtcbnZhciBsaXN0ZW5lckNvdW50ID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQ7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xuXG52YXIgcmVhZFN0cmluZyA9IHJlcXVpcmUoJy4vdXRpbHMnKS5yZWFkU3RyaW5nO1xudmFyIHJlYWRJbnQgPSByZXF1aXJlKCcuL3V0aWxzJykucmVhZEludDtcbnZhciByZWFkVUludDMyQkUgPSByZXF1aXJlKCcuL2J1ZmZlci1oZWxwZXJzJykucmVhZFVJbnQzMkJFO1xudmFyIHdyaXRlVUludDMyQkUgPSByZXF1aXJlKCcuL2J1ZmZlci1oZWxwZXJzJykud3JpdGVVSW50MzJCRTtcblxudmFyIEFUVFIgPSB7XG4gIFNJWkU6IDB4MDAwMDAwMDEsXG4gIFVJREdJRDogMHgwMDAwMDAwMixcbiAgUEVSTUlTU0lPTlM6IDB4MDAwMDAwMDQsXG4gIEFDTU9EVElNRTogMHgwMDAwMDAwOCxcbiAgRVhURU5ERUQ6IDB4ODAwMDAwMDBcbn07XG5cbnZhciBTVEFUVVNfQ09ERSA9IHtcbiAgT0s6IDAsXG4gIEVPRjogMSxcbiAgTk9fU1VDSF9GSUxFOiAyLFxuICBQRVJNSVNTSU9OX0RFTklFRDogMyxcbiAgRkFJTFVSRTogNCxcbiAgQkFEX01FU1NBR0U6IDUsXG4gIE5PX0NPTk5FQ1RJT046IDYsXG4gIENPTk5FQ1RJT05fTE9TVDogNyxcbiAgT1BfVU5TVVBQT1JURUQ6IDhcbn07XG5PYmplY3Qua2V5cyhTVEFUVVNfQ09ERSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgU1RBVFVTX0NPREVbU1RBVFVTX0NPREVba2V5XV0gPSBrZXk7XG59KTtcbnZhciBTVEFUVVNfQ09ERV9TVFIgPSB7XG4gIDA6ICdObyBlcnJvcicsXG4gIDE6ICdFbmQgb2YgZmlsZScsXG4gIDI6ICdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JyxcbiAgMzogJ1Blcm1pc3Npb24gZGVuaWVkJyxcbiAgNDogJ0ZhaWx1cmUnLFxuICA1OiAnQmFkIG1lc3NhZ2UnLFxuICA2OiAnTm8gY29ubmVjdGlvbicsXG4gIDc6ICdDb25uZWN0aW9uIGxvc3QnLFxuICA4OiAnT3BlcmF0aW9uIHVuc3VwcG9ydGVkJ1xufTtcblNGVFBTdHJlYW0uU1RBVFVTX0NPREUgPSBTVEFUVVNfQ09ERTtcblxudmFyIFJFUVVFU1QgPSB7XG4gIElOSVQ6IDEsXG4gIE9QRU46IDMsXG4gIENMT1NFOiA0LFxuICBSRUFEOiA1LFxuICBXUklURTogNixcbiAgTFNUQVQ6IDcsXG4gIEZTVEFUOiA4LFxuICBTRVRTVEFUOiA5LFxuICBGU0VUU1RBVDogMTAsXG4gIE9QRU5ESVI6IDExLFxuICBSRUFERElSOiAxMixcbiAgUkVNT1ZFOiAxMyxcbiAgTUtESVI6IDE0LFxuICBSTURJUjogMTUsXG4gIFJFQUxQQVRIOiAxNixcbiAgU1RBVDogMTcsXG4gIFJFTkFNRTogMTgsXG4gIFJFQURMSU5LOiAxOSxcbiAgU1lNTElOSzogMjAsXG4gIEVYVEVOREVEOiAyMDBcbn07XG5PYmplY3Qua2V5cyhSRVFVRVNUKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICBSRVFVRVNUW1JFUVVFU1Rba2V5XV0gPSBrZXk7XG59KTtcblxudmFyIFJFU1BPTlNFID0ge1xuICBWRVJTSU9OOiAyLFxuICBTVEFUVVM6IDEwMSxcbiAgSEFORExFOiAxMDIsXG4gIERBVEE6IDEwMyxcbiAgTkFNRTogMTA0LFxuICBBVFRSUzogMTA1LFxuICBFWFRFTkRFRDogMjAxXG59O1xuT2JqZWN0LmtleXMoUkVTUE9OU0UpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gIFJFU1BPTlNFW1JFU1BPTlNFW2tleV1dID0ga2V5O1xufSk7XG5cbnZhciBPUEVOX01PREUgPSB7XG4gIFJFQUQ6IDB4MDAwMDAwMDEsXG4gIFdSSVRFOiAweDAwMDAwMDAyLFxuICBBUFBFTkQ6IDB4MDAwMDAwMDQsXG4gIENSRUFUOiAweDAwMDAwMDA4LFxuICBUUlVOQzogMHgwMDAwMDAxMCxcbiAgRVhDTDogMHgwMDAwMDAyMFxufTtcblNGVFBTdHJlYW0uT1BFTl9NT0RFID0gT1BFTl9NT0RFO1xuXG52YXIgTUFYX1BLVF9MRU4gPSAzNDAwMDtcbnZhciBNQVhfUkVRSUQgPSBNYXRoLnBvdygyLCAzMikgLSAxO1xudmFyIENMSUVOVF9WRVJTSU9OX0JVRkZFUiA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCA1IC8qIGxlbmd0aCAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUVTVC5JTklULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAzIC8qIHZlcnNpb24gKi9dKTtcbnZhciBTRVJWRVJfVkVSU0lPTl9CVUZGRVIgPSBCdWZmZXIuZnJvbShbMCwgMCwgMCwgNSAvKiBsZW5ndGggKi8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1BPTlNFLlZFUlNJT04sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDMgLyogdmVyc2lvbiAqL10pO1xuLypcbiAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1zZWNzaC1maWxleGZlci0wMjpcblxuICAgICBUaGUgbWF4aW11bSBzaXplIG9mIGEgcGFja2V0IGlzIGluIHByYWN0aWNlIGRldGVybWluZWQgYnkgdGhlIGNsaWVudFxuICAgICAodGhlIG1heGltdW0gc2l6ZSBvZiByZWFkIG9yIHdyaXRlIHJlcXVlc3RzIHRoYXQgaXQgc2VuZHMsIHBsdXMgYSBmZXdcbiAgICAgYnl0ZXMgb2YgcGFja2V0IG92ZXJoZWFkKS4gIEFsbCBzZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IHBhY2tldHMgb2YgYXRcbiAgICAgbGVhc3QgMzQwMDAgYnl0ZXMgKHdoZXJlIHRoZSBwYWNrZXQgc2l6ZSByZWZlcnMgdG8gdGhlIGZ1bGwgbGVuZ3RoLFxuICAgICBpbmNsdWRpbmcgdGhlIGhlYWRlciBhYm92ZSkuICBUaGlzIHNob3VsZCBhbGxvdyBmb3IgcmVhZHMgYW5kIHdyaXRlc1xuICAgICBvZiBhdCBtb3N0IDMyNzY4IGJ5dGVzLlxuXG4gIE9wZW5TU0ggY2FwcyB0aGlzIHRvIDI1NmtiIGluc3RlYWQgb2YgdGhlIH4zNGtiIGFzIG1lbnRpb25lZCBpbiB0aGUgc2Z0cHYzXG4gIHNwZWMuXG4qL1xudmFyIFJFX09QRU5TU0ggPSAvXlNTSC0yLjAtKD86T3BlblNTSHxkcm9wYmVhcikvO1xudmFyIE9QRU5TU0hfTUFYX0RBVEFfTEVOID0gKDI1NiAqIDEwMjQpIC0gKDIgKiAxMDI0KS8qYWNjb3VudCBmb3IgaGVhZGVyIGRhdGEqLztcblxuZnVuY3Rpb24gREVCVUdfTk9PUChtc2cpIHt9XG5cbmZ1bmN0aW9uIFNGVFBTdHJlYW0oY2ZnLCByZW1vdGVJZGVudFJhdykge1xuICBpZiAodHlwZW9mIGNmZyA9PT0gJ3N0cmluZycgJiYgIXJlbW90ZUlkZW50UmF3KSB7XG4gICAgcmVtb3RlSWRlbnRSYXcgPSBjZmc7XG4gICAgY2ZnID0gdW5kZWZpbmVkO1xuICB9XG4gIGlmICh0eXBlb2YgY2ZnICE9PSAnb2JqZWN0JyB8fCAhY2ZnKVxuICAgIGNmZyA9IHt9O1xuXG4gIFRyYW5zZm9ybVN0cmVhbS5jYWxsKHRoaXMsIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAodHlwZW9mIGNmZy5oaWdoV2F0ZXJNYXJrID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICA/IGNmZy5oaWdoV2F0ZXJNYXJrXG4gICAgICAgICAgICAgICAgICAgIDogMzIgKiAxMDI0KVxuICB9KTtcblxuICB0aGlzLmRlYnVnID0gKHR5cGVvZiBjZmcuZGVidWcgPT09ICdmdW5jdGlvbicgPyBjZmcuZGVidWcgOiBERUJVR19OT09QKTtcbiAgdGhpcy5zZXJ2ZXIgPSAoY2ZnLnNlcnZlciA/IHRydWUgOiBmYWxzZSk7XG4gIHRoaXMuX2lzT3BlblNTSCA9IChyZW1vdGVJZGVudFJhdyAmJiBSRV9PUEVOU1NILnRlc3QocmVtb3RlSWRlbnRSYXcpKTtcbiAgdGhpcy5fbmVlZENvbnRpbnVlID0gZmFsc2U7XG4gIHRoaXMuX3N0YXRlID0ge1xuICAgIC8vIGNvbW1vblxuICAgIHN0YXR1czogJ3BhY2tldF9oZWFkZXInLFxuICAgIHdyaXRlUmVxaWQ6IC0xLFxuICAgIHBrdExlZnQ6IHVuZGVmaW5lZCxcbiAgICBwa3RIZHJCdWY6IEJ1ZmZlci5hbGxvY1Vuc2FmZSg5KSwgLy8gcm9vbSBmb3IgcGt0TGVuICsgcGt0VHlwZSArIHJlcSBpZFxuICAgIHBrdEJ1ZjogdW5kZWZpbmVkLFxuICAgIHBrdFR5cGU6IHVuZGVmaW5lZCxcbiAgICB2ZXJzaW9uOiB1bmRlZmluZWQsXG4gICAgZXh0ZW5zaW9uczoge30sXG5cbiAgICAvLyBjbGllbnRcbiAgICBtYXhEYXRhTGVuOiAodGhpcy5faXNPcGVuU1NIID8gT1BFTlNTSF9NQVhfREFUQV9MRU4gOiAzMjc2OCksXG4gICAgcmVxdWVzdHM6IHt9XG4gIH07XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLnJlYWRhYmxlID0gZmFsc2U7XG4gIH0pLm9uKCdmaW5pc2gnLCBvbkZpbmlzaClcbiAgICAub24oJ3ByZWZpbmlzaCcsIG9uRmluaXNoKTtcbiAgZnVuY3Rpb24gb25GaW5pc2goKSB7XG4gICAgc2VsZi53cml0YWJsZSA9IGZhbHNlO1xuICAgIHNlbGYuX2NsZWFudXAoZmFsc2UpO1xuICB9XG5cbiAgaWYgKCF0aGlzLnNlcnZlcilcbiAgICB0aGlzLnB1c2goQ0xJRU5UX1ZFUlNJT05fQlVGRkVSKTtcbn1cbmluaGVyaXRzKFNGVFBTdHJlYW0sIFRyYW5zZm9ybVN0cmVhbSk7XG5cblNGVFBTdHJlYW0ucHJvdG90eXBlLl9fcmVhZCA9IFRyYW5zZm9ybVN0cmVhbS5wcm90b3R5cGUuX3JlYWQ7XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKHRoaXMuX25lZWRDb250aW51ZSkge1xuICAgIHRoaXMuX25lZWRDb250aW51ZSA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgnY29udGludWUnKTtcbiAgfVxuICByZXR1cm4gdGhpcy5fX3JlYWQobik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuX19wdXNoID0gVHJhbnNmb3JtU3RyZWFtLnByb3RvdHlwZS5wdXNoO1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZykge1xuICBpZiAoIXRoaXMucmVhZGFibGUpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoY2h1bmsgPT09IG51bGwpXG4gICAgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICB2YXIgcmV0ID0gdGhpcy5fX3B1c2goY2h1bmssIGVuY29kaW5nKTtcbiAgdGhpcy5fbmVlZENvbnRpbnVlID0gKHJldCA9PT0gZmFsc2UpO1xuICByZXR1cm4gcmV0O1xufTtcblxuU0ZUUFN0cmVhbS5wcm90b3R5cGUuX2NsZWFudXAgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICBzdGF0ZS5wa3RCdWYgPSB1bmRlZmluZWQ7IC8vIGdpdmUgR0Mgc29tZXRoaW5nIHRvIGRvXG5cbiAgdmFyIHJlcXVlc3RzID0gc3RhdGUucmVxdWVzdHM7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMocmVxdWVzdHMpO1xuICB2YXIgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGlmIChsZW4pIHtcbiAgICBpZiAodGhpcy5yZWFkYWJsZSkge1xuICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignU0ZUUCBzZXNzaW9uIGVuZGVkIGVhcmx5Jyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgY2I7IGkgPCBsZW47ICsraSlcbiAgICAgICAgKGNiID0gcmVxdWVzdHNba2V5c1tpXV0uY2IpICYmIGNiKGVycik7XG4gICAgfVxuICAgIHN0YXRlLnJlcXVlc3RzID0ge307XG4gIH1cblxuICBpZiAodGhpcy5yZWFkYWJsZSlcbiAgICB0aGlzLnB1c2gobnVsbCk7XG4gIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICAvLyBVZ2ghXG4gICAgdGhpcy5yZXN1bWUoKTtcbiAgfVxuICBpZiAoY2FsbGJhY2sgIT09IGZhbHNlKSB7XG4gICAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IFBhcnNlcjogTWFsZm9ybWVkIHBhY2tldCcpO1xuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKG5ldyBFcnJvcignTWFsZm9ybWVkIHBhY2tldCcpKTtcbiAgfVxufTtcblxuU0ZUUFN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG4gIHZhciBzZXJ2ZXIgPSB0aGlzLnNlcnZlcjtcbiAgdmFyIHN0YXR1cyA9IHN0YXRlLnN0YXR1cztcbiAgdmFyIHBrdFR5cGUgPSBzdGF0ZS5wa3RUeXBlO1xuICB2YXIgcGt0QnVmID0gc3RhdGUucGt0QnVmO1xuICB2YXIgcGt0TGVmdCA9IHN0YXRlLnBrdExlZnQ7XG4gIHZhciB2ZXJzaW9uID0gc3RhdGUudmVyc2lvbjtcbiAgdmFyIHBrdEhkckJ1ZiA9IHN0YXRlLnBrdEhkckJ1ZjtcbiAgdmFyIHJlcXVlc3RzID0gc3RhdGUucmVxdWVzdHM7XG4gIHZhciBkZWJ1ZyA9IHRoaXMuZGVidWc7XG4gIHZhciBjaHVua0xlbiA9IGNodW5rLmxlbmd0aDtcbiAgdmFyIGNodW5rUG9zID0gMDtcbiAgdmFyIGJ1ZmZlcjtcbiAgdmFyIGNodW5rTGVmdDtcbiAgdmFyIGlkO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKHN0YXR1cyA9PT0gJ2Rpc2NhcmQnKSB7XG4gICAgICBjaHVua0xlZnQgPSAoY2h1bmtMZW4gLSBjaHVua1Bvcyk7XG4gICAgICBpZiAocGt0TGVmdCA8PSBjaHVua0xlZnQpIHtcbiAgICAgICAgY2h1bmtQb3MgKz0gcGt0TGVmdDtcbiAgICAgICAgcGt0TGVmdCA9IDA7XG4gICAgICAgIHN0YXR1cyA9ICdwYWNrZXRfaGVhZGVyJztcbiAgICAgICAgYnVmZmVyID0gcGt0QnVmID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGt0TGVmdCAtPSBjaHVua0xlZnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGt0QnVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNodW5rTGVmdCA9IChjaHVua0xlbiAtIGNodW5rUG9zKTtcbiAgICAgIGlmIChwa3RMZWZ0IDw9IGNodW5rTGVmdCkge1xuICAgICAgICBjaHVuay5jb3B5KHBrdEJ1ZixcbiAgICAgICAgICAgICAgICAgICBwa3RCdWYubGVuZ3RoIC0gcGt0TGVmdCxcbiAgICAgICAgICAgICAgICAgICBjaHVua1BvcyxcbiAgICAgICAgICAgICAgICAgICBjaHVua1BvcyArIHBrdExlZnQpO1xuICAgICAgICBjaHVua1BvcyArPSBwa3RMZWZ0O1xuICAgICAgICBwa3RMZWZ0ID0gMDtcbiAgICAgICAgYnVmZmVyID0gcGt0QnVmO1xuICAgICAgICBwa3RCdWYgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2h1bmsuY29weShwa3RCdWYsIHBrdEJ1Zi5sZW5ndGggLSBwa3RMZWZ0LCBjaHVua1Bvcyk7XG4gICAgICAgIHBrdExlZnQgLT0gY2h1bmtMZWZ0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gJ3BhY2tldF9oZWFkZXInKSB7XG4gICAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICBwa3RMZWZ0ID0gNTtcbiAgICAgICAgcGt0QnVmID0gcGt0SGRyQnVmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaGVyZSB3ZSByZWFkIHRoZSByaWdodC1tb3N0IDUgYnl0ZXMgZnJvbSBidWZmZXIgKHBrdEhkckJ1ZilcbiAgICAgICAgcGt0TGVmdCA9IHJlYWRVSW50MzJCRShidWZmZXIsIDQpIC0gMTsgLy8gYWNjb3VudCBmb3IgdHlwZSBieXRlXG4gICAgICAgIHBrdFR5cGUgPSBidWZmZXJbOF07XG5cbiAgICAgICAgaWYgKHNlcnZlcikge1xuICAgICAgICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQgJiYgcGt0VHlwZSAhPT0gUkVRVUVTVC5JTklUKSB7XG4gICAgICAgICAgICBkZWJ1ZygnREVCVUdbU0ZUUF06IFBhcnNlcjogVW5leHBlY3RlZCBwYWNrZXQgYmVmb3JlIGluaXQnKTtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignVW5leHBlY3RlZCBwYWNrZXQgYmVmb3JlIGluaXQnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh2ZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgcGt0VHlwZSA9PT0gUkVRVUVTVC5JTklUKSB7XG4gICAgICAgICAgICBkZWJ1ZygnREVCVUdbU0ZUUF06IFBhcnNlcjogVW5leHBlY3RlZCBkdXBsaWNhdGUgaW5pdCcpO1xuICAgICAgICAgICAgc3RhdHVzID0gJ2JhZF9wa3QnO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGt0TGVmdCA+IE1BWF9QS1RfTEVOKSB7XG4gICAgICAgICAgICB2YXIgbXNnID0gJ1BhY2tldCBsZW5ndGggKCdcbiAgICAgICAgICAgICAgICAgICAgICArIHBrdExlZnRcbiAgICAgICAgICAgICAgICAgICAgICArICcpIGV4Y2VlZHMgbWF4IGxlbmd0aCAoJ1xuICAgICAgICAgICAgICAgICAgICAgICsgTUFYX1BLVF9MRU5cbiAgICAgICAgICAgICAgICAgICAgICArICcpJztcbiAgICAgICAgICAgIGRlYnVnKCdERUJVR1tTRlRQXTogUGFyc2VyOiAnICsgbXNnKTtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBrdFR5cGUgPT09IFJFUVVFU1QuRVhURU5ERUQpIHtcbiAgICAgICAgICAgIHN0YXR1cyA9ICdiYWRfcGt0JztcbiAgICAgICAgICB9IGVsc2UgaWYgKFJFUVVFU1RbcGt0VHlwZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVidWcoJ0RFQlVHW1NGVFBdOiBQYXJzZXI6IFVuc3VwcG9ydGVkIHBhY2tldCB0eXBlOiAnICsgcGt0VHlwZSk7XG4gICAgICAgICAgICBzdGF0dXMgPSAnZGlzY2FyZCc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCAmJiBwa3RUeXBlICE9PSBSRVNQT05TRS5WRVJTSU9OKSB7XG4gICAgICAgICAgZGVidWcoJ0RFQlVHW1NGVFBdOiBQYXJzZXI6IFVuZXhwZWN0ZWQgcGFja2V0IGJlZm9yZSB2ZXJzaW9uJyk7XG4gICAgICAgICAgdGhpcy5fY2xlYW51cChmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignVW5leHBlY3RlZCBwYWNrZXQgYmVmb3JlIHZlcnNpb24nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmIHBrdFR5cGUgPT09IFJFU1BPTlNFLlZFUlNJT04pIHtcbiAgICAgICAgICBkZWJ1ZygnREVCVUdbU0ZUUF06IFBhcnNlcjogVW5leHBlY3RlZCBkdXBsaWNhdGUgdmVyc2lvbicpO1xuICAgICAgICAgIHN0YXR1cyA9ICdiYWRfcGt0JztcbiAgICAgICAgfSBlbHNlIGlmIChSRVNQT05TRVtwa3RUeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RhdHVzID0gJ2Rpc2NhcmQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2JhZF9wa3QnKSB7XG4gICAgICAgICAgLy8gQ29weSBvcmlnaW5hbCBwYWNrZXQgaW5mbyB0byBsZWZ0IG9mIHBrdEhkckJ1ZlxuICAgICAgICAgIHdyaXRlVUludDMyQkUocGt0SGRyQnVmLCBwa3RMZWZ0ICsgMSwgMCk7XG4gICAgICAgICAgcGt0SGRyQnVmWzRdID0gcGt0VHlwZTtcblxuICAgICAgICAgIHBrdExlZnQgPSA0O1xuICAgICAgICAgIHBrdEJ1ZiA9IHBrdEhkckJ1ZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwa3RCdWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUocGt0TGVmdCk7XG4gICAgICAgICAgc3RhdHVzID0gJ3BheWxvYWQnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0dXMgPT09ICdwYXlsb2FkJykge1xuICAgICAgaWYgKHBrdFR5cGUgPT09IFJFU1BPTlNFLlZFUlNJT04gfHwgcGt0VHlwZSA9PT0gUkVRVUVTVC5JTklUKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgdWludDMyIHZlcnNpb25cbiAgICAgICAgICA8ZXh0ZW5zaW9uIGRhdGE+XG4gICAgICAgICovXG4gICAgICAgIHZlcnNpb24gPSBzdGF0ZS52ZXJzaW9uID0gcmVhZEludChidWZmZXIsIDAsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKHZlcnNpb24gPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHZlcnNpb24gPCAzKSB7XG4gICAgICAgICAgdGhpcy5fY2xlYW51cChmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignSW5jb21wYXRpYmxlIFNGVFAgdmVyc2lvbjogJyArIHZlcnNpb24pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzZXJ2ZXIpXG4gICAgICAgICAgdGhpcy5wdXNoKFNFUlZFUl9WRVJTSU9OX0JVRkZFUik7XG5cbiAgICAgICAgdmFyIGJ1ZmxlbiA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgIHZhciBleHRuYW1lO1xuICAgICAgICB2YXIgZXh0ZGF0YTtcbiAgICAgICAgYnVmZmVyLl9wb3MgPSA0O1xuICAgICAgICB3aGlsZSAoYnVmZmVyLl9wb3MgPCBidWZsZW4pIHtcbiAgICAgICAgICBleHRuYW1lID0gcmVhZFN0cmluZyhidWZmZXIsIGJ1ZmZlci5fcG9zLCAnYXNjaWknLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKGV4dG5hbWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGV4dGRhdGEgPSByZWFkU3RyaW5nKGJ1ZmZlciwgYnVmZmVyLl9wb3MsICdhc2NpaScsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICBpZiAoZXh0ZGF0YSA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgaWYgKHN0YXRlLmV4dGVuc2lvbnNbZXh0bmFtZV0pXG4gICAgICAgICAgICBzdGF0ZS5leHRlbnNpb25zW2V4dG5hbWVdLnB1c2goZXh0ZGF0YSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3RhdGUuZXh0ZW5zaW9uc1tleHRuYW1lXSA9IFsgZXh0ZGF0YSBdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbWl0KCdyZWFkeScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLypcbiAgICAgICAgICBBbGwgb3RoZXIgcGFja2V0cyAoY2xpZW50IGFuZCBzZXJ2ZXIpIGJlZ2luIHdpdGggYSAoY2xpZW50KSByZXF1ZXN0XG4gICAgICAgICAgaWQ6XG4gICAgICAgICAgdWludDMyICAgICBpZFxuICAgICAgICAqL1xuICAgICAgICBpZCA9IHJlYWRJbnQoYnVmZmVyLCAwLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgIGlmIChpZCA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBmaWxlbmFtZTtcbiAgICAgICAgdmFyIGF0dHJzO1xuICAgICAgICB2YXIgaGFuZGxlO1xuICAgICAgICB2YXIgZGF0YTtcblxuICAgICAgICBpZiAoIXNlcnZlcikge1xuICAgICAgICAgIHZhciByZXEgPSByZXF1ZXN0c1tpZF07XG4gICAgICAgICAgdmFyIGNiID0gcmVxICYmIHJlcS5jYjtcbiAgICAgICAgICBkZWJ1ZygnREVCVUdbU0ZUUF06IFBhcnNlcjogUmVzcG9uc2U6ICcgKyBSRVNQT05TRVtwa3RUeXBlXSk7XG4gICAgICAgICAgaWYgKHJlcSAmJiBjYikge1xuICAgICAgICAgICAgaWYgKHBrdFR5cGUgPT09IFJFU1BPTlNFLlNUQVRVUykge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIHVpbnQzMiAgICAgZXJyb3Ivc3RhdHVzIGNvZGVcbiAgICAgICAgICAgICAgICBzdHJpbmcgICAgIGVycm9yIG1lc3NhZ2UgKElTTy0xMDY0NiBVVEYtOClcbiAgICAgICAgICAgICAgICBzdHJpbmcgICAgIGxhbmd1YWdlIHRhZ1xuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICB2YXIgY29kZSA9IHJlYWRJbnQoYnVmZmVyLCA0LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChjb2RlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIGlmIChjb2RlID09PSBTVEFUVVNfQ09ERS5PSykge1xuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYm9ycm93IE9wZW5TU0ggYmVoYXZpb3IgaGVyZSwgc3BlY2lmaWNhbGx5IHdlIG1ha2UgdGhlXG4gICAgICAgICAgICAgICAgLy8gbWVzc2FnZSBhbmQgbGFuZ3VhZ2UgZmllbGRzIG9wdGlvbmFsLCBkZXNwaXRlIHRoZVxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljYXRpb24gcmVxdWlyaW5nIHRoZW0gKGV2ZW4gaWYgdGhleSBhcmUgZW1wdHkpLiBUaGlzXG4gICAgICAgICAgICAgICAgLy8gaGVscHMgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBidWdneSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkb1xuICAgICAgICAgICAgICAgIC8vIG5vdCBmdWxseSBjb25mb3JtIHRvIHRoZSBTRlRQKHYzKSBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgICAgICAgIHZhciBtc2c7XG4gICAgICAgICAgICAgICAgdmFyIGxhbmcgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+PSAxMikge1xuICAgICAgICAgICAgICAgICAgbXNnID0gcmVhZFN0cmluZyhidWZmZXIsIDgsICd1dGY4JywgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgaWYgKG1zZyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGlmICgoYnVmZmVyLl9wb3MgKyA0KSA8IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZyA9IHJlYWRTdHJpbmcoYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuX3BvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzY2lpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFuZyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gMiB8fCBjb2RlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAvLyBkb250IHNwaXQgYW4gZXJyb3IgZm9yIHRoZXNlIHR3b1xuICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IobXNnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFNUQVRVU19DT0RFX1NUUltjb2RlXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAnVW5rbm93biBzdGF0dXMnKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyLmNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICBlcnIubGFuZyA9IGxhbmc7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwa3RUeXBlID09PSBSRVNQT05TRS5IQU5ETEUpIHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBzdHJpbmcgICAgIGhhbmRsZVxuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBoYW5kbGUgPSByZWFkU3RyaW5nKGJ1ZmZlciwgNCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoaGFuZGxlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIGNiKHVuZGVmaW5lZCwgaGFuZGxlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVTUE9OU0UuREFUQSkge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIHN0cmluZyAgICAgZGF0YVxuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBpZiAocmVxLmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYWxyZWFkeSBwcmUtYWxsb2NhdGVkIHNwYWNlIHRvIHN0b3JlIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgdmFyIGRhdGFMZW4gPSByZWFkSW50KGJ1ZmZlciwgNCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhTGVuID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB2YXIgcmVxQnVmTGVuID0gcmVxLmJ1ZmZlci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFMZW4gPiByZXFCdWZMZW4pIHtcbiAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHJlc3BvbnNlIGRhdGEgdG8gZml0IGV4cGVjdGVkIHNpemVcbiAgICAgICAgICAgICAgICAgIHdyaXRlVUludDMyQkUoYnVmZmVyLCByZXFCdWZMZW4sIDQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhID0gcmVhZFN0cmluZyhidWZmZXIsIDQsIHJlcS5idWZmZXIsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2IodW5kZWZpbmVkLCBkYXRhLCBkYXRhTGVuKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gcmVhZFN0cmluZyhidWZmZXIsIDQsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2IodW5kZWZpbmVkLCBkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwa3RUeXBlID09PSBSRVNQT05TRS5OQU1FKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgdWludDMyICAgICBjb3VudFxuICAgICAgICAgICAgICAgIHJlcGVhdHMgY291bnQgdGltZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgICAgIGZpbGVuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgICAgIGxvbmduYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBBVFRSUyAgICAgIGF0dHJzXG4gICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIHZhciBuYW1lc0xlbiA9IHJlYWRJbnQoYnVmZmVyLCA0LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChuYW1lc0xlbiA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBbXSxcbiAgICAgICAgICAgICAgICAgIGxvbmduYW1lO1xuICAgICAgICAgICAgICBidWZmZXIuX3BvcyA9IDg7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXNMZW47ICsraSkge1xuICAgICAgICAgICAgICAgIC8vIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgVVRGLTggZm9yIGZpbGVuYW1lcyBkZXNwaXRlIHRoZSBTRlRQdjNcbiAgICAgICAgICAgICAgICAvLyBzcGVjIG5vdCBzcGVjaWZ5aW5nIGFuIGVuY29kaW5nIGJlY2F1c2UgdGhlIHNwZWNzIGZvciBuZXdlclxuICAgICAgICAgICAgICAgIC8vIHZlcnNpb25zIG9mIHRoZSBwcm90b2NvbCBhbGwgZXhwbGljaXRseSBzcGVjaWZ5IFVURi04IGZvclxuICAgICAgICAgICAgICAgIC8vIGZpbGVuYW1lc1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gcmVhZFN0cmluZyhidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5fcG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmOCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZW5hbWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIC8vIGBsb25nbmFtZWAgb25seSBleGlzdHMgaW4gU0ZUUHYzIGFuZCBzaW5jZSBpdCB0eXBpY2FsbHkgd2lsbFxuICAgICAgICAgICAgICAgIC8vIGNvbnRhaW4gdGhlIGZpbGVuYW1lLCB3ZSBhc3N1bWUgaXQgaXMgYWxzbyBVVEYtOFxuICAgICAgICAgICAgICAgIGxvbmduYW1lID0gcmVhZFN0cmluZyhidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5fcG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmOCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAobG9uZ25hbWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF0dHJzID0gcmVhZEF0dHJzKGJ1ZmZlciwgYnVmZmVyLl9wb3MsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoYXR0cnMgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgbG9uZ25hbWU6IGxvbmduYW1lLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IGF0dHJzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2IodW5kZWZpbmVkLCBuYW1lcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBrdFR5cGUgPT09IFJFU1BPTlNFLkFUVFJTKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgQVRUUlMgICAgICBhdHRyc1xuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBhdHRycyA9IHJlYWRBdHRycyhidWZmZXIsIDQsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGF0dHJzID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIGNiKHVuZGVmaW5lZCwgYXR0cnMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwa3RUeXBlID09PSBSRVNQT05TRS5FWFRFTkRFRCkge1xuICAgICAgICAgICAgICBpZiAocmVxLmV4dGVuZGVkKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChyZXEuZXh0ZW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXR2ZnNAb3BlbnNzaC5jb20nOlxuICAgICAgICAgICAgICAgICAgY2FzZSAnZnN0YXR2ZnNAb3BlbnNzaC5jb20nOlxuICAgICAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NCAgICBmX2JzaXplICAgLy8gZmlsZSBzeXN0ZW0gYmxvY2sgc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NCAgICBmX2Zyc2l6ZSAgLy8gZnVuZGFtZW50YWwgZnMgYmxvY2sgc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NCAgICBmX2Jsb2NrcyAgLy8gbnVtYmVyIG9mIGJsb2NrcyAodW5pdCBmX2Zyc2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgICB1aW50NjQgICAgZl9iZnJlZSAgIC8vIGZyZWUgYmxvY2tzIGluIGZpbGUgc3lzdGVtXG4gICAgICAgICAgICAgICAgICAgICAgdWludDY0ICAgIGZfYmF2YWlsICAvLyBmcmVlIGJsb2NrcyBmb3Igbm9uLXJvb3RcbiAgICAgICAgICAgICAgICAgICAgICB1aW50NjQgICAgZl9maWxlcyAgIC8vIHRvdGFsIGZpbGUgaW5vZGVzXG4gICAgICAgICAgICAgICAgICAgICAgdWludDY0ICAgIGZfZmZyZWUgICAvLyBmcmVlIGZpbGUgaW5vZGVzXG4gICAgICAgICAgICAgICAgICAgICAgdWludDY0ICAgIGZfZmF2YWlsICAvLyBmcmVlIGZpbGUgaW5vZGVzIGZvciB0byBub24tcm9vdFxuICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NCAgICBmX2ZzaWQgICAgLy8gZmlsZSBzeXN0ZW0gaWRcbiAgICAgICAgICAgICAgICAgICAgICB1aW50NjQgICAgZl9mbGFnICAgIC8vIGJpdCBtYXNrIG9mIGZfZmxhZyB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICB1aW50NjQgICAgZl9uYW1lbWF4IC8vIG1heGltdW0gZmlsZW5hbWUgbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGF0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBmX2JzaXplOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgZl9mcnNpemU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBmX2Jsb2NrczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIGZfYmZyZWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBmX2JhdmFpbDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIGZfZmlsZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBmX2ZmcmVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgZl9mYXZhaWw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBmX3NpZDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIGZfZmxhZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIGZfbmFtZW1heDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZfYnNpemUgPSByZWFkVUludDY0QkUoYnVmZmVyLCA0LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5mX2JzaXplID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZfZnJzaXplID0gcmVhZFVJbnQ2NEJFKGJ1ZmZlciwgMTIsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLmZfZnJzaXplID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZfYmxvY2tzID0gcmVhZFVJbnQ2NEJFKGJ1ZmZlciwgMjAsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLmZfYmxvY2tzID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZfYmZyZWUgPSByZWFkVUludDY0QkUoYnVmZmVyLCAyOCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZl9iZnJlZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBzdGF0cy5mX2JhdmFpbCA9IHJlYWRVSW50NjRCRShidWZmZXIsIDM2LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5mX2JhdmFpbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBzdGF0cy5mX2ZpbGVzID0gcmVhZFVJbnQ2NEJFKGJ1ZmZlciwgNDQsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLmZfZmlsZXMgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHMuZl9mZnJlZSA9IHJlYWRVSW50NjRCRShidWZmZXIsIDUyLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5mX2ZmcmVlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZfZmF2YWlsID0gcmVhZFVJbnQ2NEJFKGJ1ZmZlciwgNjAsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLmZfZmF2YWlsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZfc2lkID0gcmVhZFVJbnQ2NEJFKGJ1ZmZlciwgNjgsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLmZfc2lkID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZfZmxhZyA9IHJlYWRVSW50NjRCRShidWZmZXIsIDc2LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5mX2ZsYWcgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHMuZl9uYW1lbWF4ID0gcmVhZFVJbnQ2NEJFKGJ1ZmZlciwgODQsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLmZfbmFtZW1heCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBjYih1bmRlZmluZWQsIHN0YXRzKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBYWFg6IGF0IGxlYXN0IHByb3ZpZGUgdGhlIHJhdyBidWZmZXIgZGF0YSB0byB0aGUgY2FsbGJhY2sgaW5cbiAgICAgICAgICAgICAgLy8gY2FzZSBvZiB1bmV4cGVjdGVkIGV4dGVuZGVkIHJlc3BvbnNlP1xuICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVxKVxuICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3RzW2lkXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzZXJ2ZXJcbiAgICAgICAgICB2YXIgZXZOYW1lID0gUkVRVUVTVFtwa3RUeXBlXTtcbiAgICAgICAgICB2YXIgb2Zmc2V0O1xuICAgICAgICAgIHZhciBwYXRoO1xuXG4gICAgICAgICAgZGVidWcoJ0RFQlVHW1NGVFBdOiBQYXJzZXI6IFJlcXVlc3Q6ICcgKyBldk5hbWUpO1xuICAgICAgICAgIGlmIChsaXN0ZW5lckNvdW50KHRoaXMsIGV2TmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChwa3RUeXBlID09PSBSRVFVRVNULk9QRU4pIHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBzdHJpbmcgICAgICAgIGZpbGVuYW1lXG4gICAgICAgICAgICAgICAgdWludDMyICAgICAgICBwZmxhZ3NcbiAgICAgICAgICAgICAgICBBVFRSUyAgICAgICAgIGF0dHJzXG4gICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGZpbGVuYW1lID0gcmVhZFN0cmluZyhidWZmZXIsIDQsICd1dGY4JywgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoZmlsZW5hbWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgdmFyIHBmbGFncyA9IHJlYWRJbnQoYnVmZmVyLCBidWZmZXIuX3BvcywgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAocGZsYWdzID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIGF0dHJzID0gcmVhZEF0dHJzKGJ1ZmZlciwgYnVmZmVyLl9wb3MgKyA0LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChhdHRycyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB0aGlzLmVtaXQoZXZOYW1lLCBpZCwgZmlsZW5hbWUsIHBmbGFncywgYXR0cnMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwa3RUeXBlID09PSBSRVFVRVNULkNMT1NFXG4gICAgICAgICAgICAgICAgICAgICAgIHx8IHBrdFR5cGUgPT09IFJFUVVFU1QuRlNUQVRcbiAgICAgICAgICAgICAgICAgICAgICAgfHwgcGt0VHlwZSA9PT0gUkVRVUVTVC5SRUFERElSKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgc3RyaW5nICAgICBoYW5kbGVcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgaGFuZGxlID0gcmVhZFN0cmluZyhidWZmZXIsIDQsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB0aGlzLmVtaXQoZXZOYW1lLCBpZCwgaGFuZGxlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVRVUVTVC5SRUFEKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgc3RyaW5nICAgICBoYW5kbGVcbiAgICAgICAgICAgICAgICB1aW50NjQgICAgIG9mZnNldFxuICAgICAgICAgICAgICAgIHVpbnQzMiAgICAgbGVuXG4gICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGhhbmRsZSA9IHJlYWRTdHJpbmcoYnVmZmVyLCA0LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChoYW5kbGUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gcmVhZFVJbnQ2NEJFKGJ1ZmZlciwgYnVmZmVyLl9wb3MsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB2YXIgbGVuID0gcmVhZEludChidWZmZXIsIGJ1ZmZlci5fcG9zLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChsZW4gPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KGV2TmFtZSwgaWQsIGhhbmRsZSwgb2Zmc2V0LCBsZW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwa3RUeXBlID09PSBSRVFVRVNULldSSVRFKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgc3RyaW5nICAgICBoYW5kbGVcbiAgICAgICAgICAgICAgICB1aW50NjQgICAgIG9mZnNldFxuICAgICAgICAgICAgICAgIHN0cmluZyAgICAgZGF0YVxuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBoYW5kbGUgPSByZWFkU3RyaW5nKGJ1ZmZlciwgNCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoaGFuZGxlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIG9mZnNldCA9IHJlYWRVSW50NjRCRShidWZmZXIsIGJ1ZmZlci5fcG9zLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgZGF0YSA9IHJlYWRTdHJpbmcoYnVmZmVyLCBidWZmZXIuX3BvcywgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoZGF0YSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB0aGlzLmVtaXQoZXZOYW1lLCBpZCwgaGFuZGxlLCBvZmZzZXQsIGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwa3RUeXBlID09PSBSRVFVRVNULkxTVEFUXG4gICAgICAgICAgICAgICAgICAgICAgIHx8IHBrdFR5cGUgPT09IFJFUVVFU1QuU1RBVFxuICAgICAgICAgICAgICAgICAgICAgICB8fCBwa3RUeXBlID09PSBSRVFVRVNULk9QRU5ESVJcbiAgICAgICAgICAgICAgICAgICAgICAgfHwgcGt0VHlwZSA9PT0gUkVRVUVTVC5SRU1PVkVcbiAgICAgICAgICAgICAgICAgICAgICAgfHwgcGt0VHlwZSA9PT0gUkVRVUVTVC5STURJUlxuICAgICAgICAgICAgICAgICAgICAgICB8fCBwa3RUeXBlID09PSBSRVFVRVNULlJFQUxQQVRIXG4gICAgICAgICAgICAgICAgICAgICAgIHx8IHBrdFR5cGUgPT09IFJFUVVFU1QuUkVBRExJTkspIHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBzdHJpbmcgICAgIHBhdGhcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgcGF0aCA9IHJlYWRTdHJpbmcoYnVmZmVyLCA0LCAndXRmOCcsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KGV2TmFtZSwgaWQsIHBhdGgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwa3RUeXBlID09PSBSRVFVRVNULlNFVFNUQVRcbiAgICAgICAgICAgICAgICAgICAgICAgfHwgcGt0VHlwZSA9PT0gUkVRVUVTVC5NS0RJUikge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIHN0cmluZyAgICAgcGF0aFxuICAgICAgICAgICAgICAgIEFUVFJTICAgICAgYXR0cnNcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgcGF0aCA9IHJlYWRTdHJpbmcoYnVmZmVyLCA0LCAndXRmOCcsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgYXR0cnMgPSByZWFkQXR0cnMoYnVmZmVyLCBidWZmZXIuX3BvcywgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoYXR0cnMgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KGV2TmFtZSwgaWQsIHBhdGgsIGF0dHJzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVRVUVTVC5GU0VUU1RBVCkge1xuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIHN0cmluZyAgICAgaGFuZGxlXG4gICAgICAgICAgICAgICAgQVRUUlMgICAgICBhdHRyc1xuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBoYW5kbGUgPSByZWFkU3RyaW5nKGJ1ZmZlciwgNCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoaGFuZGxlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIGF0dHJzID0gcmVhZEF0dHJzKGJ1ZmZlciwgYnVmZmVyLl9wb3MsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGF0dHJzID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIHRoaXMuZW1pdChldk5hbWUsIGlkLCBoYW5kbGUsIGF0dHJzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGt0VHlwZSA9PT0gUkVRVUVTVC5SRU5BTUVcbiAgICAgICAgICAgICAgICAgICAgICAgfHwgcGt0VHlwZSA9PT0gUkVRVUVTVC5TWU1MSU5LKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgUkVOQU1FOlxuICAgICAgICAgICAgICAgICAgc3RyaW5nICAgICBvbGRwYXRoXG4gICAgICAgICAgICAgICAgICBzdHJpbmcgICAgIG5ld3BhdGhcbiAgICAgICAgICAgICAgICBTWU1MSU5LOlxuICAgICAgICAgICAgICAgICAgc3RyaW5nICAgICBsaW5rcGF0aFxuICAgICAgICAgICAgICAgICAgc3RyaW5nICAgICB0YXJnZXRwYXRoXG4gICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIHZhciBzdHIxO1xuICAgICAgICAgICAgICB2YXIgc3RyMjtcbiAgICAgICAgICAgICAgc3RyMSA9IHJlYWRTdHJpbmcoYnVmZmVyLCA0LCAndXRmOCcsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKHN0cjEgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgc3RyMiA9IHJlYWRTdHJpbmcoYnVmZmVyLCBidWZmZXIuX3BvcywgJ3V0ZjgnLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChzdHIyID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIGlmIChwa3RUeXBlID09PSBSRVFVRVNULlNZTUxJTksgJiYgdGhpcy5faXNPcGVuU1NIKSB7XG4gICAgICAgICAgICAgICAgLy8gT3BlblNTSCBoYXMgbGlua3BhdGggYW5kIHRhcmdldHBhdGggcG9zaXRpb25zIHN3aXRjaGVkXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KGV2TmFtZSwgaWQsIHN0cjIsIHN0cjEpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoZXZOYW1lLCBpZCwgc3RyMSwgc3RyMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgcmVqZWN0IHJlcXVlc3QgaWYgbm8gaGFuZGxlciBmb3IgcmVxdWVzdCB0eXBlXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyhpZCwgU1RBVFVTX0NPREUuT1BfVU5TVVBQT1JURUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwcmVwYXJlIGZvciBuZXh0IHBhY2tldFxuICAgICAgc3RhdHVzID0gJ3BhY2tldF9oZWFkZXInO1xuICAgICAgYnVmZmVyID0gcGt0QnVmID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAnYmFkX3BrdCcpIHtcbiAgICAgIGlmIChzZXJ2ZXIgJiYgYnVmZmVyWzRdICE9PSBSRVFVRVNULklOSVQpIHtcbiAgICAgICAgdmFyIGVyckNvZGUgPSAoYnVmZmVyWzRdID09PSBSRVFVRVNULkVYVEVOREVEXG4gICAgICAgICAgICAgICAgICAgICAgID8gU1RBVFVTX0NPREUuT1BfVU5TVVBQT1JURURcbiAgICAgICAgICAgICAgICAgICAgICAgOiBTVEFUVVNfQ09ERS5GQUlMVVJFKTtcblxuICAgICAgICAvLyBubyByZXF1ZXN0IGlkIGZvciBpbml0L3ZlcnNpb24gcGFja2V0cywgc28gd2UgaGF2ZSBubyB3YXkgdG8gc2VuZCBhXG4gICAgICAgIC8vIHN0YXR1cyByZXNwb25zZSwgc28gd2UganVzdCBjbG9zZSB1cCBzaG9wIC4uLlxuICAgICAgICBpZiAoYnVmZmVyWzRdID09PSBSRVFVRVNULklOSVQgfHwgYnVmZmVyWzRdID09PSBSRVNQT05TRS5WRVJTSU9OKVxuICAgICAgICAgIHJldHVybiB0aGlzLl9jbGVhbnVwKGNhbGxiYWNrKTtcblxuICAgICAgICBpZCA9IHJlYWRJbnQoYnVmZmVyLCA1LCB0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgIGlmIChpZCA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnN0YXR1cyhpZCwgZXJyQ29kZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGJ5IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgdGhlIHR5cGUgYnl0ZSBhbmQgdGhlIGlkIGJ5dGVzLCBzb1xuICAgICAgLy8gd2Ugc3VidHJhY3QgdGhvc2UgZnJvbSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXBcbiAgICAgIHBrdExlZnQgPSByZWFkVUludDMyQkUoYnVmZmVyLCAwKSAtIDU7XG5cbiAgICAgIHN0YXR1cyA9ICdkaXNjYXJkJztcbiAgICB9XG5cbiAgICBpZiAoY2h1bmtQb3MgPj0gY2h1bmtMZW4pXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHN0YXRlLnN0YXR1cyA9IHN0YXR1cztcbiAgc3RhdGUucGt0VHlwZSA9IHBrdFR5cGU7XG4gIHN0YXRlLnBrdEJ1ZiA9IHBrdEJ1ZjtcbiAgc3RhdGUucGt0TGVmdCA9IHBrdExlZnQ7XG4gIHN0YXRlLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG4gIGNhbGxiYWNrKCk7XG59O1xuXG4vLyBjbGllbnRcblNGVFBTdHJlYW0ucHJvdG90eXBlLmNyZWF0ZVJlYWRTdHJlYW0gPSBmdW5jdGlvbihwYXRoLCBvcHRpb25zKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICByZXR1cm4gbmV3IFJlYWRTdHJlYW0odGhpcywgcGF0aCwgb3B0aW9ucyk7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuY3JlYXRlV3JpdGVTdHJlYW0gPSBmdW5jdGlvbihwYXRoLCBvcHRpb25zKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICByZXR1cm4gbmV3IFdyaXRlU3RyZWFtKHRoaXMsIHBhdGgsIG9wdGlvbnMpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihwYXRoLCBmbGFnc18sIGF0dHJzLCBjYikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBhdHRycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gYXR0cnM7XG4gICAgYXR0cnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgZmxhZ3MgPSAodHlwZW9mIGZsYWdzXyA9PT0gJ251bWJlcicgPyBmbGFnc18gOiBzdHJpbmdUb0ZsYWdzKGZsYWdzXykpO1xuICBpZiAoZmxhZ3MgPT09IG51bGwpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZsYWdzIHN0cmluZzogJyArIGZsYWdzXyk7XG5cbiAgdmFyIGF0dHJGbGFncyA9IDA7XG4gIHZhciBhdHRyQnl0ZXMgPSAwO1xuICBpZiAodHlwZW9mIGF0dHJzID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXR0cnMgPT09ICdudW1iZXInKSB7XG4gICAgYXR0cnMgPSB7IG1vZGU6IGF0dHJzIH07XG4gIH1cbiAgaWYgKHR5cGVvZiBhdHRycyA9PT0gJ29iamVjdCcgJiYgYXR0cnMgIT09IG51bGwpIHtcbiAgICBhdHRycyA9IGF0dHJzVG9CeXRlcyhhdHRycyk7XG4gICAgYXR0ckZsYWdzID0gYXR0cnMuZmxhZ3M7XG4gICAgYXR0ckJ5dGVzID0gYXR0cnMubmJ5dGVzO1xuICAgIGF0dHJzID0gYXR0cnMuYnl0ZXM7XG4gIH1cblxuICAvKlxuICAgIHVpbnQzMiAgICAgICAgaWRcbiAgICBzdHJpbmcgICAgICAgIGZpbGVuYW1lXG4gICAgdWludDMyICAgICAgICBwZmxhZ3NcbiAgICBBVFRSUyAgICAgICAgIGF0dHJzXG4gICovXG4gIHZhciBwYXRobGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgcGF0aGxlbiArIDQgKyA0ICsgYXR0ckJ5dGVzKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULk9QRU47XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwYXRobGVuLCBwKTtcbiAgYnVmLndyaXRlKHBhdGgsIHAgKz0gNCwgcGF0aGxlbiwgJ3V0ZjgnKTtcbiAgd3JpdGVVSW50MzJCRShidWYsIGZsYWdzLCBwICs9IHBhdGhsZW4pO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYXR0ckZsYWdzLCBwICs9IDQpO1xuICBpZiAoYXR0cnMgJiYgYXR0ckZsYWdzKSB7XG4gICAgcCArPSA0O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhdHRycy5sZW5ndGg7IGkgPCBsZW47ICsraSlcbiAgICAgIGZvciAodmFyIGogPSAwLCBsZW4yID0gYXR0cnNbaV0ubGVuZ3RoOyBqIDwgbGVuMjsgKytqKVxuICAgICAgICBidWZbcCsrXSA9IGF0dHJzW2ldW2pdO1xuICB9XG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHsgY2I6IGNiIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIE9QRU4nKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oaGFuZGxlLCBjYikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG4gIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoaGFuZGxlKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZSBpcyBub3QgYSBCdWZmZXInKTtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIGhhbmRsZVxuICAqL1xuICB2YXIgaGFuZGxlbGVuID0gaGFuZGxlLmxlbmd0aDtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBoYW5kbGVsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuQ0xPU0U7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBoYW5kbGVsZW4sIHApO1xuICBoYW5kbGUuY29weShidWYsIHAgKz0gNCk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0geyBjYjogY2IgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgQ0xPU0UnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLnJlYWREYXRhID0gZnVuY3Rpb24oaGFuZGxlLCBidWYsIG9mZiwgbGVuLCBwb3NpdGlvbiwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuICBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhbmRsZSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGUgaXMgbm90IGEgQnVmZmVyJyk7XG4gIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBub3QgYSBCdWZmZXInKTtcbiAgZWxzZSBpZiAob2ZmID49IGJ1Zi5sZW5ndGgpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdvZmZzZXQgaXMgb3V0IG9mIGJvdW5kcycpO1xuICBlbHNlIGlmIChvZmYgKyBsZW4gPiBidWYubGVuZ3RoKVxuICAgIHRocm93IG5ldyBFcnJvcignbGVuZ3RoIGV4dGVuZHMgYmV5b25kIGJ1ZmZlcicpO1xuICBlbHNlIGlmIChwb3NpdGlvbiA9PT0gbnVsbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ251bGwgcG9zaXRpb24gY3VycmVudGx5IHVuc3VwcG9ydGVkJyk7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgLypcbiAgICB1aW50MzIgICAgIGlkXG4gICAgc3RyaW5nICAgICBoYW5kbGVcbiAgICB1aW50NjQgICAgIG9mZnNldFxuICAgIHVpbnQzMiAgICAgbGVuXG4gICovXG4gIHZhciBoYW5kbGVsZW4gPSBoYW5kbGUubGVuZ3RoO1xuICB2YXIgcCA9IDk7XG4gIHZhciBwb3MgPSBwb3NpdGlvbjtcbiAgdmFyIG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgaGFuZGxlbGVuICsgOCArIDQpO1xuXG4gIHdyaXRlVUludDMyQkUob3V0LCBvdXQubGVuZ3RoIC0gNCwgMCk7XG4gIG91dFs0XSA9IFJFUVVFU1QuUkVBRDtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUob3V0LCByZXFpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShvdXQsIGhhbmRsZWxlbiwgcCk7XG4gIGhhbmRsZS5jb3B5KG91dCwgcCArPSA0KTtcbiAgcCArPSBoYW5kbGVsZW47XG4gIGZvciAodmFyIGkgPSA3OyBpID49IDA7IC0taSkge1xuICAgIG91dFtwICsgaV0gPSBwb3MgJiAweEZGO1xuICAgIHBvcyAvPSAyNTY7XG4gIH1cbiAgd3JpdGVVSW50MzJCRShvdXQsIGxlbiwgcCArPSA4KTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7XG4gICAgY2I6IGZ1bmN0aW9uKGVyciwgZGF0YSwgbmIpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKGNiLl93YW50RU9GRXJyb3IgfHwgZXJyLmNvZGUgIT09IFNUQVRVU19DT0RFLkVPRilcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAobmIgPiBsZW4pIHtcbiAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignUmVjZWl2ZWQgbW9yZSBkYXRhIHRoYW4gcmVxdWVzdGVkJykpO1xuICAgICAgfVxuICAgICAgY2IodW5kZWZpbmVkLCBuYiB8fCAwLCBkYXRhLCBwb3NpdGlvbik7XG4gICAgfSxcbiAgICBidWZmZXI6IGJ1Zi5zbGljZShvZmYsIG9mZiArIGxlbilcbiAgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgUkVBRCcpO1xuICByZXR1cm4gdGhpcy5wdXNoKG91dCk7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUud3JpdGVEYXRhID0gZnVuY3Rpb24oaGFuZGxlLCBidWYsIG9mZiwgbGVuLCBwb3NpdGlvbiwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuICBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhbmRsZSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGUgaXMgbm90IGEgQnVmZmVyJyk7XG4gIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBub3QgYSBCdWZmZXInKTtcbiAgZWxzZSBpZiAob2ZmID4gYnVmLmxlbmd0aClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ29mZnNldCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gIGVsc2UgaWYgKG9mZiArIGxlbiA+IGJ1Zi5sZW5ndGgpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggZXh0ZW5kcyBiZXlvbmQgYnVmZmVyJyk7XG4gIGVsc2UgaWYgKHBvc2l0aW9uID09PSBudWxsKVxuICAgIHRocm93IG5ldyBFcnJvcignbnVsbCBwb3NpdGlvbiBjdXJyZW50bHkgdW5zdXBwb3J0ZWQnKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIGlmICghbGVuKSB7XG4gICAgY2IgJiYgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHsgY2IodW5kZWZpbmVkLCAwKTsgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG92ZXJmbG93ID0gKGxlbiA+IHN0YXRlLm1heERhdGFMZW5cbiAgICAgICAgICAgICAgICAgID8gbGVuIC0gc3RhdGUubWF4RGF0YUxlblxuICAgICAgICAgICAgICAgICAgOiAwKTtcbiAgdmFyIG9yaWdQb3NpdGlvbiA9IHBvc2l0aW9uO1xuXG4gIGlmIChvdmVyZmxvdylcbiAgICBsZW4gPSBzdGF0ZS5tYXhEYXRhTGVuO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgaGFuZGxlXG4gICAgdWludDY0ICAgICBvZmZzZXRcbiAgICBzdHJpbmcgICAgIGRhdGFcbiAgKi9cbiAgdmFyIGhhbmRsZWxlbiA9IGhhbmRsZS5sZW5ndGg7XG4gIHZhciBwID0gOTtcbiAgdmFyIG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgaGFuZGxlbGVuICsgOCArIDQgKyBsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUob3V0LCBvdXQubGVuZ3RoIC0gNCwgMCk7XG4gIG91dFs0XSA9IFJFUVVFU1QuV1JJVEU7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKG91dCwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUob3V0LCBoYW5kbGVsZW4sIHApO1xuICBoYW5kbGUuY29weShvdXQsIHAgKz0gNCk7XG4gIHAgKz0gaGFuZGxlbGVuO1xuICBmb3IgKHZhciBpID0gNzsgaSA+PSAwOyAtLWkpIHtcbiAgICBvdXRbcCArIGldID0gcG9zaXRpb24gJiAweEZGO1xuICAgIHBvc2l0aW9uIC89IDI1NjtcbiAgfVxuICB3cml0ZVVJbnQzMkJFKG91dCwgbGVuLCBwICs9IDgpO1xuICBidWYuY29weShvdXQsIHAgKz0gNCwgb2ZmLCBvZmYgKyBsZW4pO1xuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHtcbiAgICBjYjogZnVuY3Rpb24oZXJyKSB7XG4gICAgICBpZiAoZXJyKVxuICAgICAgICBjYiAmJiBjYihlcnIpO1xuICAgICAgZWxzZSBpZiAob3ZlcmZsb3cpIHtcbiAgICAgICAgc2VsZi53cml0ZURhdGEoaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICBidWYsXG4gICAgICAgICAgICAgICAgICAgICAgIG9mZiArIGxlbixcbiAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3csXG4gICAgICAgICAgICAgICAgICAgICAgIG9yaWdQb3NpdGlvbiArIGxlbixcbiAgICAgICAgICAgICAgICAgICAgICAgY2IpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGNiICYmIGNiKHVuZGVmaW5lZCwgb2ZmICsgbGVuKTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIFdSSVRFJyk7XG4gIHJldHVybiB0aGlzLnB1c2gob3V0KTtcbn07XG5mdW5jdGlvbiB0cnlDcmVhdGVCdWZmZXIoc2l6ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2NVbnNhZmUoc2l6ZSk7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmV0dXJuIGV4O1xuICB9XG59XG5mdW5jdGlvbiBmYXN0WGZlcihzcmMsIGRzdCwgc3JjUGF0aCwgZHN0UGF0aCwgb3B0cywgY2IpIHtcbiAgdmFyIGNvbmN1cnJlbmN5ID0gNjQ7XG4gIHZhciBjaHVua1NpemUgPSAzMjc2ODtcbiAgLy92YXIgcHJlc2VydmUgPSBmYWxzZTtcbiAgdmFyIG9uc3RlcDtcbiAgdmFyIG1vZGU7XG4gIHZhciBmaWxlU2l6ZTtcblxuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIG9wdHMgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMuY29uY3VycmVuY3kgPT09ICdudW1iZXInXG4gICAgICAgICYmIG9wdHMuY29uY3VycmVuY3kgPiAwXG4gICAgICAgICYmICFpc05hTihvcHRzLmNvbmN1cnJlbmN5KSlcbiAgICAgIGNvbmN1cnJlbmN5ID0gb3B0cy5jb25jdXJyZW5jeTtcbiAgICBpZiAodHlwZW9mIG9wdHMuY2h1bmtTaXplID09PSAnbnVtYmVyJ1xuICAgICAgICAmJiBvcHRzLmNodW5rU2l6ZSA+IDBcbiAgICAgICAgJiYgIWlzTmFOKG9wdHMuY2h1bmtTaXplKSlcbiAgICAgIGNodW5rU2l6ZSA9IG9wdHMuY2h1bmtTaXplO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5maWxlU2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgJiYgb3B0cy5maWxlU2l6ZSA+IDBcbiAgICAgICAgJiYgIWlzTmFOKG9wdHMuZmlsZVNpemUpKVxuICAgICAgZmlsZVNpemUgPSBvcHRzLmZpbGVTaXplO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5zdGVwID09PSAnZnVuY3Rpb24nKVxuICAgICAgb25zdGVwID0gb3B0cy5zdGVwO1xuICAgIC8vcHJlc2VydmUgPSAob3B0cy5wcmVzZXJ2ZSA/IHRydWUgOiBmYWxzZSk7XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1vZGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvcHRzLm1vZGUgPT09ICdudW1iZXInKVxuICAgICAgbW9kZSA9IG1vZGVOdW0ob3B0cy5tb2RlKTtcbiAgfVxuXG4gIC8vIGludGVybmFsIHN0YXRlIHZhcmlhYmxlc1xuICB2YXIgZnNpemU7XG4gIHZhciBwZHN0ID0gMDtcbiAgdmFyIHRvdGFsID0gMDtcbiAgdmFyIGhhZEVycm9yID0gZmFsc2U7XG4gIHZhciBzcmNIYW5kbGU7XG4gIHZhciBkc3RIYW5kbGU7XG4gIHZhciByZWFkYnVmO1xuICB2YXIgYnVmc2l6ZSA9IGNodW5rU2l6ZSAqIGNvbmN1cnJlbmN5O1xuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXJyKSB7XG4gICAgaWYgKGhhZEVycm9yKVxuICAgICAgcmV0dXJuO1xuXG4gICAgaGFkRXJyb3IgPSB0cnVlO1xuXG4gICAgdmFyIGxlZnQgPSAwO1xuICAgIHZhciBjYmZpbmFsO1xuXG4gICAgaWYgKHNyY0hhbmRsZSB8fCBkc3RIYW5kbGUpIHtcbiAgICAgIGNiZmluYWwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKC0tbGVmdCA9PT0gMClcbiAgICAgICAgICBjYihlcnIpO1xuICAgICAgfTtcbiAgICAgIGlmIChzcmNIYW5kbGUgJiYgKHNyYyA9PT0gZnMgfHwgc3JjLndyaXRhYmxlKSlcbiAgICAgICAgKytsZWZ0O1xuICAgICAgaWYgKGRzdEhhbmRsZSAmJiAoZHN0ID09PSBmcyB8fCBkc3Qud3JpdGFibGUpKVxuICAgICAgICArK2xlZnQ7XG4gICAgICBpZiAoc3JjSGFuZGxlICYmIChzcmMgPT09IGZzIHx8IHNyYy53cml0YWJsZSkpXG4gICAgICAgIHNyYy5jbG9zZShzcmNIYW5kbGUsIGNiZmluYWwpO1xuICAgICAgaWYgKGRzdEhhbmRsZSAmJiAoZHN0ID09PSBmcyB8fCBkc3Qud3JpdGFibGUpKVxuICAgICAgICBkc3QuY2xvc2UoZHN0SGFuZGxlLCBjYmZpbmFsKTtcbiAgICB9IGVsc2VcbiAgICAgIGNiKGVycik7XG4gIH1cblxuICBzcmMub3BlbihzcmNQYXRoLCAncicsIGZ1bmN0aW9uKGVyciwgc291cmNlSGFuZGxlKSB7XG4gICAgaWYgKGVycilcbiAgICAgIHJldHVybiBvbmVycm9yKGVycik7XG5cbiAgICBzcmNIYW5kbGUgPSBzb3VyY2VIYW5kbGU7XG5cbiAgICBpZiAoZmlsZVNpemUgPT09IHVuZGVmaW5lZClcbiAgICAgIHNyYy5mc3RhdChzcmNIYW5kbGUsIHRyeVN0YXQpO1xuICAgIGVsc2VcbiAgICAgIHRyeVN0YXQobnVsbCwgeyBzaXplOiBmaWxlU2l6ZSB9KTtcblxuICAgIGZ1bmN0aW9uIHRyeVN0YXQoZXJyLCBhdHRycykge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBpZiAoc3JjICE9PSBmcykge1xuICAgICAgICAgIC8vIFRyeSBzdGF0KCkgZm9yIHNmdHAgc2VydmVycyB0aGF0IG1heSBub3Qgc3VwcG9ydCBmc3RhdCgpIGZvclxuICAgICAgICAgIC8vIHdoYXRldmVyIHJlYXNvblxuICAgICAgICAgIHNyYy5zdGF0KHNyY1BhdGgsIGZ1bmN0aW9uKGVycl8sIGF0dHJzXykge1xuICAgICAgICAgICAgaWYgKGVycl8pXG4gICAgICAgICAgICAgIHJldHVybiBvbmVycm9yKGVycik7XG4gICAgICAgICAgICB0cnlTdGF0KG51bGwsIGF0dHJzXyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvbmVycm9yKGVycik7XG4gICAgICB9XG4gICAgICBmc2l6ZSA9IGF0dHJzLnNpemU7XG5cbiAgICAgIGRzdC5vcGVuKGRzdFBhdGgsICd3JywgZnVuY3Rpb24oZXJyLCBkZXN0SGFuZGxlKSB7XG4gICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgcmV0dXJuIG9uZXJyb3IoZXJyKTtcblxuICAgICAgICBkc3RIYW5kbGUgPSBkZXN0SGFuZGxlO1xuXG4gICAgICAgIGlmIChmc2l6ZSA8PSAwKVxuICAgICAgICAgIHJldHVybiBvbmVycm9yKCk7XG5cbiAgICAgICAgLy8gVXNlIGxlc3MgbWVtb3J5IHdoZXJlIHBvc3NpYmxlXG4gICAgICAgIHdoaWxlIChidWZzaXplID4gZnNpemUpIHtcbiAgICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IDEpIHtcbiAgICAgICAgICAgIGJ1ZnNpemUgPSBmc2l6ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWZzaXplIC09IGNodW5rU2l6ZTtcbiAgICAgICAgICAtLWNvbmN1cnJlbmN5O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVhZGJ1ZiA9IHRyeUNyZWF0ZUJ1ZmZlcihidWZzaXplKTtcbiAgICAgICAgaWYgKHJlYWRidWYgaW5zdGFuY2VvZiBFcnJvcilcbiAgICAgICAgICByZXR1cm4gb25lcnJvcihyZWFkYnVmKTtcblxuICAgICAgICBpZiAobW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZHN0LmZjaG1vZChkc3RIYW5kbGUsIG1vZGUsIGZ1bmN0aW9uIHRyeUFnYWluKGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAvLyBUcnkgY2htb2QoKSBmb3Igc2Z0cCBzZXJ2ZXJzIHRoYXQgbWF5IG5vdCBzdXBwb3J0IGZjaG1vZCgpIGZvclxuICAgICAgICAgICAgICAvLyB3aGF0ZXZlciByZWFzb25cbiAgICAgICAgICAgICAgZHN0LmNobW9kKGRzdFBhdGgsIG1vZGUsIGZ1bmN0aW9uKGVycl8pIHtcbiAgICAgICAgICAgICAgICB0cnlBZ2FpbigpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhcnRSZWFkcygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0UmVhZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9ucmVhZChlcnIsIG5iLCBkYXRhLCBkc3Rwb3MsIGRhdGFwb3MsIG9yaWdDaHVua0xlbikge1xuICAgICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICByZXR1cm4gb25lcnJvcihlcnIpO1xuXG4gICAgICAgICAgZGF0YXBvcyA9IGRhdGFwb3MgfHwgMDtcblxuICAgICAgICAgIGlmIChzcmMgPT09IGZzKVxuICAgICAgICAgICAgZHN0LndyaXRlRGF0YShkc3RIYW5kbGUsIHJlYWRidWYsIGRhdGFwb3MsIG5iLCBkc3Rwb3MsIHdyaXRlQ2IpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRzdC53cml0ZShkc3RIYW5kbGUsIHJlYWRidWYsIGRhdGFwb3MsIG5iLCBkc3Rwb3MsIHdyaXRlQ2IpO1xuXG4gICAgICAgICAgZnVuY3Rpb24gd3JpdGVDYihlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICAgIHJldHVybiBvbmVycm9yKGVycik7XG5cbiAgICAgICAgICAgIHRvdGFsICs9IG5iO1xuICAgICAgICAgICAgb25zdGVwICYmIG9uc3RlcCh0b3RhbCwgbmIsIGZzaXplKTtcblxuICAgICAgICAgICAgaWYgKG5iIDwgb3JpZ0NodW5rTGVuKVxuICAgICAgICAgICAgICByZXR1cm4gc2luZ2xlUmVhZChkYXRhcG9zLCBkc3Rwb3MgKyBuYiwgb3JpZ0NodW5rTGVuIC0gbmIpO1xuXG4gICAgICAgICAgICBpZiAodG90YWwgPT09IGZzaXplKSB7XG4gICAgICAgICAgICAgIGRzdC5jbG9zZShkc3RIYW5kbGUsIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGRzdEhhbmRsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBzcmMuY2xvc2Uoc3JjSGFuZGxlLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHNyY0hhbmRsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvbmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGRzdCA+PSBmc2l6ZSlcbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB2YXIgY2h1bmsgPSAocGRzdCArIGNodW5rU2l6ZSA+IGZzaXplID8gZnNpemUgLSBwZHN0IDogY2h1bmtTaXplKTtcbiAgICAgICAgICAgIHNpbmdsZVJlYWQoZGF0YXBvcywgcGRzdCwgY2h1bmspO1xuICAgICAgICAgICAgcGRzdCArPSBjaHVuaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtYWtlQ2IocHNyYywgcGRzdCwgY2h1bmspIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXJyLCBuYiwgZGF0YSkge1xuICAgICAgICAgICAgb25yZWFkKGVyciwgbmIsIGRhdGEsIHBkc3QsIHBzcmMsIGNodW5rKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2luZ2xlUmVhZChwc3JjLCBwZHN0LCBjaHVuaykge1xuICAgICAgICAgIGlmIChzcmMgPT09IGZzKSB7XG4gICAgICAgICAgICBzcmMucmVhZChzcmNIYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgICByZWFkYnVmLFxuICAgICAgICAgICAgICAgICAgICAgcHNyYyxcbiAgICAgICAgICAgICAgICAgICAgIGNodW5rLFxuICAgICAgICAgICAgICAgICAgICAgcGRzdCxcbiAgICAgICAgICAgICAgICAgICAgIG1ha2VDYihwc3JjLCBwZHN0LCBjaHVuaykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzcmMucmVhZERhdGEoc3JjSGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRidWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgcHNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICBwZHN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VDYihwc3JjLCBwZHN0LCBjaHVuaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHN0YXJ0UmVhZHMoKSB7XG4gICAgICAgICAgdmFyIHJlYWRzID0gMDtcbiAgICAgICAgICB2YXIgcHNyYyA9IDA7XG4gICAgICAgICAgd2hpbGUgKHBkc3QgPCBmc2l6ZSAmJiByZWFkcyA8IGNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICB2YXIgY2h1bmsgPSAocGRzdCArIGNodW5rU2l6ZSA+IGZzaXplID8gZnNpemUgLSBwZHN0IDogY2h1bmtTaXplKTtcbiAgICAgICAgICAgIHNpbmdsZVJlYWQocHNyYywgcGRzdCwgY2h1bmspO1xuICAgICAgICAgICAgcHNyYyArPSBjaHVuaztcbiAgICAgICAgICAgIHBkc3QgKz0gY2h1bms7XG4gICAgICAgICAgICArK3JlYWRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblNGVFBTdHJlYW0ucHJvdG90eXBlLmZhc3RHZXQgPSBmdW5jdGlvbihyZW1vdGVQYXRoLCBsb2NhbFBhdGgsIG9wdHMsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICBmYXN0WGZlcih0aGlzLCBmcywgcmVtb3RlUGF0aCwgbG9jYWxQYXRoLCBvcHRzLCBjYik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuZmFzdFB1dCA9IGZ1bmN0aW9uKGxvY2FsUGF0aCwgcmVtb3RlUGF0aCwgb3B0cywgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIGZhc3RYZmVyKGZzLCB0aGlzLCBsb2NhbFBhdGgsIHJlbW90ZVBhdGgsIG9wdHMsIGNiKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5yZWFkRmlsZSA9IGZ1bmN0aW9uKHBhdGgsIG9wdGlvbnMsIGNhbGxiYWNrXykge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIGNhbGxiYWNrO1xuICBpZiAodHlwZW9mIGNhbGxiYWNrXyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gY2FsbGJhY2tfO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJylcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogb3B0aW9ucywgZmxhZzogJ3InIH07XG4gIGVsc2UgaWYgKCFvcHRpb25zKVxuICAgIG9wdGlvbnMgPSB7IGVuY29kaW5nOiBudWxsLCBmbGFnOiAncicgfTtcbiAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JhZCBhcmd1bWVudHMnKTtcblxuICB2YXIgZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nO1xuICBpZiAoZW5jb2RpbmcgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG5cbiAgLy8gZmlyc3QsIHN0YXQgdGhlIGZpbGUsIHNvIHdlIGtub3cgdGhlIHNpemUuXG4gIHZhciBzaXplO1xuICB2YXIgYnVmZmVyOyAvLyBzaW5nbGUgYnVmZmVyIHdpdGggZmlsZSBkYXRhXG4gIHZhciBidWZmZXJzOyAvLyBsaXN0IGZvciB3aGVuIHNpemUgaXMgdW5rbm93blxuICB2YXIgcG9zID0gMDtcbiAgdmFyIGhhbmRsZTtcblxuICAvLyBTRlRQdjMgZG9lcyBub3Qgc3VwcG9ydCB1c2luZyAtMSBmb3IgcmVhZCBwb3NpdGlvbiwgc28gd2UgaGF2ZSB0byB0cmFja1xuICAvLyByZWFkIHBvc2l0aW9uIG1hbnVhbGx5XG4gIHZhciBieXRlc1JlYWQgPSAwO1xuXG4gIHZhciBmbGFnID0gb3B0aW9ucy5mbGFnIHx8ICdyJztcbiAgdGhpcy5vcGVuKHBhdGgsIGZsYWcsIDQzOCAvKj0wNjY2Ki8sIGZ1bmN0aW9uKGVyLCBoYW5kbGVfKSB7XG4gICAgaWYgKGVyKVxuICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGNhbGxiYWNrKGVyKTtcbiAgICBoYW5kbGUgPSBoYW5kbGVfO1xuXG4gICAgc2VsZi5mc3RhdChoYW5kbGUsIGZ1bmN0aW9uIHRyeVN0YXQoZXIsIHN0KSB7XG4gICAgICBpZiAoZXIpIHtcbiAgICAgICAgLy8gVHJ5IHN0YXQoKSBmb3Igc2Z0cCBzZXJ2ZXJzIHRoYXQgbWF5IG5vdCBzdXBwb3J0IGZzdGF0KCkgZm9yXG4gICAgICAgIC8vIHdoYXRldmVyIHJlYXNvblxuICAgICAgICBzZWxmLnN0YXQocGF0aCwgZnVuY3Rpb24oZXJfLCBzdF8pIHtcbiAgICAgICAgICBpZiAoZXJfKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jbG9zZShoYW5kbGUsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5U3RhdChudWxsLCBzdF8pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzaXplID0gc3Quc2l6ZSB8fCAwO1xuICAgICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgICAgLy8gdGhlIGtlcm5lbCBsaWVzIGFib3V0IG1hbnkgZmlsZXMuXG4gICAgICAgIC8vIEdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIGJ5dGVzLlxuICAgICAgICBidWZmZXJzID0gW107XG4gICAgICAgIHJldHVybiByZWFkKCk7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShzaXplKTtcbiAgICAgIHJlYWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gcmVhZCgpIHtcbiAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDgxOTIpO1xuICAgICAgc2VsZi5yZWFkRGF0YShoYW5kbGUsIGJ1ZmZlciwgMCwgODE5MiwgYnl0ZXNSZWFkLCBhZnRlclJlYWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLnJlYWREYXRhKGhhbmRsZSwgYnVmZmVyLCBwb3MsIHNpemUgLSBwb3MsIGJ5dGVzUmVhZCwgYWZ0ZXJSZWFkKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhZnRlclJlYWQoZXIsIG5ieXRlcykge1xuICAgIHZhciBlb2Y7XG4gICAgaWYgKGVyKSB7XG4gICAgICBlb2YgPSAoZXIuY29kZSA9PT0gU1RBVFVTX0NPREUuRU9GKTtcbiAgICAgIGlmICghZW9mKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNsb3NlKGhhbmRsZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGNhbGxiYWNrKGVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVvZiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChlb2YgfHwgKHNpemUgPT09IDAgJiYgbmJ5dGVzID09PSAwKSlcbiAgICAgIHJldHVybiBjbG9zZSgpO1xuXG4gICAgYnl0ZXNSZWFkICs9IG5ieXRlcztcbiAgICBwb3MgKz0gbmJ5dGVzO1xuICAgIGlmIChzaXplICE9PSAwKSB7XG4gICAgICBpZiAocG9zID09PSBzaXplKVxuICAgICAgICBjbG9zZSgpO1xuICAgICAgZWxzZVxuICAgICAgICByZWFkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gc2l6ZSwganVzdCByZWFkIHVudGlsIHdlIGRvbid0IGdldCBieXRlcy5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIuc2xpY2UoMCwgbmJ5dGVzKSk7XG4gICAgICByZWFkKCk7XG4gICAgfVxuICB9XG4gIGFmdGVyUmVhZC5fd2FudEVPRkVycm9yID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICBzZWxmLmNsb3NlKGhhbmRsZSwgZnVuY3Rpb24oZXIpIHtcbiAgICAgIGlmIChzaXplID09PSAwKSB7XG4gICAgICAgIC8vIGNvbGxlY3RlZCB0aGUgZGF0YSBpbnRvIHRoZSBidWZmZXJzIGxpc3QuXG4gICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgcG9zKTtcbiAgICAgIH0gZWxzZSBpZiAocG9zIDwgc2l6ZSkge1xuICAgICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UoMCwgcG9zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuY29kaW5nKVxuICAgICAgICBidWZmZXIgPSBidWZmZXIudG9TdHJpbmcoZW5jb2RpbmcpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGNhbGxiYWNrKGVyLCBidWZmZXIpO1xuICAgIH0pO1xuICB9XG59O1xuZnVuY3Rpb24gd3JpdGVBbGwoc2VsZiwgaGFuZGxlLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2tfKSB7XG4gIHZhciBjYWxsYmFjayA9ICh0eXBlb2YgY2FsbGJhY2tfID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2tfIDogdW5kZWZpbmVkKTtcblxuICBzZWxmLndyaXRlRGF0YShoYW5kbGUsXG4gICAgICAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICBmdW5jdGlvbih3cml0ZUVyciwgd3JpdHRlbikge1xuICAgIGlmICh3cml0ZUVycikge1xuICAgICAgcmV0dXJuIHNlbGYuY2xvc2UoaGFuZGxlLCBmdW5jdGlvbigpIHtcbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2sod3JpdGVFcnIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh3cml0dGVuID09PSBsZW5ndGgpXG4gICAgICBzZWxmLmNsb3NlKGhhbmRsZSwgY2FsbGJhY2spO1xuICAgIGVsc2Uge1xuICAgICAgb2Zmc2V0ICs9IHdyaXR0ZW47XG4gICAgICBsZW5ndGggLT0gd3JpdHRlbjtcbiAgICAgIHBvc2l0aW9uICs9IHdyaXR0ZW47XG4gICAgICB3cml0ZUFsbChzZWxmLCBoYW5kbGUsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn1cblNGVFBTdHJlYW0ucHJvdG90eXBlLndyaXRlRmlsZSA9IGZ1bmN0aW9uKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNhbGxiYWNrXykge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIGNhbGxiYWNrO1xuICBpZiAodHlwZW9mIGNhbGxiYWNrXyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gY2FsbGJhY2tfO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpXG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMsIG1vZGU6IDQzOCwgZmxhZzogJ3cnIH07XG4gIGVsc2UgaWYgKCFvcHRpb25zKVxuICAgIG9wdGlvbnMgPSB7IGVuY29kaW5nOiAndXRmOCcsIG1vZGU6IDQzOCAvKj0wNjY2Ki8sIGZsYWc6ICd3JyB9O1xuICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQmFkIGFyZ3VtZW50cycpO1xuXG4gIGlmIChvcHRpb25zLmVuY29kaW5nICYmICFCdWZmZXIuaXNFbmNvZGluZyhvcHRpb25zLmVuY29kaW5nKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBvcHRpb25zLmVuY29kaW5nKTtcblxuICB2YXIgZmxhZyA9IG9wdGlvbnMuZmxhZyB8fCAndyc7XG4gIHRoaXMub3BlbihwYXRoLCBmbGFnLCBvcHRpb25zLm1vZGUsIGZ1bmN0aW9uKG9wZW5FcnIsIGhhbmRsZSkge1xuICAgIGlmIChvcGVuRXJyKVxuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2sob3BlbkVycik7XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYnVmZmVyID0gKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKVxuICAgICAgICAgICAgICAgICAgICA/IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgOiBCdWZmZXIuZnJvbSgnJyArIGRhdGEsIG9wdGlvbnMuZW5jb2RpbmcgfHwgJ3V0ZjgnKSk7XG4gICAgICB2YXIgcG9zaXRpb24gPSAoL2EvLnRlc3QoZmxhZykgPyBudWxsIDogMCk7XG5cbiAgICAgIC8vIFNGVFB2MyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBub3Rpb24gb2YgJ2N1cnJlbnQgcG9zaXRpb24nXG4gICAgICAvLyAobnVsbCBwb3NpdGlvbiksIHNvIHdlIGp1c3QgYXR0ZW1wdCB0byBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZVxuICAgICAgLy8gaW5zdGVhZFxuICAgICAgaWYgKHBvc2l0aW9uID09PSBudWxsKSB7XG4gICAgICAgIHNlbGYuZnN0YXQoaGFuZGxlLCBmdW5jdGlvbiB0cnlTdGF0KGVyLCBzdCkge1xuICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgLy8gVHJ5IHN0YXQoKSBmb3Igc2Z0cCBzZXJ2ZXJzIHRoYXQgbWF5IG5vdCBzdXBwb3J0IGZzdGF0KCkgZm9yXG4gICAgICAgICAgICAvLyB3aGF0ZXZlciByZWFzb25cbiAgICAgICAgICAgIHNlbGYuc3RhdChwYXRoLCBmdW5jdGlvbihlcl8sIHN0Xykge1xuICAgICAgICAgICAgICBpZiAoZXJfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2xvc2UoaGFuZGxlLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKGVyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0cnlTdGF0KG51bGwsIHN0Xyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgd3JpdGVBbGwoc2VsZiwgaGFuZGxlLCBidWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGgsIHN0LnNpemUsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdyaXRlQWxsKHNlbGYsIGhhbmRsZSwgYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSk7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kRmlsZSA9IGZ1bmN0aW9uKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNhbGxiYWNrXykge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIGNhbGxiYWNrO1xuICBpZiAodHlwZW9mIGNhbGxiYWNrXyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gY2FsbGJhY2tfO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKVxuICAgIG9wdGlvbnMgPSB7IGVuY29kaW5nOiBvcHRpb25zLCBtb2RlOiA0MzgsIGZsYWc6ICdhJyB9O1xuICBlbHNlIGlmICghb3B0aW9ucylcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogJ3V0ZjgnLCBtb2RlOiA0MzggLyo9MDY2NiovLCBmbGFnOiAnYScgfTtcbiAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JhZCBhcmd1bWVudHMnKTtcblxuICBpZiAoIW9wdGlvbnMuZmxhZylcbiAgICBvcHRpb25zID0gdXRpbC5fZXh0ZW5kKHsgZmxhZzogJ2EnIH0sIG9wdGlvbnMpO1xuICB0aGlzLndyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYWxsYmFjayk7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHRoaXMuc3RhdChwYXRoLCBmdW5jdGlvbihlcnIpIHtcbiAgICBjYiAmJiBjYihlcnIgPyBmYWxzZSA6IHRydWUpO1xuICB9KTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihmaWxlbmFtZSwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgZmlsZW5hbWVcbiAgKi9cbiAgdmFyIGZuYW1lbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoZmlsZW5hbWUpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIGZuYW1lbGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULlJFTU9WRTtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGZuYW1lbGVuLCBwKTtcbiAgYnVmLndyaXRlKGZpbGVuYW1lLCBwICs9IDQsIGZuYW1lbGVuLCAndXRmOCcpO1xuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHsgY2I6IGNiIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIFJFTU9WRScpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUucmVuYW1lID0gZnVuY3Rpb24ob2xkUGF0aCwgbmV3UGF0aCwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgb2xkcGF0aFxuICAgIHN0cmluZyAgICAgbmV3cGF0aFxuICAqL1xuICB2YXIgb2xkbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgob2xkUGF0aCk7XG4gIHZhciBuZXdsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChuZXdQYXRoKTtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBvbGRsZW4gKyA0ICsgbmV3bGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULlJFTkFNRTtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG9sZGxlbiwgcCk7XG4gIGJ1Zi53cml0ZShvbGRQYXRoLCBwICs9IDQsIG9sZGxlbiwgJ3V0ZjgnKTtcbiAgd3JpdGVVSW50MzJCRShidWYsIG5ld2xlbiwgcCArPSBvbGRsZW4pO1xuICBidWYud3JpdGUobmV3UGF0aCwgcCArPSA0LCBuZXdsZW4sICd1dGY4Jyk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0geyBjYjogY2IgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgUkVOQU1FJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKHBhdGgsIGF0dHJzLCBjYikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIGZsYWdzID0gMDtcbiAgdmFyIGF0dHJCeXRlcyA9IDA7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIGlmICh0eXBlb2YgYXR0cnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGF0dHJzO1xuICAgIGF0dHJzID0gdW5kZWZpbmVkO1xuICB9XG4gIGlmICh0eXBlb2YgYXR0cnMgPT09ICdvYmplY3QnICYmIGF0dHJzICE9PSBudWxsKSB7XG4gICAgYXR0cnMgPSBhdHRyc1RvQnl0ZXMoYXR0cnMpO1xuICAgIGZsYWdzID0gYXR0cnMuZmxhZ3M7XG4gICAgYXR0ckJ5dGVzID0gYXR0cnMubmJ5dGVzO1xuICAgIGF0dHJzID0gYXR0cnMuYnl0ZXM7XG4gIH1cblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIHBhdGhcbiAgICBBVFRSUyAgICAgIGF0dHJzXG4gICovXG4gIHZhciBwYXRobGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgcGF0aGxlbiArIDQgKyBhdHRyQnl0ZXMpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuTUtESVI7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwYXRobGVuLCBwKTtcbiAgYnVmLndyaXRlKHBhdGgsIHAgKz0gNCwgcGF0aGxlbiwgJ3V0ZjgnKTtcbiAgd3JpdGVVSW50MzJCRShidWYsIGZsYWdzLCBwICs9IHBhdGhsZW4pO1xuICBpZiAoZmxhZ3MpIHtcbiAgICBwICs9IDQ7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGF0dHJzLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICAgICAgZm9yICh2YXIgaiA9IDAsIGxlbjIgPSBhdHRyc1tpXS5sZW5ndGg7IGogPCBsZW4yOyArK2opXG4gICAgICAgIGJ1ZltwKytdID0gYXR0cnNbaV1bal07XG4gIH1cblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBNS0RJUicpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUucm1kaXIgPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgLypcbiAgICB1aW50MzIgICAgIGlkXG4gICAgc3RyaW5nICAgICBwYXRoXG4gICovXG4gIHZhciBwYXRobGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgcGF0aGxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5STURJUjtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBhdGhsZW4sIHApO1xuICBidWYud3JpdGUocGF0aCwgcCArPSA0LCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHsgY2I6IGNiIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIFJNRElSJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5yZWFkZGlyID0gZnVuY3Rpb24od2hlcmUsIG9wdHMsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcbiAgdmFyIGRvRmlsdGVyO1xuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0JyB8fCBvcHRzID09PSBudWxsKVxuICAgIG9wdHMgPSB7fTtcblxuICBkb0ZpbHRlciA9IChvcHRzICYmIG9wdHMuZnVsbCA/IGZhbHNlIDogdHJ1ZSk7XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIod2hlcmUpICYmIHR5cGVvZiB3aGVyZSAhPT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGRpcmVjdG9yeSBoYW5kbGUgb3IgcGF0aCcpO1xuXG4gIGlmICh0eXBlb2Ygd2hlcmUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgdmFyIGUgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXMub3BlbmRpcih3aGVyZSwgZnVuY3Rpb24gcmVyZWFkKGVyciwgaGFuZGxlKSB7XG4gICAgICBpZiAoZXJyKVxuICAgICAgICByZXR1cm4gY2IoZXJyKTtcblxuICAgICAgc2VsZi5yZWFkZGlyKGhhbmRsZSwgb3B0cywgZnVuY3Rpb24oZXJyLCBsaXN0KSB7XG4gICAgICAgIHZhciBlb2YgPSAoZXJyICYmIGVyci5jb2RlID09PSBTVEFUVVNfQ09ERS5FT0YpO1xuXG4gICAgICAgIGlmIChlcnIgJiYgIWVvZikge1xuICAgICAgICAgIHJldHVybiBzZWxmLmNsb3NlKGhhbmRsZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVvZikge1xuICAgICAgICAgIHJldHVybiBzZWxmLmNsb3NlKGhhbmRsZSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgIGNiKHVuZGVmaW5lZCwgZW50cmllcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGlzdC5sZW5ndGg7IGkgPCBsZW47ICsraSwgKytlKVxuICAgICAgICAgIGVudHJpZXNbZV0gPSBsaXN0W2ldO1xuXG4gICAgICAgIHJlcmVhZCh1bmRlZmluZWQsIGhhbmRsZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgaGFuZGxlXG4gICovXG4gIHZhciBoYW5kbGVsZW4gPSB3aGVyZS5sZW5ndGg7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgaGFuZGxlbGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULlJFQURESVI7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBoYW5kbGVsZW4sIHApO1xuICB3aGVyZS5jb3B5KGJ1ZiwgcCArPSA0KTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7XG4gICAgY2I6IChkb0ZpbHRlclxuICAgICAgICAgPyBmdW5jdGlvbihlcnIsIGxpc3QpIHtcbiAgICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG5cbiAgICAgICAgICAgICBmb3IgKHZhciBpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICAgaWYgKGxpc3RbaV0uZmlsZW5hbWUgPT09ICcuJyB8fCBsaXN0W2ldLmZpbGVuYW1lID09PSAnLi4nKVxuICAgICAgICAgICAgICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICBjYih1bmRlZmluZWQsIGxpc3QpO1xuICAgICAgICAgICB9XG4gICAgICAgICA6IGNiKVxuICB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBSRUFERElSJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5mc3RhdCA9IGZ1bmN0aW9uKGhhbmRsZSwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuICBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhbmRsZSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGUgaXMgbm90IGEgQnVmZmVyJyk7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgLypcbiAgICB1aW50MzIgICAgIGlkXG4gICAgc3RyaW5nICAgICBoYW5kbGVcbiAgKi9cbiAgdmFyIGhhbmRsZWxlbiA9IGhhbmRsZS5sZW5ndGg7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgaGFuZGxlbGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULkZTVEFUO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHJlcWlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaGFuZGxlbGVuLCBwKTtcbiAgaGFuZGxlLmNvcHkoYnVmLCBwICs9IDQpO1xuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHsgY2I6IGNiIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIEZTVEFUJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5zdGF0ID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgcGF0aFxuICAqL1xuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHBhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIHBhdGhsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuU1RBVDtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBhdGhsZW4sIHApO1xuICBidWYud3JpdGUocGF0aCwgcCArPSA0LCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHsgY2I6IGNiIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIFNUQVQnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmxzdGF0ID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgcGF0aFxuICAqL1xuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHBhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIHBhdGhsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuTFNUQVQ7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwYXRobGVuLCBwKTtcbiAgYnVmLndyaXRlKHBhdGgsIHAgKz0gNCwgcGF0aGxlbiwgJ3V0ZjgnKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBMU1RBVCcpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUub3BlbmRpciA9IGZ1bmN0aW9uKHBhdGgsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIHBhdGhcbiAgKi9cbiAgdmFyIHBhdGhsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChwYXRoKTtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBwYXRobGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULk9QRU5ESVI7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwYXRobGVuLCBwKTtcbiAgYnVmLndyaXRlKHBhdGgsIHAgKz0gNCwgcGF0aGxlbiwgJ3V0ZjgnKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBPUEVORElSJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5zZXRzdGF0ID0gZnVuY3Rpb24ocGF0aCwgYXR0cnMsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgZmxhZ3MgPSAwO1xuICB2YXIgYXR0ckJ5dGVzID0gMDtcbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBhdHRycyA9PT0gJ29iamVjdCcgJiYgYXR0cnMgIT09IG51bGwpIHtcbiAgICBhdHRycyA9IGF0dHJzVG9CeXRlcyhhdHRycyk7XG4gICAgZmxhZ3MgPSBhdHRycy5mbGFncztcbiAgICBhdHRyQnl0ZXMgPSBhdHRycy5uYnl0ZXM7XG4gICAgYXR0cnMgPSBhdHRycy5ieXRlcztcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXR0cnMgPT09ICdmdW5jdGlvbicpXG4gICAgY2IgPSBhdHRycztcblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIHBhdGhcbiAgICBBVFRSUyAgICAgIGF0dHJzXG4gICovXG4gIHZhciBwYXRobGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgcGF0aGxlbiArIDQgKyBhdHRyQnl0ZXMpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuU0VUU1RBVDtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBhdGhsZW4sIHApO1xuICBidWYud3JpdGUocGF0aCwgcCArPSA0LCBwYXRobGVuLCAndXRmOCcpO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgZmxhZ3MsIHAgKz0gcGF0aGxlbik7XG4gIGlmIChmbGFncykge1xuICAgIHAgKz0gNDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXR0cnMubGVuZ3RoOyBpIDwgbGVuOyArK2kpXG4gICAgICBmb3IgKHZhciBqID0gMCwgbGVuMiA9IGF0dHJzW2ldLmxlbmd0aDsgaiA8IGxlbjI7ICsrailcbiAgICAgICAgYnVmW3ArK10gPSBhdHRyc1tpXVtqXTtcbiAgfVxuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHsgY2I6IGNiIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIFNFVFNUQVQnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmZzZXRzdGF0ID0gZnVuY3Rpb24oaGFuZGxlLCBhdHRycywgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuICBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhbmRsZSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGUgaXMgbm90IGEgQnVmZmVyJyk7XG5cbiAgdmFyIGZsYWdzID0gMDtcbiAgdmFyIGF0dHJCeXRlcyA9IDA7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIGlmICh0eXBlb2YgYXR0cnMgPT09ICdvYmplY3QnICYmIGF0dHJzICE9PSBudWxsKSB7XG4gICAgYXR0cnMgPSBhdHRyc1RvQnl0ZXMoYXR0cnMpO1xuICAgIGZsYWdzID0gYXR0cnMuZmxhZ3M7XG4gICAgYXR0ckJ5dGVzID0gYXR0cnMubmJ5dGVzO1xuICAgIGF0dHJzID0gYXR0cnMuYnl0ZXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGF0dHJzID09PSAnZnVuY3Rpb24nKVxuICAgIGNiID0gYXR0cnM7XG5cbiAgLypcbiAgICB1aW50MzIgICAgIGlkXG4gICAgc3RyaW5nICAgICBoYW5kbGVcbiAgICBBVFRSUyAgICAgIGF0dHJzXG4gICovXG4gIHZhciBoYW5kbGVsZW4gPSBoYW5kbGUubGVuZ3RoO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIGhhbmRsZWxlbiArIDQgKyBhdHRyQnl0ZXMpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuRlNFVFNUQVQ7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBoYW5kbGVsZW4sIHApO1xuICBoYW5kbGUuY29weShidWYsIHAgKz0gNCk7XG4gIHdyaXRlVUludDMyQkUoYnVmLCBmbGFncywgcCArPSBoYW5kbGVsZW4pO1xuICBpZiAoZmxhZ3MpIHtcbiAgICBwICs9IDQ7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGF0dHJzLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICAgICAgZm9yICh2YXIgaiA9IDAsIGxlbjIgPSBhdHRyc1tpXS5sZW5ndGg7IGogPCBsZW4yOyArK2opXG4gICAgICAgIGJ1ZltwKytdID0gYXR0cnNbaV1bal07XG4gIH1cblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBGU0VUU1RBVCcpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuZnV0aW1lcyA9IGZ1bmN0aW9uKGhhbmRsZSwgYXRpbWUsIG10aW1lLCBjYikge1xuICByZXR1cm4gdGhpcy5mc2V0c3RhdChoYW5kbGUsIHtcbiAgICBhdGltZTogdG9Vbml4VGltZXN0YW1wKGF0aW1lKSxcbiAgICBtdGltZTogdG9Vbml4VGltZXN0YW1wKG10aW1lKVxuICB9LCBjYik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUudXRpbWVzID0gZnVuY3Rpb24ocGF0aCwgYXRpbWUsIG10aW1lLCBjYikge1xuICByZXR1cm4gdGhpcy5zZXRzdGF0KHBhdGgsIHtcbiAgICBhdGltZTogdG9Vbml4VGltZXN0YW1wKGF0aW1lKSxcbiAgICBtdGltZTogdG9Vbml4VGltZXN0YW1wKG10aW1lKVxuICB9LCBjYik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuZmNob3duID0gZnVuY3Rpb24oaGFuZGxlLCB1aWQsIGdpZCwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuZnNldHN0YXQoaGFuZGxlLCB7XG4gICAgdWlkOiB1aWQsXG4gICAgZ2lkOiBnaWRcbiAgfSwgY2IpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmNob3duID0gZnVuY3Rpb24ocGF0aCwgdWlkLCBnaWQsIGNiKSB7XG4gIHJldHVybiB0aGlzLnNldHN0YXQocGF0aCwge1xuICAgIHVpZDogdWlkLFxuICAgIGdpZDogZ2lkXG4gIH0sIGNiKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5mY2htb2QgPSBmdW5jdGlvbihoYW5kbGUsIG1vZGUsIGNiKSB7XG4gIHJldHVybiB0aGlzLmZzZXRzdGF0KGhhbmRsZSwge1xuICAgIG1vZGU6IG1vZGVcbiAgfSwgY2IpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmNobW9kID0gZnVuY3Rpb24ocGF0aCwgbW9kZSwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuc2V0c3RhdChwYXRoLCB7XG4gICAgbW9kZTogbW9kZVxuICB9LCBjYik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUucmVhZGxpbmsgPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cbiAgLypcbiAgICB1aW50MzIgICAgIGlkXG4gICAgc3RyaW5nICAgICBwYXRoXG4gICovXG4gIHZhciBwYXRobGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgcGF0aGxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5SRUFETElOSztcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBhdGhsZW4sIHApO1xuICBidWYud3JpdGUocGF0aCwgcCArPSA0LCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHtcbiAgICBjYjogZnVuY3Rpb24oZXJyLCBuYW1lcykge1xuICAgICAgaWYgKGVycilcbiAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICBlbHNlIGlmICghbmFtZXMgfHwgIW5hbWVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignUmVzcG9uc2UgbWlzc2luZyBsaW5rIGluZm8nKSk7XG4gICAgICBjYih1bmRlZmluZWQsIG5hbWVzWzBdLmZpbGVuYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIFJFQURMSU5LJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5zeW1saW5rID0gZnVuY3Rpb24odGFyZ2V0UGF0aCwgbGlua1BhdGgsIGNiKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICAvKlxuICAgIHVpbnQzMiAgICAgaWRcbiAgICBzdHJpbmcgICAgIGxpbmtwYXRoXG4gICAgc3RyaW5nICAgICB0YXJnZXRwYXRoXG4gICovXG4gIHZhciBsaW5rbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobGlua1BhdGgpO1xuICB2YXIgdGFyZ2V0bGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgodGFyZ2V0UGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgbGlua2xlbiArIDQgKyB0YXJnZXRsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuU1lNTElOSztcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG5cbiAgaWYgKHRoaXMuX2lzT3BlblNTSCkge1xuICAgIC8vIE9wZW5TU0ggaGFzIGxpbmtwYXRoIGFuZCB0YXJnZXRwYXRoIHBvc2l0aW9ucyBzd2l0Y2hlZFxuICAgIHdyaXRlVUludDMyQkUoYnVmLCB0YXJnZXRsZW4sIHApO1xuICAgIGJ1Zi53cml0ZSh0YXJnZXRQYXRoLCBwICs9IDQsIHRhcmdldGxlbiwgJ3V0ZjgnKTtcbiAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbGlua2xlbiwgcCArPSB0YXJnZXRsZW4pO1xuICAgIGJ1Zi53cml0ZShsaW5rUGF0aCwgcCArPSA0LCBsaW5rbGVuLCAndXRmOCcpO1xuICB9IGVsc2Uge1xuICAgIHdyaXRlVUludDMyQkUoYnVmLCBsaW5rbGVuLCBwKTtcbiAgICBidWYud3JpdGUobGlua1BhdGgsIHAgKz0gNCwgbGlua2xlbiwgJ3V0ZjgnKTtcbiAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgdGFyZ2V0bGVuLCBwICs9IGxpbmtsZW4pO1xuICAgIGJ1Zi53cml0ZSh0YXJnZXRQYXRoLCBwICs9IDQsIHRhcmdldGxlbiwgJ3V0ZjgnKTtcbiAgfVxuXG4gIHN0YXRlLnJlcXVlc3RzW3JlcWlkXSA9IHsgY2I6IGNiIH07XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIFNZTUxJTksnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLnJlYWxwYXRoID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIC8qXG4gICAgdWludDMyICAgICBpZFxuICAgIHN0cmluZyAgICAgcGF0aFxuICAqL1xuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHBhdGgpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIHBhdGhsZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFUVVFU1QuUkVBTFBBVEg7XG4gIHZhciByZXFpZCA9IHN0YXRlLndyaXRlUmVxaWQgPSAoc3RhdGUud3JpdGVSZXFpZCArIDEpICUgTUFYX1JFUUlEO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVxaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwYXRobGVuLCBwKTtcbiAgYnVmLndyaXRlKHBhdGgsIHAgKz0gNCwgcGF0aGxlbiwgJ3V0ZjgnKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7XG4gICAgY2I6IGZ1bmN0aW9uKGVyciwgbmFtZXMpIHtcbiAgICAgIGlmIChlcnIpXG4gICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgZWxzZSBpZiAoIW5hbWVzIHx8ICFuYW1lcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ1Jlc3BvbnNlIG1pc3NpbmcgcGF0aCBpbmZvJykpO1xuICAgICAgY2IodW5kZWZpbmVkLCBuYW1lc1swXS5maWxlbmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBSRUFMUEFUSCcpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuLy8gZXh0ZW5kZWQgcmVxdWVzdHNcblNGVFBTdHJlYW0ucHJvdG90eXBlLmV4dF9vcGVuc3NoX3JlbmFtZSA9IGZ1bmN0aW9uKG9sZFBhdGgsIG5ld1BhdGgsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcbiAgZWxzZSBpZiAoIXN0YXRlLmV4dGVuc2lvbnNbJ3Bvc2l4LXJlbmFtZUBvcGVuc3NoLmNvbSddXG4gICAgICAgICAgIHx8IHN0YXRlLmV4dGVuc2lvbnNbJ3Bvc2l4LXJlbmFtZUBvcGVuc3NoLmNvbSddLmluZGV4T2YoJzEnKSA9PT0gLTEpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGV4dGVuZGVkIHJlcXVlc3QnKTtcblxuICAvKlxuICAgIHVpbnQzMiAgICBpZFxuICAgIHN0cmluZyAgICBcInBvc2l4LXJlbmFtZUBvcGVuc3NoLmNvbVwiXG4gICAgc3RyaW5nICAgIG9sZHBhdGhcbiAgICBzdHJpbmcgICAgbmV3cGF0aFxuICAqL1xuICB2YXIgb2xkbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgob2xkUGF0aCk7XG4gIHZhciBuZXdsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChuZXdQYXRoKTtcbiAgdmFyIHAgPSA5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyAyNCArIDQgKyBvbGRsZW4gKyA0ICsgbmV3bGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICBidWZbNF0gPSBSRVFVRVNULkVYVEVOREVEO1xuICB2YXIgcmVxaWQgPSBzdGF0ZS53cml0ZVJlcWlkID0gKHN0YXRlLndyaXRlUmVxaWQgKyAxKSAlIE1BWF9SRVFJRDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHJlcWlkLCA1KTtcbiAgd3JpdGVVSW50MzJCRShidWYsIDI0LCBwKTtcbiAgYnVmLndyaXRlKCdwb3NpeC1yZW5hbWVAb3BlbnNzaC5jb20nLCBwICs9IDQsIDI0LCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgb2xkbGVuLCBwICs9IDI0KTtcbiAgYnVmLndyaXRlKG9sZFBhdGgsIHAgKz0gNCwgb2xkbGVuLCAndXRmOCcpO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbmV3bGVuLCBwICs9IG9sZGxlbik7XG4gIGJ1Zi53cml0ZShuZXdQYXRoLCBwICs9IDQsIG5ld2xlbiwgJ3V0ZjgnKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBwb3NpeC1yZW5hbWVAb3BlbnNzaC5jb20nKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmV4dF9vcGVuc3NoX3N0YXR2ZnMgPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG4gIGVsc2UgaWYgKCFzdGF0ZS5leHRlbnNpb25zWydzdGF0dmZzQG9wZW5zc2guY29tJ11cbiAgICAgICAgICAgfHwgc3RhdGUuZXh0ZW5zaW9uc1snc3RhdHZmc0BvcGVuc3NoLmNvbSddLmluZGV4T2YoJzInKSA9PT0gLTEpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGV4dGVuZGVkIHJlcXVlc3QnKTtcblxuICAvKlxuICAgIHVpbnQzMiAgICBpZFxuICAgIHN0cmluZyAgICBcInN0YXR2ZnNAb3BlbnNzaC5jb21cIlxuICAgIHN0cmluZyAgICBwYXRoXG4gICovXG4gIHZhciBwYXRobGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgMTkgKyA0ICsgcGF0aGxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5FWFRFTkRFRDtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG4gIHdyaXRlVUludDMyQkUoYnVmLCAxOSwgcCk7XG4gIGJ1Zi53cml0ZSgnc3RhdHZmc0BvcGVuc3NoLmNvbScsIHAgKz0gNCwgMTksICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwYXRobGVuLCBwICs9IDE5KTtcbiAgYnVmLndyaXRlKHBhdGgsIHAgKz0gNCwgcGF0aGxlbiwgJ3V0ZjgnKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7XG4gICAgZXh0ZW5kZWQ6ICdzdGF0dmZzQG9wZW5zc2guY29tJyxcbiAgICBjYjogY2JcbiAgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgc3RhdHZmc0BvcGVuc3NoLmNvbScpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuZXh0X29wZW5zc2hfZnN0YXR2ZnMgPSBmdW5jdGlvbihoYW5kbGUsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcbiAgZWxzZSBpZiAoIXN0YXRlLmV4dGVuc2lvbnNbJ2ZzdGF0dmZzQG9wZW5zc2guY29tJ11cbiAgICAgICAgICAgfHwgc3RhdGUuZXh0ZW5zaW9uc1snZnN0YXR2ZnNAb3BlbnNzaC5jb20nXS5pbmRleE9mKCcyJykgPT09IC0xKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBleHRlbmRlZCByZXF1ZXN0Jyk7XG4gIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoaGFuZGxlKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZSBpcyBub3QgYSBCdWZmZXInKTtcblxuICAvKlxuICAgIHVpbnQzMiAgICBpZFxuICAgIHN0cmluZyAgICBcImZzdGF0dmZzQG9wZW5zc2guY29tXCJcbiAgICBzdHJpbmcgICAgaGFuZGxlXG4gICovXG4gIHZhciBoYW5kbGVsZW4gPSBoYW5kbGUubGVuZ3RoO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIDIwICsgNCArIGhhbmRsZWxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5FWFRFTkRFRDtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG4gIHdyaXRlVUludDMyQkUoYnVmLCAyMCwgcCk7XG4gIGJ1Zi53cml0ZSgnZnN0YXR2ZnNAb3BlbnNzaC5jb20nLCBwICs9IDQsIDIwLCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaGFuZGxlbGVuLCBwICs9IDIwKTtcbiAgYnVmLndyaXRlKGhhbmRsZSwgcCArPSA0LCBoYW5kbGVsZW4sICd1dGY4Jyk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0ge1xuICAgIGV4dGVuZGVkOiAnZnN0YXR2ZnNAb3BlbnNzaC5jb20nLFxuICAgIGNiOiBjYlxuICB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBmc3RhdHZmc0BvcGVuc3NoLmNvbScpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuZXh0X29wZW5zc2hfaGFyZGxpbmsgPSBmdW5jdGlvbihvbGRQYXRoLCBuZXdQYXRoLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcblxuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG4gIGVsc2UgaWYgKCFzdGF0ZS5leHRlbnNpb25zWydoYXJkbGlua0BvcGVuc3NoLmNvbSddXG4gICAgICAgICAgIHx8IHN0YXRlLmV4dGVuc2lvbnNbJ2hhcmRsaW5rQG9wZW5zc2guY29tJ10uaW5kZXhPZignMScpID09PSAtMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZXh0ZW5kZWQgcmVxdWVzdCcpO1xuXG4gIC8qXG4gICAgdWludDMyICAgIGlkXG4gICAgc3RyaW5nICAgIFwiaGFyZGxpbmtAb3BlbnNzaC5jb21cIlxuICAgIHN0cmluZyAgICBvbGRwYXRoXG4gICAgc3RyaW5nICAgIG5ld3BhdGhcbiAgKi9cbiAgdmFyIG9sZGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKG9sZFBhdGgpO1xuICB2YXIgbmV3bGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobmV3UGF0aCk7XG4gIHZhciBwID0gOTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgMSArIDQgKyA0ICsgMjAgKyA0ICsgb2xkbGVuICsgNCArIG5ld2xlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5FWFRFTkRFRDtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG4gIHdyaXRlVUludDMyQkUoYnVmLCAyMCwgcCk7XG4gIGJ1Zi53cml0ZSgnaGFyZGxpbmtAb3BlbnNzaC5jb20nLCBwICs9IDQsIDIwLCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgb2xkbGVuLCBwICs9IDIwKTtcbiAgYnVmLndyaXRlKG9sZFBhdGgsIHAgKz0gNCwgb2xkbGVuLCAndXRmOCcpO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbmV3bGVuLCBwICs9IG9sZGxlbik7XG4gIGJ1Zi53cml0ZShuZXdQYXRoLCBwICs9IDQsIG5ld2xlbiwgJ3V0ZjgnKTtcblxuICBzdGF0ZS5yZXF1ZXN0c1tyZXFpZF0gPSB7IGNiOiBjYiB9O1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBoYXJkbGlua0BvcGVuc3NoLmNvbScpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuZXh0X29wZW5zc2hfZnN5bmMgPSBmdW5jdGlvbihoYW5kbGUsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcbiAgZWxzZSBpZiAoIXN0YXRlLmV4dGVuc2lvbnNbJ2ZzeW5jQG9wZW5zc2guY29tJ11cbiAgICAgICAgICAgfHwgc3RhdGUuZXh0ZW5zaW9uc1snZnN5bmNAb3BlbnNzaC5jb20nXS5pbmRleE9mKCcxJykgPT09IC0xKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBleHRlbmRlZCByZXF1ZXN0Jyk7XG4gIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoaGFuZGxlKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZSBpcyBub3QgYSBCdWZmZXInKTtcblxuICAvKlxuICAgIHVpbnQzMiAgICBpZFxuICAgIHN0cmluZyAgICBcImZzeW5jQG9wZW5zc2guY29tXCJcbiAgICBzdHJpbmcgICAgaGFuZGxlXG4gICovXG4gIHZhciBoYW5kbGVsZW4gPSBoYW5kbGUubGVuZ3RoO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIDE3ICsgNCArIGhhbmRsZWxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVRVUVTVC5FWFRFTkRFRDtcbiAgdmFyIHJlcWlkID0gc3RhdGUud3JpdGVSZXFpZCA9IChzdGF0ZS53cml0ZVJlcWlkICsgMSkgJSBNQVhfUkVRSUQ7XG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXFpZCwgNSk7XG4gIHdyaXRlVUludDMyQkUoYnVmLCAxNywgcCk7XG4gIGJ1Zi53cml0ZSgnZnN5bmNAb3BlbnNzaC5jb20nLCBwICs9IDQsIDE3LCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaGFuZGxlbGVuLCBwICs9IDE3KTtcbiAgYnVmLndyaXRlKGhhbmRsZSwgcCArPSA0LCBoYW5kbGVsZW4sICd1dGY4Jyk7XG5cbiAgc3RhdGUucmVxdWVzdHNbcmVxaWRdID0geyBjYjogY2IgfTtcblxuICB0aGlzLmRlYnVnKCdERUJVR1tTRlRQXTogT3V0Z29pbmc6IFdyaXRpbmcgZnN5bmNAb3BlbnNzaC5jb20nKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblxuLy8gc2VydmVyXG5TRlRQU3RyZWFtLnByb3RvdHlwZS5zdGF0dXMgPSBmdW5jdGlvbihpZCwgY29kZSwgbWVzc2FnZSwgbGFuZykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIGlmICghU1RBVFVTX0NPREVbY29kZV0gfHwgdHlwZW9mIGNvZGUgIT09ICdudW1iZXInKVxuICAgIHRocm93IG5ldyBFcnJvcignQmFkIHN0YXR1cyBjb2RlOiAnICsgY29kZSk7XG5cbiAgbWVzc2FnZSB8fCAobWVzc2FnZSA9ICcnKTtcbiAgbGFuZyB8fCAobGFuZyA9ICcnKTtcblxuICB2YXIgbXNnTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobWVzc2FnZSk7XG4gIHZhciBsYW5nTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobGFuZyk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIDQgKyBtc2dMZW4gKyA0ICsgbGFuZ0xlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVTUE9OU0UuU1RBVFVTO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjb2RlLCA5KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbXNnTGVuLCAxMyk7XG4gIGlmIChtc2dMZW4pXG4gICAgYnVmLndyaXRlKG1lc3NhZ2UsIDE3LCBtc2dMZW4sICd1dGY4Jyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGxhbmdMZW4sIDE3ICsgbXNnTGVuKTtcbiAgaWYgKGxhbmdMZW4pXG4gICAgYnVmLndyaXRlKGxhbmcsIDE3ICsgbXNnTGVuICsgNCwgbGFuZ0xlbiwgJ2FzY2lpJyk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIFNUQVRVUycpO1xuICByZXR1cm4gdGhpcy5wdXNoKGJ1Zik7XG59O1xuU0ZUUFN0cmVhbS5wcm90b3R5cGUuaGFuZGxlID0gZnVuY3Rpb24oaWQsIGhhbmRsZSkge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhbmRsZSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGUgaXMgbm90IGEgQnVmZmVyJyk7XG5cbiAgdmFyIGhhbmRsZUxlbiA9IGhhbmRsZS5sZW5ndGg7XG5cbiAgaWYgKGhhbmRsZUxlbiA+IDI1NilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZSB0b28gbGFyZ2UgKD4gMjU2IGJ5dGVzKScpO1xuXG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIGhhbmRsZUxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVTUE9OU0UuSEFORExFO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaWQsIDUpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBoYW5kbGVMZW4sIDkpO1xuICBpZiAoaGFuZGxlTGVuKVxuICAgIGhhbmRsZS5jb3B5KGJ1ZiwgMTMpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBIQU5ETEUnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmRhdGEgPSBmdW5jdGlvbihpZCwgZGF0YSwgZW5jb2RpbmcpIHtcbiAgaWYgKCF0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlci1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gY2xpZW50IG1vZGUnKTtcblxuICB2YXIgaXNCdWZmZXIgPSBCdWZmZXIuaXNCdWZmZXIoZGF0YSk7XG5cbiAgaWYgKCFpc0J1ZmZlciAmJiB0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdkYXRhIGlzIG5vdCBhIEJ1ZmZlciBvciBzdHJpbmcnKTtcblxuICBpZiAoIWlzQnVmZmVyKVxuICAgIGVuY29kaW5nIHx8IChlbmNvZGluZyA9ICd1dGY4Jyk7XG5cbiAgdmFyIGRhdGFMZW4gPSAoaXNCdWZmZXIgPyBkYXRhLmxlbmd0aCA6IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEsIGVuY29kaW5nKSk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIDEgKyA0ICsgNCArIGRhdGFMZW4pO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBidWYubGVuZ3RoIC0gNCwgMCk7XG4gIGJ1Zls0XSA9IFJFU1BPTlNFLkRBVEE7XG4gIHdyaXRlVUludDMyQkUoYnVmLCBpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGRhdGFMZW4sIDkpO1xuICBpZiAoZGF0YUxlbikge1xuICAgIGlmIChpc0J1ZmZlcilcbiAgICAgIGRhdGEuY29weShidWYsIDEzKTtcbiAgICBlbHNlXG4gICAgICBidWYud3JpdGUoZGF0YSwgMTMsIGRhdGFMZW4sIGVuY29kaW5nKTtcbiAgfVxuXG4gIHRoaXMuZGVidWcoJ0RFQlVHW1NGVFBdOiBPdXRnb2luZzogV3JpdGluZyBEQVRBJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5TRlRQU3RyZWFtLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24oaWQsIG5hbWVzKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KG5hbWVzKSkge1xuICAgIGlmICh0eXBlb2YgbmFtZXMgIT09ICdvYmplY3QnIHx8IG5hbWVzID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCduYW1lcyBpcyBub3QgYW4gb2JqZWN0IG9yIGFycmF5Jyk7XG4gICAgbmFtZXMgPSBbIG5hbWVzIF07XG4gIH1cblxuICB2YXIgY291bnQgPSBuYW1lcy5sZW5ndGg7XG4gIHZhciBuYW1lc0xlbiA9IDA7XG4gIHZhciBuYW1lQXR0cnM7XG4gIHZhciBhdHRycyA9IFtdO1xuICB2YXIgbmFtZTtcbiAgdmFyIGZpbGVuYW1lO1xuICB2YXIgbG9uZ25hbWU7XG4gIHZhciBhdHRyO1xuICB2YXIgbGVuO1xuICB2YXIgbGVuMjtcbiAgdmFyIGJ1ZjtcbiAgdmFyIHA7XG4gIHZhciBpO1xuICB2YXIgajtcbiAgdmFyIGs7XG5cbiAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICBuYW1lID0gbmFtZXNbaV07XG4gICAgZmlsZW5hbWUgPSAoIW5hbWUgfHwgIW5hbWUuZmlsZW5hbWUgfHwgdHlwZW9mIG5hbWUuZmlsZW5hbWUgIT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgIDogbmFtZS5maWxlbmFtZSk7XG4gICAgbmFtZXNMZW4gKz0gNCArIEJ1ZmZlci5ieXRlTGVuZ3RoKGZpbGVuYW1lKTtcbiAgICBsb25nbmFtZSA9ICghbmFtZSB8fCAhbmFtZS5sb25nbmFtZSB8fCB0eXBlb2YgbmFtZS5sb25nbmFtZSAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgOiBuYW1lLmxvbmduYW1lKTtcbiAgICBuYW1lc0xlbiArPSA0ICsgQnVmZmVyLmJ5dGVMZW5ndGgobG9uZ25hbWUpO1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lLmF0dHJzID09PSAnb2JqZWN0JyAmJiBuYW1lLmF0dHJzICE9PSBudWxsKSB7XG4gICAgICBuYW1lQXR0cnMgPSBhdHRyc1RvQnl0ZXMobmFtZS5hdHRycyk7XG4gICAgICBuYW1lc0xlbiArPSA0ICsgbmFtZUF0dHJzLm5ieXRlcztcbiAgICAgIGF0dHJzLnB1c2gobmFtZUF0dHJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZXNMZW4gKz0gNDtcbiAgICAgIGF0dHJzLnB1c2gobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBuYW1lc0xlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVTUE9OU0UuTkFNRTtcbiAgd3JpdGVVSW50MzJCRShidWYsIGlkLCA1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY291bnQsIDkpO1xuXG4gIHAgPSAxMztcblxuICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgIG5hbWUgPSBuYW1lc1tpXTtcblxuICAgIGZpbGVuYW1lID0gKCFuYW1lIHx8ICFuYW1lLmZpbGVuYW1lIHx8IHR5cGVvZiBuYW1lLmZpbGVuYW1lICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IG5hbWUuZmlsZW5hbWUpO1xuICAgIGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGZpbGVuYW1lKTtcbiAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbGVuLCBwKTtcbiAgICBwICs9IDQ7XG4gICAgaWYgKGxlbikge1xuICAgICAgYnVmLndyaXRlKGZpbGVuYW1lLCBwLCBsZW4sICd1dGY4Jyk7XG4gICAgICBwICs9IGxlbjtcbiAgICB9XG5cbiAgICBsb25nbmFtZSA9ICghbmFtZSB8fCAhbmFtZS5sb25nbmFtZSB8fCB0eXBlb2YgbmFtZS5sb25nbmFtZSAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgOiBuYW1lLmxvbmduYW1lKTtcbiAgICBsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChsb25nbmFtZSk7XG4gICAgd3JpdGVVSW50MzJCRShidWYsIGxlbiwgcCk7XG4gICAgcCArPSA0O1xuICAgIGlmIChsZW4pIHtcbiAgICAgIGJ1Zi53cml0ZShsb25nbmFtZSwgcCwgbGVuLCAndXRmOCcpO1xuICAgICAgcCArPSBsZW47XG4gICAgfVxuXG4gICAgYXR0ciA9IGF0dHJzW2ldO1xuICAgIGlmIChhdHRyKSB7XG4gICAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYXR0ci5mbGFncywgcCk7XG4gICAgICBwICs9IDQ7XG4gICAgICBpZiAoYXR0ci5mbGFncyAmJiBhdHRyLmJ5dGVzKSB7XG4gICAgICAgIHZhciBieXRlcyA9IGF0dHIuYnl0ZXM7XG4gICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IGJ5dGVzLmxlbmd0aDsgaiA8IGxlbjsgKytqKVxuICAgICAgICAgIGZvciAoayA9IDAsIGxlbjIgPSBieXRlc1tqXS5sZW5ndGg7IGsgPCBsZW4yOyArK2spXG4gICAgICAgICAgICBidWZbcCsrXSA9IGJ5dGVzW2pdW2tdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMCwgcCk7XG4gICAgICBwICs9IDQ7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIE5BTUUnKTtcbiAgcmV0dXJuIHRoaXMucHVzaChidWYpO1xufTtcblNGVFBTdHJlYW0ucHJvdG90eXBlLmF0dHJzID0gZnVuY3Rpb24oaWQsIGF0dHJzKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgaWYgKHR5cGVvZiBhdHRycyAhPT0gJ29iamVjdCcgfHwgYXR0cnMgPT09IG51bGwpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdhdHRycyBpcyBub3QgYW4gb2JqZWN0Jyk7XG5cbiAgdmFyIGluZm8gPSBhdHRyc1RvQnl0ZXMoYXR0cnMpO1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIDQgKyBpbmZvLm5ieXRlcyk7XG4gIHZhciBwID0gMTM7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJ1Zi5sZW5ndGggLSA0LCAwKTtcbiAgYnVmWzRdID0gUkVTUE9OU0UuQVRUUlM7XG4gIHdyaXRlVUludDMyQkUoYnVmLCBpZCwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGluZm8uZmxhZ3MsIDkpO1xuXG4gIGlmIChpbmZvLmZsYWdzICYmIGluZm8uYnl0ZXMpIHtcbiAgICB2YXIgYnl0ZXMgPSBpbmZvLmJ5dGVzO1xuICAgIGZvciAodmFyIGogPSAwLCBsZW4gPSBieXRlcy5sZW5ndGg7IGogPCBsZW47ICsrailcbiAgICAgIGZvciAodmFyIGsgPSAwLCBsZW4yID0gYnl0ZXNbal0ubGVuZ3RoOyBrIDwgbGVuMjsgKytrKVxuICAgICAgICBidWZbcCsrXSA9IGJ5dGVzW2pdW2tdO1xuICB9XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUdbU0ZUUF06IE91dGdvaW5nOiBXcml0aW5nIEFUVFJTJyk7XG4gIHJldHVybiB0aGlzLnB1c2goYnVmKTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRBdHRycyhidWYsIHAsIHN0cmVhbSwgY2FsbGJhY2spIHtcbiAgLypcbiAgICB1aW50MzIgICBmbGFnc1xuICAgIHVpbnQ2NCAgIHNpemUgICAgICAgICAgIHByZXNlbnQgb25seSBpZiBmbGFnIFNTSF9GSUxFWEZFUl9BVFRSX1NJWkVcbiAgICB1aW50MzIgICB1aWQgICAgICAgICAgICBwcmVzZW50IG9ubHkgaWYgZmxhZyBTU0hfRklMRVhGRVJfQVRUUl9VSURHSURcbiAgICB1aW50MzIgICBnaWQgICAgICAgICAgICBwcmVzZW50IG9ubHkgaWYgZmxhZyBTU0hfRklMRVhGRVJfQVRUUl9VSURHSURcbiAgICB1aW50MzIgICBwZXJtaXNzaW9ucyAgICBwcmVzZW50IG9ubHkgaWYgZmxhZyBTU0hfRklMRVhGRVJfQVRUUl9QRVJNSVNTSU9OU1xuICAgIHVpbnQzMiAgIGF0aW1lICAgICAgICAgIHByZXNlbnQgb25seSBpZiBmbGFnIFNTSF9GSUxFWEZFUl9BQ01PRFRJTUVcbiAgICB1aW50MzIgICBtdGltZSAgICAgICAgICBwcmVzZW50IG9ubHkgaWYgZmxhZyBTU0hfRklMRVhGRVJfQUNNT0RUSU1FXG4gICAgdWludDMyICAgZXh0ZW5kZWRfY291bnQgcHJlc2VudCBvbmx5IGlmIGZsYWcgU1NIX0ZJTEVYRkVSX0FUVFJfRVhURU5ERURcbiAgICBzdHJpbmcgICBleHRlbmRlZF90eXBlXG4gICAgc3RyaW5nICAgZXh0ZW5kZWRfZGF0YVxuICAgIC4uLiAgICAgIG1vcmUgZXh0ZW5kZWQgZGF0YSAoZXh0ZW5kZWRfdHlwZSAtIGV4dGVuZGVkX2RhdGEgcGFpcnMpLFxuICAgICAgICAgICAgICAgc28gdGhhdCBudW1iZXIgb2YgcGFpcnMgZXF1YWxzIGV4dGVuZGVkX2NvdW50XG4gICovXG4gIHZhciBmbGFncyA9IHJlYWRVSW50MzJCRShidWYsIHApO1xuICB2YXIgYXR0cnMgPSBuZXcgU3RhdHMoKTtcblxuICBwICs9IDQ7XG5cbiAgaWYgKGZsYWdzICYgQVRUUi5TSVpFKSB7XG4gICAgdmFyIHNpemUgPSByZWFkVUludDY0QkUoYnVmLCBwLCBzdHJlYW0sIGNhbGxiYWNrKTtcbiAgICBpZiAoc2l6ZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgYXR0cnMuc2l6ZSA9IHNpemU7XG4gICAgcCArPSA4O1xuICB9XG4gIGlmIChmbGFncyAmIEFUVFIuVUlER0lEKSB7XG4gICAgdmFyIHVpZDtcbiAgICB2YXIgZ2lkO1xuICAgIHVpZCA9IHJlYWRJbnQoYnVmLCBwLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgaWYgKHVpZCA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgYXR0cnMudWlkID0gdWlkO1xuICAgIHAgKz0gNDtcbiAgICBnaWQgPSByZWFkSW50KGJ1ZiwgcCwgdGhpcywgY2FsbGJhY2spO1xuICAgIGlmIChnaWQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGF0dHJzLmdpZCA9IGdpZDtcbiAgICBwICs9IDQ7XG4gIH1cbiAgaWYgKGZsYWdzICYgQVRUUi5QRVJNSVNTSU9OUykge1xuICAgIHZhciBtb2RlID0gcmVhZEludChidWYsIHAsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICBpZiAobW9kZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgYXR0cnMubW9kZSA9IG1vZGU7XG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICBhdHRycy5wZXJtaXNzaW9ucyA9IG1vZGU7XG4gICAgcCArPSA0O1xuICB9XG4gIGlmIChmbGFncyAmIEFUVFIuQUNNT0RUSU1FKSB7XG4gICAgdmFyIGF0aW1lO1xuICAgIHZhciBtdGltZTtcbiAgICBhdGltZSA9IHJlYWRJbnQoYnVmLCBwLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgaWYgKGF0aW1lID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBhdHRycy5hdGltZSA9IGF0aW1lO1xuICAgIHAgKz0gNDtcbiAgICBtdGltZSA9IHJlYWRJbnQoYnVmLCBwLCB0aGlzLCBjYWxsYmFjayk7XG4gICAgaWYgKG10aW1lID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBhdHRycy5tdGltZSA9IG10aW1lO1xuICAgIHAgKz0gNDtcbiAgfVxuICBpZiAoZmxhZ3MgJiBBVFRSLkVYVEVOREVEKSB7XG4gICAgLy8gVE9ETzogcmVhZC9wYXJzZSBleHRlbmRlZCBkYXRhXG4gICAgdmFyIGV4dGNvdW50ID0gcmVhZEludChidWYsIHAsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICBpZiAoZXh0Y291bnQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHAgKz0gNDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuOyBpIDwgZXh0Y291bnQ7ICsraSkge1xuICAgICAgbGVuID0gcmVhZEludChidWYsIHAsIHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChsZW4gPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBwICs9IDQgKyBsZW47XG4gICAgfVxuICB9XG5cbiAgYnVmLl9wb3MgPSBwO1xuXG4gIHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gcmVhZFVJbnQ2NEJFKGJ1ZmZlciwgcCwgc3RyZWFtLCBjYWxsYmFjaykge1xuICBpZiAoKGJ1ZmZlci5sZW5ndGggLSBwKSA8IDgpIHtcbiAgICBzdHJlYW0gJiYgc3RyZWFtLl9jbGVhbnVwKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdmFsID0gMDtcblxuICBmb3IgKHZhciBsZW4gPSBwICsgODsgcCA8IGxlbjsgKytwKSB7XG4gICAgdmFsICo9IDI1NjtcbiAgICB2YWwgKz0gYnVmZmVyW3BdO1xuICB9XG5cbiAgYnVmZmVyLl9wb3MgPSBwO1xuXG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIGF0dHJzVG9CeXRlcyhhdHRycykge1xuICB2YXIgZmxhZ3MgPSAwO1xuICB2YXIgYXR0ckJ5dGVzID0gMDtcbiAgdmFyIHJldCA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgaWYgKHR5cGVvZiBhdHRycyAhPT0gJ29iamVjdCcgfHwgYXR0cnMgPT09IG51bGwpXG4gICAgcmV0dXJuIHsgZmxhZ3M6IGZsYWdzLCBuYnl0ZXM6IGF0dHJCeXRlcywgYnl0ZXM6IHJldCB9O1xuXG4gIGlmICh0eXBlb2YgYXR0cnMuc2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICBmbGFncyB8PSBBVFRSLlNJWkU7XG4gICAgYXR0ckJ5dGVzICs9IDg7XG4gICAgdmFyIHNpemVCeXRlcyA9IG5ldyBBcnJheSg4KTtcbiAgICB2YXIgdmFsID0gYXR0cnMuc2l6ZTtcbiAgICBmb3IgKGkgPSA3OyBpID49IDA7IC0taSkge1xuICAgICAgc2l6ZUJ5dGVzW2ldID0gdmFsICYgMHhGRjtcbiAgICAgIHZhbCAvPSAyNTY7XG4gICAgfVxuICAgIHJldC5wdXNoKHNpemVCeXRlcyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBhdHRycy51aWQgPT09ICdudW1iZXInICYmIHR5cGVvZiBhdHRycy5naWQgPT09ICdudW1iZXInKSB7XG4gICAgZmxhZ3MgfD0gQVRUUi5VSURHSUQ7XG4gICAgYXR0ckJ5dGVzICs9IDg7XG4gICAgcmV0LnB1c2goWyhhdHRycy51aWQgPj4gMjQpICYgMHhGRiwgKGF0dHJzLnVpZCA+PiAxNikgJiAweEZGLFxuICAgICAgICAgICAgICAoYXR0cnMudWlkID4+IDgpICYgMHhGRiwgYXR0cnMudWlkICYgMHhGRl0pO1xuICAgIHJldC5wdXNoKFsoYXR0cnMuZ2lkID4+IDI0KSAmIDB4RkYsIChhdHRycy5naWQgPj4gMTYpICYgMHhGRixcbiAgICAgICAgICAgICAgKGF0dHJzLmdpZCA+PiA4KSAmIDB4RkYsIGF0dHJzLmdpZCAmIDB4RkZdKTtcbiAgfVxuICBpZiAodHlwZW9mIGF0dHJzLnBlcm1pc3Npb25zID09PSAnbnVtYmVyJ1xuICAgICAgfHwgdHlwZW9mIGF0dHJzLnBlcm1pc3Npb25zID09PSAnc3RyaW5nJ1xuICAgICAgfHwgdHlwZW9mIGF0dHJzLm1vZGUgPT09ICdudW1iZXInXG4gICAgICB8fCB0eXBlb2YgYXR0cnMubW9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgbW9kZSA9IG1vZGVOdW0oYXR0cnMubW9kZSB8fCBhdHRycy5wZXJtaXNzaW9ucyk7XG4gICAgZmxhZ3MgfD0gQVRUUi5QRVJNSVNTSU9OUztcbiAgICBhdHRyQnl0ZXMgKz0gNDtcbiAgICByZXQucHVzaChbKG1vZGUgPj4gMjQpICYgMHhGRixcbiAgICAgICAgICAgICAgKG1vZGUgPj4gMTYpICYgMHhGRixcbiAgICAgICAgICAgICAgKG1vZGUgPj4gOCkgJiAweEZGLFxuICAgICAgICAgICAgICBtb2RlICYgMHhGRl0pO1xuICB9XG4gIGlmICgodHlwZW9mIGF0dHJzLmF0aW1lID09PSAnbnVtYmVyJyB8fCBpc0RhdGUoYXR0cnMuYXRpbWUpKVxuICAgICAgJiYgKHR5cGVvZiBhdHRycy5tdGltZSA9PT0gJ251bWJlcicgfHwgaXNEYXRlKGF0dHJzLm10aW1lKSkpIHtcbiAgICB2YXIgYXRpbWUgPSB0b1VuaXhUaW1lc3RhbXAoYXR0cnMuYXRpbWUpO1xuICAgIHZhciBtdGltZSA9IHRvVW5peFRpbWVzdGFtcChhdHRycy5tdGltZSk7XG5cbiAgICBmbGFncyB8PSBBVFRSLkFDTU9EVElNRTtcbiAgICBhdHRyQnl0ZXMgKz0gODtcbiAgICByZXQucHVzaChbKGF0aW1lID4+IDI0KSAmIDB4RkYsIChhdGltZSA+PiAxNikgJiAweEZGLFxuICAgICAgICAgICAgICAoYXRpbWUgPj4gOCkgJiAweEZGLCBhdGltZSAmIDB4RkZdKTtcbiAgICByZXQucHVzaChbKG10aW1lID4+IDI0KSAmIDB4RkYsIChtdGltZSA+PiAxNikgJiAweEZGLFxuICAgICAgICAgICAgICAobXRpbWUgPj4gOCkgJiAweEZGLCBtdGltZSAmIDB4RkZdKTtcbiAgfVxuICAvLyBUT0RPOiBleHRlbmRlZCBhdHRyaWJ1dGVzXG5cbiAgcmV0dXJuIHsgZmxhZ3M6IGZsYWdzLCBuYnl0ZXM6IGF0dHJCeXRlcywgYnl0ZXM6IHJldCB9O1xufVxuXG5mdW5jdGlvbiB0b1VuaXhUaW1lc3RhbXAodGltZSkge1xuICBpZiAodHlwZW9mIHRpbWUgPT09ICdudW1iZXInICYmICFpc05hTih0aW1lKSlcbiAgICByZXR1cm4gdGltZTtcbiAgZWxzZSBpZiAoaXNEYXRlKHRpbWUpKVxuICAgIHJldHVybiBwYXJzZUludCh0aW1lLmdldFRpbWUoKSAvIDEwMDAsIDEwKTtcbiAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFyc2UgdGltZTogJyArIHRpbWUpO1xufVxuXG5mdW5jdGlvbiBtb2RlTnVtKG1vZGUpIHtcbiAgaWYgKHR5cGVvZiBtb2RlID09PSAnbnVtYmVyJyAmJiAhaXNOYU4obW9kZSkpXG4gICAgcmV0dXJuIG1vZGU7XG4gIGVsc2UgaWYgKHR5cGVvZiBtb2RlID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gbW9kZU51bShwYXJzZUludChtb2RlLCA4KSk7XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIG1vZGU6ICcgKyBtb2RlKTtcbn1cblxudmFyIHN0cmluZ0ZsYWdNYXAgPSB7XG4gICdyJzogT1BFTl9NT0RFLlJFQUQsXG4gICdyKyc6IE9QRU5fTU9ERS5SRUFEIHwgT1BFTl9NT0RFLldSSVRFLFxuICAndyc6IE9QRU5fTU9ERS5UUlVOQyB8IE9QRU5fTU9ERS5DUkVBVCB8IE9QRU5fTU9ERS5XUklURSxcbiAgJ3d4JzogT1BFTl9NT0RFLlRSVU5DIHwgT1BFTl9NT0RFLkNSRUFUIHwgT1BFTl9NT0RFLldSSVRFIHwgT1BFTl9NT0RFLkVYQ0wsXG4gICd4dyc6IE9QRU5fTU9ERS5UUlVOQyB8IE9QRU5fTU9ERS5DUkVBVCB8IE9QRU5fTU9ERS5XUklURSB8IE9QRU5fTU9ERS5FWENMLFxuICAndysnOiBPUEVOX01PREUuVFJVTkMgfCBPUEVOX01PREUuQ1JFQVQgfCBPUEVOX01PREUuUkVBRCB8IE9QRU5fTU9ERS5XUklURSxcbiAgJ3d4Kyc6IE9QRU5fTU9ERS5UUlVOQyB8IE9QRU5fTU9ERS5DUkVBVCB8IE9QRU5fTU9ERS5SRUFEIHwgT1BFTl9NT0RFLldSSVRFXG4gICAgICAgICB8IE9QRU5fTU9ERS5FWENMLFxuICAneHcrJzogT1BFTl9NT0RFLlRSVU5DIHwgT1BFTl9NT0RFLkNSRUFUIHwgT1BFTl9NT0RFLlJFQUQgfCBPUEVOX01PREUuV1JJVEVcbiAgICAgICAgIHwgT1BFTl9NT0RFLkVYQ0wsXG4gICdhJzogT1BFTl9NT0RFLkFQUEVORCB8IE9QRU5fTU9ERS5DUkVBVCB8IE9QRU5fTU9ERS5XUklURSxcbiAgJ2F4JzogT1BFTl9NT0RFLkFQUEVORCB8IE9QRU5fTU9ERS5DUkVBVCB8IE9QRU5fTU9ERS5XUklURSB8IE9QRU5fTU9ERS5FWENMLFxuICAneGEnOiBPUEVOX01PREUuQVBQRU5EIHwgT1BFTl9NT0RFLkNSRUFUIHwgT1BFTl9NT0RFLldSSVRFIHwgT1BFTl9NT0RFLkVYQ0wsXG4gICdhKyc6IE9QRU5fTU9ERS5BUFBFTkQgfCBPUEVOX01PREUuQ1JFQVQgfCBPUEVOX01PREUuUkVBRCB8IE9QRU5fTU9ERS5XUklURSxcbiAgJ2F4Kyc6IE9QRU5fTU9ERS5BUFBFTkQgfCBPUEVOX01PREUuQ1JFQVQgfCBPUEVOX01PREUuUkVBRCB8IE9QRU5fTU9ERS5XUklURVxuICAgICAgICAgfCBPUEVOX01PREUuRVhDTCxcbiAgJ3hhKyc6IE9QRU5fTU9ERS5BUFBFTkQgfCBPUEVOX01PREUuQ1JFQVQgfCBPUEVOX01PREUuUkVBRCB8IE9QRU5fTU9ERS5XUklURVxuICAgICAgICAgfCBPUEVOX01PREUuRVhDTFxufTtcbnZhciBzdHJpbmdGbGFnTWFwS2V5cyA9IE9iamVjdC5rZXlzKHN0cmluZ0ZsYWdNYXApO1xuXG5mdW5jdGlvbiBzdHJpbmdUb0ZsYWdzKHN0cikge1xuICB2YXIgZmxhZ3MgPSBzdHJpbmdGbGFnTWFwW3N0cl07XG4gIGlmIChmbGFncyAhPT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmbGFncztcbiAgcmV0dXJuIG51bGw7XG59XG5TRlRQU3RyZWFtLnN0cmluZ1RvRmxhZ3MgPSBzdHJpbmdUb0ZsYWdzO1xuXG5mdW5jdGlvbiBmbGFnc1RvU3RyaW5nKGZsYWdzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nRmxhZ01hcEtleXMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIga2V5ID0gc3RyaW5nRmxhZ01hcEtleXNbaV07XG4gICAgaWYgKHN0cmluZ0ZsYWdNYXBba2V5XSA9PT0gZmxhZ3MpXG4gICAgICByZXR1cm4ga2V5O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuU0ZUUFN0cmVhbS5mbGFnc1RvU3RyaW5nID0gZmxhZ3NUb1N0cmluZztcblxuZnVuY3Rpb24gU3RhdHMoaW5pdGlhbCkge1xuICB0aGlzLm1vZGUgPSAoaW5pdGlhbCAmJiBpbml0aWFsLm1vZGUpO1xuICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5tb2RlOyAvLyBiYWNrd2FyZHMgY29tcGF0aWJsaXR5XG4gIHRoaXMudWlkID0gKGluaXRpYWwgJiYgaW5pdGlhbC51aWQpO1xuICB0aGlzLmdpZCA9IChpbml0aWFsICYmIGluaXRpYWwuZ2lkKTtcbiAgdGhpcy5zaXplID0gKGluaXRpYWwgJiYgaW5pdGlhbC5zaXplKTtcbiAgdGhpcy5hdGltZSA9IChpbml0aWFsICYmIGluaXRpYWwuYXRpbWUpO1xuICB0aGlzLm10aW1lID0gKGluaXRpYWwgJiYgaW5pdGlhbC5tdGltZSk7XG59XG5TdGF0cy5wcm90b3R5cGUuX2NoZWNrTW9kZVByb3BlcnR5ID0gZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgcmV0dXJuICgodGhpcy5tb2RlICYgY29uc3RhbnRzLlNfSUZNVCkgPT09IHByb3BlcnR5KTtcbn07XG5TdGF0cy5wcm90b3R5cGUuaXNEaXJlY3RvcnkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGNvbnN0YW50cy5TX0lGRElSKTtcbn07XG5TdGF0cy5wcm90b3R5cGUuaXNGaWxlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShjb25zdGFudHMuU19JRlJFRyk7XG59O1xuU3RhdHMucHJvdG90eXBlLmlzQmxvY2tEZXZpY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGNvbnN0YW50cy5TX0lGQkxLKTtcbn07XG5TdGF0cy5wcm90b3R5cGUuaXNDaGFyYWN0ZXJEZXZpY2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGNvbnN0YW50cy5TX0lGQ0hSKTtcbn07XG5TdGF0cy5wcm90b3R5cGUuaXNTeW1ib2xpY0xpbmsgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGNvbnN0YW50cy5TX0lGTE5LKTtcbn07XG5TdGF0cy5wcm90b3R5cGUuaXNGSUZPID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShjb25zdGFudHMuU19JRklGTyk7XG59O1xuU3RhdHMucHJvdG90eXBlLmlzU29ja2V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShjb25zdGFudHMuU19JRlNPQ0spO1xufTtcblNGVFBTdHJlYW0uU3RhdHMgPSBTdGF0cztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJlYWRTdHJlYW0vV3JpdGVTdHJlYW0tcmVsYXRlZFxudmFyIGZzQ29tcGF0ID0gcmVxdWlyZSgnLi9ub2RlLWZzLWNvbXBhdCcpO1xudmFyIHZhbGlkYXRlTnVtYmVyID0gZnNDb21wYXQudmFsaWRhdGVOdW1iZXI7XG52YXIgZGVzdHJveUltcGwgPSBmc0NvbXBhdC5kZXN0cm95SW1wbDtcbnZhciBFUlJfT1VUX09GX1JBTkdFID0gZnNDb21wYXQuRVJSX09VVF9PRl9SQU5HRTtcbnZhciBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IGZzQ29tcGF0LkVSUl9JTlZBTElEX0FSR19UWVBFO1xuXG52YXIga01pblBvb2xTcGFjZSA9IDEyODtcblxudmFyIHBvb2w7XG4vLyBJdCBjYW4gaGFwcGVuIHRoYXQgd2UgZXhwZWN0IHRvIHJlYWQgYSBsYXJnZSBjaHVuayBvZiBkYXRhLCBhbmQgcmVzZXJ2ZVxuLy8gYSBsYXJnZSBjaHVuayBvZiB0aGUgcG9vbCBhY2NvcmRpbmdseSwgYnV0IHRoZSByZWFkKCkgY2FsbCBvbmx5IGZpbGxlZFxuLy8gYSBwb3J0aW9uIG9mIGl0LiBJZiBhIGNvbmN1cnJlbnRseSBleGVjdXRpbmcgcmVhZCgpIHRoZW4gdXNlcyB0aGUgc2FtZSBwb29sLFxuLy8gdGhlIFwicmVzZXJ2ZWRcIiBwb3J0aW9uIGNhbm5vdCBiZSB1c2VkLCBzbyB3ZSBhbGxvdyBpdCB0byBiZSByZS11c2VkIGFzIGFcbi8vIG5ldyBwb29sIGxhdGVyLlxudmFyIHBvb2xGcmFnbWVudHMgPSBbXTtcblxuZnVuY3Rpb24gYWxsb2NOZXdQb29sKHBvb2xTaXplKSB7XG4gIGlmIChwb29sRnJhZ21lbnRzLmxlbmd0aCA+IDApXG4gICAgcG9vbCA9IHBvb2xGcmFnbWVudHMucG9wKCk7XG4gIGVsc2VcbiAgICBwb29sID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBvb2xTaXplKTtcbiAgcG9vbC51c2VkID0gMDtcbn1cblxuLy8gQ2hlY2sgdGhlIGB0aGlzLnN0YXJ0YCBhbmQgYHRoaXMuZW5kYCBvZiBzdHJlYW0uXG5mdW5jdGlvbiBjaGVja1Bvc2l0aW9uKHBvcywgbmFtZSkge1xuICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHBvcykpIHtcbiAgICB2YWxpZGF0ZU51bWJlcihwb3MsIG5hbWUpO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwb3MpKVxuICAgICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJ2FuIGludGVnZXInLCBwb3MpO1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsICc+PSAwIGFuZCA8PSAyICoqIDUzIC0gMScsIHBvcyk7XG4gIH1cbiAgaWYgKHBvcyA8IDApXG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJz49IDAgYW5kIDw9IDIgKiogNTMgLSAxJywgcG9zKTtcbn1cblxuZnVuY3Rpb24gcm91bmRVcFRvTXVsdGlwbGVPZjgobikge1xuICByZXR1cm4gKG4gKyA3KSAmIH43OyAgLy8gQWxpZ24gdG8gOCBieXRlIGJvdW5kYXJ5LlxufVxuXG5mdW5jdGlvbiBSZWFkU3RyZWFtKHNmdHAsIHBhdGgsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcbiAgICBvcHRpb25zID0ge307XG4gIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJylcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogb3B0aW9ucyB9O1xuICBlbHNlIGlmIChvcHRpb25zID09PSBudWxsIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcIm9wdGlvbnNcIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCcpO1xuICBlbHNlXG4gICAgb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUob3B0aW9ucyk7XG5cbiAgLy8gQSBsaXR0bGUgYml0IGJpZ2dlciBidWZmZXIgYW5kIHdhdGVyIG1hcmtzIGJ5IGRlZmF1bHRcbiAgaWYgKG9wdGlvbnMuaGlnaFdhdGVyTWFyayA9PT0gdW5kZWZpbmVkKVxuICAgIG9wdGlvbnMuaGlnaFdhdGVyTWFyayA9IDY0ICogMTAyNDtcblxuICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdCBkbyBub3QgZW1pdCBjbG9zZSBvbiBkZXN0cm95LlxuICBvcHRpb25zLmVtaXRDbG9zZSA9IGZhbHNlO1xuXG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5wYXRoID0gcGF0aDtcbiAgdGhpcy5mbGFncyA9IG9wdGlvbnMuZmxhZ3MgPT09IHVuZGVmaW5lZCA/ICdyJyA6IG9wdGlvbnMuZmxhZ3M7XG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSA9PT0gdW5kZWZpbmVkID8gMG82NjYgOiBvcHRpb25zLm1vZGU7XG5cbiAgdGhpcy5zdGFydCA9IG9wdGlvbnMuc3RhcnQ7XG4gIHRoaXMuZW5kID0gb3B0aW9ucy5lbmQ7XG4gIHRoaXMuYXV0b0Nsb3NlID0gb3B0aW9ucy5hdXRvQ2xvc2UgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLmF1dG9DbG9zZTtcbiAgdGhpcy5wb3MgPSAwO1xuICB0aGlzLmJ5dGVzUmVhZCA9IDA7XG4gIHRoaXMuY2xvc2VkID0gZmFsc2U7XG5cbiAgdGhpcy5oYW5kbGUgPSBvcHRpb25zLmhhbmRsZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG9wdGlvbnMuaGFuZGxlO1xuICB0aGlzLnNmdHAgPSBzZnRwO1xuICB0aGlzLl9vcGVuaW5nID0gZmFsc2U7XG5cbiAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNoZWNrUG9zaXRpb24odGhpcy5zdGFydCwgJ3N0YXJ0Jyk7XG5cbiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gIH1cblxuICBpZiAodGhpcy5lbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZW5kID0gSW5maW5pdHk7XG4gIH0gZWxzZSBpZiAodGhpcy5lbmQgIT09IEluZmluaXR5KSB7XG4gICAgY2hlY2tQb3NpdGlvbih0aGlzLmVuZCwgJ2VuZCcpO1xuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnN0YXJ0ID4gdGhpcy5lbmQpIHtcbiAgICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKFxuICAgICAgICAnc3RhcnQnLFxuICAgICAgICBgPD0gXCJlbmRcIiAoaGVyZTogJHt0aGlzLmVuZH0pYCxcbiAgICAgICAgdGhpcy5zdGFydFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UpXG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfSk7XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcy5oYW5kbGUpKVxuICAgIHRoaXMub3BlbigpO1xufVxuaW5oZXJpdHMoUmVhZFN0cmVhbSwgUmVhZGFibGVTdHJlYW0pO1xuXG5SZWFkU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9vcGVuaW5nKVxuICAgIHJldHVybjtcblxuICB0aGlzLl9vcGVuaW5nID0gdHJ1ZTtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIHRoaXMuc2Z0cC5vcGVuKHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCAoZXIsIGhhbmRsZSkgPT4ge1xuICAgIHRoaXMuX29wZW5pbmcgPSBmYWxzZTtcblxuICAgIGlmIChlcikge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgIGlmICh0aGlzLmF1dG9DbG9zZSlcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGUgPSBoYW5kbGU7XG4gICAgdGhpcy5lbWl0KCdvcGVuJywgaGFuZGxlKTtcbiAgICB0aGlzLmVtaXQoJ3JlYWR5Jyk7XG4gICAgLy8gc3RhcnQgdGhlIGZsb3cgb2YgZGF0YS5cbiAgICB0aGlzLnJlYWQoKTtcbiAgfSk7XG59O1xuXG5SZWFkU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcy5oYW5kbGUpKSB7XG4gICAgcmV0dXJuIHRoaXMub25jZSgnb3BlbicsIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fcmVhZChuKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFhYWDogc2FmZSB0byByZW1vdmUgdGhpcz9cbiAgaWYgKHRoaXMuZGVzdHJveWVkKVxuICAgIHJldHVybjtcblxuICBpZiAoIXBvb2wgfHwgcG9vbC5sZW5ndGggLSBwb29sLnVzZWQgPCBrTWluUG9vbFNwYWNlKSB7XG4gICAgLy8gZGlzY2FyZCB0aGUgb2xkIHBvb2wuXG4gICAgYWxsb2NOZXdQb29sKHRoaXMucmVhZGFibGVIaWdoV2F0ZXJNYXJrXG4gICAgICAgICAgICAgICAgIHx8IHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyayk7XG4gIH1cblxuICAvLyBHcmFiIGFub3RoZXIgcmVmZXJlbmNlIHRvIHRoZSBwb29sIGluIHRoZSBjYXNlIHRoYXQgd2hpbGUgd2UncmVcbiAgLy8gaW4gdGhlIHRocmVhZCBwb29sIGFub3RoZXIgcmVhZCgpIGZpbmlzaGVzIHVwIHRoZSBwb29sLCBhbmRcbiAgLy8gYWxsb2NhdGVzIGEgbmV3IG9uZS5cbiAgdmFyIHRoaXNQb29sID0gcG9vbDtcbiAgdmFyIHRvUmVhZCA9IE1hdGgubWluKHBvb2wubGVuZ3RoIC0gcG9vbC51c2VkLCBuKTtcbiAgdmFyIHN0YXJ0ID0gcG9vbC51c2VkO1xuXG4gIGlmICh0aGlzLmVuZCAhPT0gdW5kZWZpbmVkKVxuICAgIHRvUmVhZCA9IE1hdGgubWluKHRoaXMuZW5kIC0gdGhpcy5wb3MgKyAxLCB0b1JlYWQpO1xuXG4gIC8vIEFscmVhZHkgcmVhZCBldmVyeXRoaW5nIHdlIHdlcmUgc3VwcG9zZWQgdG8gcmVhZCFcbiAgLy8gdHJlYXQgYXMgRU9GLlxuICBpZiAodG9SZWFkIDw9IDApXG4gICAgcmV0dXJuIHRoaXMucHVzaChudWxsKTtcblxuICAvLyB0aGUgYWN0dWFsIHJlYWQuXG4gIHRoaXMuc2Z0cC5yZWFkRGF0YSh0aGlzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgIHBvb2wsXG4gICAgICAgICAgICAgICAgICAgICBwb29sLnVzZWQsXG4gICAgICAgICAgICAgICAgICAgICB0b1JlYWQsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcyxcbiAgICAgICAgICAgICAgICAgICAgIChlciwgYnl0ZXNSZWFkKSA9PiB7XG4gICAgaWYgKGVyKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgaWYgKHRoaXMuYXV0b0Nsb3NlKVxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGIgPSBudWxsO1xuXG4gICAgLy8gTm93IHRoYXQgd2Uga25vdyBob3cgbXVjaCBkYXRhIHdlIGhhdmUgYWN0dWFsbHkgcmVhZCwgcmUtd2luZCB0aGVcbiAgICAvLyAndXNlZCcgZmllbGQgaWYgd2UgY2FuLCBhbmQgb3RoZXJ3aXNlIGFsbG93IHRoZSByZW1haW5kZXIgb2Ygb3VyXG4gICAgLy8gcmVzZXJ2YXRpb24gdG8gYmUgdXNlZCBhcyBhIG5ldyBwb29sIGxhdGVyLlxuICAgIGlmIChzdGFydCArIHRvUmVhZCA9PT0gdGhpc1Bvb2wudXNlZCAmJiB0aGlzUG9vbCA9PT0gcG9vbCkge1xuICAgICAgdmFyIG5ld1VzZWQgPSB0aGlzUG9vbC51c2VkICsgYnl0ZXNSZWFkIC0gdG9SZWFkO1xuICAgICAgdGhpc1Bvb2wudXNlZCA9IHJvdW5kVXBUb011bHRpcGxlT2Y4KG5ld1VzZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSb3VuZCBkb3duIHRvIHRoZSBuZXh0IGxvd2VzdCBtdWx0aXBsZSBvZiA4IHRvIGVuc3VyZSB0aGUgbmV3IHBvb2xcbiAgICAgIC8vIGZyYWdtZW50IHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIGFyZSBhbGlnbmVkIHRvIGFuIDggYnl0ZSBib3VuZGFyeS5cbiAgICAgIHZhciBhbGlnbmVkRW5kID0gKHN0YXJ0ICsgdG9SZWFkKSAmIH43O1xuICAgICAgdmFyIGFsaWduZWRTdGFydCA9IHJvdW5kVXBUb011bHRpcGxlT2Y4KHN0YXJ0ICsgYnl0ZXNSZWFkKTtcbiAgICAgIGlmIChhbGlnbmVkRW5kIC0gYWxpZ25lZFN0YXJ0ID49IGtNaW5Qb29sU3BhY2UpXG4gICAgICAgIHBvb2xGcmFnbWVudHMucHVzaCh0aGlzUG9vbC5zbGljZShhbGlnbmVkU3RhcnQsIGFsaWduZWRFbmQpKTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZXNSZWFkID4gMCkge1xuICAgICAgdGhpcy5ieXRlc1JlYWQgKz0gYnl0ZXNSZWFkO1xuICAgICAgYiA9IHRoaXNQb29sLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzUmVhZCk7XG4gICAgfVxuXG4gICAgLy8gTW92ZSB0aGUgcG9vbCBwb3NpdGlvbnMsIGFuZCBpbnRlcm5hbCBwb3NpdGlvbiBmb3IgcmVhZGluZy5cbiAgICB0aGlzLnBvcyArPSBieXRlc1JlYWQ7XG5cbiAgICB0aGlzLnB1c2goYik7XG4gIH0pO1xuXG4gIHBvb2wudXNlZCA9IHJvdW5kVXBUb011bHRpcGxlT2Y4KHBvb2wudXNlZCArIHRvUmVhZCk7XG59O1xuXG5pZiAodHlwZW9mIFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ICE9PSAnZnVuY3Rpb24nKVxuICBSZWFkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGw7XG5cblJlYWRTdHJlYW0ucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24oZXJyLCBjYikge1xuICBpZiAodGhpcy5fb3BlbmluZyAmJiAhQnVmZmVyLmlzQnVmZmVyKHRoaXMuaGFuZGxlKSkge1xuICAgIHRoaXMub25jZSgnb3BlbicsIGNsb3NlU3RyZWFtLmJpbmQobnVsbCwgdGhpcywgY2IsIGVycikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNsb3NlU3RyZWFtKHRoaXMsIGNiLCBlcnIpO1xuICB0aGlzLmhhbmRsZSA9IG51bGw7XG4gIHRoaXMuX29wZW5pbmcgPSBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIGNsb3NlU3RyZWFtKHN0cmVhbSwgY2IsIGVycikge1xuICBpZiAoIXN0cmVhbS5oYW5kbGUpXG4gICAgcmV0dXJuIG9uY2xvc2UoKTtcblxuICBzdHJlYW0uc2Z0cC5jbG9zZShzdHJlYW0uaGFuZGxlLCBvbmNsb3NlKTtcblxuICBmdW5jdGlvbiBvbmNsb3NlKGVyKSB7XG4gICAgZXIgPSBlciB8fCBlcnI7XG4gICAgY2IoZXIpO1xuICAgIHN0cmVhbS5jbG9zZWQgPSB0cnVlO1xuICAgIGlmICghZXIpXG4gICAgICBzdHJlYW0uZW1pdCgnY2xvc2UnKTtcbiAgfVxufVxuXG5SZWFkU3RyZWFtLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKGNiKSB7XG4gIHRoaXMuZGVzdHJveShudWxsLCBjYik7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZFN0cmVhbS5wcm90b3R5cGUsICdwZW5kaW5nJywge1xuICBnZXQoKSB7IHJldHVybiB0aGlzLmhhbmRsZSA9PT0gbnVsbDsgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuZnVuY3Rpb24gV3JpdGVTdHJlYW0oc2Z0cCwgcGF0aCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuICAgIG9wdGlvbnMgPSB7fTtcbiAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKVxuICAgIG9wdGlvbnMgPSB7IGVuY29kaW5nOiBvcHRpb25zIH07XG4gIGVsc2UgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wib3B0aW9uc1wiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gb2JqZWN0Jyk7XG4gIGVsc2VcbiAgICBvcHRpb25zID0gT2JqZWN0LmNyZWF0ZShvcHRpb25zKTtcblxuICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdCBkbyBub3QgZW1pdCBjbG9zZSBvbiBkZXN0cm95LlxuICBvcHRpb25zLmVtaXRDbG9zZSA9IGZhbHNlO1xuXG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5wYXRoID0gcGF0aDtcbiAgdGhpcy5mbGFncyA9IG9wdGlvbnMuZmxhZ3MgPT09IHVuZGVmaW5lZCA/ICd3JyA6IG9wdGlvbnMuZmxhZ3M7XG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSA9PT0gdW5kZWZpbmVkID8gMG82NjYgOiBvcHRpb25zLm1vZGU7XG5cbiAgdGhpcy5zdGFydCA9IG9wdGlvbnMuc3RhcnQ7XG4gIHRoaXMuYXV0b0Nsb3NlID0gb3B0aW9ucy5hdXRvQ2xvc2UgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLmF1dG9DbG9zZTtcbiAgdGhpcy5wb3MgPSAwO1xuICB0aGlzLmJ5dGVzV3JpdHRlbiA9IDA7XG4gIHRoaXMuY2xvc2VkID0gZmFsc2U7XG5cbiAgdGhpcy5oYW5kbGUgPSBvcHRpb25zLmhhbmRsZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG9wdGlvbnMuaGFuZGxlO1xuICB0aGlzLnNmdHAgPSBzZnRwO1xuICB0aGlzLl9vcGVuaW5nID0gZmFsc2U7XG5cbiAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNoZWNrUG9zaXRpb24odGhpcy5zdGFydCwgJ3N0YXJ0Jyk7XG5cbiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gIH1cblxuICBpZiAob3B0aW9ucy5lbmNvZGluZylcbiAgICB0aGlzLnNldERlZmF1bHRFbmNvZGluZyhvcHRpb25zLmVuY29kaW5nKTtcblxuICAvLyBOb2RlIHY2Lnggb25seVxuICB0aGlzLm9uKCdmaW5pc2gnLCBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZClcbiAgICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UpXG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfSk7XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcy5oYW5kbGUpKVxuICAgIHRoaXMub3BlbigpO1xufVxuaW5oZXJpdHMoV3JpdGVTdHJlYW0sIFdyaXRhYmxlU3RyZWFtKTtcblxuV3JpdGVTdHJlYW0ucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uKGNiKSB7XG4gIGlmICh0aGlzLmF1dG9DbG9zZSlcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgY2IoKTtcbn07XG5cbldyaXRlU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9vcGVuaW5nKVxuICAgIHJldHVybjtcblxuICB0aGlzLl9vcGVuaW5nID0gdHJ1ZTtcblxuICB0aGlzLnNmdHAub3Blbih0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgKGVyLCBoYW5kbGUpID0+IHtcbiAgICB0aGlzLl9vcGVuaW5nID0gZmFsc2U7XG5cbiAgICBpZiAoZXIpIHtcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICBpZiAodGhpcy5hdXRvQ2xvc2UpXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlID0gaGFuZGxlO1xuXG4gICAgdmFyIHRyeUFnYWluID0gKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBUcnkgY2htb2QoKSBmb3Igc2Z0cCBzZXJ2ZXJzIHRoYXQgbWF5IG5vdCBzdXBwb3J0IGZjaG1vZCgpIGZvclxuICAgICAgICAvLyB3aGF0ZXZlciByZWFzb25cbiAgICAgICAgdGhpcy5zZnRwLmNobW9kKHRoaXMucGF0aCwgdGhpcy5tb2RlLCAoZXJyXykgPT4ge1xuICAgICAgICAgIHRyeUFnYWluKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNGVFB2MyByZXF1aXJlcyBhYnNvbHV0ZSBvZmZzZXRzLCBubyBtYXR0ZXIgdGhlIG9wZW4gZmxhZyB1c2VkXG4gICAgICBpZiAodGhpcy5mbGFnc1swXSA9PT0gJ2EnKSB7XG4gICAgICAgIHZhciB0cnlTdGF0ID0gKGVyciwgc3QpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAvLyBUcnkgc3RhdCgpIGZvciBzZnRwIHNlcnZlcnMgdGhhdCBtYXkgbm90IHN1cHBvcnQgZnN0YXQoKSBmb3JcbiAgICAgICAgICAgIC8vIHdoYXRldmVyIHJlYXNvblxuICAgICAgICAgICAgdGhpcy5zZnRwLnN0YXQodGhpcy5wYXRoLCAoZXJyXywgc3RfKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlcnJfKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRyeVN0YXQobnVsbCwgc3RfKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMucG9zID0gc3Quc2l6ZTtcbiAgICAgICAgICB0aGlzLmVtaXQoJ29wZW4nLCBoYW5kbGUpO1xuICAgICAgICAgIHRoaXMuZW1pdCgncmVhZHknKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnNmdHAuZnN0YXQoaGFuZGxlLCB0cnlTdGF0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVtaXQoJ29wZW4nLCBoYW5kbGUpO1xuICAgICAgdGhpcy5lbWl0KCdyZWFkeScpO1xuICAgIH07XG5cbiAgICB0aGlzLnNmdHAuZmNobW9kKGhhbmRsZSwgdGhpcy5tb2RlLCB0cnlBZ2Fpbik7XG4gIH0pO1xufTtcblxuV3JpdGVTdHJlYW0ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uKGRhdGEsIGVuY29kaW5nLCBjYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZGF0YScsICdCdWZmZXInLCBkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzLmhhbmRsZSkpIHtcbiAgICByZXR1cm4gdGhpcy5vbmNlKCdvcGVuJywgZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl93cml0ZShkYXRhLCBlbmNvZGluZywgY2IpO1xuICAgIH0pO1xuICB9XG5cbiAgdGhpcy5zZnRwLndyaXRlRGF0YSh0aGlzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MsXG4gICAgICAgICAgICAgICAgICAgICAgKGVyLCBieXRlcykgPT4ge1xuICAgIGlmIChlcikge1xuICAgICAgaWYgKHRoaXMuYXV0b0Nsb3NlKVxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIHJldHVybiBjYihlcik7XG4gICAgfVxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGJ5dGVzO1xuICAgIGNiKCk7XG4gIH0pO1xuXG4gIHRoaXMucG9zICs9IGRhdGEubGVuZ3RoO1xufTtcblxuV3JpdGVTdHJlYW0ucHJvdG90eXBlLl93cml0ZXYgPSBmdW5jdGlvbihkYXRhLCBjYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzLmhhbmRsZSkpIHtcbiAgICByZXR1cm4gdGhpcy5vbmNlKCdvcGVuJywgZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl93cml0ZXYoZGF0YSwgY2IpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHNmdHAgPSB0aGlzLnNmdHA7XG4gIHZhciBoYW5kbGUgPSB0aGlzLmhhbmRsZTtcbiAgdmFyIHdyaXRlc0xlZnQgPSBkYXRhLmxlbmd0aDtcblxuICB2YXIgb253cml0ZSA9IChlciwgYnl0ZXMpID0+IHtcbiAgICBpZiAoZXIpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuIGNiKGVyKTtcbiAgICB9XG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gKz0gYnl0ZXM7XG4gICAgaWYgKC0td3JpdGVzTGVmdCA9PT0gMClcbiAgICAgIGNiKCk7XG4gIH07XG5cbiAgLy8gVE9ETzogdHJ5IHRvIGNvbWJpbmUgY2h1bmtzIHRvIHJlZHVjZSBudW1iZXIgb2YgcmVxdWVzdHMgdG8gdGhlIHNlcnZlclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgY2h1bmsgPSBkYXRhW2ldLmNodW5rO1xuXG4gICAgc2Z0cC53cml0ZURhdGEoaGFuZGxlLCBjaHVuaywgMCwgY2h1bmsubGVuZ3RoLCB0aGlzLnBvcywgb253cml0ZSk7XG4gICAgdGhpcy5wb3MgKz0gY2h1bmsubGVuZ3RoO1xuICB9XG59O1xuXG5pZiAodHlwZW9mIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ICE9PSAnZnVuY3Rpb24nKVxuICBXcml0ZVN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IFJlYWRTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3k7XG5cbldyaXRlU3RyZWFtLnByb3RvdHlwZS5fZGVzdHJveSA9IFJlYWRTdHJlYW0ucHJvdG90eXBlLl9kZXN0cm95O1xuV3JpdGVTdHJlYW0ucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oY2IpIHtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNiKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbignY2xvc2UnLCBjYik7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgd2UgYXJlIG5vdCBhdXRvQ2xvc2luZywgd2Ugc2hvdWxkIGNhbGxcbiAgLy8gZGVzdHJveSBvbiAnZmluaXNoJy5cbiAgaWYgKCF0aGlzLmF1dG9DbG9zZSlcbiAgICB0aGlzLm9uKCdmaW5pc2gnLCB0aGlzLmRlc3Ryb3kuYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5lbmQoKTtcbn07XG5cbi8vIFRoZXJlIGlzIG5vIHNodXRkb3duKCkgZm9yIGZpbGVzLlxuV3JpdGVTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3lTb29uID0gV3JpdGVTdHJlYW0ucHJvdG90eXBlLmVuZDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRlU3RyZWFtLnByb3RvdHlwZSwgJ3BlbmRpbmcnLCB7XG4gIGdldCgpIHsgcmV0dXJuIHRoaXMuaGFuZGxlID09PSBudWxsOyB9LFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNGVFBTdHJlYW07XG5cbiIsIi8vIFRPRE86ICogQXV0b21hdGljIHJlLWtleSBldmVyeSAoY29uZmlndXJhYmxlKSBuIGJ5dGVzIG9yIGxlbmd0aCBvZiB0aW1lXG4vLyAgICAgICAgIC0gUkZDIHN1Z2dlc3RzIGV2ZXJ5IDFHQiBvZiB0cmFuc21pdHRlZCBkYXRhIG9yIDEgaG91ciwgd2hpY2hldmVyXG4vLyAgICAgICAgICAgY29tZXMgc29vbmVyXG4vLyAgICAgICAqIEZpbHRlciBjb250cm9sIGNvZGVzIGZyb20gc3RyaW5nc1xuLy8gICAgICAgICAoYXMgcGVyIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQyNTEjc2VjdGlvbi05LjIpXG5cbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgndXRpbCcpLmluc3BlY3Q7XG5cbnZhciBTdHJlYW1TZWFyY2ggPSByZXF1aXJlKCdzdHJlYW1zZWFyY2gnKTtcbnZhciBCZXIgPSByZXF1aXJlKCdhc24xJykuQmVyO1xuXG52YXIgcmVhZFVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLnJlYWRVSW50MzJCRTtcbnZhciB3cml0ZVVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLndyaXRlVUludDMyQkU7XG52YXIgY29uc3RzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBpdl9pbmMgPSB1dGlscy5pdl9pbmM7XG52YXIgcmVhZFN0cmluZyA9IHV0aWxzLnJlYWRTdHJpbmc7XG52YXIgcmVhZEludCA9IHV0aWxzLnJlYWRJbnQ7XG52YXIgRFNBU2lnQkVSVG9CYXJlID0gdXRpbHMuRFNBU2lnQkVSVG9CYXJlO1xudmFyIEVDRFNBU2lnQVNOMVRvU1NIID0gdXRpbHMuRUNEU0FTaWdBU04xVG9TU0g7XG52YXIgc2lnU1NIVG9BU04xID0gdXRpbHMuc2lnU1NIVG9BU04xO1xudmFyIHBhcnNlREVSS2V5ID0gcmVxdWlyZSgnLi9rZXlQYXJzZXInKS5wYXJzZURFUktleTtcblxudmFyIENJUEhFUl9JTkZPID0gY29uc3RzLkNJUEhFUl9JTkZPO1xudmFyIEhNQUNfSU5GTyA9IGNvbnN0cy5ITUFDX0lORk87XG52YXIgTUVTU0FHRSA9IGNvbnN0cy5NRVNTQUdFO1xudmFyIERZTkFNSUNfS0VYREhfTUVTU0FHRSA9IGNvbnN0cy5EWU5BTUlDX0tFWERIX01FU1NBR0U7XG52YXIgS0VYREhfTUVTU0FHRSA9IGNvbnN0cy5LRVhESF9NRVNTQUdFO1xudmFyIEFMR09SSVRITVMgPSBjb25zdHMuQUxHT1JJVEhNUztcbnZhciBESVNDT05ORUNUX1JFQVNPTiA9IGNvbnN0cy5ESVNDT05ORUNUX1JFQVNPTjtcbnZhciBDSEFOTkVMX09QRU5fRkFJTFVSRSA9IGNvbnN0cy5DSEFOTkVMX09QRU5fRkFJTFVSRTtcbnZhciBTU0hfVE9fT1BFTlNTTCA9IGNvbnN0cy5TU0hfVE9fT1BFTlNTTDtcbnZhciBURVJNSU5BTF9NT0RFID0gY29uc3RzLlRFUk1JTkFMX01PREU7XG52YXIgU0lHTkFMUyA9IGNvbnN0cy5TSUdOQUxTO1xudmFyIEVERFNBX1NVUFBPUlRFRCA9IGNvbnN0cy5FRERTQV9TVVBQT1JURUQ7XG52YXIgQ1VSVkUyNTUxOV9TVVBQT1JURUQgPSBjb25zdHMuQ1VSVkUyNTUxOV9TVVBQT1JURUQ7XG52YXIgQlVHUyA9IGNvbnN0cy5CVUdTO1xudmFyIEJVR0dZX0lNUExTID0gY29uc3RzLkJVR0dZX0lNUExTO1xudmFyIEJVR0dZX0lNUExTX0xFTiA9IEJVR0dZX0lNUExTLmxlbmd0aDtcbnZhciBNT0RVTEVfVkVSID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbnZhciBJID0gMDtcbnZhciBJTl9JTklUID0gSSsrO1xudmFyIElOX0dSRUVUSU5HID0gSSsrO1xudmFyIElOX0hFQURFUiA9IEkrKztcbnZhciBJTl9QQUNLRVRCRUZPUkUgPSBJKys7XG52YXIgSU5fUEFDS0VUID0gSSsrO1xudmFyIElOX1BBQ0tFVERBVEEgPSBJKys7XG52YXIgSU5fUEFDS0VUREFUQVZFUklGWSA9IEkrKztcbnZhciBJTl9QQUNLRVREQVRBQUZURVIgPSBJKys7XG52YXIgT1VUX0lOSVQgPSBJKys7XG52YXIgT1VUX1JFQURZID0gSSsrO1xudmFyIE9VVF9SRUtFWUlORyA9IEkrKztcbnZhciBNQVhfU0VRTk8gPSA0Mjk0OTY3Mjk1O1xudmFyIE1BWF9QQUNLRVRfU0laRSA9IDM1MDAwO1xudmFyIE1BWF9QQUNLRVRTX1JFS0VZSU5HID0gNTA7XG52YXIgRVhQX1RZUEVfSEVBREVSID0gMDtcbnZhciBFWFBfVFlQRV9MRiA9IDE7XG52YXIgRVhQX1RZUEVfQllURVMgPSAyOyAvLyBXYWl0cyB1bnRpbCBuIGJ5dGVzIGhhdmUgYmVlbiBzZWVuXG52YXIgWl9QQVJUSUFMX0ZMVVNIID0gemxpYi5aX1BBUlRJQUxfRkxVU0g7XG52YXIgWkxJQl9PUFRTID0geyBmbHVzaDogWl9QQVJUSUFMX0ZMVVNIIH07XG5cbnZhciBSRV9OVUxMID0gL1xceDAwL2c7XG5cbnZhciBJREVOVF9QUkVGSVhfQlVGRkVSID0gQnVmZmVyLmZyb20oJ1NTSC0nKTtcbnZhciBFTVBUWV9CVUZGRVIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMCk7XG52YXIgSE1BQ19DT01QVVRFID0gQnVmZmVyLmFsbG9jVW5zYWZlKDkpO1xudmFyIFBJTkdfUEFDS0VUID0gQnVmZmVyLmZyb20oW1xuICBNRVNTQUdFLkdMT0JBTF9SRVFVRVNULFxuICAvLyBcImtlZXBhbGl2ZUBvcGVuc3NoLmNvbVwiXG4gIDAsIDAsIDAsIDIxLFxuICAgIDEwNywgMTAxLCAxMDEsIDExMiwgOTcsIDEwOCwgMTA1LCAxMTgsIDEwMSwgNjQsIDExMSwgMTEyLCAxMDEsIDExMCwgMTE1LFxuICAgIDExNSwgMTA0LCA0NiwgOTksIDExMSwgMTA5LFxuICAvLyBSZXF1ZXN0IGEgcmVwbHlcbiAgMVxuXSk7XG52YXIgTkVXS0VZU19QQUNLRVQgPSBCdWZmZXIuZnJvbShbTUVTU0FHRS5ORVdLRVlTXSk7XG52YXIgVVNFUkFVVEhfU1VDQ0VTU19QQUNLRVQgPSBCdWZmZXIuZnJvbShbTUVTU0FHRS5VU0VSQVVUSF9TVUNDRVNTXSk7XG52YXIgUkVRVUVTVF9TVUNDRVNTX1BBQ0tFVCA9IEJ1ZmZlci5mcm9tKFtNRVNTQUdFLlJFUVVFU1RfU1VDQ0VTU10pO1xudmFyIFJFUVVFU1RfRkFJTFVSRV9QQUNLRVQgPSBCdWZmZXIuZnJvbShbTUVTU0FHRS5SRVFVRVNUX0ZBSUxVUkVdKTtcbnZhciBOT19URVJNSU5BTF9NT0RFU19CVUZGRVIgPSBCdWZmZXIuZnJvbShbVEVSTUlOQUxfTU9ERS5UVFlfT1BfRU5EXSk7XG52YXIgS0VYREhfR0VYX1JFUV9QQUNLRVQgPSBCdWZmZXIuZnJvbShbXG4gIE1FU1NBR0UuS0VYREhfR0VYX1JFUVVFU1QsXG4gIC8vIE1pbmltYWwgc2l6ZSBpbiBiaXRzIG9mIGFuIGFjY2VwdGFibGUgZ3JvdXBcbiAgMCwgMCwgNCwgMCwgLy8gMTAyNCwgbW9kcDJcbiAgLy8gUHJlZmVycmVkIHNpemUgaW4gYml0cyBvZiB0aGUgZ3JvdXAgdGhlIHNlcnZlciB3aWxsIHNlbmRcbiAgMCwgMCwgMTYsIDAsIC8vIDQwOTYsIG1vZHAxNlxuICAvLyBNYXhpbWFsIHNpemUgaW4gYml0cyBvZiBhbiBhY2NlcHRhYmxlIGdyb3VwXG4gIDAsIDAsIDMyLCAwIC8vIDgxOTIsIG1vZHAxOFxuXSk7XG5cbmZ1bmN0aW9uIERFQlVHX05PT1AobXNnKSB7fVxuXG5mdW5jdGlvbiBTU0gyU3RyZWFtKGNmZykge1xuICBpZiAodHlwZW9mIGNmZyAhPT0gJ29iamVjdCcgfHwgY2ZnID09PSBudWxsKVxuICAgIGNmZyA9IHt9O1xuXG4gIFRyYW5zZm9ybVN0cmVhbS5jYWxsKHRoaXMsIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAodHlwZW9mIGNmZy5oaWdoV2F0ZXJNYXJrID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICA/IGNmZy5oaWdoV2F0ZXJNYXJrXG4gICAgICAgICAgICAgICAgICAgIDogMzIgKiAxMDI0KVxuICB9KTtcblxuICB0aGlzLl9uZWVkQ29udGludWUgPSBmYWxzZTtcbiAgdGhpcy5ieXRlc1NlbnQgPSB0aGlzLmJ5dGVzUmVjZWl2ZWQgPSAwO1xuICB0aGlzLmRlYnVnID0gKHR5cGVvZiBjZmcuZGVidWcgPT09ICdmdW5jdGlvbicgPyBjZmcuZGVidWcgOiBERUJVR19OT09QKTtcbiAgdGhpcy5zZXJ2ZXIgPSAoY2ZnLnNlcnZlciA9PT0gdHJ1ZSk7XG4gIHRoaXMubWF4UGFja2V0U2l6ZSA9ICh0eXBlb2YgY2ZnLm1heFBhY2tldFNpemUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNmZy5tYXhQYWNrZXRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICA6IE1BWF9QQUNLRVRfU0laRSk7XG4gIC8vIEJpdG1hcCB0aGF0IGluZGljYXRlcyBhbnkgYnVncyB0aGUgcmVtb3RlIHNpZGUgaGFzLiBUaGlzIGlzIGRldGVybWluZWRcbiAgLy8gYnkgdGhlIHJlcG9ydGVkIHNvZnR3YXJlIHZlcnNpb24uXG4gIHRoaXMucmVtb3RlQnVncyA9IDA7XG5cbiAgaWYgKHRoaXMuc2VydmVyKSB7XG4gICAgLy8gVE9ETzogUmVtb3ZlIHdoZW4gd2Ugc3VwcG9ydCBncm91cCBleGNoYW5nZSBmb3Igc2VydmVyIGltcGxlbWVudGF0aW9uXG4gICAgdGhpcy5yZW1vdGVCdWdzID0gQlVHUy5CQURfREhHRVg7XG4gIH1cblxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGhvc3RLZXlzID0gY2ZnLmhvc3RLZXlzO1xuICBpZiAodGhpcy5zZXJ2ZXIgJiYgKHR5cGVvZiBob3N0S2V5cyAhPT0gJ29iamVjdCcgfHwgaG9zdEtleXMgPT09IG51bGwpKVxuICAgIHRocm93IG5ldyBFcnJvcignaG9zdEtleXMgbXVzdCBiZSBhbiBvYmplY3Qga2V5ZWQgb24gaG9zdCBrZXkgdHlwZScpO1xuXG4gIHRoaXMuY29uZmlnID0ge1xuICAgIC8vIFNlcnZlclxuICAgIGhvc3RLZXlzOiBob3N0S2V5cywgLy8gQWxsIGtleXMgc3VwcG9ydGVkIGJ5IHNlcnZlclxuXG4gICAgLy8gQ2xpZW50L1NlcnZlclxuICAgIGlkZW50OiAnU1NILTIuMC0nXG4gICAgICAgICAgICsgKGNmZy5pZGVudFxuICAgICAgICAgICAgICB8fCAoJ3NzaDJqcycgKyBNT0RVTEVfVkVSICsgKHRoaXMuc2VydmVyID8gJ3NydicgOiAnJykpKSxcbiAgICBhbGdvcml0aG1zOiB7XG4gICAgICBrZXg6IEFMR09SSVRITVMuS0VYLFxuICAgICAga2V4QnVmOiBBTEdPUklUSE1TLktFWF9CVUYsXG4gICAgICBzZXJ2ZXJIb3N0S2V5OiBBTEdPUklUSE1TLlNFUlZFUl9IT1NUX0tFWSxcbiAgICAgIHNlcnZlckhvc3RLZXlCdWY6IEFMR09SSVRITVMuU0VSVkVSX0hPU1RfS0VZX0JVRixcbiAgICAgIGNpcGhlcjogQUxHT1JJVEhNUy5DSVBIRVIsXG4gICAgICBjaXBoZXJCdWY6IEFMR09SSVRITVMuQ0lQSEVSX0JVRixcbiAgICAgIGhtYWM6IEFMR09SSVRITVMuSE1BQyxcbiAgICAgIGhtYWNCdWY6IEFMR09SSVRITVMuSE1BQ19CVUYsXG4gICAgICBjb21wcmVzczogQUxHT1JJVEhNUy5DT01QUkVTUyxcbiAgICAgIGNvbXByZXNzQnVmOiBBTEdPUklUSE1TLkNPTVBSRVNTX0JVRlxuICAgIH1cbiAgfTtcbiAgLy8gUkZDIDQyNTMgc3RhdGVzIHRoZSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgbXVzdCBub3QgY29udGFpbiBOVUxMXG4gIHRoaXMuY29uZmlnLmlkZW50LnJlcGxhY2UoUkVfTlVMTCwgJycpO1xuXG4gIGlmICh0aGlzLmNvbmZpZy5pZGVudC5sZW5ndGggKyAyIC8qIEFjY291bnQgZm9yIFwiXFxyXFxuXCIgKi8gPiAyNTUpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpZGVudCB0b28gbG9uZycpO1xuXG4gIGlmICh0eXBlb2YgY2ZnLmFsZ29yaXRobXMgPT09ICdvYmplY3QnICYmIGNmZy5hbGdvcml0aG1zICE9PSBudWxsKSB7XG4gICAgdmFyIGFsZ29zID0gY2ZnLmFsZ29yaXRobXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb3Mua2V4KSAmJiBhbGdvcy5rZXgubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb25maWcuYWxnb3JpdGhtcy5rZXggPSBhbGdvcy5rZXg7XG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhbGdvcy5rZXhCdWYpKVxuICAgICAgICBhbGdvcy5rZXhCdWYgPSBCdWZmZXIuZnJvbShhbGdvcy5rZXguam9pbignLCcpLCAnYXNjaWknKTtcbiAgICAgIHRoaXMuY29uZmlnLmFsZ29yaXRobXMua2V4QnVmID0gYWxnb3Mua2V4QnVmO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbGdvcy5zZXJ2ZXJIb3N0S2V5KSAmJiBhbGdvcy5zZXJ2ZXJIb3N0S2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29uZmlnLmFsZ29yaXRobXMuc2VydmVySG9zdEtleSA9IGFsZ29zLnNlcnZlckhvc3RLZXk7XG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhbGdvcy5zZXJ2ZXJIb3N0S2V5QnVmKSkge1xuICAgICAgICBhbGdvcy5zZXJ2ZXJIb3N0S2V5QnVmID0gQnVmZmVyLmZyb20oYWxnb3Muc2VydmVySG9zdEtleS5qb2luKCcsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNjaWknKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlnLmFsZ29yaXRobXMuc2VydmVySG9zdEtleUJ1ZiA9IGFsZ29zLnNlcnZlckhvc3RLZXlCdWY7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGFsZ29zLmNpcGhlcikgJiYgYWxnb3MuY2lwaGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29uZmlnLmFsZ29yaXRobXMuY2lwaGVyID0gYWxnb3MuY2lwaGVyO1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYWxnb3MuY2lwaGVyQnVmKSlcbiAgICAgICAgYWxnb3MuY2lwaGVyQnVmID0gQnVmZmVyLmZyb20oYWxnb3MuY2lwaGVyLmpvaW4oJywnKSwgJ2FzY2lpJyk7XG4gICAgICB0aGlzLmNvbmZpZy5hbGdvcml0aG1zLmNpcGhlckJ1ZiA9IGFsZ29zLmNpcGhlckJ1ZjtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb3MuaG1hYykgJiYgYWxnb3MuaG1hYy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbmZpZy5hbGdvcml0aG1zLmhtYWMgPSBhbGdvcy5obWFjO1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYWxnb3MuaG1hY0J1ZikpXG4gICAgICAgIGFsZ29zLmhtYWNCdWYgPSBCdWZmZXIuZnJvbShhbGdvcy5obWFjLmpvaW4oJywnKSwgJ2FzY2lpJyk7XG4gICAgICB0aGlzLmNvbmZpZy5hbGdvcml0aG1zLmhtYWNCdWYgPSBhbGdvcy5obWFjQnVmO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbGdvcy5jb21wcmVzcykgJiYgYWxnb3MuY29tcHJlc3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb25maWcuYWxnb3JpdGhtcy5jb21wcmVzcyA9IGFsZ29zLmNvbXByZXNzO1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYWxnb3MuY29tcHJlc3NCdWYpKVxuICAgICAgICBhbGdvcy5jb21wcmVzc0J1ZiA9IEJ1ZmZlci5mcm9tKGFsZ29zLmNvbXByZXNzLmpvaW4oJywnKSwgJ2FzY2lpJyk7XG4gICAgICB0aGlzLmNvbmZpZy5hbGdvcml0aG1zLmNvbXByZXNzQnVmID0gYWxnb3MuY29tcHJlc3NCdWY7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5yZXNldCh0cnVlKTtcblxuICAvLyBDb21tb24gZXZlbnRzXG4gIHRoaXMub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIC8vIExldCBHQyBjb2xsZWN0IGFueSBCdWZmZXJzIHdlIHdlcmUgcHJldmlvdXNseSBzdG9yaW5nXG4gICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHNlbGYuX3N0YXRlID0gdW5kZWZpbmVkO1xuICAgIHNlbGYucmVzZXQoKTtcbiAgICBzZWxmLl9zdGF0ZS5vdXRnb2luZy5idWZTZXFubyA9IHVuZGVmaW5lZDtcbiAgfSk7XG4gIHRoaXMub24oJ0RJU0NPTk5FQ1QnLCBmdW5jdGlvbihyZWFzb24sIGNvZGUsIGRlc2MsIGxhbmcpIHtcbiAgICBvbkRJU0NPTk5FQ1Qoc2VsZiwgcmVhc29uLCBjb2RlLCBkZXNjLCBsYW5nKTtcbiAgfSk7XG4gIHRoaXMub24oJ0tFWElOSVQnLCBmdW5jdGlvbihpbml0LCBmaXJzdEZvbGxvd3MpIHtcbiAgICBvbktFWElOSVQoc2VsZiwgaW5pdCwgZmlyc3RGb2xsb3dzKTtcbiAgfSk7XG4gIHRoaXMub24oJ05FV0tFWVMnLCBmdW5jdGlvbigpIHsgb25ORVdLRVlTKHNlbGYpOyB9KTtcblxuICBpZiAodGhpcy5zZXJ2ZXIpIHtcbiAgICAvLyBTZXJ2ZXItc3BlY2lmaWMgZXZlbnRzXG4gICAgdGhpcy5vbignS0VYREhfSU5JVCcsIGZ1bmN0aW9uKGUpIHsgb25LRVhESF9JTklUKHNlbGYsIGUpOyB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDbGllbnQtc3BlY2lmaWMgZXZlbnRzXG4gICAgdGhpcy5vbignS0VYREhfUkVQTFknLCBmdW5jdGlvbihpbmZvKSB7IG9uS0VYREhfUkVQTFkoc2VsZiwgaW5mbyk7IH0pXG4gICAgICAgIC5vbignS0VYREhfR0VYX0dST1VQJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uKHByaW1lLCBnZW4pIHsgb25LRVhESF9HRVhfR1JPVVAoc2VsZiwgcHJpbWUsIGdlbik7IH0pO1xuICB9XG5cbiAgaWYgKHRoaXMuc2VydmVyKSB7XG4gICAgLy8gR3JlZXRpbmcgZGlzcGxheWVkIGJlZm9yZSB0aGUgc3NoIGlkZW50aWZpY2F0aW9uIHN0cmluZyBpcyBzZW50LCB0aGlzIGlzXG4gICAgLy8gdXN1YWxseSBpZ25vcmVkIGJ5IG1vc3QgY2xpZW50c1xuICAgIGlmICh0eXBlb2YgY2ZnLmdyZWV0aW5nID09PSAnc3RyaW5nJyAmJiBjZmcuZ3JlZXRpbmcubGVuZ3RoKSB7XG4gICAgICBpZiAoY2ZnLmdyZWV0aW5nLnNsaWNlKC0yKSA9PT0gJ1xcclxcbicpXG4gICAgICAgIHRoaXMucHVzaChjZmcuZ3JlZXRpbmcpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnB1c2goY2ZnLmdyZWV0aW5nICsgJ1xcclxcbicpO1xuICAgIH1cbiAgICAvLyBCYW5uZXIgc2hvd24gYWZ0ZXIgdGhlIGhhbmRzaGFrZSBjb21wbGV0ZXMsIGJ1dCBiZWZvcmUgdXNlclxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIGJlZ2luc1xuICAgIGlmICh0eXBlb2YgY2ZnLmJhbm5lciA9PT0gJ3N0cmluZycgJiYgY2ZnLmJhbm5lci5sZW5ndGgpIHtcbiAgICAgIGlmIChjZmcuYmFubmVyLnNsaWNlKC0yKSA9PT0gJ1xcclxcbicpXG4gICAgICAgIHRoaXMuYmFubmVyID0gY2ZnLmJhbm5lcjtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5iYW5uZXIgPSBjZmcuYmFubmVyICsgJ1xcclxcbic7XG4gICAgfVxuICB9XG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBMb2NhbCBpZGVudDogJyArIGluc3BlY3QodGhpcy5jb25maWcuaWRlbnQpKTtcbiAgdGhpcy5wdXNoKHRoaXMuY29uZmlnLmlkZW50ICsgJ1xcclxcbicpO1xuXG4gIHRoaXMuX3N0YXRlLmluY29taW5nLmV4cGVjdGVkUGFja2V0ID0gJ0tFWElOSVQnO1xufVxuaW5oZXJpdHMoU1NIMlN0cmVhbSwgVHJhbnNmb3JtU3RyZWFtKTtcblxuU1NIMlN0cmVhbS5wcm90b3R5cGUuX19yZWFkID0gVHJhbnNmb3JtU3RyZWFtLnByb3RvdHlwZS5fcmVhZDtcblNTSDJTdHJlYW0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24obikge1xuICBpZiAodGhpcy5fbmVlZENvbnRpbnVlKSB7XG4gICAgdGhpcy5fbmVlZENvbnRpbnVlID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdjb250aW51ZScpO1xuICB9XG4gIHJldHVybiB0aGlzLl9fcmVhZChuKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5fX3B1c2ggPSBUcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlLnB1c2g7XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciByZXQgPSB0aGlzLl9fcHVzaChjaHVuaywgZW5jb2RpbmcpO1xuICB0aGlzLl9uZWVkQ29udGludWUgPSAocmV0ID09PSBmYWxzZSk7XG4gIHJldHVybiByZXQ7XG59O1xuXG5TU0gyU3RyZWFtLnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHRoaXMucmVzZXQoKTtcbiAgdGhpcy5kZWJ1ZygnREVCVUc6IFBhcnNlcjogTWFsZm9ybWVkIHBhY2tldCcpO1xuICBjYWxsYmFjayAmJiBjYWxsYmFjayhuZXcgRXJyb3IoJ01hbGZvcm1lZCBwYWNrZXQnKSk7XG59O1xuXG5TU0gyU3RyZWFtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaywgZGVjb21wKSB7XG4gIHZhciBza2lwRGVjcnlwdCA9IGZhbHNlO1xuICB2YXIgZGVjcnlwdEF1dGhNb2RlID0gZmFsc2U7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuICB2YXIgaW5zdGF0ZSA9IHN0YXRlLmluY29taW5nO1xuICB2YXIgb3V0c3RhdGUgPSBzdGF0ZS5vdXRnb2luZztcbiAgdmFyIGV4cGVjdCA9IGluc3RhdGUuZXhwZWN0O1xuICB2YXIgZGVjcnlwdCA9IGluc3RhdGUuZGVjcnlwdDtcbiAgdmFyIGRlY29tcHJlc3MgPSBpbnN0YXRlLmRlY29tcHJlc3M7XG4gIHZhciBjaGxlbiA9IGNodW5rLmxlbmd0aDtcbiAgdmFyIGNobGVmdCA9IDA7XG4gIHZhciBkZWJ1ZyA9IHRoaXMuZGVidWc7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGkgPSAwO1xuICB2YXIgcCA9IGk7XG4gIHZhciBibG9ja0xlbjtcbiAgdmFyIGJ1ZmZlcjtcbiAgdmFyIGJ1ZjtcbiAgdmFyIHI7XG5cbiAgdGhpcy5ieXRlc1JlY2VpdmVkICs9IGNobGVuO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGV4cGVjdC50eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpID49IGNobGVuKVxuICAgICAgICBicmVhaztcbiAgICAgIGlmIChleHBlY3QudHlwZSA9PT0gRVhQX1RZUEVfQllURVMpIHtcbiAgICAgICAgY2hsZWZ0ID0gKGNobGVuIC0gaSk7XG4gICAgICAgIHZhciBwa3RMZWZ0ID0gKGV4cGVjdC5idWYubGVuZ3RoIC0gZXhwZWN0LnB0cik7XG4gICAgICAgIGlmIChwa3RMZWZ0IDw9IGNobGVmdCkge1xuICAgICAgICAgIGNodW5rLmNvcHkoZXhwZWN0LmJ1ZiwgZXhwZWN0LnB0ciwgaSwgaSArIHBrdExlZnQpO1xuICAgICAgICAgIGkgKz0gcGt0TGVmdDtcbiAgICAgICAgICBidWZmZXIgPSBleHBlY3QuYnVmO1xuICAgICAgICAgIGV4cGVjdC5idWYgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZXhwZWN0LnB0ciA9IDA7XG4gICAgICAgICAgZXhwZWN0LnR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2h1bmsuY29weShleHBlY3QuYnVmLCBleHBlY3QucHRyLCBpKTtcbiAgICAgICAgICBleHBlY3QucHRyICs9IGNobGVmdDtcbiAgICAgICAgICBpICs9IGNobGVmdDtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoZXhwZWN0LnR5cGUgPT09IEVYUF9UWVBFX0hFQURFUikge1xuICAgICAgICBpICs9IGluc3RhdGUuc2VhcmNoLnB1c2goY2h1bmspO1xuICAgICAgICBpZiAoZXhwZWN0LnR5cGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoZXhwZWN0LnR5cGUgPT09IEVYUF9UWVBFX0xGKSB7XG4gICAgICAgIGlmICgrK2V4cGVjdC5wdHIgKyA0IC8qIEFjY291bnQgZm9yIFwiU1NILVwiICovID4gMjU1KSB7XG4gICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBJZGVudGlmaWNhdGlvbiBzdHJpbmcgZXhjZWVkZWQgMjU1IGNoYXJhY3RlcnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdNYXggaWRlbnRpZmljYXRpb24gc3RyaW5nIHNpemUgZXhjZWVkZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNodW5rW2ldID09PSAweDBBKSB7XG4gICAgICAgICAgZXhwZWN0LnR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHAgPCBpKSB7XG4gICAgICAgICAgICBpZiAoZXhwZWN0LmJ1ZiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBleHBlY3QuYnVmID0gY2h1bmsudG9TdHJpbmcoJ2FzY2lpJywgcCwgaSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGV4cGVjdC5idWYgKz0gY2h1bmsudG9TdHJpbmcoJ2FzY2lpJywgcCwgaSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1ZmZlciA9IGV4cGVjdC5idWY7XG4gICAgICAgICAgZXhwZWN0LmJ1ZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICArK2k7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCsraSA9PT0gY2hsZW4gJiYgcCA8IGkpIHtcbiAgICAgICAgICAgIGlmIChleHBlY3QuYnVmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGV4cGVjdC5idWYgPSBjaHVuay50b1N0cmluZygnYXNjaWknLCBwLCBpKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgZXhwZWN0LmJ1ZiArPSBjaHVuay50b1N0cmluZygnYXNjaWknLCBwLCBpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5zdGF0ZS5zdGF0dXMgPT09IElOX0lOSVQpIHtcbiAgICAgIGlmICghdGhpcy5yZWFkYWJsZSlcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICBpZiAodGhpcy5zZXJ2ZXIpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgd2hhdCBzaG91bGQgYmUgdGhlIHN0YXJ0IG9mIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGV4Y2hhbmdlXG4gICAgICAgIGlmICghYnVmZmVyKSB7XG4gICAgICAgICAgZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX0lOSVQgKHdhaXRpbmcgZm9yIGlkZW50aWZpY2F0aW9uIGJlZ2luKScpO1xuICAgICAgICAgIGV4cGVjdERhdGEodGhpcywgRVhQX1RZUEVfQllURVMsIDQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChidWZmZXJbMF0gPT09IDB4NTMgICAgICAgLy8gU1xuICAgICAgICAgICAgICAmJiBidWZmZXJbMV0gPT09IDB4NTMgICAgLy8gU1xuICAgICAgICAgICAgICAmJiBidWZmZXJbMl0gPT09IDB4NDggICAgLy8gSFxuICAgICAgICAgICAgICAmJiBidWZmZXJbM10gPT09IDB4MkQpIHsgLy8gLVxuICAgICAgICAgICAgaW5zdGF0ZS5zdGF0dXMgPSBJTl9HUkVFVElORztcbiAgICAgICAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9JTklUICh3YWl0aW5nIGZvciByZXN0IG9mIGlkZW50aWZpY2F0aW9uKScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogQmFkIGlkZW50aWZpY2F0aW9uIHN0YXJ0Jyk7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdCYWQgaWRlbnRpZmljYXRpb24gc3RhcnQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fSU5JVCcpO1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbnkgYnl0ZXMgdGhhdCBtYXkgY29tZSBiZWZvcmUgdGhlIHByb3RvY29sIHZlcnNpb24gZXhjaGFuZ2VcbiAgICAgICAgdmFyIHNzID0gaW5zdGF0ZS5zZWFyY2ggPSBuZXcgU3RyZWFtU2VhcmNoKElERU5UX1BSRUZJWF9CVUZGRVIpO1xuICAgICAgICBzcy5vbignaW5mbycsIGZ1bmN0aW9uIG9uSW5mbyhtYXRjaGVkLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChpbnN0YXRlLmdyZWV0aW5nID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGluc3RhdGUuZ3JlZXRpbmcgPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgaW5zdGF0ZS5ncmVldGluZyArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgIGV4cGVjdC50eXBlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaW5zdGF0ZS5zZWFyY2gucmVtb3ZlTGlzdGVuZXIoJ2luZm8nLCBvbkluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNzLm1heE1hdGNoZXMgPSAxO1xuICAgICAgICBleHBlY3REYXRhKHRoaXMsIEVYUF9UWVBFX0hFQURFUik7XG4gICAgICAgIGluc3RhdGUuc3RhdHVzID0gSU5fR1JFRVRJTkc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbnN0YXRlLnN0YXR1cyA9PT0gSU5fR1JFRVRJTkcpIHtcbiAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9HUkVFVElORycpO1xuICAgICAgaW5zdGF0ZS5zZWFyY2ggPSB1bmRlZmluZWQ7XG4gICAgICAvLyBSZXRyaWV2ZSB0aGUgaWRlbnRpZmljYXRpb24gYnl0ZXMgYWZ0ZXIgdGhlIFwiU1NILVwiIGhlYWRlclxuICAgICAgcCA9IGk7XG4gICAgICBleHBlY3REYXRhKHRoaXMsIEVYUF9UWVBFX0xGKTtcbiAgICAgIGluc3RhdGUuc3RhdHVzID0gSU5fSEVBREVSO1xuICAgIH0gZWxzZSBpZiAoaW5zdGF0ZS5zdGF0dXMgPT09IElOX0hFQURFUikge1xuICAgICAgZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX0hFQURFUicpO1xuICAgICAgaWYgKGJ1ZmZlci5jaGFyQ29kZUF0KGJ1ZmZlci5sZW5ndGggLSAxKSA9PT0gMTMpXG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgwLCAtMSk7XG4gICAgICB2YXIgaWR4RGFzaCA9IGJ1ZmZlci5pbmRleE9mKCctJyk7XG4gICAgICB2YXIgaWR4U3BhY2UgPSBidWZmZXIuaW5kZXhPZignICcpO1xuICAgICAgdmFyIGhlYWRlciA9IHtcbiAgICAgICAgLy8gUkZDIHNheXMgZ3JlZXRpbmcgU0hPVUxEIGJlIHV0ZjhcbiAgICAgICAgZ3JlZXRpbmc6IGluc3RhdGUuZ3JlZXRpbmcsXG4gICAgICAgIGlkZW50UmF3OiAnU1NILScgKyBidWZmZXIsXG4gICAgICAgIHZlcnNpb25zOiB7XG4gICAgICAgICAgcHJvdG9jb2w6IGJ1ZmZlci5zdWJzdHIoMCwgaWR4RGFzaCksXG4gICAgICAgICAgc29mdHdhcmU6IChpZHhTcGFjZSA9PT0gLTFcbiAgICAgICAgICAgICAgICAgICAgID8gYnVmZmVyLnN1YnN0cmluZyhpZHhEYXNoICsgMSlcbiAgICAgICAgICAgICAgICAgICAgIDogYnVmZmVyLnN1YnN0cmluZyhpZHhEYXNoICsgMSwgaWR4U3BhY2UpKVxuICAgICAgICB9LFxuICAgICAgICBjb21tZW50czogKGlkeFNwYWNlID4gLTEgPyBidWZmZXIuc3Vic3RyaW5nKGlkeFNwYWNlICsgMSkgOiB1bmRlZmluZWQpXG4gICAgICB9O1xuICAgICAgaW5zdGF0ZS5ncmVldGluZyA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGhlYWRlci52ZXJzaW9ucy5wcm90b2NvbCAhPT0gJzEuOTknXG4gICAgICAgICAgJiYgaGVhZGVyLnZlcnNpb25zLnByb3RvY29sICE9PSAnMi4wJykge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBwcm90b2NvbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQ6ICdcbiAgICAgICAgICAgICAgKyBoZWFkZXIudmVyc2lvbnMucHJvdG9jb2wpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdQcm90b2NvbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoaW5zdGF0ZS5zdGF0dXMgPT09IElOX0lOSVQpIHtcbiAgICAgICAgLy8gV2UgcmVzZXQgZnJvbSBhbiBldmVudCBoYW5kbGVyLCBwb3NzaWJseSBkdWUgdG8gYW4gdW5zdXBwb3J0ZWQgU1NIXG4gICAgICAgIC8vIHByb3RvY29sIHZlcnNpb24/XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGlkZW50UmF3ID0gaGVhZGVyLmlkZW50UmF3O1xuICAgICAgdmFyIHNvZnR3YXJlID0gaGVhZGVyLnZlcnNpb25zLnNvZnR3YXJlO1xuICAgICAgdGhpcy5kZWJ1ZygnREVCVUc6IFJlbW90ZSBpZGVudDogJyArIGluc3BlY3QoaWRlbnRSYXcpKTtcbiAgICAgIGZvciAodmFyIGogPSAwLCBydWxlOyBqIDwgQlVHR1lfSU1QTFNfTEVOOyArK2opIHtcbiAgICAgICAgcnVsZSA9IEJVR0dZX0lNUExTW2pdO1xuICAgICAgICBpZiAodHlwZW9mIHJ1bGVbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHNvZnR3YXJlID09PSBydWxlWzBdKVxuICAgICAgICAgICAgdGhpcy5yZW1vdGVCdWdzIHw9IHJ1bGVbMV07XG4gICAgICAgIH0gZWxzZSBpZiAocnVsZVswXS50ZXN0KHNvZnR3YXJlKSlcbiAgICAgICAgICB0aGlzLnJlbW90ZUJ1Z3MgfD0gcnVsZVsxXTtcbiAgICAgIH1cbiAgICAgIGluc3RhdGUuaWRlbnRSYXcgPSBpZGVudFJhdztcbiAgICAgIC8vIEFkanVzdCBieXRlc1JlY2VpdmVkIGZpcnN0IG90aGVyd2lzZSBpdCB3aWxsIGhhdmUgYW4gaW5jb3JyZWN0bHkgbGFyZ2VyXG4gICAgICAvLyB0b3RhbCB3aGVuIHdlIGNhbGwgYmFjayBpbnRvIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgY29tcGxldGluZyBLRVhJTklUXG4gICAgICB0aGlzLmJ5dGVzUmVjZWl2ZWQgLT0gKGNobGVuIC0gaSk7XG4gICAgICBLRVhJTklUKHRoaXMsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoaSA9PT0gY2hsZW4pXG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHNlbGYuX3RyYW5zZm9ybShjaHVuay5zbGljZShpKSwgZW5jb2RpbmcsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgaW5zdGF0ZS5zdGF0dXMgPSBJTl9QQUNLRVRCRUZPUkU7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChpbnN0YXRlLnN0YXR1cyA9PT0gSU5fUEFDS0VUQkVGT1JFKSB7XG4gICAgICBibG9ja0xlbiA9IChkZWNyeXB0Lmluc3RhbmNlID8gZGVjcnlwdC5pbmZvLmJsb2NrTGVuIDogOCk7XG4gICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUQkVGT1JFIChleHBlY3RpbmcgJyArIGJsb2NrTGVuICsgJyknKTtcbiAgICAgIC8vIFdhaXQgZm9yIHRoZSByaWdodCBudW1iZXIgb2YgYnl0ZXMgc28gd2UgY2FuIGRldGVybWluZSB0aGUgaW5jb21pbmdcbiAgICAgIC8vIHBhY2tldCBsZW5ndGhcbiAgICAgIGV4cGVjdERhdGEodGhpcywgRVhQX1RZUEVfQllURVMsIGJsb2NrTGVuLCBkZWNyeXB0LmJ1Zik7XG4gICAgICBpbnN0YXRlLnN0YXR1cyA9IElOX1BBQ0tFVDtcbiAgICB9IGVsc2UgaWYgKGluc3RhdGUuc3RhdHVzID09PSBJTl9QQUNLRVQpIHtcbiAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVQnKTtcbiAgICAgIGlmIChkZWNyeXB0Lmluc3RhbmNlKSB7XG4gICAgICAgIGRlY3J5cHRBdXRoTW9kZSA9IChkZWNyeXB0LmluZm8uYXV0aExlbiA+IDApO1xuICAgICAgICBpZiAoIWRlY3J5cHRBdXRoTW9kZSlcbiAgICAgICAgICBidWZmZXIgPSBkZWNyeXB0RGF0YSh0aGlzLCBidWZmZXIpO1xuICAgICAgICBibG9ja0xlbiA9IGRlY3J5cHQuaW5mby5ibG9ja0xlbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlY3J5cHRBdXRoTW9kZSA9IGZhbHNlO1xuICAgICAgICBibG9ja0xlbiA9IDg7XG4gICAgICB9XG5cbiAgICAgIHIgPSByZWFkSW50KGJ1ZmZlciwgMCwgdGhpcywgY2FsbGJhY2spO1xuICAgICAgaWYgKHIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm47XG4gICAgICB2YXIgaG1hY0luZm8gPSBpbnN0YXRlLmhtYWMuaW5mbztcbiAgICAgIHZhciBtYWNTaXplO1xuICAgICAgaWYgKGhtYWNJbmZvKVxuICAgICAgICBtYWNTaXplID0gaG1hY0luZm8uYWN0dWFsTGVuO1xuICAgICAgZWxzZVxuICAgICAgICBtYWNTaXplID0gMDtcbiAgICAgIHZhciBmdWxsUGFja2V0TGVuID0gciArIDQgKyBtYWNTaXplO1xuICAgICAgdmFyIG1heFBheWxvYWRMZW4gPSB0aGlzLm1heFBhY2tldFNpemU7XG4gICAgICBpZiAoZGVjb21wcmVzcy5pbnN0YW5jZSkge1xuICAgICAgICAvLyBBY2NvdW50IGZvciBjb21wcmVzc2VkIHBheWxvYWRzXG4gICAgICAgIC8vIFRoaXMgZm9ybXVsYSBpcyB0YWtlbiBmcm9tIGRyb3BiZWFyIHdoaWNoIGRlcml2ZXMgaXQgZnJvbSB6bGliJ3NcbiAgICAgICAgLy8gZG9jdW1lbnRhdGlvbi4gRXhwbGFuYXRpb24gZnJvbSBkcm9wYmVhcjpcbiAgICAgICAgLyogRm9yIGV4YWN0IGRldGFpbHMgc2VlIGh0dHA6Ly93d3cuemxpYi5uZXQvemxpYl90ZWNoLmh0bWxcbiAgICAgICAgICogNSBieXRlcyBwZXIgMTZrQiBibG9jaywgcGx1cyA2IGJ5dGVzIGZvciB0aGUgc3RyZWFtLlxuICAgICAgICAgKiBXZSBtaWdodCBhbGxvY2F0ZSA1IHVubmVjZXNzYXJ5IGJ5dGVzIGhlcmUgaWYgaXQncyBhblxuICAgICAgICAgKiBleGFjdCBtdWx0aXBsZS4gKi9cbiAgICAgICAgbWF4UGF5bG9hZExlbiArPSAoKCh0aGlzLm1heFBhY2tldFNpemUgLyAxNjM4NCkgKyAxKSAqIDUgKyA2KTtcbiAgICAgIH1cbiAgICAgIGlmIChyID4gbWF4UGF5bG9hZExlblxuICAgICAgICAgIC8vIFRPRE86IENoYW5nZSAxNiB0byBcIk1BWCgxNiwgZGVjcnlwdC5pbmZvLmJsb2NrTGVuKVwiIHdoZW4vaWYgU1NIMlxuICAgICAgICAgIC8vIGFkb3B0cyA1MTItYml0IGNpcGhlcnNcbiAgICAgICAgICB8fCBmdWxsUGFja2V0TGVuIDwgKDE2ICsgbWFjU2l6ZSlcbiAgICAgICAgICB8fCAoKHIgKyAoZGVjcnlwdEF1dGhNb2RlID8gMCA6IDQpKSAlIGJsb2NrTGVuKSAhPT0gMCkge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uUFJPVE9DT0xfRVJST1IpO1xuICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogQmFkIHBhY2tldCBsZW5ndGggKCcgKyBmdWxsUGFja2V0TGVuICsgJyknKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignQmFkIHBhY2tldCBsZW5ndGgnKSk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhdGUucGt0TGVuID0gcjtcbiAgICAgIHZhciByZW1haW5MZW4gPSBpbnN0YXRlLnBrdExlbiArIDQgLSBibG9ja0xlbjtcbiAgICAgIGlmIChkZWNyeXB0QXV0aE1vZGUpIHtcbiAgICAgICAgZGVjcnlwdC5pbnN0YW5jZS5zZXRBQUQoYnVmZmVyLnNsaWNlKDAsIDQpKTtcbiAgICAgICAgZGVidWcoJ0RFQlVHOiBQYXJzZXI6IHBrdExlbjonXG4gICAgICAgICAgICAgICsgaW5zdGF0ZS5wa3RMZW5cbiAgICAgICAgICAgICAgKyAnLHJlbWFpbkxlbjonXG4gICAgICAgICAgICAgICsgcmVtYWluTGVuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhdGUucGFkTGVuID0gYnVmZmVyWzRdO1xuICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogcGt0TGVuOidcbiAgICAgICAgICAgICAgKyBpbnN0YXRlLnBrdExlblxuICAgICAgICAgICAgICArICcscGFkTGVuOidcbiAgICAgICAgICAgICAgKyBpbnN0YXRlLnBhZExlblxuICAgICAgICAgICAgICArICcscmVtYWluTGVuOidcbiAgICAgICAgICAgICAgKyByZW1haW5MZW4pO1xuICAgICAgfVxuICAgICAgaWYgKHJlbWFpbkxlbiA+IDApIHtcbiAgICAgICAgaWYgKGRlY3J5cHRBdXRoTW9kZSlcbiAgICAgICAgICBpbnN0YXRlLnBrdEV4dHJhID0gYnVmZmVyLnNsaWNlKDQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgaW5zdGF0ZS5wa3RFeHRyYSA9IGJ1ZmZlci5zbGljZSg1KTtcbiAgICAgICAgLy8gR3JhYiB0aGUgcmVzdCBvZiB0aGUgcGFja2V0XG4gICAgICAgIGV4cGVjdERhdGEodGhpcywgRVhQX1RZUEVfQllURVMsIHJlbWFpbkxlbik7XG4gICAgICAgIGluc3RhdGUuc3RhdHVzID0gSU5fUEFDS0VUREFUQTtcbiAgICAgIH0gZWxzZSBpZiAocmVtYWluTGVuIDwgMClcbiAgICAgICAgaW5zdGF0ZS5zdGF0dXMgPSBJTl9QQUNLRVRCRUZPUkU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gRW50aXJlIG1lc3NhZ2UgZml0IGludG8gb25lIGJsb2NrXG4gICAgICAgIHNraXBEZWNyeXB0ID0gdHJ1ZTtcbiAgICAgICAgaW5zdGF0ZS5zdGF0dXMgPSBJTl9QQUNLRVREQVRBO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluc3RhdGUuc3RhdHVzID09PSBJTl9QQUNLRVREQVRBKSB7XG4gICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQScpO1xuICAgICAgaWYgKGRlY3J5cHQuaW5zdGFuY2UpIHtcbiAgICAgICAgZGVjcnlwdEF1dGhNb2RlID0gKGRlY3J5cHQuaW5mby5hdXRoTGVuID4gMCk7XG4gICAgICAgIGlmICghc2tpcERlY3J5cHQpIHtcbiAgICAgICAgICBpZiAoIWRlY3J5cHRBdXRoTW9kZSlcbiAgICAgICAgICAgIGJ1ZmZlciA9IGRlY3J5cHREYXRhKHRoaXMsIGJ1ZmZlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2tpcERlY3J5cHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVjcnlwdEF1dGhNb2RlID0gZmFsc2U7XG4gICAgICAgIHNraXBEZWNyeXB0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcGFkU3RhcnQgPSBpbnN0YXRlLnBrdExlbiAtIGluc3RhdGUucGFkTGVuIC0gMTtcbiAgICAgIC8vIFRPRE86IEFsbG9jYXRlIGEgQnVmZmVyIG9uY2UgdGhhdCBpcyBzbGlnaHRseSBsYXJnZXIgdGhhbiBtYXhQYWNrZXRTaXplXG4gICAgICAvLyAodG8gYWNjb21tb2RhdGUgZm9yIHBhY2tldCBsZW5ndGggZmllbGQgYW5kIE1BQykgYW5kIHJlLXVzZSB0aGF0XG4gICAgICAvLyBpbnN0ZWFkXG4gICAgICBpZiAoaW5zdGF0ZS5wa3RFeHRyYSkge1xuICAgICAgICBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoaW5zdGF0ZS5wa3RFeHRyYS5sZW5ndGggKyBidWZmZXIubGVuZ3RoKTtcbiAgICAgICAgaW5zdGF0ZS5wa3RFeHRyYS5jb3B5KGJ1Zik7XG4gICAgICAgIGJ1ZmZlci5jb3B5KGJ1ZiwgaW5zdGF0ZS5wa3RFeHRyYS5sZW5ndGgpO1xuICAgICAgICBpbnN0YXRlLnBheWxvYWQgPSBidWYuc2xpY2UoMCwgcGFkU3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRW50aXJlIG1lc3NhZ2UgZml0IGludG8gb25lIGJsb2NrXG4gICAgICAgIGlmIChkZWNyeXB0QXV0aE1vZGUpXG4gICAgICAgICAgYnVmID0gYnVmZmVyLnNsaWNlKDQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYnVmID0gYnVmZmVyLnNsaWNlKDUpO1xuICAgICAgICBpbnN0YXRlLnBheWxvYWQgPSBidWZmZXIuc2xpY2UoNSwgNSArIHBhZFN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YXRlLmhtYWMuaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFdhaXQgZm9yIGhtYWMgaGFzaFxuICAgICAgICB2YXIgaW5ITUFDU2l6ZSA9IGRlY3J5cHQuaW5mby5hdXRoTGVuIHx8IGluc3RhdGUuaG1hYy5pbmZvLmFjdHVhbExlbjtcbiAgICAgICAgZGVidWcoJ0RFQlVHOiBQYXJzZXI6IEhNQUMgc2l6ZTonICsgaW5ITUFDU2l6ZSk7XG4gICAgICAgIGV4cGVjdERhdGEodGhpcywgRVhQX1RZUEVfQllURVMsIGluSE1BQ1NpemUsIGluc3RhdGUuaG1hYy5idWYpO1xuICAgICAgICBpbnN0YXRlLnN0YXR1cyA9IElOX1BBQ0tFVERBVEFWRVJJRlk7XG4gICAgICAgIGluc3RhdGUucGFja2V0ID0gYnVmO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGluc3RhdGUuc3RhdHVzID0gSU5fUEFDS0VUREFUQUFGVEVSO1xuICAgICAgaW5zdGF0ZS5wa3RFeHRyYSA9IHVuZGVmaW5lZDtcbiAgICAgIGJ1ZiA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKGluc3RhdGUuc3RhdHVzID09PSBJTl9QQUNLRVREQVRBVkVSSUZZKSB7XG4gICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQVZFUklGWScpO1xuICAgICAgLy8gVmVyaWZ5IHBhY2tldCBkYXRhIGludGVncml0eVxuICAgICAgaWYgKGhtYWNWZXJpZnkodGhpcywgYnVmZmVyKSkge1xuICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQVZFUklGWSAoVmFsaWQgSE1BQyknKTtcbiAgICAgICAgaW5zdGF0ZS5zdGF0dXMgPSBJTl9QQUNLRVREQVRBQUZURVI7XG4gICAgICAgIGluc3RhdGUucGFja2V0ID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICBkZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQVZFUklGWSAoSW52YWxpZCBITUFDKScpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdJbnZhbGlkIEhNQUMnKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbnN0YXRlLnN0YXR1cyA9PT0gSU5fUEFDS0VUREFUQUFGVEVSKSB7XG4gICAgICBpZiAoZGVjb21wcmVzcy5pbnN0YW5jZSkge1xuICAgICAgICBpZiAoIWRlY29tcCkge1xuICAgICAgICAgIGRlYnVnKCdERUJVRzogUGFyc2VyOiBEZWNvbXByZXNzaW5nJyk7XG4gICAgICAgICAgZGVjb21wcmVzcy5pbnN0YW5jZS53cml0ZShpbnN0YXRlLnBheWxvYWQpO1xuICAgICAgICAgIHZhciBkZWNvbXBCdWYgPSBbXTtcbiAgICAgICAgICB2YXIgZGVjb21wQnVmTGVuID0gMDtcbiAgICAgICAgICBkZWNvbXByZXNzLmluc3RhbmNlLm9uKCdyZWFkYWJsZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGJ1ZjtcbiAgICAgICAgICAgIHdoaWxlIChidWYgPSB0aGlzLnJlYWQoKSkge1xuICAgICAgICAgICAgICBkZWNvbXBCdWYucHVzaChidWYpO1xuICAgICAgICAgICAgICBkZWNvbXBCdWZMZW4gKz0gYnVmLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5mbHVzaChaX1BBUlRJQUxfRkxVU0gsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZGVjb21wcmVzcy5pbnN0YW5jZS5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoZGVjb21wQnVmLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgaW5zdGF0ZS5wYXlsb2FkID0gZGVjb21wQnVmWzBdO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBpbnN0YXRlLnBheWxvYWQgPSBCdWZmZXIuY29uY2F0KGRlY29tcEJ1ZiwgZGVjb21wQnVmTGVuKTtcbiAgICAgICAgICAgIGRlY29tcEJ1ZiA9IG51bGw7XG4gICAgICAgICAgICB2YXIgbmV4dFNsaWNlO1xuICAgICAgICAgICAgaWYgKGkgPT09IGNobGVuKVxuICAgICAgICAgICAgICBuZXh0U2xpY2UgPSBFTVBUWV9CVUZGRVI7IC8vIEF2b2lkIHNsaWNpbmcgYSB6ZXJvLWxlbmd0aCBidWZmZXJcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbmV4dFNsaWNlID0gY2h1bmsuc2xpY2UoaSk7XG4gICAgICAgICAgICBzZWxmLl90cmFuc2Zvcm0obmV4dFNsaWNlLCBlbmNvZGluZywgY2FsbGJhY2ssIHRydWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgcmVzZXQgdGhpcyBhZnRlciB0aGlzIGZpcnN0IHRpbWUgaW4gdGhlIGxvb3AsXG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCB0cnlpbmcgdG8gaW50ZXJwcmV0IGFzLWlzIGFub3RoZXJcbiAgICAgICAgICAvLyBjb21wcmVzc2VkIHBhY2tldCB0aGF0IGlzIHdpdGhpbiB0aGUgc2FtZSBjaHVua1xuICAgICAgICAgIGRlY29tcCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdCgncGFja2V0Jyk7XG5cbiAgICAgIHZhciBwdHlwZSA9IGluc3RhdGUucGF5bG9hZFswXTtcblxuICAgICAgaWYgKGRlYnVnICE9PSBERUJVR19OT09QKSB7XG4gICAgICAgIHZhciBtc2dQYWNrZXQgPSAnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6ICc7XG4gICAgICAgIHZhciBhdXRoTWV0aG9kID0gc3RhdGUuYXV0aHNRdWV1ZVswXTtcbiAgICAgICAgdmFyIG1zZ1BrdFR5cGUgPSBudWxsO1xuXG4gICAgICAgIGlmIChvdXRzdGF0ZS5zdGF0dXMgPT09IE9VVF9SRUtFWUlOR1xuICAgICAgICAgICAgJiYgIShwdHlwZSA8PSA0IHx8IChwdHlwZSA+PSAyMCAmJiBwdHlwZSA8PSA0OSkpKVxuICAgICAgICAgIG1zZ1BhY2tldCArPSAnKGVucXVldWVkKSAnO1xuXG4gICAgICAgIGlmIChwdHlwZSA9PT0gTUVTU0FHRS5LRVhESF9JTklUKSB7XG4gICAgICAgICAgc3dpdGNoIChzdGF0ZS5rZXgudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgICBtc2dQa3RUeXBlID0gJ0tFWERIX0lOSVQnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwZXgnOlxuICAgICAgICAgICAgICBtc2dQa3RUeXBlID0gJ0tFWERIX0dFWF9SRVFVRVNUJztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBtc2dQa3RUeXBlID0gJ0tFWEVDREhfSU5JVCc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHB0eXBlID09PSBNRVNTQUdFLktFWERIX1JFUExZKSB7XG4gICAgICAgICAgc3dpdGNoIChzdGF0ZS5rZXgudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgICBtc2dQa3RUeXBlID0gJ0tFWERIX1JFUExZJztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncm91cGV4JzpcbiAgICAgICAgICAgICAgbXNnUGt0VHlwZSA9ICdLRVhESF9HRVhfR1JPVVAnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIG1zZ1BrdFR5cGUgPSAnS0VYRUNESF9SRVBMWSc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHB0eXBlID09PSBNRVNTQUdFLktFWERIX0dFWF9HUk9VUCkge1xuICAgICAgICAgIG1zZ1BrdFR5cGUgPSAnS0VYREhfR0VYX0dST1VQJztcbiAgICAgICAgfSBlbHNlIGlmIChwdHlwZSA9PT0gTUVTU0FHRS5LRVhESF9HRVhfUkVQTFkpIHtcbiAgICAgICAgICBtc2dQa3RUeXBlID0gJ0tFWERIX0dFWF9SRVBMWSc7XG4gICAgICAgIH0gZWxzZSBpZiAocHR5cGUgPT09IDYwKSB7XG4gICAgICAgICAgaWYgKGF1dGhNZXRob2QgPT09ICdwYXNzd29yZCcpXG4gICAgICAgICAgICBtc2dQa3RUeXBlID0gJ1VTRVJBVVRIX1BBU1NXRF9DSEFOR0VSRVEnO1xuICAgICAgICAgIGVsc2UgaWYgKGF1dGhNZXRob2QgPT09ICdrZXlib2FyZC1pbnRlcmFjdGl2ZScpXG4gICAgICAgICAgICBtc2dQa3RUeXBlID0gJ1VTRVJBVVRIX0lORk9fUkVRVUVTVCc7XG4gICAgICAgICAgZWxzZSBpZiAoYXV0aE1ldGhvZCA9PT0gJ3B1YmxpY2tleScpXG4gICAgICAgICAgICBtc2dQa3RUeXBlID0gJ1VTRVJBVVRIX1BLX09LJztcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBtc2dQa3RUeXBlID0gJ1VOS05PV04gUEFDS0VUIDYwJztcbiAgICAgICAgfSBlbHNlIGlmIChwdHlwZSA9PT0gNjEpIHtcbiAgICAgICAgICBpZiAoYXV0aE1ldGhvZCA9PT0gJ2tleWJvYXJkLWludGVyYWN0aXZlJylcbiAgICAgICAgICAgIG1zZ1BrdFR5cGUgPSAnVVNFUkFVVEhfSU5GT19SRVNQT05TRSc7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXNnUGt0VHlwZSA9ICdVTktOT1dOIFBBQ0tFVCA2MSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobXNnUGt0VHlwZSA9PT0gbnVsbClcbiAgICAgICAgICBtc2dQa3RUeXBlID0gTUVTU0FHRVtwdHlwZV07XG5cbiAgICAgICAgLy8gRG9uJ3Qgd3JpdGUgZGVidWcgb3V0cHV0IGZvciBtZXNzYWdlcyB3ZSBjdXN0b20gbWFrZSBpbiBwYXJzZVBhY2tldCgpXG4gICAgICAgIGlmIChwdHlwZSAhPT0gTUVTU0FHRS5DSEFOTkVMX09QRU5cbiAgICAgICAgICAgICYmIHB0eXBlICE9PSBNRVNTQUdFLkNIQU5ORUxfUkVRVUVTVFxuICAgICAgICAgICAgJiYgcHR5cGUgIT09IE1FU1NBR0UuQ0hBTk5FTF9TVUNDRVNTXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5DSEFOTkVMX0ZBSUxVUkVcbiAgICAgICAgICAgICYmIHB0eXBlICE9PSBNRVNTQUdFLkNIQU5ORUxfRU9GXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5DSEFOTkVMX0NMT1NFXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5DSEFOTkVMX0RBVEFcbiAgICAgICAgICAgICYmIHB0eXBlICE9PSBNRVNTQUdFLkNIQU5ORUxfRVhURU5ERURfREFUQVxuICAgICAgICAgICAgJiYgcHR5cGUgIT09IE1FU1NBR0UuQ0hBTk5FTF9XSU5ET1dfQURKVVNUXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5ESVNDT05ORUNUXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5VU0VSQVVUSF9SRVFVRVNUXG4gICAgICAgICAgICAmJiBwdHlwZSAhPT0gTUVTU0FHRS5HTE9CQUxfUkVRVUVTVClcbiAgICAgICAgICBkZWJ1Zyhtc2dQYWNrZXQgKyBtc2dQa3RUeXBlKTtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBwYXJzZSBwYWNrZXQgaWYgd2UgYXJlIG5vdCByZS1rZXlpbmcgb3IgdGhlIHBhY2tldCBpcyBub3QgYVxuICAgICAgLy8gdHJhbnNwb3J0IGxheWVyIHBhY2tldCBuZWVkZWQgZm9yIHJlLWtleWluZ1xuICAgICAgaWYgKG91dHN0YXRlLnN0YXR1cyA9PT0gT1VUX1JFQURZXG4gICAgICAgICAgfHwgcHR5cGUgPD0gNFxuICAgICAgICAgIHx8IChwdHlwZSA+PSAyMCAmJiBwdHlwZSA8PSA0OSkpIHtcbiAgICAgICAgaWYgKHBhcnNlUGFja2V0KHRoaXMsIGNhbGxiYWNrKSA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmIChpbnN0YXRlLnN0YXR1cyA9PT0gSU5fSU5JVCkge1xuICAgICAgICAgIC8vIFdlIHdlcmUgcmVzZXQgZHVlIHRvIHNvbWUgZXJyb3IvZGlzYWdyZWVtZW50ID9cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob3V0c3RhdGUuc3RhdHVzID09PSBPVVRfUkVLRVlJTkcpIHtcbiAgICAgICAgaWYgKGluc3RhdGUucmVrZXlRdWV1ZS5sZW5ndGggPT09IE1BWF9QQUNLRVRTX1JFS0VZSU5HKSB7XG4gICAgICAgICAgZGVidWcoJ0RFQlVHOiBQYXJzZXI6IE1heCBpbmNvbWluZyByZS1rZXkgcXVldWUgbGVuZ3RoIHJlYWNoZWQnKTtcbiAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uUFJPVE9DT0xfRVJST1IpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgICAgICAgIG5ldyBFcnJvcignSW5jb21pbmcgcmUta2V5IHF1ZXVlIGxlbmd0aCBsaW1pdCByZWFjaGVkJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHJlY29yZCB0aGUgc2VxdWVuY2UgbnVtYmVyIGluIGNhc2Ugd2UgbmVlZCBpdCBsYXRlciBvblxuICAgICAgICAvLyB3aGVuIHdlIGRyYWluIHRoZSBxdWV1ZSAoZS5nLiB1bmtub3duIHBhY2tldClcbiAgICAgICAgdmFyIHNlcW5vID0gaW5zdGF0ZS5zZXFubztcbiAgICAgICAgaWYgKCsraW5zdGF0ZS5zZXFubyA+IE1BWF9TRVFOTylcbiAgICAgICAgICBpbnN0YXRlLnNlcW5vID0gMDtcblxuICAgICAgICBpbnN0YXRlLnJla2V5UXVldWUucHVzaChbc2Vxbm8sIGluc3RhdGUucGF5bG9hZF0pO1xuICAgICAgfVxuXG4gICAgICBpbnN0YXRlLnN0YXR1cyA9IElOX1BBQ0tFVEJFRk9SRTtcbiAgICAgIGluc3RhdGUucGF5bG9hZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGJ1ZmZlciAhPT0gdW5kZWZpbmVkKVxuICAgICAgYnVmZmVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY2FsbGJhY2soKTtcbn07XG5cblNTSDJTdHJlYW0ucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24obm9lbmQpIHtcbiAgaWYgKHRoaXMuX3N0YXRlKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG4gICAgc3RhdGUuaW5jb21pbmcuc3RhdHVzID0gSU5fSU5JVDtcbiAgICBzdGF0ZS5vdXRnb2luZy5zdGF0dXMgPSBPVVRfSU5JVDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHtcbiAgICAgIGF1dGhzUXVldWU6IFtdLFxuICAgICAgaG9zdGtleUZvcm1hdDogdW5kZWZpbmVkLFxuICAgICAga2V4OiB1bmRlZmluZWQsXG5cbiAgICAgIGluY29taW5nOiB7XG4gICAgICAgIHN0YXR1czogSU5fSU5JVCxcbiAgICAgICAgZXhwZWN0ZWRQYWNrZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VhcmNoOiB1bmRlZmluZWQsXG4gICAgICAgIGdyZWV0aW5nOiB1bmRlZmluZWQsXG4gICAgICAgIHNlcW5vOiAwLFxuICAgICAgICBwa3RMZW46IHVuZGVmaW5lZCxcbiAgICAgICAgcGFkTGVuOiB1bmRlZmluZWQsXG4gICAgICAgIHBrdEV4dHJhOiB1bmRlZmluZWQsXG4gICAgICAgIHBheWxvYWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgcGFja2V0OiB1bmRlZmluZWQsXG4gICAgICAgIGtleGluaXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgaWRlbnRSYXc6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVrZXlRdWV1ZTogW10sXG4gICAgICAgIGlnbm9yZU5leHQ6IGZhbHNlLFxuXG4gICAgICAgIGV4cGVjdDoge1xuICAgICAgICAgIGFtb3VudDogdW5kZWZpbmVkLFxuICAgICAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwdHI6IDAsXG4gICAgICAgICAgYnVmOiB1bmRlZmluZWRcbiAgICAgICAgfSxcblxuICAgICAgICBkZWNyeXB0OiB7XG4gICAgICAgICAgaW5zdGFuY2U6IGZhbHNlLFxuICAgICAgICAgIGluZm86IHVuZGVmaW5lZCxcbiAgICAgICAgICBpdjogdW5kZWZpbmVkLFxuICAgICAgICAgIGtleTogdW5kZWZpbmVkLFxuICAgICAgICAgIGJ1ZjogdW5kZWZpbmVkLFxuICAgICAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuXG4gICAgICAgIGhtYWM6IHtcbiAgICAgICAgICBpbmZvOiB1bmRlZmluZWQsXG4gICAgICAgICAga2V5OiB1bmRlZmluZWQsXG4gICAgICAgICAgYnVmOiB1bmRlZmluZWQsXG4gICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgfSxcblxuICAgICAgICBkZWNvbXByZXNzOiB7XG4gICAgICAgICAgaW5zdGFuY2U6IGZhbHNlLFxuICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG91dGdvaW5nOiB7XG4gICAgICAgIHN0YXR1czogT1VUX0lOSVQsXG4gICAgICAgIHNlcW5vOiAwLFxuICAgICAgICBidWZTZXFubzogQnVmZmVyLmFsbG9jVW5zYWZlKDQpLFxuICAgICAgICByZWtleVF1ZXVlOiBbXSxcbiAgICAgICAga2V4aW5pdDogdW5kZWZpbmVkLFxuICAgICAgICBrZXhzZWNyZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgcHVia2V5OiB1bmRlZmluZWQsXG4gICAgICAgIGV4Y2hhbmdlSGFzaDogdW5kZWZpbmVkLFxuICAgICAgICBzZXNzaW9uSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VudE5FV0tFWVM6IGZhbHNlLFxuXG4gICAgICAgIGVuY3J5cHQ6IHtcbiAgICAgICAgICBpbnN0YW5jZTogZmFsc2UsXG4gICAgICAgICAgaW5mbzogdW5kZWZpbmVkLFxuICAgICAgICAgIGl2OiB1bmRlZmluZWQsXG4gICAgICAgICAga2V5OiB1bmRlZmluZWQsXG4gICAgICAgICAgdHlwZTogdW5kZWZpbmVkXG4gICAgICAgIH0sXG5cbiAgICAgICAgaG1hYzoge1xuICAgICAgICAgIGluZm86IHVuZGVmaW5lZCxcbiAgICAgICAgICBrZXk6IHVuZGVmaW5lZCxcbiAgICAgICAgICBidWY6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXByZXNzOiB7XG4gICAgICAgICAgaW5zdGFuY2U6IGZhbHNlLFxuICAgICAgICAgIHR5cGU6IGZhbHNlLFxuICAgICAgICAgIHF1ZXVlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGlmICghbm9lbmQpIHtcbiAgICBpZiAodGhpcy5yZWFkYWJsZSlcbiAgICAgIHRoaXMucHVzaChudWxsKTtcbiAgfVxufTtcblxuLy8gQ29tbW9uIG1ldGhvZHNcbi8vIEdsb2JhbFxuU1NIMlN0cmVhbS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uKHJlYXNvbikge1xuICAvKlxuICAgIGJ5dGUgICAgICBTU0hfTVNHX0RJU0NPTk5FQ1RcbiAgICB1aW50MzIgICAgcmVhc29uIGNvZGVcbiAgICBzdHJpbmcgICAgZGVzY3JpcHRpb24gaW4gSVNPLTEwNjQ2IFVURi04IGVuY29kaW5nXG4gICAgc3RyaW5nICAgIGxhbmd1YWdlIHRhZ1xuICAqL1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKDEgKyA0ICsgNCArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuRElTQ09OTkVDVDtcblxuICBpZiAoRElTQ09OTkVDVF9SRUFTT05bcmVhc29uXSA9PT0gdW5kZWZpbmVkKVxuICAgIHJlYXNvbiA9IERJU0NPTk5FQ1RfUkVBU09OLkJZX0FQUExJQ0FUSU9OO1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVhc29uLCAxKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgRElTQ09OTkVDVCAoJ1xuICAgICAgICAgICAgICsgRElTQ09OTkVDVF9SRUFTT05bcmVhc29uXVxuICAgICAgICAgICAgICsgJyknKTtcbiAgc2VuZCh0aGlzLCBidWYpO1xuICB0aGlzLnJlc2V0KCk7XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLnBpbmcgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIHBpbmcgKEdMT0JBTF9SRVFVRVNUOiBrZWVwYWxpdmVAb3BlbnNzaC5jb20pJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIFBJTkdfUEFDS0VUKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5yZWtleSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RhdHVzID0gdGhpcy5fc3RhdGUub3V0Z29pbmcuc3RhdHVzO1xuICBpZiAoc3RhdHVzID09PSBPVVRfUkVLRVlJTkcpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIHJlLWtleSBpcyBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gIGVsc2UgaWYgKHN0YXR1cyAhPT0gT1VUX1JFQURZKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlLWtleSB5ZXQnKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFN0YXJ0aW5nIHJlLWtleScpO1xuICByZXR1cm4gS0VYSU5JVCh0aGlzKTtcbn07XG5cbi8vICdzc2gtY29ubmVjdGlvbicgc2VydmljZS1zcGVjaWZpY1xuU1NIMlN0cmVhbS5wcm90b3R5cGUucmVxdWVzdFN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHZhciBidWY7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIGRhdGEubGVuZ3RoKTtcblxuICAgIGJ1ZlswXSA9IE1FU1NBR0UuUkVRVUVTVF9TVUNDRVNTO1xuXG4gICAgZGF0YS5jb3B5KGJ1ZiwgMSk7XG4gIH0gZWxzZVxuICAgIGJ1ZiA9IFJFUVVFU1RfU1VDQ0VTU19QQUNLRVQ7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFJFUVVFU1RfU1VDQ0VTUycpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLnJlcXVlc3RGYWlsdXJlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBSRVFVRVNUX0ZBSUxVUkUnKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgUkVRVUVTVF9GQUlMVVJFX1BBQ0tFVCk7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbFN1Y2Nlc3MgPSBmdW5jdGlvbihjaGFuKSB7XG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9TVUNDRVNTO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9TVUNDRVNTICgnICsgY2hhbiArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbEZhaWx1cmUgPSBmdW5jdGlvbihjaGFuKSB7XG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9GQUlMVVJFO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9GQUlMVVJFICgnICsgY2hhbiArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbEVPRiA9IGZ1bmN0aW9uKGNoYW4pIHtcbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX0VPRjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2hhbiwgMSk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfRU9GICgnICsgY2hhbiArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbENsb3NlID0gZnVuY3Rpb24oY2hhbikge1xuICAvLyBEb2VzIG5vdCBjb25zdW1lIHdpbmRvdyBzcGFjZVxuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfQ0xPU0U7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX0NMT1NFICgnICsgY2hhbiArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbFdpbmRvd0FkanVzdCA9IGZ1bmN0aW9uKGNoYW4sIGFtb3VudCkge1xuICAvLyBEb2VzIG5vdCBjb25zdW1lIHdpbmRvdyBzcGFjZVxuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgNCk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX1dJTkRPV19BREpVU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBhbW91bnQsIDUpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1dJTkRPV19BREpVU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsICdcbiAgICAgICAgICAgICArIGFtb3VudFxuICAgICAgICAgICAgICsgJyknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5jaGFubmVsRGF0YSA9IGZ1bmN0aW9uKGNoYW4sIGRhdGEpIHtcbiAgdmFyIGRhdGFJc0J1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcihkYXRhKTtcbiAgdmFyIGRhdGFMZW4gPSAoZGF0YUlzQnVmZmVyID8gZGF0YS5sZW5ndGggOiBCdWZmZXIuYnl0ZUxlbmd0aChkYXRhKSk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgZGF0YUxlbik7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX0RBVEE7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBkYXRhTGVuLCA1KTtcbiAgaWYgKGRhdGFJc0J1ZmZlcilcbiAgICBkYXRhLmNvcHkoYnVmLCA5KTtcbiAgZWxzZVxuICAgIGJ1Zi53cml0ZShkYXRhLCA5LCBkYXRhTGVuLCAndXRmOCcpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX0RBVEEgKCcgKyBjaGFuICsgJyknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5jaGFubmVsRXh0RGF0YSA9IGZ1bmN0aW9uKGNoYW4sIGRhdGEsIHR5cGUpIHtcbiAgdmFyIGRhdGFJc0J1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcihkYXRhKTtcbiAgdmFyIGRhdGFMZW4gPSAoZGF0YUlzQnVmZmVyID8gZGF0YS5sZW5ndGggOiBCdWZmZXIuYnl0ZUxlbmd0aChkYXRhKSk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgNCArIGRhdGFMZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9FWFRFTkRFRF9EQVRBO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgdHlwZSwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGRhdGFMZW4sIDkpO1xuICBpZiAoZGF0YUlzQnVmZmVyKVxuICAgIGRhdGEuY29weShidWYsIDEzKTtcbiAgZWxzZVxuICAgIGJ1Zi53cml0ZShkYXRhLCAxMywgZGF0YUxlbiwgJ3V0ZjgnKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9FWFRFTkRFRF9EQVRBICgnICsgY2hhbiArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuY2hhbm5lbE9wZW5Db25maXJtID0gZnVuY3Rpb24ocmVtb3RlQ2hhbiwgbG9jYWxDaGFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFdpbmRvdywgbWF4UGFja2V0KSB7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgNCArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9PUEVOX0NPTkZJUk1BVElPTjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVtb3RlQ2hhbiwgMSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGxvY2FsQ2hhbiwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGluaXRXaW5kb3csIDkpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBtYXhQYWNrZXQsIDEzKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9PUEVOX0NPTkZJUk1BVElPTiAocjonXG4gICAgICAgICAgICAgKyByZW1vdGVDaGFuXG4gICAgICAgICAgICAgKyAnLCBsOidcbiAgICAgICAgICAgICArIGxvY2FsQ2hhblxuICAgICAgICAgICAgICsgJyknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5jaGFubmVsT3BlbkZhaWwgPSBmdW5jdGlvbihyZW1vdGVDaGFuLCByZWFzb24sIGRlc2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nKSB7XG4gIGlmICh0eXBlb2YgZGVzYyAhPT0gJ3N0cmluZycpXG4gICAgZGVzYyA9ICcnO1xuICBpZiAodHlwZW9mIGxhbmcgIT09ICdzdHJpbmcnKVxuICAgIGxhbmcgPSAnJztcblxuICB2YXIgZGVzY0xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGRlc2MpO1xuICB2YXIgbGFuZ0xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGxhbmcpO1xuICB2YXIgcCA9IDk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgNCArIGRlc2NMZW4gKyA0ICsgbGFuZ0xlbik7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX09QRU5fRkFJTFVSRTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVtb3RlQ2hhbiwgMSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHJlYXNvbiwgNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGRlc2NMZW4sIHApO1xuICBwICs9IDQ7XG4gIGlmIChkZXNjTGVuKSB7XG4gICAgYnVmLndyaXRlKGRlc2MsIHAsIGRlc2NMZW4sICd1dGY4Jyk7XG4gICAgcCArPSBkZXNjTGVuO1xuICB9XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGxhbmdMZW4sIHApO1xuICBpZiAobGFuZ0xlbilcbiAgICBidWYud3JpdGUobGFuZywgcCArPSA0LCBsYW5nTGVuLCAnYXNjaWknKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9PUEVOX0ZBSUxVUkUgKCdcbiAgICAgICAgICAgICArIHJlbW90ZUNoYW5cbiAgICAgICAgICAgICArICcpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuXG4vLyBDbGllbnQtc3BlY2lmaWMgbWV0aG9kc1xuLy8gR2xvYmFsXG5TU0gyU3RyZWFtLnByb3RvdHlwZS5zZXJ2aWNlID0gZnVuY3Rpb24oc3ZjTmFtZSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHN2Y05hbWVMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChzdmNOYW1lKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIHN2Y05hbWVMZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuU0VSVklDRV9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBzdmNOYW1lTGVuLCAxKTtcbiAgYnVmLndyaXRlKHN2Y05hbWUsIDUsIHN2Y05hbWVMZW4sICdhc2NpaScpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBTRVJWSUNFX1JFUVVFU1QgKCcgKyBzdmNOYW1lICsgJyknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG4vLyAnc3NoLWNvbm5lY3Rpb24nIHNlcnZpY2Utc3BlY2lmaWNcblNTSDJTdHJlYW0ucHJvdG90eXBlLnRjcGlwRm9yd2FyZCA9IGZ1bmN0aW9uKGJpbmRBZGRyLCBiaW5kUG9ydCwgd2FudFJlcGx5KSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgYWRkcmxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGJpbmRBZGRyKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDEzICsgMSArIDQgKyBhZGRybGVuICsgNCk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5HTE9CQUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTMsIDEpO1xuICBidWYud3JpdGUoJ3RjcGlwLWZvcndhcmQnLCA1LCAxMywgJ2FzY2lpJyk7XG5cbiAgYnVmWzE4XSA9ICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZCB8fCB3YW50UmVwbHkgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGFkZHJsZW4sIDE5KTtcbiAgYnVmLndyaXRlKGJpbmRBZGRyLCAyMywgYWRkcmxlbiwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJpbmRQb3J0LCAyMyArIGFkZHJsZW4pO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBHTE9CQUxfUkVRVUVTVCAodGNwaXAtZm9yd2FyZCknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5jYW5jZWxUY3BpcEZvcndhcmQgPSBmdW5jdGlvbihiaW5kQWRkciwgYmluZFBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50UmVwbHkpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBhZGRybGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoYmluZEFkZHIpO1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgMjAgKyAxICsgNCArIGFkZHJsZW4gKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkdMT0JBTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAyMCwgMSk7XG4gIGJ1Zi53cml0ZSgnY2FuY2VsLXRjcGlwLWZvcndhcmQnLCA1LCAyMCwgJ2FzY2lpJyk7XG5cbiAgYnVmWzI1XSA9ICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZCB8fCB3YW50UmVwbHkgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGFkZHJsZW4sIDI2KTtcbiAgYnVmLndyaXRlKGJpbmRBZGRyLCAzMCwgYWRkcmxlbiwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGJpbmRQb3J0LCAzMCArIGFkZHJsZW4pO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBHTE9CQUxfUkVRVUVTVCAoY2FuY2VsLXRjcGlwLWZvcndhcmQpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUub3BlbnNzaF9zdHJlYW1Mb2NhbEZvcndhcmQgPSBmdW5jdGlvbihzb2NrZXRQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50UmVwbHkpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIHZhciBwYXRobGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoc29ja2V0UGF0aCk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyAzMSArIDEgKyA0ICsgcGF0aGxlbik7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5HTE9CQUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMzEsIDEpO1xuICBidWYud3JpdGUoJ3N0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20nLCA1LCAzMSwgJ2FzY2lpJyk7XG5cbiAgYnVmWzM2XSA9ICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZCB8fCB3YW50UmVwbHkgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBhdGhsZW4sIDM3KTtcbiAgYnVmLndyaXRlKHNvY2tldFBhdGgsIDQxLCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBHTE9CQUxfUkVRVUVTVCAoc3RyZWFtbG9jYWwtZm9yd2FyZEBvcGVuc3NoLmNvbSknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5vcGVuc3NoX2NhbmNlbFN0cmVhbUxvY2FsRm9yd2FyZCA9IGZ1bmN0aW9uKHNvY2tldFBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHBhdGhsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChzb2NrZXRQYXRoKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDM4ICsgMSArIDQgKyBwYXRobGVuKTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkdMT0JBTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAzOCwgMSk7XG4gIGJ1Zi53cml0ZSgnY2FuY2VsLXN0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20nLCA1LCAzOCwgJ2FzY2lpJyk7XG5cbiAgYnVmWzQzXSA9ICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZCB8fCB3YW50UmVwbHkgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBhdGhsZW4sIDQ0KTtcbiAgYnVmLndyaXRlKHNvY2tldFBhdGgsIDQ4LCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBHTE9CQUxfUkVRVUVTVCAoY2FuY2VsLXN0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20pJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuZGlyZWN0VGNwaXAgPSBmdW5jdGlvbihjaGFuLCBpbml0V2luZG93LCBtYXhQYWNrZXQsIGNmZykge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHNyY2xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNmZy5zcmNJUCk7XG4gIHZhciBkc3RsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChjZmcuZHN0SVApO1xuICB2YXIgcCA9IDI5O1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgMTIgKyA0ICsgNCArIDQgKyA0ICsgc3JjbGVuICsgNCArIDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGRzdGxlbiArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9PUEVOO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAxMiwgMSk7XG4gIGJ1Zi53cml0ZSgnZGlyZWN0LXRjcGlwJywgNSwgMTIsICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxNyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGluaXRXaW5kb3csIDIxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbWF4UGFja2V0LCAyNSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGRzdGxlbiwgcCk7XG4gIGJ1Zi53cml0ZShjZmcuZHN0SVAsIHAgKz0gNCwgZHN0bGVuLCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2ZnLmRzdFBvcnQsIHAgKz0gZHN0bGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgc3JjbGVuLCBwICs9IDQpO1xuICBidWYud3JpdGUoY2ZnLnNyY0lQLCBwICs9IDQsIHNyY2xlbiwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNmZy5zcmNQb3J0LCBwICs9IHNyY2xlbik7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfT1BFTiAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgZGlyZWN0LXRjcGlwKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLm9wZW5zc2hfZGlyZWN0U3RyZWFtTG9jYWwgPSBmdW5jdGlvbihjaGFuLCBpbml0V2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFBhY2tldCwgY2ZnKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgcGF0aGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNmZy5zb2NrZXRQYXRoKTtcbiAgdmFyIHAgPSA0NztcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDMwICsgNCArIDQgKyA0ICsgNCArIHBhdGhsZW4gKyA0ICsgNCk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX09QRU47XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDMwLCAxKTtcbiAgYnVmLndyaXRlKCdkaXJlY3Qtc3RyZWFtbG9jYWxAb3BlbnNzaC5jb20nLCA1LCAzMCwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDM1KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaW5pdFdpbmRvdywgMzkpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBtYXhQYWNrZXQsIDQzKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcGF0aGxlbiwgcCk7XG4gIGJ1Zi53cml0ZShjZmcuc29ja2V0UGF0aCwgcCArPSA0LCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIC8vIHJlc2VydmVkIGZpZWxkcyAoc3RyaW5nIGFuZCB1aW50MzIpXG4gIGJ1Zi5maWxsKDAsIGJ1Zi5sZW5ndGggLSA4KTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9PUEVOICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCBkaXJlY3Qtc3RyZWFtbG9jYWxAb3BlbnNzaC5jb20pJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUub3BlbnNzaF9ub01vcmVTZXNzaW9ucyA9IGZ1bmN0aW9uKHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDI4ICsgMSk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5HTE9CQUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMjgsIDEpO1xuICBidWYud3JpdGUoJ25vLW1vcmUtc2Vzc2lvbnNAb3BlbnNzaC5jb20nLCA1LCAyOCwgJ2FzY2lpJyk7XG5cbiAgYnVmWzMzXSA9ICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZCB8fCB3YW50UmVwbHkgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIEdMT0JBTF9SRVFVRVNUIChuby1tb3JlLXNlc3Npb25zQG9wZW5zc2guY29tKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLnNlc3Npb24gPSBmdW5jdGlvbihjaGFuLCBpbml0V2luZG93LCBtYXhQYWNrZXQpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA3ICsgNCArIDQgKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfT1BFTjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgNywgMSk7XG4gIGJ1Zi53cml0ZSgnc2Vzc2lvbicsIDUsIDcsICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxMik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGluaXRXaW5kb3csIDE2KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbWF4UGFja2V0LCAyMCk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfT1BFTiAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgc2Vzc2lvbiknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS53aW5kb3dDaGFuZ2UgPSBmdW5jdGlvbihjaGFuLCByb3dzLCBjb2xzLCBoZWlnaHQsIHdpZHRoKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICAvLyBEb2VzIG5vdCBjb25zdW1lIHdpbmRvdyBzcGFjZVxuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgNCArIDEzICsgMSArIDQgKyA0ICsgNCArIDQpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTMsIDUpO1xuICBidWYud3JpdGUoJ3dpbmRvdy1jaGFuZ2UnLCA5LCAxMywgJ2FzY2lpJyk7XG5cbiAgYnVmWzIyXSA9IDA7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNvbHMsIDIzKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgcm93cywgMjcpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCB3aWR0aCwgMzEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBoZWlnaHQsIDM1KTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9SRVFVRVNUICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCB3aW5kb3ctY2hhbmdlKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLnB0eSA9IGZ1bmN0aW9uKGNoYW4sIHJvd3MsIGNvbHMsIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCB0ZXJtLCBtb2Rlcywgd2FudFJlcGx5KSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICAvLyBEb2VzIG5vdCBjb25zdW1lIHdpbmRvdyBzcGFjZVxuICBpZiAoIXRlcm0gfHwgIXRlcm0ubGVuZ3RoKVxuICAgIHRlcm0gPSAndnQxMDAnO1xuICBpZiAobW9kZXNcbiAgICAgICYmICFCdWZmZXIuaXNCdWZmZXIobW9kZXMpXG4gICAgICAmJiAhQXJyYXkuaXNBcnJheShtb2RlcylcbiAgICAgICYmIHR5cGVvZiBtb2RlcyA9PT0gJ29iamVjdCcpXG4gICAgbW9kZXMgPSBtb2Rlc1RvQnl0ZXMobW9kZXMpO1xuICBpZiAoIW1vZGVzIHx8ICFtb2Rlcy5sZW5ndGgpXG4gICAgbW9kZXMgPSBOT19URVJNSU5BTF9NT0RFU19CVUZGRVI7XG5cbiAgdmFyIHRlcm1MZW4gPSB0ZXJtLmxlbmd0aDtcbiAgdmFyIG1vZGVzTGVuID0gbW9kZXMubGVuZ3RoO1xuICB2YXIgcCA9IDIxO1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgNCArIDcgKyAxICsgNCArIHRlcm1MZW4gKyA0ICsgNCArIDQgKyA0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgbW9kZXNMZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgNywgNSk7XG4gIGJ1Zi53cml0ZSgncHR5LXJlcScsIDksIDcsICdhc2NpaScpO1xuXG4gIGJ1ZlsxNl0gPSAod2FudFJlcGx5ID09PSB1bmRlZmluZWQgfHwgd2FudFJlcGx5ID09PSB0cnVlID8gMSA6IDApO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCB0ZXJtTGVuLCAxNyk7XG4gIGJ1Zi53cml0ZSh0ZXJtLCAyMSwgdGVybUxlbiwgJ3V0ZjgnKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY29scywgcCArPSB0ZXJtTGVuKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgcm93cywgcCArPSA0KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgd2lkdGgsIHAgKz0gNCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGhlaWdodCwgcCArPSA0KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbW9kZXNMZW4sIHAgKz0gNCk7XG4gIHAgKz0gNDtcbiAgaWYgKEFycmF5LmlzQXJyYXkobW9kZXMpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2Rlc0xlbjsgKytpKVxuICAgICAgYnVmW3ArK10gPSBtb2Rlc1tpXTtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIobW9kZXMpKSB7XG4gICAgbW9kZXMuY29weShidWYsIHApO1xuICB9XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfUkVRVUVTVCAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgcHR5LXJlcSknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5zaGVsbCA9IGZ1bmN0aW9uKGNoYW4sIHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyA1ICsgMSk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCA1LCA1KTtcbiAgYnVmLndyaXRlKCdzaGVsbCcsIDksIDUsICdhc2NpaScpO1xuXG4gIGJ1ZlsxNF0gPSAod2FudFJlcGx5ID09PSB1bmRlZmluZWQgfHwgd2FudFJlcGx5ID09PSB0cnVlID8gMSA6IDApO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1JFUVVFU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIHNoZWxsKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbihjaGFuLCBjbWQsIHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGNtZGxlbiA9IChCdWZmZXIuaXNCdWZmZXIoY21kKSA/IGNtZC5sZW5ndGggOiBCdWZmZXIuYnl0ZUxlbmd0aChjbWQpKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyA0ICsgMSArIDQgKyBjbWRsZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgNCwgNSk7XG4gIGJ1Zi53cml0ZSgnZXhlYycsIDksIDQsICdhc2NpaScpO1xuXG4gIGJ1ZlsxM10gPSAod2FudFJlcGx5ID09PSB1bmRlZmluZWQgfHwgd2FudFJlcGx5ID09PSB0cnVlID8gMSA6IDApO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjbWRsZW4sIDE0KTtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjbWQpKVxuICAgIGNtZC5jb3B5KGJ1ZiwgMTgpO1xuICBlbHNlXG4gICAgYnVmLndyaXRlKGNtZCwgMTgsIGNtZGxlbiwgJ3V0ZjgnKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9SRVFVRVNUICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCBleGVjKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0aW9uKGNoYW4sIHNpZ25hbCkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgc2lnbmFsID0gc2lnbmFsLnRvVXBwZXJDYXNlKCk7XG4gIGlmIChzaWduYWwuc2xpY2UoMCwgMykgPT09ICdTSUcnKVxuICAgIHNpZ25hbCA9IHNpZ25hbC5zdWJzdHJpbmcoMyk7XG5cbiAgaWYgKFNJR05BTFMuaW5kZXhPZihzaWduYWwpID09PSAtMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2lnbmFsOiAnICsgc2lnbmFsKTtcblxuICB2YXIgc2lnbmFsTGVuID0gc2lnbmFsLmxlbmd0aDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyA2ICsgMSArIDQgKyBzaWduYWxMZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgNiwgNSk7XG4gIGJ1Zi53cml0ZSgnc2lnbmFsJywgOSwgNiwgJ2FzY2lpJyk7XG5cbiAgYnVmWzE1XSA9IDA7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHNpZ25hbExlbiwgMTYpO1xuICBidWYud3JpdGUoc2lnbmFsLCAyMCwgc2lnbmFsTGVuLCAnYXNjaWknKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9SRVFVRVNUICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCBzaWduYWwpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuZW52ID0gZnVuY3Rpb24oY2hhbiwga2V5LCB2YWwsIHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGtleUxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGtleSk7XG4gIHZhciB2YWxMZW4gPSAoQnVmZmVyLmlzQnVmZmVyKHZhbCkgPyB2YWwubGVuZ3RoIDogQnVmZmVyLmJ5dGVMZW5ndGgodmFsKSk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgMyArIDEgKyA0ICsga2V5TGVuICsgNCArIHZhbExlbik7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAzLCA1KTtcbiAgYnVmLndyaXRlKCdlbnYnLCA5LCAzLCAnYXNjaWknKTtcblxuICBidWZbMTJdID0gKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkIHx8IHdhbnRSZXBseSA9PT0gdHJ1ZSA/IDEgOiAwKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwga2V5TGVuLCAxMyk7XG4gIGJ1Zi53cml0ZShrZXksIDE3LCBrZXlMZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCB2YWxMZW4sIDE3ICsga2V5TGVuKTtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKVxuICAgIHZhbC5jb3B5KGJ1ZiwgMTcgKyBrZXlMZW4gKyA0KTtcbiAgZWxzZVxuICAgIGJ1Zi53cml0ZSh2YWwsIDE3ICsga2V5TGVuICsgNCwgdmFsTGVuLCAndXRmOCcpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1JFUVVFU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIGVudiknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS54MTFGb3J3YXJkID0gZnVuY3Rpb24oY2hhbiwgY2ZnLCB3YW50UmVwbHkpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBwcm90b2xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNmZy5wcm90b2NvbCk7XG4gIHZhciBjb29raWVsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChjZmcuY29va2llKTtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyA3ICsgMSArIDEgKyA0ICsgcHJvdG9sZW4gKyA0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb29raWVsZW4gKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2hhbiwgMSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDcsIDUpO1xuICBidWYud3JpdGUoJ3gxMS1yZXEnLCA5LCA3LCAnYXNjaWknKTtcblxuICBidWZbMTZdID0gKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkIHx8IHdhbnRSZXBseSA9PT0gdHJ1ZSA/IDEgOiAwKTtcblxuICBidWZbMTddID0gKGNmZy5zaW5nbGUgPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHByb3RvbGVuLCAxOCk7XG4gIHZhciBicCA9IDIyO1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNmZy5wcm90b2NvbCkpXG4gICAgY2ZnLnByb3RvY29sLmNvcHkoYnVmLCBicCk7XG4gIGVsc2VcbiAgICBidWYud3JpdGUoY2ZnLnByb3RvY29sLCBicCwgcHJvdG9sZW4sICd1dGY4Jyk7XG4gIGJwICs9IHByb3RvbGVuO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjb29raWVsZW4sIGJwKTtcbiAgYnAgKz0gNDtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjZmcuY29va2llKSlcbiAgICBjZmcuY29va2llLmNvcHkoYnVmLCBicCk7XG4gIGVsc2VcbiAgICBidWYud3JpdGUoY2ZnLmNvb2tpZSwgYnAsIGNvb2tpZWxlbiwgJ2JpbmFyeScpO1xuICBicCArPSBjb29raWVsZW47XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIChjZmcuc2NyZWVuIHx8IDApLCBicCk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfUkVRVUVTVCAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgeDExLXJlcSknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5zdWJzeXN0ZW0gPSBmdW5jdGlvbihjaGFuLCBuYW1lLCB3YW50UmVwbHkpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBuYW1lTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobmFtZSk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyA0ICsgOSArIDEgKyA0ICsgbmFtZUxlbik7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCA5LCA1KTtcbiAgYnVmLndyaXRlKCdzdWJzeXN0ZW0nLCA5LCA5LCAnYXNjaWknKTtcblxuICBidWZbMThdID0gKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkIHx8IHdhbnRSZXBseSA9PT0gdHJ1ZSA/IDEgOiAwKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbmFtZUxlbiwgMTkpO1xuICBidWYud3JpdGUobmFtZSwgMjMsIG5hbWVMZW4sICdhc2NpaScpO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1JFUVVFU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIHN1YnN5c3RlbTogJ1xuICAgICAgICAgICAgICsgbmFtZVxuICAgICAgICAgICAgICsgJyknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5vcGVuc3NoX2FnZW50Rm9yd2FyZCA9IGZ1bmN0aW9uKGNoYW4sIHdhbnRSZXBseSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyAyNiArIDEpO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuQ0hBTk5FTF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjaGFuLCAxKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMjYsIDUpO1xuICBidWYud3JpdGUoJ2F1dGgtYWdlbnQtcmVxQG9wZW5zc2guY29tJywgOSwgMjYsICdhc2NpaScpO1xuXG4gIGJ1ZlszNV0gPSAod2FudFJlcGx5ID09PSB1bmRlZmluZWQgfHwgd2FudFJlcGx5ID09PSB0cnVlID8gMSA6IDApO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1JFUVVFU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIGF1dGgtYWdlbnQtcmVxQG9wZW5zc2guY29tKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcbi8vICdzc2gtdXNlcmF1dGgnIHNlcnZpY2Utc3BlY2lmaWNcblNTSDJTdHJlYW0ucHJvdG90eXBlLmF1dGhQYXNzd29yZCA9IGZ1bmN0aW9uKHVzZXJuYW1lLCBwYXNzd29yZCkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHVzZXJMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aCh1c2VybmFtZSk7XG4gIHZhciBwYXNzTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocGFzc3dvcmQpO1xuICB2YXIgcCA9IDA7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIHVzZXJMZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyAxNCAvLyBcInNzaC1jb25uZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyA4IC8vIFwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIHBhc3NMZW4pO1xuXG4gIGJ1ZltwXSA9IE1FU1NBR0UuVVNFUkFVVEhfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgdXNlckxlbiwgKytwKTtcbiAgYnVmLndyaXRlKHVzZXJuYW1lLCBwICs9IDQsIHVzZXJMZW4sICd1dGY4Jyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDE0LCBwICs9IHVzZXJMZW4pO1xuICBidWYud3JpdGUoJ3NzaC1jb25uZWN0aW9uJywgcCArPSA0LCAxNCwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDgsIHAgKz0gMTQpO1xuICBidWYud3JpdGUoJ3Bhc3N3b3JkJywgcCArPSA0LCA4LCAnYXNjaWknKTtcblxuICBidWZbcCArPSA4XSA9IDA7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBhc3NMZW4sICsrcCk7XG4gIGJ1Zi53cml0ZShwYXNzd29yZCwgcCArPSA0LCBwYXNzTGVuLCAndXRmOCcpO1xuXG4gIHRoaXMuX3N0YXRlLmF1dGhzUXVldWUucHVzaCgncGFzc3dvcmQnKTtcbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1JFUVVFU1QgKHBhc3N3b3JkKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLmF1dGhQSyA9IGZ1bmN0aW9uKHVzZXJuYW1lLCBwdWJLZXksIGNiU2lnbikge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3V0c3RhdGUgPSB0aGlzLl9zdGF0ZS5vdXRnb2luZztcbiAgdmFyIGtleVR5cGU7XG5cbiAgaWYgKHR5cGVvZiBwdWJLZXkuZ2V0UHVibGljU1NIID09PSAnZnVuY3Rpb24nKSB7XG4gICAga2V5VHlwZSA9IHB1YktleS50eXBlO1xuICAgIHB1YktleSA9IHB1YktleS5nZXRQdWJsaWNTU0goKTtcbiAgfSBlbHNlIHtcbiAgICBrZXlUeXBlID0gcHViS2V5LnRvU3RyaW5nKCdhc2NpaScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArIHJlYWRVSW50MzJCRShwdWJLZXksIDApKTtcbiAgfVxuXG4gIHZhciB1c2VyTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgodXNlcm5hbWUpO1xuICB2YXIgYWxnb0xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGtleVR5cGUpO1xuICB2YXIgcHViS2V5TGVuID0gcHViS2V5Lmxlbmd0aDtcbiAgdmFyIHNlc0xlbiA9IG91dHN0YXRlLnNlc3Npb25JZC5sZW5ndGg7XG4gIHZhciBwID0gMDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgoY2JTaWduID8gNCArIHNlc0xlbiA6IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgdXNlckxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDE0IC8vIFwic3NoLWNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDkgLy8gXCJwdWJsaWNrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIGFsZ29MZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBwdWJLZXlMZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgaWYgKGNiU2lnbikge1xuICAgIHdyaXRlVUludDMyQkUoYnVmLCBzZXNMZW4sIHApO1xuICAgIG91dHN0YXRlLnNlc3Npb25JZC5jb3B5KGJ1ZiwgcCArPSA0KTtcbiAgICBidWZbcCArPSBzZXNMZW5dID0gTUVTU0FHRS5VU0VSQVVUSF9SRVFVRVNUO1xuICB9IGVsc2Uge1xuICAgIGJ1ZltwXSA9IE1FU1NBR0UuVVNFUkFVVEhfUkVRVUVTVDtcbiAgfVxuXG4gIHdyaXRlVUludDMyQkUoYnVmLCB1c2VyTGVuLCArK3ApO1xuICBidWYud3JpdGUodXNlcm5hbWUsIHAgKz0gNCwgdXNlckxlbiwgJ3V0ZjgnKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTQsIHAgKz0gdXNlckxlbik7XG4gIGJ1Zi53cml0ZSgnc3NoLWNvbm5lY3Rpb24nLCBwICs9IDQsIDE0LCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgOSwgcCArPSAxNCk7XG4gIGJ1Zi53cml0ZSgncHVibGlja2V5JywgcCArPSA0LCA5LCAnYXNjaWknKTtcblxuICBidWZbcCArPSA5XSA9IChjYlNpZ24gPyAxIDogMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGFsZ29MZW4sICsrcCk7XG4gIGJ1Zi53cml0ZShrZXlUeXBlLCBwICs9IDQsIGFsZ29MZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwdWJLZXlMZW4sIHAgKz0gYWxnb0xlbik7XG4gIHB1YktleS5jb3B5KGJ1ZiwgcCArPSA0KTtcblxuICBpZiAoIWNiU2lnbikge1xuICAgIHRoaXMuX3N0YXRlLmF1dGhzUXVldWUucHVzaCgncHVibGlja2V5Jyk7XG4gICAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1JFUVVFU1QgKHB1YmxpY2tleSAtLSBjaGVjayknKTtcbiAgICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xuICB9XG5cbiAgY2JTaWduKGJ1ZiwgZnVuY3Rpb24oc2lnbmF0dXJlKSB7XG4gICAgc2lnbmF0dXJlID0gY29udmVydFNpZ25hdHVyZShzaWduYXR1cmUsIGtleVR5cGUpO1xuICAgIGlmIChzaWduYXR1cmUgPT09IGZhbHNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciB3aGlsZSBjb252ZXJ0aW5nIGhhbmRzaGFrZSBzaWduYXR1cmUnKTtcblxuICAgIHZhciBzaWdMZW4gPSBzaWduYXR1cmUubGVuZ3RoO1xuICAgIHZhciBzaWdidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgdXNlckxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgMTQgLy8gXCJzc2gtY29ubmVjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyA5IC8vIFwicHVibGlja2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgYWxnb0xlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgcHViS2V5TGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgLy8gNCArIGFsZ29MZW4gKyA0ICsgc2lnTGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBhbGdvTGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBzaWdMZW4pO1xuXG4gICAgcCA9IDA7XG5cbiAgICBzaWdidWZbcF0gPSBNRVNTQUdFLlVTRVJBVVRIX1JFUVVFU1Q7XG5cbiAgICB3cml0ZVVJbnQzMkJFKHNpZ2J1ZiwgdXNlckxlbiwgKytwKTtcbiAgICBzaWdidWYud3JpdGUodXNlcm5hbWUsIHAgKz0gNCwgdXNlckxlbiwgJ3V0ZjgnKTtcblxuICAgIHdyaXRlVUludDMyQkUoc2lnYnVmLCAxNCwgcCArPSB1c2VyTGVuKTtcbiAgICBzaWdidWYud3JpdGUoJ3NzaC1jb25uZWN0aW9uJywgcCArPSA0LCAxNCwgJ2FzY2lpJyk7XG5cbiAgICB3cml0ZVVJbnQzMkJFKHNpZ2J1ZiwgOSwgcCArPSAxNCk7XG4gICAgc2lnYnVmLndyaXRlKCdwdWJsaWNrZXknLCBwICs9IDQsIDksICdhc2NpaScpO1xuXG4gICAgc2lnYnVmW3AgKz0gOV0gPSAxO1xuXG4gICAgd3JpdGVVSW50MzJCRShzaWdidWYsIGFsZ29MZW4sICsrcCk7XG4gICAgc2lnYnVmLndyaXRlKGtleVR5cGUsIHAgKz0gNCwgYWxnb0xlbiwgJ2FzY2lpJyk7XG5cbiAgICB3cml0ZVVJbnQzMkJFKHNpZ2J1ZiwgcHViS2V5TGVuLCBwICs9IGFsZ29MZW4pO1xuICAgIHB1YktleS5jb3B5KHNpZ2J1ZiwgcCArPSA0KTtcbiAgICB3cml0ZVVJbnQzMkJFKHNpZ2J1ZiwgNCArIGFsZ29MZW4gKyA0ICsgc2lnTGVuLCBwICs9IHB1YktleUxlbik7XG4gICAgd3JpdGVVSW50MzJCRShzaWdidWYsIGFsZ29MZW4sIHAgKz0gNCk7XG4gICAgc2lnYnVmLndyaXRlKGtleVR5cGUsIHAgKz0gNCwgYWxnb0xlbiwgJ2FzY2lpJyk7XG4gICAgd3JpdGVVSW50MzJCRShzaWdidWYsIHNpZ0xlbiwgcCArPSBhbGdvTGVuKTtcbiAgICBzaWduYXR1cmUuY29weShzaWdidWYsIHAgKz0gNCk7XG5cbiAgICAvLyBTZXJ2ZXJzIHNob3VsZG4ndCBzZW5kIHBhY2tldCB0eXBlIDYwIGluIHJlc3BvbnNlIHRvIHNpZ25lZCBwdWJsaWNrZXlcbiAgICAvLyBhdHRlbXB0cywgYnV0IGlmIHRoZXkgZG8sIGludGVycHJldCBhcyB0eXBlIDYwLlxuICAgIHNlbGYuX3N0YXRlLmF1dGhzUXVldWUucHVzaCgncHVibGlja2V5Jyk7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1JFUVVFU1QgKHB1YmxpY2tleSknKTtcbiAgICByZXR1cm4gc2VuZChzZWxmLCBzaWdidWYpO1xuICB9KTtcbiAgcmV0dXJuIHRydWU7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuYXV0aEhvc3RiYXNlZCA9IGZ1bmN0aW9uKHVzZXJuYW1lLCBwdWJLZXksIGhvc3RuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJsb2NhbCwgY2JTaWduKSB7XG4gIC8vIFRPRE86IE1ha2UgRFJZIGJ5IHNoYXJpbmcgc2ltaWxhciBjb2RlIHdpdGggYXV0aFBLKClcblxuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3V0c3RhdGUgPSB0aGlzLl9zdGF0ZS5vdXRnb2luZztcbiAgdmFyIGtleVR5cGU7XG5cbiAgaWYgKHR5cGVvZiBwdWJLZXkuZ2V0UHVibGljU1NIID09PSAnZnVuY3Rpb24nKSB7XG4gICAga2V5VHlwZSA9IHB1YktleS50eXBlO1xuICAgIHB1YktleSA9IHB1YktleS5nZXRQdWJsaWNTU0goKTtcbiAgfSBlbHNlIHtcbiAgICBrZXlUeXBlID0gcHViS2V5LnRvU3RyaW5nKCdhc2NpaScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArIHJlYWRVSW50MzJCRShwdWJLZXksIDApKTtcbiAgfVxuXG4gIHZhciB1c2VyTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgodXNlcm5hbWUpO1xuICB2YXIgYWxnb0xlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGtleVR5cGUpO1xuICB2YXIgcHViS2V5TGVuID0gcHViS2V5Lmxlbmd0aDtcbiAgdmFyIHNlc0xlbiA9IG91dHN0YXRlLnNlc3Npb25JZC5sZW5ndGg7XG4gIHZhciBob3N0bmFtZUxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGhvc3RuYW1lKTtcbiAgdmFyIHVzZXJsb2NhbExlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHVzZXJsb2NhbCk7XG4gIHZhciBwID0gMDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgc2VzTGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgdXNlckxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDE0IC8vIFwic3NoLWNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDkgLy8gXCJob3N0YmFzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIGFsZ29MZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBwdWJLZXlMZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBob3N0bmFtZUxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIHVzZXJsb2NhbExlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgc2VzTGVuLCBwKTtcbiAgb3V0c3RhdGUuc2Vzc2lvbklkLmNvcHkoYnVmLCBwICs9IDQpO1xuXG4gIGJ1ZltwICs9IHNlc0xlbl0gPSBNRVNTQUdFLlVTRVJBVVRIX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHVzZXJMZW4sICsrcCk7XG4gIGJ1Zi53cml0ZSh1c2VybmFtZSwgcCArPSA0LCB1c2VyTGVuLCAndXRmOCcpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAxNCwgcCArPSB1c2VyTGVuKTtcbiAgYnVmLndyaXRlKCdzc2gtY29ubmVjdGlvbicsIHAgKz0gNCwgMTQsICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCA5LCBwICs9IDE0KTtcbiAgYnVmLndyaXRlKCdob3N0YmFzZWQnLCBwICs9IDQsIDksICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBhbGdvTGVuLCBwICs9IDkpO1xuICBidWYud3JpdGUoa2V5VHlwZSwgcCArPSA0LCBhbGdvTGVuLCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcHViS2V5TGVuLCBwICs9IGFsZ29MZW4pO1xuICBwdWJLZXkuY29weShidWYsIHAgKz0gNCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGhvc3RuYW1lTGVuLCBwICs9IHB1YktleUxlbik7XG4gIGJ1Zi53cml0ZShob3N0bmFtZSwgcCArPSA0LCBob3N0bmFtZUxlbiwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHVzZXJsb2NhbExlbiwgcCArPSBob3N0bmFtZUxlbik7XG4gIGJ1Zi53cml0ZSh1c2VybG9jYWwsIHAgKz0gNCwgdXNlcmxvY2FsTGVuLCAndXRmOCcpO1xuXG4gIGNiU2lnbihidWYsIGZ1bmN0aW9uKHNpZ25hdHVyZSkge1xuICAgIHNpZ25hdHVyZSA9IGNvbnZlcnRTaWduYXR1cmUoc2lnbmF0dXJlLCBrZXlUeXBlKTtcbiAgICBpZiAoc2lnbmF0dXJlID09PSBmYWxzZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3Igd2hpbGUgY29udmVydGluZyBoYW5kc2hha2Ugc2lnbmF0dXJlJyk7XG5cbiAgICB2YXIgc2lnTGVuID0gc2lnbmF0dXJlLmxlbmd0aDtcbiAgICB2YXIgc2lnYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKChidWYubGVuZ3RoIC0gc2VzTGVuKSArIHNpZ0xlbik7XG5cbiAgICBidWYuY29weShzaWdidWYsIDAsIDQgKyBzZXNMZW4pO1xuICAgIHdyaXRlVUludDMyQkUoc2lnYnVmLCBzaWdMZW4sIHNpZ2J1Zi5sZW5ndGggLSBzaWdMZW4gLSA0KTtcbiAgICBzaWduYXR1cmUuY29weShzaWdidWYsIHNpZ2J1Zi5sZW5ndGggLSBzaWdMZW4pO1xuXG4gICAgc2VsZi5fc3RhdGUuYXV0aHNRdWV1ZS5wdXNoKCdob3N0YmFzZWQnKTtcbiAgICBzZWxmLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgVVNFUkFVVEhfUkVRVUVTVCAoaG9zdGJhc2VkKScpO1xuICAgIHJldHVybiBzZW5kKHNlbGYsIHNpZ2J1Zik7XG4gIH0pO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5hdXRoS2V5Ym9hcmQgPSBmdW5jdGlvbih1c2VybmFtZSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHVzZXJMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aCh1c2VybmFtZSk7XG4gIHZhciBwID0gMDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgdXNlckxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDE0IC8vIFwic3NoLWNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDIwIC8vIFwia2V5Ym9hcmQtaW50ZXJhY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCAvLyBubyBsYW5ndWFnZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgLy8gbm8gc3VibWV0aG9kc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICBidWZbcF0gPSBNRVNTQUdFLlVTRVJBVVRIX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHVzZXJMZW4sICsrcCk7XG4gIGJ1Zi53cml0ZSh1c2VybmFtZSwgcCArPSA0LCB1c2VyTGVuLCAndXRmOCcpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAxNCwgcCArPSB1c2VyTGVuKTtcbiAgYnVmLndyaXRlKCdzc2gtY29ubmVjdGlvbicsIHAgKz0gNCwgMTQsICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAyMCwgcCArPSAxNCk7XG4gIGJ1Zi53cml0ZSgna2V5Ym9hcmQtaW50ZXJhY3RpdmUnLCBwICs9IDQsIDIwLCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMCwgcCArPSAyMCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDAsIHAgKz0gNCk7XG5cbiAgdGhpcy5fc3RhdGUuYXV0aHNRdWV1ZS5wdXNoKCdrZXlib2FyZC1pbnRlcmFjdGl2ZScpO1xuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgVVNFUkFVVEhfUkVRVUVTVCAoa2V5Ym9hcmQtaW50ZXJhY3RpdmUpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuYXV0aE5vbmUgPSBmdW5jdGlvbih1c2VybmFtZSkge1xuICBpZiAodGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQtb25seSBtZXRob2QgY2FsbGVkIGluIHNlcnZlciBtb2RlJyk7XG5cbiAgdmFyIHVzZXJMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aCh1c2VybmFtZSk7XG4gIHZhciBwID0gMDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgdXNlckxlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDE0IC8vIFwic3NoLWNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIDQgLy8gXCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgYnVmW3BdID0gTUVTU0FHRS5VU0VSQVVUSF9SRVFVRVNUO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCB1c2VyTGVuLCArK3ApO1xuICBidWYud3JpdGUodXNlcm5hbWUsIHAgKz0gNCwgdXNlckxlbiwgJ3V0ZjgnKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTQsIHAgKz0gdXNlckxlbik7XG4gIGJ1Zi53cml0ZSgnc3NoLWNvbm5lY3Rpb24nLCBwICs9IDQsIDE0LCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgNCwgcCArPSAxNCk7XG4gIGJ1Zi53cml0ZSgnbm9uZScsIHAgKz0gNCwgNCwgJ2FzY2lpJyk7XG5cbiAgdGhpcy5fc3RhdGUuYXV0aHNRdWV1ZS5wdXNoKCdub25lJyk7XG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBVU0VSQVVUSF9SRVFVRVNUIChub25lKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLmF1dGhJbmZvUmVzID0gZnVuY3Rpb24ocmVzcG9uc2VzKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICB2YXIgcmVzcG9uc2VzTGVuID0gMDtcbiAgdmFyIHAgPSAwO1xuICB2YXIgcmVzTGVuO1xuICB2YXIgbGVuO1xuICB2YXIgaTtcblxuICBpZiAocmVzcG9uc2VzKSB7XG4gICAgZm9yIChpID0gMCwgbGVuID0gcmVzcG9uc2VzLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICAgICAgcmVzcG9uc2VzTGVuICs9IDQgKyBCdWZmZXIuYnl0ZUxlbmd0aChyZXNwb25zZXNbaV0pO1xuICB9XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyByZXNwb25zZXNMZW4pO1xuXG4gIGJ1ZltwKytdID0gTUVTU0FHRS5VU0VSQVVUSF9JTkZPX1JFU1BPTlNFO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCByZXNwb25zZXMgPyByZXNwb25zZXMubGVuZ3RoIDogMCwgcCk7XG4gIGlmIChyZXNwb25zZXMpIHtcbiAgICBwICs9IDQ7XG4gICAgZm9yIChpID0gMCwgbGVuID0gcmVzcG9uc2VzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICByZXNMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChyZXNwb25zZXNbaV0pO1xuICAgICAgd3JpdGVVSW50MzJCRShidWYsIHJlc0xlbiwgcCk7XG4gICAgICBwICs9IDQ7XG4gICAgICBpZiAocmVzTGVuKSB7XG4gICAgICAgIGJ1Zi53cml0ZShyZXNwb25zZXNbaV0sIHAsIHJlc0xlbiwgJ3V0ZjgnKTtcbiAgICAgICAgcCArPSByZXNMZW47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX0lORk9fUkVTUE9OU0UnKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5cbi8vIFNlcnZlci1zcGVjaWZpYyBtZXRob2RzXG4vLyBHbG9iYWxcblNTSDJTdHJlYW0ucHJvdG90eXBlLnNlcnZpY2VBY2NlcHQgPSBmdW5jdGlvbihzdmNOYW1lKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgdmFyIHN2Y05hbWVMZW4gPSBzdmNOYW1lLmxlbmd0aDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIHN2Y05hbWVMZW4pO1xuXG4gIGJ1ZlswXSA9IE1FU1NBR0UuU0VSVklDRV9BQ0NFUFQ7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHN2Y05hbWVMZW4sIDEpO1xuICBidWYud3JpdGUoc3ZjTmFtZSwgNSwgc3ZjTmFtZUxlbiwgJ2FzY2lpJyk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFNFUlZJQ0VfQUNDRVBUICgnICsgc3ZjTmFtZSArICcpJyk7XG4gIHNlbmQodGhpcywgYnVmKTtcblxuICBpZiAodGhpcy5zZXJ2ZXIgJiYgdGhpcy5iYW5uZXIgJiYgc3ZjTmFtZSA9PT0gJ3NzaC11c2VyYXV0aCcpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfQkFOTkVSXG4gICAgICBzdHJpbmcgICAgbWVzc2FnZSBpbiBJU08tMTA2NDYgVVRGLTggZW5jb2RpbmdcbiAgICAgIHN0cmluZyAgICBsYW5ndWFnZSB0YWdcbiAgICAqL1xuICAgIHZhciBiYW5uZXJMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aCh0aGlzLmJhbm5lcik7XG4gICAgdmFyIHBhY2tldExlbiA9IDEgKyA0ICsgYmFubmVyTGVuICsgNDtcbiAgICB2YXIgcGFja2V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBhY2tldExlbik7XG4gICAgcGFja2V0WzBdID0gTUVTU0FHRS5VU0VSQVVUSF9CQU5ORVI7XG4gICAgd3JpdGVVSW50MzJCRShwYWNrZXQsIGJhbm5lckxlbiwgMSk7XG4gICAgcGFja2V0LndyaXRlKHRoaXMuYmFubmVyLCA1LCBiYW5uZXJMZW4sICd1dGY4Jyk7XG4gICAgcGFja2V0LmZpbGwoMCwgcGFja2V0TGVuIC0gNCk7IC8vIEVtcHR5IGxhbmd1YWdlIHRhZ1xuICAgIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBVU0VSQVVUSF9CQU5ORVInKTtcbiAgICBzZW5kKHRoaXMsIHBhY2tldCk7XG4gICAgdGhpcy5iYW5uZXIgPSB1bmRlZmluZWQ7IC8vIFByZXZlbnQgYmFubmVyIGZyb20gYmVpbmcgZGlzcGxheWVkIGFnYWluXG4gIH1cbn07XG4vLyAnc3NoLWNvbm5lY3Rpb24nIHNlcnZpY2Utc3BlY2lmaWNcblNTSDJTdHJlYW0ucHJvdG90eXBlLmZvcndhcmRlZFRjcGlwID0gZnVuY3Rpb24oY2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcpIHtcbiAgaWYgKCF0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlci1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gY2xpZW50IG1vZGUnKTtcblxuICB2YXIgYm91bmRBZGRyTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2ZnLmJvdW5kQWRkcik7XG4gIHZhciByZW1vdGVBZGRyTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2ZnLnJlbW90ZUFkZHIpO1xuICB2YXIgcCA9IDM2ICsgYm91bmRBZGRyTGVuO1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyA0ICsgMTUgKyA0ICsgNCArIDQgKyA0ICsgYm91bmRBZGRyTGVuICsgNCArIDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJlbW90ZUFkZHJMZW4gKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfT1BFTjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMTUsIDEpO1xuICBidWYud3JpdGUoJ2ZvcndhcmRlZC10Y3BpcCcsIDUsIDE1LCAnYXNjaWknKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2hhbiwgMjApO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBpbml0V2luZG93LCAyNCk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG1heFBhY2tldCwgMjgpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBib3VuZEFkZHJMZW4sIDMyKTtcbiAgYnVmLndyaXRlKGNmZy5ib3VuZEFkZHIsIDM2LCBib3VuZEFkZHJMZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjZmcuYm91bmRQb3J0LCBwKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcmVtb3RlQWRkckxlbiwgcCArPSA0KTtcbiAgYnVmLndyaXRlKGNmZy5yZW1vdGVBZGRyLCBwICs9IDQsIHJlbW90ZUFkZHJMZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjZmcucmVtb3RlUG9ydCwgcCArPSByZW1vdGVBZGRyTGVuKTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9PUEVOICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCBmb3J3YXJkZWQtdGNwaXApJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUueDExID0gZnVuY3Rpb24oY2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0LCBjZmcpIHtcbiAgaWYgKCF0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlci1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gY2xpZW50IG1vZGUnKTtcblxuICB2YXIgYWRkckxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNmZy5vcmlnaW5BZGRyKTtcbiAgdmFyIHAgPSAyNCArIGFkZHJMZW47XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyAzICsgNCArIDQgKyA0ICsgNCArIGFkZHJMZW4gKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfT1BFTjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMywgMSk7XG4gIGJ1Zi53cml0ZSgneDExJywgNSwgMywgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDgpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBpbml0V2luZG93LCAxMik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG1heFBhY2tldCwgMTYpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBhZGRyTGVuLCAyMCk7XG4gIGJ1Zi53cml0ZShjZmcub3JpZ2luQWRkciwgMjQsIGFkZHJMZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBjZmcub3JpZ2luUG9ydCwgcCk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfT1BFTiAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgeDExKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLm9wZW5zc2hfYXV0aEFnZW50ID0gZnVuY3Rpb24oY2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0KSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDIyICsgNCArIDQgKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfT1BFTjtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMjIsIDEpO1xuICBidWYud3JpdGUoJ2F1dGgtYWdlbnRAb3BlbnNzaC5jb20nLCA1LCAyMiwgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDI3KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaW5pdFdpbmRvdywgMzEpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBtYXhQYWNrZXQsIDM1KTtcblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgQ0hBTk5FTF9PUEVOICgnXG4gICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgKyAnLCBhdXRoLWFnZW50QG9wZW5zc2guY29tKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLm9wZW5zc2hfZm9yd2FyZGVkU3RyZWFtTG9jYWwgPSBmdW5jdGlvbihjaGFuLCBpbml0V2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFBhY2tldCwgY2ZnKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgdmFyIHBhdGhsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChjZmcuc29ja2V0UGF0aCk7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyAzMyArIDQgKyA0ICsgNCArIDQgKyBwYXRobGVuICsgNCk7XG5cbiAgYnVmWzBdID0gTUVTU0FHRS5DSEFOTkVMX09QRU47XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDMzLCAxKTtcbiAgYnVmLndyaXRlKCdmb3J3YXJkZWQtc3RyZWFtbG9jYWxAb3BlbnNzaC5jb20nLCA1LCAzMywgJ2FzY2lpJyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGNoYW4sIDM4KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaW5pdFdpbmRvdywgNDIpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBtYXhQYWNrZXQsIDQ2KTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgcGF0aGxlbiwgNTApO1xuICBidWYud3JpdGUoY2ZnLnNvY2tldFBhdGgsIDU0LCBwYXRobGVuLCAndXRmOCcpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAwLCA1NCArIHBhdGhsZW4pO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX09QRU4gKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIGZvcndhcmRlZC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbSknKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5leGl0U3RhdHVzID0gZnVuY3Rpb24oY2hhbiwgc3RhdHVzKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgLy8gRG9lcyBub3QgY29uc3VtZSB3aW5kb3cgc3BhY2VcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyAxMSArIDEgKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2hhbiwgMSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDExLCA1KTtcbiAgYnVmLndyaXRlKCdleGl0LXN0YXR1cycsIDksIDExLCAnYXNjaWknKTtcblxuICBidWZbMjBdID0gMDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1Ziwgc3RhdHVzLCAyMSk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIENIQU5ORUxfUkVRVUVTVCAoJ1xuICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICsgJywgZXhpdC1zdGF0dXMpJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuZXhpdFNpZ25hbCA9IGZ1bmN0aW9uKGNoYW4sIG5hbWUsIGNvcmVEdW1wZWQsIG1zZykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIC8vIERvZXMgbm90IGNvbnN1bWUgd2luZG93IHNwYWNlXG4gIHZhciBuYW1lTGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgobmFtZSk7XG4gIHZhciBtc2dMZW4gPSAobXNnID8gQnVmZmVyLmJ5dGVMZW5ndGgobXNnKSA6IDApO1xuICB2YXIgcCA9IDI1ICsgbmFtZUxlbjtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIDQgKyAxMSArIDEgKyA0ICsgbmFtZUxlbiArIDEgKyA0ICsgbXNnTGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0KTtcblxuICBidWZbMF0gPSBNRVNTQUdFLkNIQU5ORUxfUkVRVUVTVDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgY2hhbiwgMSk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDExLCA1KTtcbiAgYnVmLndyaXRlKCdleGl0LXNpZ25hbCcsIDksIDExLCAnYXNjaWknKTtcblxuICBidWZbMjBdID0gMDtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbmFtZUxlbiwgMjEpO1xuICBidWYud3JpdGUobmFtZSwgMjUsIG5hbWVMZW4sICd1dGY4Jyk7XG5cbiAgYnVmW3ArK10gPSAoY29yZUR1bXBlZCA/IDEgOiAwKTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbXNnTGVuLCBwKTtcbiAgcCArPSA0O1xuICBpZiAobXNnTGVuKSB7XG4gICAgYnVmLndyaXRlKG1zZywgcCwgbXNnTGVuLCAndXRmOCcpO1xuICAgIHAgKz0gbXNnTGVuO1xuICB9XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIDAsIHApO1xuXG4gIHRoaXMuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBDSEFOTkVMX1JFUVVFU1QgKCdcbiAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICArICcsIGV4aXQtc2lnbmFsKScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcbi8vICdzc2gtdXNlcmF1dGgnIHNlcnZpY2Utc3BlY2lmaWNcblNTSDJTdHJlYW0ucHJvdG90eXBlLmF1dGhGYWlsdXJlID0gZnVuY3Rpb24oYXV0aE1ldGhvZHMsIGlzUGFydGlhbCkge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIHZhciBhdXRoc1F1ZXVlID0gdGhpcy5fc3RhdGUuYXV0aHNRdWV1ZTtcbiAgaWYgKCFhdXRoc1F1ZXVlLmxlbmd0aClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGF1dGggaW4gcHJvZ3Jlc3MnKTtcblxuICB2YXIgbWV0aG9kcztcblxuICBpZiAodHlwZW9mIGF1dGhNZXRob2RzID09PSAnYm9vbGVhbicpIHtcbiAgICBpc1BhcnRpYWwgPSBhdXRoTWV0aG9kcztcbiAgICBhdXRoTWV0aG9kcyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChhdXRoTWV0aG9kcykge1xuICAgIG1ldGhvZHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXV0aE1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIGlmIChhdXRoTWV0aG9kc1tpXS50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgbWV0aG9kcy5wdXNoKGF1dGhNZXRob2RzW2ldKTtcbiAgICB9XG4gICAgbWV0aG9kcyA9IG1ldGhvZHMuam9pbignLCcpO1xuICB9IGVsc2VcbiAgICBtZXRob2RzID0gJyc7XG5cbiAgdmFyIG1ldGhvZHNMZW4gPSBtZXRob2RzLmxlbmd0aDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIG1ldGhvZHNMZW4gKyAxKTtcblxuICBidWZbMF0gPSBNRVNTQUdFLlVTRVJBVVRIX0ZBSUxVUkU7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG1ldGhvZHNMZW4sIDEpO1xuICBidWYud3JpdGUobWV0aG9kcywgNSwgbWV0aG9kc0xlbiwgJ2FzY2lpJyk7XG5cbiAgYnVmWzUgKyBtZXRob2RzTGVuXSA9IChpc1BhcnRpYWwgPT09IHRydWUgPyAxIDogMCk7XG5cbiAgdGhpcy5fc3RhdGUuYXV0aHNRdWV1ZS5zaGlmdCgpO1xuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgVVNFUkFVVEhfRkFJTFVSRScpO1xuICByZXR1cm4gc2VuZCh0aGlzLCBidWYpO1xufTtcblNTSDJTdHJlYW0ucHJvdG90eXBlLmF1dGhTdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5zZXJ2ZXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXItb25seSBtZXRob2QgY2FsbGVkIGluIGNsaWVudCBtb2RlJyk7XG5cbiAgdmFyIGF1dGhzUXVldWUgPSB0aGlzLl9zdGF0ZS5hdXRoc1F1ZXVlO1xuICBpZiAoIWF1dGhzUXVldWUubGVuZ3RoKVxuICAgIHRocm93IG5ldyBFcnJvcignTm8gYXV0aCBpbiBwcm9ncmVzcycpO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuICB2YXIgb3V0c3RhdGUgPSBzdGF0ZS5vdXRnb2luZztcbiAgdmFyIGluc3RhdGUgPSBzdGF0ZS5pbmNvbWluZztcblxuICBzdGF0ZS5hdXRoc1F1ZXVlLnNoaWZ0KCk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1NVQ0NFU1MnKTtcbiAgdmFyIHJldCA9IHNlbmQodGhpcywgVVNFUkFVVEhfU1VDQ0VTU19QQUNLRVQpO1xuXG4gIGlmIChvdXRzdGF0ZS5jb21wcmVzcy50eXBlID09PSAnemxpYkBvcGVuc3NoLmNvbScpIHtcbiAgICBvdXRzdGF0ZS5jb21wcmVzcy5pbnN0YW5jZSA9IHpsaWIuY3JlYXRlRGVmbGF0ZShaTElCX09QVFMpO1xuICAgIG91dHN0YXRlLmNvbXByZXNzLnF1ZXVlID0gW107XG4gIH1cbiAgaWYgKGluc3RhdGUuZGVjb21wcmVzcy50eXBlID09PSAnemxpYkBvcGVuc3NoLmNvbScpXG4gICAgaW5zdGF0ZS5kZWNvbXByZXNzLmluc3RhbmNlID0gemxpYi5jcmVhdGVJbmZsYXRlKFpMSUJfT1BUUyk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5hdXRoUEtPSyA9IGZ1bmN0aW9uKGtleUFsZ28sIGtleSkge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIHZhciBhdXRoc1F1ZXVlID0gdGhpcy5fc3RhdGUuYXV0aHNRdWV1ZTtcbiAgaWYgKCFhdXRoc1F1ZXVlLmxlbmd0aCB8fCBhdXRoc1F1ZXVlWzBdICE9PSAncHVibGlja2V5JylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicHVibGlja2V5XCIgYXV0aCBub3QgaW4gcHJvZ3Jlc3MnKTtcblxuICB2YXIga2V5QWxnb0xlbiA9IGtleUFsZ28ubGVuZ3RoO1xuICB2YXIga2V5TGVuID0ga2V5Lmxlbmd0aDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIGtleUFsZ29MZW4gKyA0ICsga2V5TGVuKTtcblxuICBidWZbMF0gPSBNRVNTQUdFLlVTRVJBVVRIX1BLX09LO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBrZXlBbGdvTGVuLCAxKTtcbiAgYnVmLndyaXRlKGtleUFsZ28sIDUsIGtleUFsZ29MZW4sICdhc2NpaScpO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBrZXlMZW4sIDUgKyBrZXlBbGdvTGVuKTtcbiAga2V5LmNvcHkoYnVmLCA1ICsga2V5QWxnb0xlbiArIDQpO1xuXG4gIHRoaXMuX3N0YXRlLmF1dGhzUXVldWUuc2hpZnQoKTtcbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1BLX09LJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuU1NIMlN0cmVhbS5wcm90b3R5cGUuYXV0aFBhc3N3ZENoZyA9IGZ1bmN0aW9uKHByb21wdCwgbGFuZykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIHZhciBwcm9tcHRMZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChwcm9tcHQpO1xuICB2YXIgbGFuZ0xlbiA9IGxhbmcgPyBsYW5nLmxlbmd0aCA6IDA7XG4gIHZhciBwID0gMDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIHByb21wdExlbiArIDQgKyBsYW5nTGVuKTtcblxuICBidWZbcF0gPSBNRVNTQUdFLlVTRVJBVVRIX1BBU1NXRF9DSEFOR0VSRVE7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHByb21wdExlbiwgKytwKTtcbiAgYnVmLndyaXRlKHByb21wdCwgcCArPSA0LCBwcm9tcHRMZW4sICd1dGY4Jyk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGxhbmdMZW4sIHAgKz0gcHJvbXB0TGVuKTtcbiAgaWYgKGxhbmdMZW4pXG4gICAgYnVmLndyaXRlKGxhbmcsIHAgKz0gNCwgbGFuZ0xlbiwgJ2FzY2lpJyk7XG5cbiAgdGhpcy5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIFVTRVJBVVRIX1BBU1NXRF9DSEFOR0VSRVEnKTtcbiAgcmV0dXJuIHNlbmQodGhpcywgYnVmKTtcbn07XG5TU0gyU3RyZWFtLnByb3RvdHlwZS5hdXRoSW5mb1JlcSA9IGZ1bmN0aW9uKG5hbWUsIGluc3RydWN0aW9ucywgcHJvbXB0cykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIHZhciBwcm9tcHRzTGVuID0gMDtcbiAgdmFyIG5hbWVMZW4gPSBuYW1lID8gQnVmZmVyLmJ5dGVMZW5ndGgobmFtZSkgOiAwO1xuICB2YXIgaW5zdHJMZW4gPSBpbnN0cnVjdGlvbnMgPyBCdWZmZXIuYnl0ZUxlbmd0aChpbnN0cnVjdGlvbnMpIDogMDtcbiAgdmFyIHAgPSAwO1xuICB2YXIgcHJvbXB0TGVuO1xuICB2YXIgcHJvbXB0O1xuICB2YXIgbGVuO1xuICB2YXIgaTtcblxuICBmb3IgKGkgPSAwLCBsZW4gPSBwcm9tcHRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICAgIHByb21wdHNMZW4gKz0gNCArIEJ1ZmZlci5ieXRlTGVuZ3RoKHByb21wdHNbaV0ucHJvbXB0KSArIDE7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIDQgKyBuYW1lTGVuICsgNCArIGluc3RyTGVuICsgNCArIDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHByb21wdHNMZW4pO1xuXG4gIGJ1ZltwKytdID0gTUVTU0FHRS5VU0VSQVVUSF9JTkZPX1JFUVVFU1Q7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG5hbWVMZW4sIHApO1xuICBwICs9IDQ7XG4gIGlmIChuYW1lKSB7XG4gICAgYnVmLndyaXRlKG5hbWUsIHAsIG5hbWVMZW4sICd1dGY4Jyk7XG4gICAgcCArPSBuYW1lTGVuO1xuICB9XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIGluc3RyTGVuLCBwKTtcbiAgcCArPSA0O1xuICBpZiAoaW5zdHJ1Y3Rpb25zKSB7XG4gICAgYnVmLndyaXRlKGluc3RydWN0aW9ucywgcCwgaW5zdHJMZW4sICd1dGY4Jyk7XG4gICAgcCArPSBpbnN0ckxlbjtcbiAgfVxuXG4gIHdyaXRlVUludDMyQkUoYnVmLCAwLCBwKTtcbiAgcCArPSA0O1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBwcm9tcHRzLmxlbmd0aCwgcCk7XG4gIHAgKz0gNDtcbiAgZm9yIChpID0gMCwgbGVuID0gcHJvbXB0cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHByb21wdCA9IHByb21wdHNbaV07XG4gICAgcHJvbXB0TGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgocHJvbXB0LnByb21wdCk7XG4gICAgd3JpdGVVSW50MzJCRShidWYsIHByb21wdExlbiwgcCk7XG4gICAgcCArPSA0O1xuICAgIGlmIChwcm9tcHRMZW4pIHtcbiAgICAgIGJ1Zi53cml0ZShwcm9tcHQucHJvbXB0LCBwLCBwcm9tcHRMZW4sICd1dGY4Jyk7XG4gICAgICBwICs9IHByb21wdExlbjtcbiAgICB9XG4gICAgYnVmW3ArK10gPSAocHJvbXB0LmVjaG8gPyAxIDogMCk7XG4gIH1cblxuICB0aGlzLmRlYnVnKCdERUJVRzogT3V0Z29pbmc6IFdyaXRpbmcgVVNFUkFVVEhfSU5GT19SRVFVRVNUJyk7XG4gIHJldHVybiBzZW5kKHRoaXMsIGJ1Zik7XG59O1xuXG4vLyBTaGFyZWQgaW5jb21pbmcvcGFyc2VyIGZ1bmN0aW9uc1xuZnVuY3Rpb24gb25ESVNDT05ORUNUKHNlbGYsIHJlYXNvbiwgY29kZSwgZGVzYywgbGFuZykgeyAvLyBDbGllbnQvU2VydmVyXG4gIGlmIChjb2RlICE9PSBESVNDT05ORUNUX1JFQVNPTi5CWV9BUFBMSUNBVElPTikge1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoZGVzYyB8fCByZWFzb24pO1xuICAgIGVyci5jb2RlID0gY29kZTtcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuICBzZWxmLnJlc2V0KCk7XG59XG5cbmZ1bmN0aW9uIG9uS0VYSU5JVChzZWxmLCBpbml0LCBmaXJzdEZvbGxvd3MpIHsgLy8gQ2xpZW50L1NlcnZlclxuICB2YXIgc3RhdGUgPSBzZWxmLl9zdGF0ZTtcbiAgdmFyIG91dHN0YXRlID0gc3RhdGUub3V0Z29pbmc7XG5cbiAgaWYgKG91dHN0YXRlLnN0YXR1cyA9PT0gT1VUX1JFQURZKSB7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IFJlY2VpdmVkIHJlLWtleSByZXF1ZXN0Jyk7XG4gICAgb3V0c3RhdGUuc3RhdHVzID0gT1VUX1JFS0VZSU5HO1xuICAgIG91dHN0YXRlLmtleGluaXQgPSB1bmRlZmluZWQ7XG4gICAgS0VYSU5JVChzZWxmLCBjaGVjayk7XG4gIH0gZWxzZSB7XG4gICAgY2hlY2soKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrKCkge1xuICAgIGlmIChjaGVja19LRVhJTklUKHNlbGYsIGluaXQsIGZpcnN0Rm9sbG93cykgPT09IHRydWUpIHtcbiAgICAgIGlmICghc2VsZi5zZXJ2ZXIpIHtcbiAgICAgICAgaWYgKHN0YXRlLmtleC50eXBlID09PSAnZ3JvdXBleCcpXG4gICAgICAgICAgS0VYREhfR0VYX1JFUShzZWxmKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIEtFWERIX0lOSVQoc2VsZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5pbmNvbWluZy5leHBlY3RlZFBhY2tldCA9IHN0YXRlLmtleC5wa3RJbml0O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja19LRVhJTklUKHNlbGYsIGluaXQsIGZpcnN0Rm9sbG93cykge1xuICB2YXIgc3RhdGUgPSBzZWxmLl9zdGF0ZTtcbiAgdmFyIGluc3RhdGUgPSBzdGF0ZS5pbmNvbWluZztcbiAgdmFyIG91dHN0YXRlID0gc3RhdGUub3V0Z29pbmc7XG4gIHZhciBkZWJ1ZyA9IHNlbGYuZGVidWc7XG4gIHZhciBzZXJ2ZXJMaXN0O1xuICB2YXIgY2xpZW50TGlzdDtcbiAgdmFyIHZhbDtcbiAgdmFyIGxlbjtcbiAgdmFyIGk7XG5cbiAgZGVidWcoJ0RFQlVHOiBDb21wYXJpbmcgS0VYSU5JVHMgLi4uJyk7XG5cbiAgdmFyIGFsZ29zID0gc2VsZi5jb25maWcuYWxnb3JpdGhtcztcblxuICB2YXIga2V4TGlzdCA9IGFsZ29zLmtleDtcbiAgaWYgKHNlbGYucmVtb3RlQnVncyAmIEJVR1MuQkFEX0RIR0VYKSB7XG4gICAgdmFyIGNvcGllZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGogPSBrZXhMaXN0Lmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgICBpZiAoa2V4TGlzdFtqXS5pbmRleE9mKCdncm91cC1leGNoYW5nZScpICE9PSAtMSkge1xuICAgICAgICBpZiAoIWNvcGllZCkge1xuICAgICAgICAgIGtleExpc3QgPSBrZXhMaXN0LnNsaWNlKCk7XG4gICAgICAgICAgY29waWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBrZXhMaXN0LnNwbGljZShqLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZWJ1ZygnREVCVUc6IChsb2NhbCkgS0VYIGFsZ29yaXRobXM6ICcgKyBrZXhMaXN0KTtcbiAgZGVidWcoJ0RFQlVHOiAocmVtb3RlKSBLRVggYWxnb3JpdGhtczogJyArIGluaXQuYWxnb3JpdGhtcy5rZXgpO1xuICBpZiAoc2VsZi5zZXJ2ZXIpIHtcbiAgICBzZXJ2ZXJMaXN0ID0ga2V4TGlzdDtcbiAgICBjbGllbnRMaXN0ID0gaW5pdC5hbGdvcml0aG1zLmtleDtcbiAgfSBlbHNlIHtcbiAgICBzZXJ2ZXJMaXN0ID0gaW5pdC5hbGdvcml0aG1zLmtleDtcbiAgICBjbGllbnRMaXN0ID0ga2V4TGlzdDtcbiAgfVxuICAvLyBDaGVjayBmb3IgYWdyZWVhYmxlIGtleSBleGNoYW5nZSBhbGdvcml0aG1cbiAgZm9yIChpID0gMCwgbGVuID0gY2xpZW50TGlzdC5sZW5ndGg7XG4gICAgICAgaSA8IGxlbiAmJiBzZXJ2ZXJMaXN0LmluZGV4T2YoY2xpZW50TGlzdFtpXSkgPT09IC0xO1xuICAgICAgICsraSk7XG4gIGlmIChpID09PSBsZW4pIHtcbiAgICAvLyBObyBzdWl0YWJsZSBtYXRjaCBmb3VuZCFcbiAgICBkZWJ1ZygnREVCVUc6IE5vIG1hdGNoaW5nIGtleSBleGNoYW5nZSBhbGdvcml0aG0nKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBubyBtYXRjaGluZyBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtJyk7XG4gICAgZXJyLmxldmVsID0gJ2hhbmRzaGFrZSc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLktFWV9FWENIQU5HRV9GQUlMRUQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXhfYWxnb3JpdGhtID0gY2xpZW50TGlzdFtpXTtcbiAgZGVidWcoJ0RFQlVHOiBLRVggYWxnb3JpdGhtOiAnICsga2V4X2FsZ29yaXRobSk7XG4gIGlmIChmaXJzdEZvbGxvd3NcbiAgICAgICYmICghaW5pdC5hbGdvcml0aG1zLmtleC5sZW5ndGhcbiAgICAgICAgICB8fCBrZXhfYWxnb3JpdGhtICE9PSBpbml0LmFsZ29yaXRobXMua2V4WzBdKSkge1xuICAgIC8vIElnbm9yZSBuZXh0IGluY29taW5nIHBhY2tldCwgaXQgd2FzIGEgd3JvbmcgZmlyc3QgZ3Vlc3MgYXQgS0VYIGFsZ29yaXRobVxuICAgIGluc3RhdGUuaWdub3JlTmV4dCA9IHRydWU7XG4gIH1cblxuICBkZWJ1ZygnREVCVUc6IChsb2NhbCkgSG9zdCBrZXkgZm9ybWF0czogJyArIGFsZ29zLnNlcnZlckhvc3RLZXkpO1xuICBkZWJ1ZygnREVCVUc6IChyZW1vdGUpIEhvc3Qga2V5IGZvcm1hdHM6ICcgKyBpbml0LmFsZ29yaXRobXMuc3J2SG9zdEtleSk7XG4gIGlmIChzZWxmLnNlcnZlcikge1xuICAgIHNlcnZlckxpc3QgPSBhbGdvcy5zZXJ2ZXJIb3N0S2V5O1xuICAgIGNsaWVudExpc3QgPSBpbml0LmFsZ29yaXRobXMuc3J2SG9zdEtleTtcbiAgfSBlbHNlIHtcbiAgICBzZXJ2ZXJMaXN0ID0gaW5pdC5hbGdvcml0aG1zLnNydkhvc3RLZXk7XG4gICAgY2xpZW50TGlzdCA9IGFsZ29zLnNlcnZlckhvc3RLZXk7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGFncmVlYWJsZSBzZXJ2ZXIgaG9zdCBrZXkgZm9ybWF0XG4gIGZvciAoaSA9IDAsIGxlbiA9IGNsaWVudExpc3QubGVuZ3RoO1xuICAgICAgIGkgPCBsZW4gJiYgc2VydmVyTGlzdC5pbmRleE9mKGNsaWVudExpc3RbaV0pID09PSAtMTtcbiAgICAgICArK2kpO1xuICBpZiAoaSA9PT0gbGVuKSB7XG4gICAgLy8gTm8gc3VpdGFibGUgbWF0Y2ggZm91bmQhXG4gICAgZGVidWcoJ0RFQlVHOiBObyBtYXRjaGluZyBob3N0IGtleSBmb3JtYXQnKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBubyBtYXRjaGluZyBob3N0IGtleSBmb3JtYXQnKTtcbiAgICBlcnIubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUuaG9zdGtleUZvcm1hdCA9IGNsaWVudExpc3RbaV07XG4gIGRlYnVnKCdERUJVRzogSG9zdCBrZXkgZm9ybWF0OiAnICsgc3RhdGUuaG9zdGtleUZvcm1hdCk7XG5cbiAgZGVidWcoJ0RFQlVHOiAobG9jYWwpIENsaWVudC0+U2VydmVyIGNpcGhlcnM6ICcgKyBhbGdvcy5jaXBoZXIpO1xuICBkZWJ1ZygnREVCVUc6IChyZW1vdGUpIENsaWVudC0+U2VydmVyIGNpcGhlcnM6ICdcbiAgICAgICAgKyBpbml0LmFsZ29yaXRobXMuY3MuZW5jcnlwdCk7XG4gIGlmIChzZWxmLnNlcnZlcikge1xuICAgIHNlcnZlckxpc3QgPSBhbGdvcy5jaXBoZXI7XG4gICAgY2xpZW50TGlzdCA9IGluaXQuYWxnb3JpdGhtcy5jcy5lbmNyeXB0O1xuICB9IGVsc2Uge1xuICAgIHNlcnZlckxpc3QgPSBpbml0LmFsZ29yaXRobXMuY3MuZW5jcnlwdDtcbiAgICBjbGllbnRMaXN0ID0gYWxnb3MuY2lwaGVyO1xuICB9XG4gIC8vIENoZWNrIGZvciBhZ3JlZWFibGUgY2xpZW50LT5zZXJ2ZXIgY2lwaGVyXG4gIGZvciAoaSA9IDAsIGxlbiA9IGNsaWVudExpc3QubGVuZ3RoO1xuICAgICAgIGkgPCBsZW4gJiYgc2VydmVyTGlzdC5pbmRleE9mKGNsaWVudExpc3RbaV0pID09PSAtMTtcbiAgICAgICArK2kpO1xuICBpZiAoaSA9PT0gbGVuKSB7XG4gICAgLy8gTm8gc3VpdGFibGUgbWF0Y2ggZm91bmQhXG4gICAgZGVidWcoJ0RFQlVHOiBObyBtYXRjaGluZyBDbGllbnQtPlNlcnZlciBjaXBoZXInKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBubyBtYXRjaGluZyBjbGllbnQtPnNlcnZlciBjaXBoZXInKTtcbiAgICBlcnIubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHNlbGYuc2VydmVyKVxuICAgIHZhbCA9IGluc3RhdGUuZGVjcnlwdC50eXBlID0gY2xpZW50TGlzdFtpXTtcbiAgZWxzZVxuICAgIHZhbCA9IG91dHN0YXRlLmVuY3J5cHQudHlwZSA9IGNsaWVudExpc3RbaV07XG4gIGRlYnVnKCdERUJVRzogQ2xpZW50LT5TZXJ2ZXIgQ2lwaGVyOiAnICsgdmFsKTtcblxuICBkZWJ1ZygnREVCVUc6IChsb2NhbCkgU2VydmVyLT5DbGllbnQgY2lwaGVyczogJyArIGFsZ29zLmNpcGhlcik7XG4gIGRlYnVnKCdERUJVRzogKHJlbW90ZSkgU2VydmVyLT5DbGllbnQgY2lwaGVyczogJ1xuICAgICAgICArIChpbml0LmFsZ29yaXRobXMuc2MuZW5jcnlwdCkpO1xuICBpZiAoc2VsZi5zZXJ2ZXIpIHtcbiAgICBzZXJ2ZXJMaXN0ID0gYWxnb3MuY2lwaGVyO1xuICAgIGNsaWVudExpc3QgPSBpbml0LmFsZ29yaXRobXMuc2MuZW5jcnlwdDtcbiAgfSBlbHNlIHtcbiAgICBzZXJ2ZXJMaXN0ID0gaW5pdC5hbGdvcml0aG1zLnNjLmVuY3J5cHQ7XG4gICAgY2xpZW50TGlzdCA9IGFsZ29zLmNpcGhlcjtcbiAgfVxuICAvLyBDaGVjayBmb3IgYWdyZWVhYmxlIHNlcnZlci0+Y2xpZW50IGNpcGhlclxuICBmb3IgKGkgPSAwLCBsZW4gPSBjbGllbnRMaXN0Lmxlbmd0aDtcbiAgICAgICBpIDwgbGVuICYmIHNlcnZlckxpc3QuaW5kZXhPZihjbGllbnRMaXN0W2ldKSA9PT0gLTE7XG4gICAgICAgKytpKTtcbiAgaWYgKGkgPT09IGxlbikge1xuICAgIC8vIE5vIHN1aXRhYmxlIG1hdGNoIGZvdW5kIVxuICAgIGRlYnVnKCdERUJVRzogTm8gbWF0Y2hpbmcgU2VydmVyLT5DbGllbnQgY2lwaGVyJyk7XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignSGFuZHNoYWtlIGZhaWxlZDogbm8gbWF0Y2hpbmcgc2VydmVyLT5jbGllbnQgY2lwaGVyJyk7XG4gICAgZXJyLmxldmVsID0gJ2hhbmRzaGFrZSc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLktFWV9FWENIQU5HRV9GQUlMRUQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzZWxmLnNlcnZlcilcbiAgICB2YWwgPSBvdXRzdGF0ZS5lbmNyeXB0LnR5cGUgPSBjbGllbnRMaXN0W2ldO1xuICBlbHNlXG4gICAgdmFsID0gaW5zdGF0ZS5kZWNyeXB0LnR5cGUgPSBjbGllbnRMaXN0W2ldO1xuICBkZWJ1ZygnREVCVUc6IFNlcnZlci0+Q2xpZW50IENpcGhlcjogJyArIHZhbCk7XG5cbiAgZGVidWcoJ0RFQlVHOiAobG9jYWwpIENsaWVudC0+U2VydmVyIEhNQUMgYWxnb3JpdGhtczogJyArIGFsZ29zLmhtYWMpO1xuICBkZWJ1ZygnREVCVUc6IChyZW1vdGUpIENsaWVudC0+U2VydmVyIEhNQUMgYWxnb3JpdGhtczogJ1xuICAgICAgICArIGluaXQuYWxnb3JpdGhtcy5jcy5tYWMpO1xuICBpZiAoc2VsZi5zZXJ2ZXIpIHtcbiAgICBzZXJ2ZXJMaXN0ID0gYWxnb3MuaG1hYztcbiAgICBjbGllbnRMaXN0ID0gaW5pdC5hbGdvcml0aG1zLmNzLm1hYztcbiAgfSBlbHNlIHtcbiAgICBzZXJ2ZXJMaXN0ID0gaW5pdC5hbGdvcml0aG1zLmNzLm1hYztcbiAgICBjbGllbnRMaXN0ID0gYWxnb3MuaG1hYztcbiAgfVxuICAvLyBDaGVjayBmb3IgYWdyZWVhYmxlIGNsaWVudC0+c2VydmVyIGhtYWMgYWxnb3JpdGhtXG4gIGZvciAoaSA9IDAsIGxlbiA9IGNsaWVudExpc3QubGVuZ3RoO1xuICAgICAgIGkgPCBsZW4gJiYgc2VydmVyTGlzdC5pbmRleE9mKGNsaWVudExpc3RbaV0pID09PSAtMTtcbiAgICAgICArK2kpO1xuICBpZiAoaSA9PT0gbGVuKSB7XG4gICAgLy8gTm8gc3VpdGFibGUgbWF0Y2ggZm91bmQhXG4gICAgZGVidWcoJ0RFQlVHOiBObyBtYXRjaGluZyBDbGllbnQtPlNlcnZlciBITUFDIGFsZ29yaXRobScpO1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0hhbmRzaGFrZSBmYWlsZWQ6IG5vIG1hdGNoaW5nIGNsaWVudC0+c2VydmVyIEhNQUMnKTtcbiAgICBlcnIubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHNlbGYuc2VydmVyKVxuICAgIHZhbCA9IGluc3RhdGUuaG1hYy50eXBlID0gY2xpZW50TGlzdFtpXTtcbiAgZWxzZVxuICAgIHZhbCA9IG91dHN0YXRlLmhtYWMudHlwZSA9IGNsaWVudExpc3RbaV07XG4gIGRlYnVnKCdERUJVRzogQ2xpZW50LT5TZXJ2ZXIgSE1BQyBhbGdvcml0aG06ICcgKyB2YWwpO1xuXG4gIGRlYnVnKCdERUJVRzogKGxvY2FsKSBTZXJ2ZXItPkNsaWVudCBITUFDIGFsZ29yaXRobXM6ICcgKyBhbGdvcy5obWFjKTtcbiAgZGVidWcoJ0RFQlVHOiAocmVtb3RlKSBTZXJ2ZXItPkNsaWVudCBITUFDIGFsZ29yaXRobXM6ICdcbiAgICAgICAgKyBpbml0LmFsZ29yaXRobXMuc2MubWFjKTtcbiAgaWYgKHNlbGYuc2VydmVyKSB7XG4gICAgc2VydmVyTGlzdCA9IGFsZ29zLmhtYWM7XG4gICAgY2xpZW50TGlzdCA9IGluaXQuYWxnb3JpdGhtcy5zYy5tYWM7XG4gIH0gZWxzZSB7XG4gICAgc2VydmVyTGlzdCA9IGluaXQuYWxnb3JpdGhtcy5zYy5tYWM7XG4gICAgY2xpZW50TGlzdCA9IGFsZ29zLmhtYWM7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGFncmVlYWJsZSBzZXJ2ZXItPmNsaWVudCBobWFjIGFsZ29yaXRobVxuICBmb3IgKGkgPSAwLCBsZW4gPSBjbGllbnRMaXN0Lmxlbmd0aDtcbiAgICAgICBpIDwgbGVuICYmIHNlcnZlckxpc3QuaW5kZXhPZihjbGllbnRMaXN0W2ldKSA9PT0gLTE7XG4gICAgICAgKytpKTtcbiAgaWYgKGkgPT09IGxlbikge1xuICAgIC8vIE5vIHN1aXRhYmxlIG1hdGNoIGZvdW5kIVxuICAgIGRlYnVnKCdERUJVRzogTm8gbWF0Y2hpbmcgU2VydmVyLT5DbGllbnQgSE1BQyBhbGdvcml0aG0nKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBubyBtYXRjaGluZyBzZXJ2ZXItPmNsaWVudCBITUFDJyk7XG4gICAgZXJyLmxldmVsID0gJ2hhbmRzaGFrZSc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLktFWV9FWENIQU5HRV9GQUlMRUQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzZWxmLnNlcnZlcilcbiAgICB2YWwgPSBvdXRzdGF0ZS5obWFjLnR5cGUgPSBjbGllbnRMaXN0W2ldO1xuICBlbHNlXG4gICAgdmFsID0gaW5zdGF0ZS5obWFjLnR5cGUgPSBjbGllbnRMaXN0W2ldO1xuICBkZWJ1ZygnREVCVUc6IFNlcnZlci0+Q2xpZW50IEhNQUMgYWxnb3JpdGhtOiAnICsgdmFsKTtcblxuICBkZWJ1ZygnREVCVUc6IChsb2NhbCkgQ2xpZW50LT5TZXJ2ZXIgY29tcHJlc3Npb24gYWxnb3JpdGhtczogJ1xuICAgICAgICArIGFsZ29zLmNvbXByZXNzKTtcbiAgZGVidWcoJ0RFQlVHOiAocmVtb3RlKSBDbGllbnQtPlNlcnZlciBjb21wcmVzc2lvbiBhbGdvcml0aG1zOiAnXG4gICAgICAgICsgaW5pdC5hbGdvcml0aG1zLmNzLmNvbXByZXNzKTtcbiAgaWYgKHNlbGYuc2VydmVyKSB7XG4gICAgc2VydmVyTGlzdCA9IGFsZ29zLmNvbXByZXNzO1xuICAgIGNsaWVudExpc3QgPSBpbml0LmFsZ29yaXRobXMuY3MuY29tcHJlc3M7XG4gIH0gZWxzZSB7XG4gICAgc2VydmVyTGlzdCA9IGluaXQuYWxnb3JpdGhtcy5jcy5jb21wcmVzcztcbiAgICBjbGllbnRMaXN0ID0gYWxnb3MuY29tcHJlc3M7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGFncmVlYWJsZSBjbGllbnQtPnNlcnZlciBjb21wcmVzc2lvbiBhbGdvcml0aG1cbiAgZm9yIChpID0gMCwgbGVuID0gY2xpZW50TGlzdC5sZW5ndGg7XG4gICAgICAgaSA8IGxlbiAmJiBzZXJ2ZXJMaXN0LmluZGV4T2YoY2xpZW50TGlzdFtpXSkgPT09IC0xO1xuICAgICAgICsraSk7XG4gIGlmIChpID09PSBsZW4pIHtcbiAgICAvLyBObyBzdWl0YWJsZSBtYXRjaCBmb3VuZCFcbiAgICBkZWJ1ZygnREVCVUc6IE5vIG1hdGNoaW5nIENsaWVudC0+U2VydmVyIGNvbXByZXNzaW9uIGFsZ29yaXRobScpO1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0hhbmRzaGFrZSBmYWlsZWQ6IG5vIG1hdGNoaW5nIGNsaWVudC0+c2VydmVyICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJ2NvbXByZXNzaW9uIGFsZ29yaXRobScpO1xuICAgIGVyci5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIHNlbGYuZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5LRVlfRVhDSEFOR0VfRkFJTEVEKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc2VsZi5zZXJ2ZXIpXG4gICAgdmFsID0gaW5zdGF0ZS5kZWNvbXByZXNzLnR5cGUgPSBjbGllbnRMaXN0W2ldO1xuICBlbHNlXG4gICAgdmFsID0gb3V0c3RhdGUuY29tcHJlc3MudHlwZSA9IGNsaWVudExpc3RbaV07XG4gIGRlYnVnKCdERUJVRzogQ2xpZW50LT5TZXJ2ZXIgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAnICsgdmFsKTtcblxuICBkZWJ1ZygnREVCVUc6IChsb2NhbCkgU2VydmVyLT5DbGllbnQgY29tcHJlc3Npb24gYWxnb3JpdGhtczogJ1xuICAgICAgICArIGFsZ29zLmNvbXByZXNzKTtcbiAgZGVidWcoJ0RFQlVHOiAocmVtb3RlKSBTZXJ2ZXItPkNsaWVudCBjb21wcmVzc2lvbiBhbGdvcml0aG1zOiAnXG4gICAgICAgICsgaW5pdC5hbGdvcml0aG1zLnNjLmNvbXByZXNzKTtcbiAgaWYgKHNlbGYuc2VydmVyKSB7XG4gICAgc2VydmVyTGlzdCA9IGFsZ29zLmNvbXByZXNzO1xuICAgIGNsaWVudExpc3QgPSBpbml0LmFsZ29yaXRobXMuc2MuY29tcHJlc3M7XG4gIH0gZWxzZSB7XG4gICAgc2VydmVyTGlzdCA9IGluaXQuYWxnb3JpdGhtcy5zYy5jb21wcmVzcztcbiAgICBjbGllbnRMaXN0ID0gYWxnb3MuY29tcHJlc3M7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGFncmVlYWJsZSBzZXJ2ZXItPmNsaWVudCBjb21wcmVzc2lvbiBhbGdvcml0aG1cbiAgZm9yIChpID0gMCwgbGVuID0gY2xpZW50TGlzdC5sZW5ndGg7XG4gICAgICAgaSA8IGxlbiAmJiBzZXJ2ZXJMaXN0LmluZGV4T2YoY2xpZW50TGlzdFtpXSkgPT09IC0xO1xuICAgICAgICsraSk7XG4gIGlmIChpID09PSBsZW4pIHtcbiAgICAvLyBObyBzdWl0YWJsZSBtYXRjaCBmb3VuZCFcbiAgICBkZWJ1ZygnREVCVUc6IE5vIG1hdGNoaW5nIFNlcnZlci0+Q2xpZW50IGNvbXByZXNzaW9uIGFsZ29yaXRobScpO1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0hhbmRzaGFrZSBmYWlsZWQ6IG5vIG1hdGNoaW5nIHNlcnZlci0+Y2xpZW50ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJ2NvbXByZXNzaW9uIGFsZ29yaXRobScpO1xuICAgIGVyci5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIHNlbGYuZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5LRVlfRVhDSEFOR0VfRkFJTEVEKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc2VsZi5zZXJ2ZXIpXG4gICAgdmFsID0gb3V0c3RhdGUuY29tcHJlc3MudHlwZSA9IGNsaWVudExpc3RbaV07XG4gIGVsc2VcbiAgICB2YWwgPSBpbnN0YXRlLmRlY29tcHJlc3MudHlwZSA9IGNsaWVudExpc3RbaV07XG4gIGRlYnVnKCdERUJVRzogU2VydmVyLT5DbGllbnQgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAnICsgdmFsKTtcblxuICBzdGF0ZS5rZXggPSBuZXcgS2V5RXhjaGFuZ2Uoa2V4X2FsZ29yaXRobSk7XG4gIHN0YXRlLmtleC5nZW5lcmF0ZUtleXMoKTtcbiAgb3V0c3RhdGUucHVia2V5ID0gc3RhdGUua2V4LmdldFB1YmxpY0tleSgpO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvbktFWERIX0dFWF9HUk9VUChzZWxmLCBwcmltZSwgZ2VuKSB7XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3N0YXRlO1xuICB2YXIgb3V0c3RhdGUgPSBzdGF0ZS5vdXRnb2luZztcblxuICBzdGF0ZS5rZXguc2V0REhQYXJhbXMocHJpbWUsIGdlbik7XG4gIHN0YXRlLmtleC5nZW5lcmF0ZUtleXMoKTtcbiAgb3V0c3RhdGUucHVia2V5ID0gc3RhdGUua2V4LmdldFB1YmxpY0tleSgpO1xuXG4gIEtFWERIX0lOSVQoc2VsZik7XG59XG5cbmZ1bmN0aW9uIG9uS0VYREhfSU5JVChzZWxmLCBlKSB7IC8vIFNlcnZlclxuICBLRVhESF9SRVBMWShzZWxmLCBlKTtcbn1cblxuZnVuY3Rpb24gb25LRVhESF9SRVBMWShzZWxmLCBpbmZvLCB2ZXJpZmllZEhvc3QpIHsgLy8gQ2xpZW50XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3N0YXRlO1xuICB2YXIgaW5zdGF0ZSA9IHN0YXRlLmluY29taW5nO1xuICB2YXIgb3V0c3RhdGUgPSBzdGF0ZS5vdXRnb2luZztcbiAgdmFyIGRlYnVnID0gc2VsZi5kZWJ1ZztcbiAgdmFyIGxlbjtcbiAgdmFyIGk7XG5cbiAgaWYgKHZlcmlmaWVkSG9zdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaW5zdGF0ZS5leHBlY3RlZFBhY2tldCA9ICdORVdLRVlTJztcbiAgICBvdXRzdGF0ZS5zZW50TkVXS0VZUyA9IGZhbHNlO1xuXG4gICAgZGVidWcoJ0RFQlVHOiBDaGVja2luZyBob3N0IGtleSBmb3JtYXQnKTtcbiAgICAvLyBFbnN1cmUgYWxsIGhvc3Qga2V5IGZvcm1hdHMgYWdyZWVcbiAgICB2YXIgaG9zdGtleV9mb3JtYXQgPSByZWFkU3RyaW5nKGluZm8uaG9zdGtleSwgMCwgJ2FzY2lpJywgc2VsZik7XG4gICAgaWYgKGhvc3RrZXlfZm9ybWF0ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5mby5ob3N0a2V5X2Zvcm1hdCAhPT0gc3RhdGUuaG9zdGtleUZvcm1hdFxuICAgICAgICB8fCBpbmZvLmhvc3RrZXlfZm9ybWF0ICE9PSBob3N0a2V5X2Zvcm1hdCkge1xuICAgICAgLy8gRXhwZWN0ZWQgYW5kIGFjdHVhbCBzZXJ2ZXIgaG9zdCBrZXkgZm9ybWF0IGRvIG5vdCBtYXRjaCFcbiAgICAgIGRlYnVnKCdERUJVRzogSG9zdCBrZXkgZm9ybWF0IG1pc21hdGNoJyk7XG4gICAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgICBzZWxmLnJlc2V0KCk7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBob3N0IGtleSBmb3JtYXQgbWlzbWF0Y2gnKTtcbiAgICAgIGVyci5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZGVidWcoJ0RFQlVHOiBDaGVja2luZyBzaWduYXR1cmUgZm9ybWF0Jyk7XG4gICAgLy8gRW5zdXJlIHNpZ25hdHVyZSBmb3JtYXRzIGFncmVlXG4gICAgdmFyIHNpZ19mb3JtYXQgPSByZWFkU3RyaW5nKGluZm8uc2lnLCAwLCAnYXNjaWknLCBzZWxmKTtcbiAgICBpZiAoc2lnX2Zvcm1hdCA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGluZm8uc2lnX2Zvcm1hdCAhPT0gc2lnX2Zvcm1hdCkge1xuICAgICAgZGVidWcoJ0RFQlVHOiBTaWduYXR1cmUgZm9ybWF0IG1pc21hdGNoJyk7XG4gICAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgICBzZWxmLnJlc2V0KCk7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdIYW5kc2hha2UgZmFpbGVkOiBzaWduYXR1cmUgZm9ybWF0IG1pc21hdGNoJyk7XG4gICAgICBlcnIubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZlcmlmeSB0aGUgaG9zdCBmaW5nZXJwcmludCBmaXJzdCBpZiBuZWVkZWRcbiAgaWYgKG91dHN0YXRlLnN0YXR1cyA9PT0gT1VUX0lOSVQpIHtcbiAgICBpZiAodmVyaWZpZWRIb3N0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlYnVnKCdERUJVRzogVmVyaWZ5aW5nIGhvc3QgZmluZ2VycHJpbnQnKTtcbiAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgIHZhciBlbWl0dGVkID0gc2VsZi5lbWl0KCdmaW5nZXJwcmludCcsIGluZm8uaG9zdGtleSwgZnVuY3Rpb24ocGVybWl0dGVkKSB7XG4gICAgICAgIC8vIFByZXZlbnQgbXVsdGlwbGUgY2FsbHMgdG8gdGhpcyBjYWxsYmFja1xuICAgICAgICBpZiAodmVyaWZpZWRIb3N0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2ZXJpZmllZEhvc3QgPSAhIXBlcm1pdHRlZDtcbiAgICAgICAgaWYgKCFzeW5jKSB7XG4gICAgICAgICAgLy8gQ29udGludWUgZXhlY3V0aW9uIGJ5IHJlLWVudHJ5XG4gICAgICAgICAgb25LRVhESF9SRVBMWShzZWxmLCBpbmZvLCB2ZXJpZmllZEhvc3QpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgIC8vIFN1cHBvcnQgYXN5bmMgY2FsbGluZyBvZiB2ZXJpZmljYXRpb24gY2FsbGJhY2tcbiAgICAgIGlmIChlbWl0dGVkICYmIHZlcmlmaWVkSG9zdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2ZXJpZmllZEhvc3QgPT09IHVuZGVmaW5lZClcbiAgICAgIGRlYnVnKCdERUJVRzogSG9zdCBhY2NlcHRlZCBieSBkZWZhdWx0IChubyB2ZXJpZmljYXRpb24pJyk7XG4gICAgZWxzZSBpZiAodmVyaWZpZWRIb3N0ID09PSB0cnVlKVxuICAgICAgZGVidWcoJ0RFQlVHOiBIb3N0IGFjY2VwdGVkICh2ZXJpZmllZCknKTtcbiAgICBlbHNlIHtcbiAgICAgIGRlYnVnKCdERUJVRzogSG9zdCBkZW5pZWQgdmlhIGZpbmdlcnByaW50IHZlcmlmaWNhdGlvbicpO1xuICAgICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLktFWV9FWENIQU5HRV9GQUlMRUQpO1xuICAgICAgc2VsZi5yZXNldCgpO1xuICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignSGFuZHNoYWtlIGZhaWxlZDogJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArICdob3N0IGZpbmdlcnByaW50IHZlcmlmaWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgIGVyci5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaW5mby5wdWJrZXkgPSBzdGF0ZS5rZXguY29udmVydFB1YmxpY0tleShpbmZvLnB1YmtleSk7XG5cbiAgaW5mby5zZWNyZXQgPSBzdGF0ZS5rZXguY29tcHV0ZVNlY3JldChpbmZvLnB1YmtleSk7XG5cbiAgaWYgKGluZm8uc2VjcmV0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBpbmZvLnNlY3JldC5tZXNzYWdlID0gJ0Vycm9yIHdoaWxlIGNvbXB1dGluZyBESCBzZWNyZXQgKCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdGF0ZS5rZXgudHlwZSArICcpOiAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgaW5mby5zZWNyZXQubWVzc2FnZTtcbiAgICBpbmZvLnNlY3JldC5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBpbmZvLnNlY3JldCk7XG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLktFWV9FWENIQU5HRV9GQUlMRUQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goc3RhdGUua2V4Lmhhc2gpO1xuXG4gIHZhciBsZW5faWRlbnQgPSBCdWZmZXIuYnl0ZUxlbmd0aChzZWxmLmNvbmZpZy5pZGVudCk7XG4gIHZhciBsZW5fc2lkZW50ID0gQnVmZmVyLmJ5dGVMZW5ndGgoaW5zdGF0ZS5pZGVudFJhdyk7XG4gIHZhciBsZW5faW5pdCA9IG91dHN0YXRlLmtleGluaXQubGVuZ3RoO1xuICB2YXIgbGVuX3Npbml0ID0gaW5zdGF0ZS5rZXhpbml0Lmxlbmd0aDtcbiAgdmFyIGxlbl9ob3N0a2V5ID0gaW5mby5ob3N0a2V5Lmxlbmd0aDtcbiAgdmFyIGxlbl9wdWJrZXkgPSBvdXRzdGF0ZS5wdWJrZXkubGVuZ3RoO1xuICB2YXIgbGVuX3NwdWJrZXkgPSBpbmZvLnB1YmtleS5sZW5ndGg7XG4gIHZhciBsZW5fc2VjcmV0ID0gaW5mby5zZWNyZXQubGVuZ3RoO1xuXG4gIHZhciBleGNoYW5nZUJ1ZkxlbiA9IGxlbl9pZGVudFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zaWRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgKyBsZW5faW5pdFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zaW5pdFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9ob3N0a2V5XG4gICAgICAgICAgICAgICAgICAgICAgICsgbGVuX3B1YmtleVxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zcHVia2V5XG4gICAgICAgICAgICAgICAgICAgICAgICsgbGVuX3NlY3JldFxuICAgICAgICAgICAgICAgICAgICAgICArICg0ICogOCk7IC8vIExlbmd0aCBmaWVsZHMgZm9yIGFib3ZlIHZhbHVlc1xuXG4gIC8vIEdyb3VwIGV4Y2hhbmdlLXJlbGF0ZWRcbiAgdmFyIGxlbl9nZXhfcHJpbWU7XG4gIHZhciBsZW5fZ2V4X2dlbjtcbiAgdmFyIGdleF9wcmltZTtcbiAgdmFyIGdleF9nZW47XG4gIHZhciBkaFBhcmFtcyA9IHN0YXRlLmtleC5nZXRESFBhcmFtcygpO1xuICBpZiAoZGhQYXJhbXMpIHtcbiAgICBnZXhfcHJpbWUgPSBkaFBhcmFtcy5wcmltZTtcbiAgICBnZXhfZ2VuID0gZGhQYXJhbXMuZ2VuZXJhdG9yO1xuICAgIGxlbl9nZXhfcHJpbWUgPSBnZXhfcHJpbWUubGVuZ3RoO1xuICAgIGxlbl9nZXhfZ2VuID0gZ2V4X2dlbi5sZW5ndGg7XG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gKDQgKiAzKTsgLy8gbWluLCBuLCBtYXggdmFsdWVzXG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gKDQgKiAyKTsgLy8gcHJpbWUsIGdlbmVyYXRvciBsZW5ndGggZmllbGRzXG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gbGVuX2dleF9wcmltZTtcbiAgICBleGNoYW5nZUJ1ZkxlbiArPSBsZW5fZ2V4X2dlbjtcbiAgfVxuXG4gIHZhciBicCA9IDA7XG4gIHZhciBleGNoYW5nZUJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShleGNoYW5nZUJ1Zkxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX2lkZW50LCBicCk7XG4gIGJwICs9IDQ7XG4gIGV4Y2hhbmdlQnVmLndyaXRlKHNlbGYuY29uZmlnLmlkZW50LCBicCwgJ3V0ZjgnKTsgLy8gVl9DXG4gIGJwICs9IGxlbl9pZGVudDtcblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5fc2lkZW50LCBicCk7XG4gIGJwICs9IDQ7XG4gIGV4Y2hhbmdlQnVmLndyaXRlKGluc3RhdGUuaWRlbnRSYXcsIGJwLCAndXRmOCcpOyAvLyBWX1NcbiAgYnAgKz0gbGVuX3NpZGVudDtcblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5faW5pdCwgYnApO1xuICBicCArPSA0O1xuICBvdXRzdGF0ZS5rZXhpbml0LmNvcHkoZXhjaGFuZ2VCdWYsIGJwKTsgLy8gSV9DXG4gIGJwICs9IGxlbl9pbml0O1xuICBvdXRzdGF0ZS5rZXhpbml0ID0gdW5kZWZpbmVkO1xuXG4gIHdyaXRlVUludDMyQkUoZXhjaGFuZ2VCdWYsIGxlbl9zaW5pdCwgYnApO1xuICBicCArPSA0O1xuICBpbnN0YXRlLmtleGluaXQuY29weShleGNoYW5nZUJ1ZiwgYnApOyAvLyBJX1NcbiAgYnAgKz0gbGVuX3Npbml0O1xuICBpbnN0YXRlLmtleGluaXQgPSB1bmRlZmluZWQ7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX2hvc3RrZXksIGJwKTtcbiAgYnAgKz0gNDtcbiAgaW5mby5ob3N0a2V5LmNvcHkoZXhjaGFuZ2VCdWYsIGJwKTsgLy8gS19TXG4gIGJwICs9IGxlbl9ob3N0a2V5O1xuXG4gIGlmIChkaFBhcmFtcykge1xuICAgIEtFWERIX0dFWF9SRVFfUEFDS0VULnNsaWNlKDEpLmNvcHkoZXhjaGFuZ2VCdWYsIGJwKTsgLy8gbWluLCBuLCBtYXhcbiAgICBicCArPSAoNCAqIDMpOyAvLyBTa2lwIG92ZXIgYnl0ZXMganVzdCBjb3BpZWRcblxuICAgIHdyaXRlVUludDMyQkUoZXhjaGFuZ2VCdWYsIGxlbl9nZXhfcHJpbWUsIGJwKTtcbiAgICBicCArPSA0O1xuICAgIGdleF9wcmltZS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIHBcbiAgICBicCArPSBsZW5fZ2V4X3ByaW1lO1xuXG4gICAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX2dleF9nZW4sIGJwKTtcbiAgICBicCArPSA0O1xuICAgIGdleF9nZW4uY29weShleGNoYW5nZUJ1ZiwgYnApOyAvLyBnXG4gICAgYnAgKz0gbGVuX2dleF9nZW47XG4gIH1cblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5fcHVia2V5LCBicCk7XG4gIGJwICs9IDQ7XG4gIG91dHN0YXRlLnB1YmtleS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIGVcbiAgYnAgKz0gbGVuX3B1YmtleTtcblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5fc3B1YmtleSwgYnApO1xuICBicCArPSA0O1xuICBpbmZvLnB1YmtleS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIGZcbiAgYnAgKz0gbGVuX3NwdWJrZXk7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX3NlY3JldCwgYnApO1xuICBicCArPSA0O1xuICBpbmZvLnNlY3JldC5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIEtcblxuICBvdXRzdGF0ZS5leGNoYW5nZUhhc2ggPSBoYXNoLnVwZGF0ZShleGNoYW5nZUJ1ZikuZGlnZXN0KCk7IC8vIEhcblxuICB2YXIgcmF3c2lnID0gcmVhZFN0cmluZyhpbmZvLnNpZywgaW5mby5zaWcuX3Bvcywgc2VsZik7IC8vIHNcbiAgaWYgKHJhd3NpZyA9PT0gZmFsc2VcbiAgICAgIHx8ICEocmF3c2lnID0gc2lnU1NIVG9BU04xKHJhd3NpZywgaW5mby5zaWdfZm9ybWF0LCBzZWxmKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgaG9zdFB1YktleSA9IHBhcnNlREVSS2V5KGluZm8uaG9zdGtleSwgaW5mby5zaWdfZm9ybWF0KTtcbiAgaWYgKGhvc3RQdWJLZXkgaW5zdGFuY2VvZiBFcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgZGVidWcoJ0RFQlVHOiBWZXJpZnlpbmcgc2lnbmF0dXJlJyk7XG5cbiAgaWYgKGhvc3RQdWJLZXkudmVyaWZ5KG91dHN0YXRlLmV4Y2hhbmdlSGFzaCwgcmF3c2lnKSAhPT0gdHJ1ZSkge1xuICAgIGRlYnVnKCdERUJVRzogU2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQnKTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgc2VsZi5yZXNldCgpO1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0hhbmRzaGFrZSBmYWlsZWQ6IHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkJyk7XG4gICAgZXJyLmxldmVsID0gJ2hhbmRzaGFrZSc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG91dHN0YXRlLnNlc3Npb25JZCA9PT0gdW5kZWZpbmVkKVxuICAgIG91dHN0YXRlLnNlc3Npb25JZCA9IG91dHN0YXRlLmV4Y2hhbmdlSGFzaDtcbiAgb3V0c3RhdGUua2V4c2VjcmV0ID0gaW5mby5zZWNyZXQ7XG5cbiAgZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBORVdLRVlTJyk7XG4gIGlmIChvdXRzdGF0ZS5zdGF0dXMgPT09IE9VVF9SRUtFWUlORylcbiAgICBzZW5kKHNlbGYsIE5FV0tFWVNfUEFDS0VULCB1bmRlZmluZWQsIHRydWUpO1xuICBlbHNlXG4gICAgc2VuZChzZWxmLCBORVdLRVlTX1BBQ0tFVCk7XG4gIG91dHN0YXRlLnNlbnRORVdLRVlTID0gdHJ1ZTtcblxuICBpZiAodmVyaWZpZWRIb3N0ICE9PSB1bmRlZmluZWQgJiYgaW5zdGF0ZS5leHBlY3RlZFBhY2tldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gV2UgcmVjZWl2ZWQgTkVXS0VZUyB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcgZm9yIHRoZSBmaW5nZXJwcmludFxuICAgIC8vIHZlcmlmaWNhdGlvbiBjYWxsYmFjayB0byBiZSBjYWxsZWQuIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHJlLWV4ZWN1dGVcbiAgICAvLyBvbk5FV0tFWVMgdG8gZmluaXNoIHRoZSBoYW5kc2hha2UuXG4gICAgb25ORVdLRVlTKHNlbGYpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uTkVXS0VZUyhzZWxmKSB7IC8vIENsaWVudC9TZXJ2ZXJcbiAgdmFyIHN0YXRlID0gc2VsZi5fc3RhdGU7XG4gIHZhciBvdXRzdGF0ZSA9IHN0YXRlLm91dGdvaW5nO1xuICB2YXIgaW5zdGF0ZSA9IHN0YXRlLmluY29taW5nO1xuXG4gIGluc3RhdGUuZXhwZWN0ZWRQYWNrZXQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKCFvdXRzdGF0ZS5zZW50TkVXS0VZUylcbiAgICByZXR1cm47XG5cbiAgdmFyIGxlbiA9IG91dHN0YXRlLmtleHNlY3JldC5sZW5ndGg7XG5cbiAgdmFyIG91dENpcGhlckluZm8gPSBvdXRzdGF0ZS5lbmNyeXB0LmluZm8gPSBDSVBIRVJfSU5GT1tvdXRzdGF0ZS5lbmNyeXB0LnR5cGVdO1xuICB2YXIgcCA9IDA7XG5cbiAgdmFyIGRoSGFzaEFsZ28gPSBzdGF0ZS5rZXguaGFzaDtcblxuICB2YXIgc2VjcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyBsZW4pO1xuICB2YXIgaXY7XG4gIHZhciBrZXk7XG5cbiAgLy8gV2hlbmV2ZXIgdGhlIGNsaWVudCBzZW5kcyBhIG5ldyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LCBpdCBpcyBlbnF1ZXVlZFxuICAvLyBoZXJlLiAgT25jZSB0aGUgcmVxdWVzdCBpcyByZXNvbHZlZCAoc3VjY2VzcywgZmFpbCwgb3IgUEtfT0spLFxuICAvLyBkZXF1ZXVlLiAgV2hhdGV2ZXIgaXMgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSBkZXRlcm1pbmVzIGhvdyB3ZVxuICAvLyBpbnRlcnByZXQgcGFja2V0IHR5cGUgNjAuXG4gIHN0YXRlLmF1dGhzUXVldWUgPSBbXTtcblxuICB3cml0ZVVJbnQzMkJFKHNlY3JldCwgbGVuLCBwKTtcbiAgcCArPSA0O1xuICBvdXRzdGF0ZS5rZXhzZWNyZXQuY29weShzZWNyZXQsIHApO1xuICBvdXRzdGF0ZS5rZXhzZWNyZXQgPSB1bmRlZmluZWQ7XG4gIGlmICghb3V0Q2lwaGVySW5mby5zdHJlYW0pIHtcbiAgICBpdiA9IGNyeXB0by5jcmVhdGVIYXNoKGRoSGFzaEFsZ28pXG4gICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgLnVwZGF0ZSghc2VsZi5zZXJ2ZXIgPyAnQScgOiAnQicsICdhc2NpaScpXG4gICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLnNlc3Npb25JZClcbiAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICB3aGlsZSAoaXYubGVuZ3RoIDwgb3V0Q2lwaGVySW5mby5pdkxlbikge1xuICAgICAgaXYgPSBCdWZmZXIuY29uY2F0KFtpdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3J5cHRvLmNyZWF0ZUhhc2goZGhIYXNoQWxnbylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShzZWNyZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKGl2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlnZXN0KCldKTtcbiAgICB9XG4gICAgaWYgKGl2Lmxlbmd0aCA+IG91dENpcGhlckluZm8uaXZMZW4pXG4gICAgICBpdiA9IGl2LnNsaWNlKDAsIG91dENpcGhlckluZm8uaXZMZW4pO1xuICB9IGVsc2Uge1xuICAgIGl2ID0gRU1QVFlfQlVGRkVSOyAvLyBTdHJlYW1pbmcgY2lwaGVycyBkb24ndCB1c2UgYW4gSVYgdXBmcm9udFxuICB9XG5cbiAga2V5ID0gY3J5cHRvLmNyZWF0ZUhhc2goZGhIYXNoQWxnbylcbiAgICAgICAgICAgICAgLnVwZGF0ZShzZWNyZXQpXG4gICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAudXBkYXRlKCFzZWxmLnNlcnZlciA/ICdDJyA6ICdEJywgJ2FzY2lpJylcbiAgICAgICAgICAgICAgLnVwZGF0ZShvdXRzdGF0ZS5zZXNzaW9uSWQpXG4gICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgd2hpbGUgKGtleS5sZW5ndGggPCBvdXRDaXBoZXJJbmZvLmtleUxlbikge1xuICAgIGtleSA9IEJ1ZmZlci5jb25jYXQoW2tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBjcnlwdG8uY3JlYXRlSGFzaChkaEhhc2hBbGdvKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoc2VjcmV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoa2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWdlc3QoKV0pO1xuICB9XG4gIGlmIChrZXkubGVuZ3RoID4gb3V0Q2lwaGVySW5mby5rZXlMZW4pXG4gICAga2V5ID0ga2V5LnNsaWNlKDAsIG91dENpcGhlckluZm8ua2V5TGVuKTtcblxuICBpZiAob3V0Q2lwaGVySW5mby5hdXRoTGVuID4gMCkge1xuICAgIG91dHN0YXRlLmVuY3J5cHQuaXYgPSBpdjtcbiAgICBvdXRzdGF0ZS5lbmNyeXB0LmtleSA9IGtleTtcbiAgICBvdXRzdGF0ZS5lbmNyeXB0Lmluc3RhbmNlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY2lwaGVyQWxnbyA9IFNTSF9UT19PUEVOU1NMW291dHN0YXRlLmVuY3J5cHQudHlwZV07XG4gICAgb3V0c3RhdGUuZW5jcnlwdC5pbnN0YW5jZSA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihjaXBoZXJBbGdvLCBrZXksIGl2KTtcbiAgICBvdXRzdGF0ZS5lbmNyeXB0Lmluc3RhbmNlLnNldEF1dG9QYWRkaW5nKGZhbHNlKTtcbiAgfVxuXG4gIC8vIEFuZCBub3cgZm9yIGRlY3J5cHRpbmcgLi4uXG5cbiAgdmFyIGluQ2lwaGVySW5mbyA9IGluc3RhdGUuZGVjcnlwdC5pbmZvID0gQ0lQSEVSX0lORk9baW5zdGF0ZS5kZWNyeXB0LnR5cGVdO1xuICBpZiAoIWluQ2lwaGVySW5mby5zdHJlYW0pIHtcbiAgICBpdiA9IGNyeXB0by5jcmVhdGVIYXNoKGRoSGFzaEFsZ28pXG4gICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgLnVwZGF0ZSghc2VsZi5zZXJ2ZXIgPyAnQicgOiAnQScsICdhc2NpaScpXG4gICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLnNlc3Npb25JZClcbiAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICB3aGlsZSAoaXYubGVuZ3RoIDwgaW5DaXBoZXJJbmZvLml2TGVuKSB7XG4gICAgICBpdiA9IEJ1ZmZlci5jb25jYXQoW2l2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjcnlwdG8uY3JlYXRlSGFzaChkaEhhc2hBbGdvKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShvdXRzdGF0ZS5leGNoYW5nZUhhc2gpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoaXYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWdlc3QoKV0pO1xuICAgIH1cbiAgICBpZiAoaXYubGVuZ3RoID4gaW5DaXBoZXJJbmZvLml2TGVuKVxuICAgICAgaXYgPSBpdi5zbGljZSgwLCBpbkNpcGhlckluZm8uaXZMZW4pO1xuICB9IGVsc2Uge1xuICAgIGl2ID0gRU1QVFlfQlVGRkVSOyAvLyBTdHJlYW1pbmcgY2lwaGVycyBkb24ndCB1c2UgYW4gSVYgdXBmcm9udFxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgcmV1c2FibGUgYnVmZmVyIGZvciBkZWNyeXB0aW9uIHB1cnBvc2VzXG4gIGluc3RhdGUuZGVjcnlwdC5idWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoaW5DaXBoZXJJbmZvLmJsb2NrTGVuKTtcblxuICBrZXkgPSBjcnlwdG8uY3JlYXRlSGFzaChkaEhhc2hBbGdvKVxuICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgLnVwZGF0ZShvdXRzdGF0ZS5leGNoYW5nZUhhc2gpXG4gICAgICAgICAgICAgIC51cGRhdGUoIXNlbGYuc2VydmVyID8gJ0QnIDogJ0MnLCAnYXNjaWknKVxuICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLnNlc3Npb25JZClcbiAgICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICB3aGlsZSAoa2V5Lmxlbmd0aCA8IGluQ2lwaGVySW5mby5rZXlMZW4pIHtcbiAgICBrZXkgPSBCdWZmZXIuY29uY2F0KFtrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgY3J5cHRvLmNyZWF0ZUhhc2goZGhIYXNoQWxnbylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLmV4Y2hhbmdlSGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlnZXN0KCldKTtcbiAgfVxuICBpZiAoa2V5Lmxlbmd0aCA+IGluQ2lwaGVySW5mby5rZXlMZW4pXG4gICAga2V5ID0ga2V5LnNsaWNlKDAsIGluQ2lwaGVySW5mby5rZXlMZW4pO1xuXG4gIHZhciBkZWNpcGhlckFsZ28gPSBTU0hfVE9fT1BFTlNTTFtpbnN0YXRlLmRlY3J5cHQudHlwZV07XG4gIGluc3RhdGUuZGVjcnlwdC5pbnN0YW5jZSA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGRlY2lwaGVyQWxnbywga2V5LCBpdik7XG4gIGluc3RhdGUuZGVjcnlwdC5pbnN0YW5jZS5zZXRBdXRvUGFkZGluZyhmYWxzZSk7XG4gIGluc3RhdGUuZGVjcnlwdC5pdiA9IGl2O1xuICBpbnN0YXRlLmRlY3J5cHQua2V5ID0ga2V5O1xuXG4gIHZhciBlbXB0eUJ1ZjtcbiAgaWYgKG91dENpcGhlckluZm8uZGlzY2FyZExlbiA+IDApIHtcbiAgICBlbXB0eUJ1ZiA9IEJ1ZmZlci5hbGxvYyhvdXRDaXBoZXJJbmZvLmRpc2NhcmRMZW4pO1xuICAgIG91dHN0YXRlLmVuY3J5cHQuaW5zdGFuY2UudXBkYXRlKGVtcHR5QnVmKTtcbiAgfVxuICBpZiAoaW5DaXBoZXJJbmZvLmRpc2NhcmRMZW4gPiAwKSB7XG4gICAgaWYgKCFlbXB0eUJ1ZiB8fCBlbXB0eUJ1Zi5sZW5ndGggIT09IGluQ2lwaGVySW5mby5kaXNjYXJkTGVuKVxuICAgICAgZW1wdHlCdWYgPSBCdWZmZXIuYWxsb2Mob3V0Q2lwaGVySW5mby5kaXNjYXJkTGVuKTtcbiAgICBpbnN0YXRlLmRlY3J5cHQuaW5zdGFuY2UudXBkYXRlKGVtcHR5QnVmKTtcbiAgfVxuXG4gIHZhciBvdXRITUFDSW5mbyA9IG91dHN0YXRlLmhtYWMuaW5mbyA9IEhNQUNfSU5GT1tvdXRzdGF0ZS5obWFjLnR5cGVdO1xuICB2YXIgaW5ITUFDSW5mbyA9IGluc3RhdGUuaG1hYy5pbmZvID0gSE1BQ19JTkZPW2luc3RhdGUuaG1hYy50eXBlXTtcblxuICBpZiAob3V0Q2lwaGVySW5mby5hdXRoTGVuID09PSAwKSB7XG4gICAga2V5ID0gY3J5cHRvLmNyZWF0ZUhhc2goZGhIYXNoQWxnbylcbiAgICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLmV4Y2hhbmdlSGFzaClcbiAgICAgICAgICAgICAgICAudXBkYXRlKCFzZWxmLnNlcnZlciA/ICdFJyA6ICdGJywgJ2FzY2lpJylcbiAgICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLnNlc3Npb25JZClcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgd2hpbGUgKGtleS5sZW5ndGggPCBvdXRITUFDSW5mby5sZW4pIHtcbiAgICAgIGtleSA9IEJ1ZmZlci5jb25jYXQoW2tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyeXB0by5jcmVhdGVIYXNoKGRoSGFzaEFsZ28pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlnZXN0KCldKTtcbiAgICB9XG4gICAgaWYgKGtleS5sZW5ndGggPiBvdXRITUFDSW5mby5sZW4pXG4gICAgICBrZXkgPSBrZXkuc2xpY2UoMCwgb3V0SE1BQ0luZm8ubGVuKTtcbiAgICBvdXRzdGF0ZS5obWFjLmtleSA9IGtleTtcbiAgfSBlbHNlIHtcbiAgICBvdXRzdGF0ZS5obWFjLmtleSA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaW5DaXBoZXJJbmZvLmF1dGhMZW4gPT09IDApIHtcbiAgICBrZXkgPSBjcnlwdG8uY3JlYXRlSGFzaChkaEhhc2hBbGdvKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoc2VjcmV0KVxuICAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoIXNlbGYuc2VydmVyID8gJ0YnIDogJ0UnLCAnYXNjaWknKVxuICAgICAgICAgICAgICAgIC51cGRhdGUob3V0c3RhdGUuc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICB3aGlsZSAoa2V5Lmxlbmd0aCA8IGluSE1BQ0luZm8ubGVuKSB7XG4gICAgICBrZXkgPSBCdWZmZXIuY29uY2F0KFtrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjcnlwdG8uY3JlYXRlSGFzaChkaEhhc2hBbGdvKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShzZWNyZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlKG91dHN0YXRlLmV4Y2hhbmdlSGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGUoa2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRpZ2VzdCgpXSk7XG4gICAgfVxuICAgIGlmIChrZXkubGVuZ3RoID4gaW5ITUFDSW5mby5sZW4pXG4gICAgICBrZXkgPSBrZXkuc2xpY2UoMCwgaW5ITUFDSW5mby5sZW4pO1xuICAgIGluc3RhdGUuaG1hYy5rZXkgPSBrZXk7XG4gIH0gZWxzZSB7XG4gICAgaW5zdGF0ZS5obWFjLmtleSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIHJldXNhYmxlIGJ1ZmZlciBmb3IgbWVzc2FnZSB2ZXJpZmljYXRpb24gcHVycG9zZXNcbiAgdmFyIGluSE1BQ1NpemUgPSBpbkNpcGhlckluZm8uYXV0aExlbiB8fCBpbnN0YXRlLmhtYWMuaW5mby5hY3R1YWxMZW47XG4gIGlmICghaW5zdGF0ZS5obWFjLmJ1ZlxuICAgICAgfHwgaW5zdGF0ZS5obWFjLmJ1Zi5sZW5ndGggIT09IGluSE1BQ1NpemUpIHtcbiAgICBpbnN0YXRlLmhtYWMuYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKGluSE1BQ1NpemUpO1xuICB9XG5cbiAgb3V0c3RhdGUuZXhjaGFuZ2VIYXNoID0gdW5kZWZpbmVkO1xuXG4gIGlmIChvdXRzdGF0ZS5jb21wcmVzcy50eXBlID09PSAnemxpYicpIHtcbiAgICBvdXRzdGF0ZS5jb21wcmVzcy5pbnN0YW5jZSA9IHpsaWIuY3JlYXRlRGVmbGF0ZShaTElCX09QVFMpO1xuICAgIG91dHN0YXRlLmNvbXByZXNzLnF1ZXVlID0gW107XG4gIH0gZWxzZSBpZiAob3V0c3RhdGUuY29tcHJlc3MudHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgb3V0c3RhdGUuY29tcHJlc3MuaW5zdGFuY2UgPSBmYWxzZTtcbiAgICBvdXRzdGF0ZS5jb21wcmVzcy5xdWV1ZSA9IG51bGw7XG4gIH1cbiAgaWYgKGluc3RhdGUuZGVjb21wcmVzcy50eXBlID09PSAnemxpYicpXG4gICAgaW5zdGF0ZS5kZWNvbXByZXNzLmluc3RhbmNlID0gemxpYi5jcmVhdGVJbmZsYXRlKFpMSUJfT1BUUyk7XG4gIGVsc2UgaWYgKGluc3RhdGUuZGVjb21wcmVzcy50eXBlID09PSAnbm9uZScpXG4gICAgaW5zdGF0ZS5kZWNvbXByZXNzLmluc3RhbmNlID0gZmFsc2U7XG5cbiAgc2VsZi5ieXRlc1NlbnQgPSBzZWxmLmJ5dGVzUmVjZWl2ZWQgPSAwO1xuXG4gIGlmIChvdXRzdGF0ZS5zdGF0dXMgPT09IE9VVF9SRUtFWUlORykge1xuICAgIG91dHN0YXRlLnN0YXR1cyA9IE9VVF9SRUFEWTtcblxuICAgIC8vIEVtcHR5IG91ciBvdXRib3VuZCBidWZmZXIgb2YgYW55IGRhdGEgd2UgdHJpZWQgdG8gc2VuZCBkdXJpbmcgdGhlXG4gICAgLy8gcmUta2V5aW5nIHByb2Nlc3NcbiAgICB2YXIgcXVldWUgPSBvdXRzdGF0ZS5yZWtleVF1ZXVlO1xuICAgIHZhciBxbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHZhciBxID0gMDtcblxuICAgIG91dHN0YXRlLnJla2V5UXVldWUgPSBbXTtcblxuICAgIGZvciAoOyBxIDwgcWxlbjsgKytxKSB7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHF1ZXVlW3FdKSlcbiAgICAgICAgc2VuZChzZWxmLCBxdWV1ZVtxXSk7XG4gICAgICBlbHNlXG4gICAgICAgIHNlbmQoc2VsZiwgcXVldWVbcV1bMF0sIHF1ZXVlW3FdWzFdKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgZW1wdHkgb3VyIGluYm91bmQgYnVmZmVyIG9mIGFueSBub24tdHJhbnNwb3J0IGxheWVyIHBhY2tldHMgd2VcbiAgICAvLyByZWNlaXZlZCBkdXJpbmcgdGhlIHJlLWtleWluZyBwcm9jZXNzXG4gICAgcXVldWUgPSBpbnN0YXRlLnJla2V5UXVldWU7XG4gICAgcWxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICBxID0gMDtcblxuICAgIGluc3RhdGUucmVrZXlRdWV1ZSA9IFtdO1xuXG4gICAgdmFyIGN1clNlcW5vID0gaW5zdGF0ZS5zZXFubztcbiAgICBmb3IgKDsgcSA8IHFsZW47ICsrcSkge1xuICAgICAgaW5zdGF0ZS5zZXFubyA9IHF1ZXVlW3FdWzBdO1xuICAgICAgaW5zdGF0ZS5wYXlsb2FkID0gcXVldWVbcV1bMV07XG4gICAgICBpZiAocGFyc2VQYWNrZXQoc2VsZikgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGlmIChpbnN0YXRlLnN0YXR1cyA9PT0gSU5fSU5JVCkge1xuICAgICAgICAvLyBXZSB3ZXJlIHJlc2V0IGR1ZSB0byBzb21lIGVycm9yL2Rpc2FncmVlbWVudCA/XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaW5zdGF0ZS5zZXFubyA9IGN1clNlcW5vO1xuICB9IGVsc2Uge1xuICAgIG91dHN0YXRlLnN0YXR1cyA9IE9VVF9SRUFEWTtcbiAgICBpZiAoaW5zdGF0ZS5zdGF0dXMgPT09IElOX1BBQ0tFVCkge1xuICAgICAgLy8gRXhwbGljaXRseSB1cGRhdGUgaW5jb21pbmcgcGFja2V0IHBhcnNlciBzdGF0dXMgaW4gb3JkZXIgdG8gZ2V0IHRoZVxuICAgICAgLy8gY29ycmVjdCBkZWNpcGhlciwgaG1hYywgZXRjLiBzdGF0ZXMuXG5cbiAgICAgIC8vIFdlIG9ubHkgZ2V0IGhlcmUgaWYgdGhlIGhvc3QgZmluZ2VycHJpbnQgY2FsbGJhY2sgd2FzIGNhbGxlZFxuICAgICAgLy8gYXN5bmNocm9ub3VzbHkgYW5kIHRoZSBpbmNvbWluZyBwYWNrZXQgcGFyc2VyIGlzIHN0aWxsIGV4cGVjdGluZyBhblxuICAgICAgLy8gdW5lbmNyeXB0ZWQgcGFja2V0LCBldGMuXG5cbiAgICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX1BBQ0tFVEJFRk9SRSAodXBkYXRlKSAoZXhwZWN0aW5nICdcbiAgICAgICAgICAgICAgICAgKyBpbkNpcGhlckluZm8uYmxvY2tMZW4gKyAnKScpO1xuICAgICAgLy8gV2FpdCBmb3IgdGhlIHJpZ2h0IG51bWJlciBvZiBieXRlcyBzbyB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBpbmNvbWluZ1xuICAgICAgLy8gcGFja2V0IGxlbmd0aFxuICAgICAgZXhwZWN0RGF0YShzZWxmLFxuICAgICAgICAgICAgICAgICBFWFBfVFlQRV9CWVRFUyxcbiAgICAgICAgICAgICAgICAgaW5DaXBoZXJJbmZvLmJsb2NrTGVuLFxuICAgICAgICAgICAgICAgICBpbnN0YXRlLmRlY3J5cHQuYnVmKTtcbiAgICB9XG4gICAgc2VsZi5lbWl0KCdyZWFkeScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBhY2tldFR5cGUoc2VsZiwgcGt0VHlwZSkge1xuICB2YXIga2V4ID0gc2VsZi5fc3RhdGUua2V4O1xuICBpZiAoa2V4KSB7XG4gICAgLy8gRGlzYW1iaWd1YXRlXG4gICAgc3dpdGNoIChwa3RUeXBlKSB7XG4gICAgICBjYXNlIDMwOlxuICAgICAgICByZXR1cm4ga2V4LnBrdEluaXQ7XG4gICAgICBjYXNlIDMxOlxuICAgICAgICBzd2l0Y2ggKGtleC50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgcmV0dXJuICdLRVhESF9SRVBMWSc7XG4gICAgICAgICAgY2FzZSAnZ3JvdXBleCc6XG4gICAgICAgICAgICByZXR1cm4gJ0tFWERIX0dFWF9HUk9VUCc7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAnS0VYRUNESF9SRVBMWSc7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDMzOlxuICAgICAgICBpZiAoa2V4LnR5cGUgPT09ICdncm91cGV4JylcbiAgICAgICAgICByZXR1cm4gJ0tFWERIX0dFWF9SRVBMWSc7XG4gICAgfVxuICB9XG4gIHJldHVybiBNRVNTQUdFW3BrdFR5cGVdO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhY2tldChzZWxmLCBjYWxsYmFjaykge1xuICB2YXIgaW5zdGF0ZSA9IHNlbGYuX3N0YXRlLmluY29taW5nO1xuICB2YXIgb3V0c3RhdGUgPSBzZWxmLl9zdGF0ZS5vdXRnb2luZztcbiAgdmFyIHBheWxvYWQgPSBpbnN0YXRlLnBheWxvYWQ7XG4gIHZhciBzZXFubyA9IGluc3RhdGUuc2Vxbm87XG4gIHZhciBzZXJ2aWNlTmFtZTtcbiAgdmFyIGxhbmc7XG4gIHZhciBtZXNzYWdlO1xuICB2YXIgaW5mbztcbiAgdmFyIGNoYW47XG4gIHZhciBkYXRhO1xuICB2YXIgc3JjSVA7XG4gIHZhciBzcmNQb3J0O1xuICB2YXIgc2VuZGVyO1xuICB2YXIgd2luZG93O1xuICB2YXIgcGFja2V0U2l6ZTtcbiAgdmFyIHJlY2lwaWVudDtcbiAgdmFyIGRlc2NyaXB0aW9uO1xuICB2YXIgc29ja2V0UGF0aDtcblxuICBpZiAoKytpbnN0YXRlLnNlcW5vID4gTUFYX1NFUU5PKVxuICAgIGluc3RhdGUuc2Vxbm8gPSAwO1xuXG4gIGlmIChpbnN0YXRlLmlnbm9yZU5leHQpIHtcbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBQYWNrZXQgaWdub3JlZCcpO1xuICAgIGluc3RhdGUuaWdub3JlTmV4dCA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0eXBlID0gcGF5bG9hZFswXTtcbiAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgd2UgcmVjZWl2ZSBhIHBhY2tldCBkdXJpbmcgaGFuZHNoYWtlIHRoYXQgaXMgbm90IHRoZSBleHBlY3RlZCBwYWNrZXRcbiAgLy8gYW5kIGl0IGlzIG5vdCBvbmUgb2Y6IERJU0NPTk5FQ1QsIElHTk9SRSwgVU5JTVBMRU1FTlRFRCwgb3IgREVCVUcsIHRoZW4gd2VcbiAgLy8gY2xvc2UgdGhlIHN0cmVhbVxuICBpZiAob3V0c3RhdGUuc3RhdHVzICE9PSBPVVRfUkVBRFlcbiAgICAgICYmIGdldFBhY2tldFR5cGUoc2VsZiwgdHlwZSkgIT09IGluc3RhdGUuZXhwZWN0ZWRQYWNrZXRcbiAgICAgICYmIHR5cGUgPCAxXG4gICAgICAmJiB0eXBlID4gNCkge1xuICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX1BBQ0tFVERBVEFBRlRFUiwgZXhwZWN0ZWQ6ICdcbiAgICAgICAgICAgICAgICsgaW5zdGF0ZS5leHBlY3RlZFBhY2tldFxuICAgICAgICAgICAgICAgKyAnIGJ1dCBnb3Q6ICdcbiAgICAgICAgICAgICAgICsgZ2V0UGFja2V0VHlwZShzZWxmLCB0eXBlKSk7XG4gICAgLy8gWFhYOiBQb3RlbnRpYWwgaXNzdWUgd2hlcmUgdGhlIG1vZHVsZSB1c2VyIGRlY2lkZXMgdG8gaW5pdGlhdGUgYSByZWtleVxuICAgIC8vIHZpYSBLRVhJTklUKCkgKHdoaWNoIHNldHMgYGV4cGVjdGVkUGFja2V0YCkgYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0XG4gICAgLy8gYW5kIHRoZXJlIGlzIHN0aWxsIGFub3RoZXIgcGFja2V0IGFscmVhZHkgd2FpdGluZyB0byBiZSBwYXJzZWQgYXQgdGhlXG4gICAgLy8gdGltZSB0aGUgS0VYSU5JVCBpcyB3cml0dGVuLiB0aGlzIHdpbGwgY2F1c2UgYW4gdW5leHBlY3RlZCBkaXNjb25uZWN0Li4uXG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLlBST1RPQ09MX0VSUk9SKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdSZWNlaXZlZCB1bmV4cGVjdGVkIHBhY2tldCcpO1xuICAgIGVyci5sZXZlbCA9ICdwcm90b2NvbCc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGUgPT09IE1FU1NBR0UuQ0hBTk5FTF9EQVRBKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfREFUQVxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICBzdHJpbmcgICAgZGF0YVxuICAgICovXG4gICAgY2hhbiA9IHJlYWRJbnQocGF5bG9hZCwgMSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChjaGFuID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBUT0RPOiBNQVhfQ0hBTl9EQVRBX0xFTiBoZXJlIHNob3VsZCByZWFsbHkgYmUgZGVwZW5kZW50IHVwb24gdGhlXG4gICAgLy8gICAgICAgY2hhbm5lbCdzIHBhY2tldCBzaXplLiBUaGUgc3NoMiBtb2R1bGUgdXNlcyAzMktCLCBzbyB3ZSdsbCBoYXJkXG4gICAgLy8gICAgICAgY29kZSB0aGlzIGZvciBub3cgLi4uXG4gICAgZGF0YSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgNSwgc2VsZiwgY2FsbGJhY2ssIDMyNzY4KTtcbiAgICBpZiAoZGF0YSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6IENIQU5ORUxfREFUQSAoJ1xuICAgICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgICArICcpJyk7XG4gICAgc2VsZi5lbWl0KCdDSEFOTkVMX0RBVEE6JyArIGNoYW4sIGRhdGEpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NBR0UuQ0hBTk5FTF9FWFRFTkRFRF9EQVRBKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfRVhURU5ERURfREFUQVxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICB1aW50MzIgICAgZGF0YV90eXBlX2NvZGVcbiAgICAgIHN0cmluZyAgICBkYXRhXG4gICAgKi9cbiAgICBjaGFuID0gcmVhZEludChwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNoYW4gPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBkYXRhVHlwZSA9IHJlYWRJbnQocGF5bG9hZCwgNSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChkYXRhVHlwZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgZGF0YSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgOSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChkYXRhID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIHBhY2tldDogJ1xuICAgICAgICAgICAgICAgKyAnQ0hBTk5FTF9FWFRFTkRFRF9EQVRBICgnXG4gICAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICAgICsgJyknKTtcbiAgICBzZWxmLmVtaXQoJ0NIQU5ORUxfRVhURU5ERURfREFUQTonICsgY2hhbiwgZGF0YVR5cGUsIGRhdGEpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NBR0UuQ0hBTk5FTF9XSU5ET1dfQURKVVNUKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfV0lORE9XX0FESlVTVFxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICB1aW50MzIgICAgYnl0ZXMgdG8gYWRkXG4gICAgKi9cbiAgICBjaGFuID0gcmVhZEludChwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNoYW4gPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBieXRlc1RvQWRkID0gcmVhZEludChwYXlsb2FkLCA1LCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGJ5dGVzVG9BZGQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX1BBQ0tFVERBVEFBRlRFUiwgcGFja2V0OiAnXG4gICAgICAgICAgICAgICArICdDSEFOTkVMX1dJTkRPV19BREpVU1QgKCdcbiAgICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICAgKyAnLCAnXG4gICAgICAgICAgICAgICArIGJ5dGVzVG9BZGRcbiAgICAgICAgICAgICAgICsgJyknKTtcbiAgICBzZWxmLmVtaXQoJ0NIQU5ORUxfV0lORE9XX0FESlVTVDonICsgY2hhbiwgYnl0ZXNUb0FkZCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5DSEFOTkVMX1NVQ0NFU1MpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9TVUNDRVNTXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAqL1xuICAgIGNoYW4gPSByZWFkSW50KHBheWxvYWQsIDEsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoY2hhbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6IENIQU5ORUxfU1VDQ0VTUyAoJ1xuICAgICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgICArICcpJyk7XG4gICAgc2VsZi5lbWl0KCdDSEFOTkVMX1NVQ0NFU1M6JyArIGNoYW4pO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NBR0UuQ0hBTk5FTF9GQUlMVVJFKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfRkFJTFVSRVxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgKi9cbiAgICBjaGFuID0gcmVhZEludChwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNoYW4gPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX1BBQ0tFVERBVEFBRlRFUiwgcGFja2V0OiBDSEFOTkVMX0ZBSUxVUkUgKCdcbiAgICAgICAgICAgICAgICsgY2hhblxuICAgICAgICAgICAgICAgKyAnKScpO1xuICAgIHNlbGYuZW1pdCgnQ0hBTk5FTF9GQUlMVVJFOicgKyBjaGFuKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLkNIQU5ORUxfRU9GKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfRU9GXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAqL1xuICAgIGNoYW4gPSByZWFkSW50KHBheWxvYWQsIDEsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoY2hhbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6IENIQU5ORUxfRU9GICgnXG4gICAgICAgICAgICAgICArIGNoYW5cbiAgICAgICAgICAgICAgICsgJyknKTtcbiAgICBzZWxmLmVtaXQoJ0NIQU5ORUxfRU9GOicgKyBjaGFuKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLkNIQU5ORUxfT1BFTikge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX09QRU5cbiAgICAgIHN0cmluZyAgICBjaGFubmVsIHR5cGUgaW4gVVMtQVNDSUkgb25seVxuICAgICAgdWludDMyICAgIHNlbmRlciBjaGFubmVsXG4gICAgICB1aW50MzIgICAgaW5pdGlhbCB3aW5kb3cgc2l6ZVxuICAgICAgdWludDMyICAgIG1heGltdW0gcGFja2V0IHNpemVcbiAgICAgIC4uLi4gICAgICBjaGFubmVsIHR5cGUgc3BlY2lmaWMgZGF0YSBmb2xsb3dzXG4gICAgKi9cbiAgICB2YXIgY2hhblR5cGUgPSByZWFkU3RyaW5nKHBheWxvYWQsIDEsICdhc2NpaScsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoY2hhblR5cGUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHNlbmRlciA9IHJlYWRJbnQocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHNlbmRlciA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2luZG93ID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh3aW5kb3cgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHBhY2tldFNpemUgPSByZWFkSW50KHBheWxvYWQsIHBheWxvYWQuX3BvcyArPSA0LCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHBhY2tldFNpemUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBjaGFubmVsO1xuXG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6IENIQU5ORUxfT1BFTiAoJ1xuICAgICAgICAgICAgICAgKyBzZW5kZXJcbiAgICAgICAgICAgICAgICsgJywgJ1xuICAgICAgICAgICAgICAgKyBjaGFuVHlwZVxuICAgICAgICAgICAgICAgKyAnKScpO1xuXG4gICAgaWYgKGNoYW5UeXBlID09PSAnZm9yd2FyZGVkLXRjcGlwJyAvLyBTZXJ2ZXItPkNsaWVudFxuICAgICAgICB8fCBjaGFuVHlwZSA9PT0gJ2RpcmVjdC10Y3BpcCcpIHsgLy8gQ2xpZW50LT5TZXJ2ZXJcbiAgICAgIC8qXG4gICAgICAgIHN0cmluZyAgICBhZGRyZXNzIHRoYXQgd2FzIGNvbm5lY3RlZCAvIGhvc3QgdG8gY29ubmVjdFxuICAgICAgICB1aW50MzIgICAgcG9ydCB0aGF0IHdhcyBjb25uZWN0ZWQgLyBwb3J0IHRvIGNvbm5lY3RcbiAgICAgICAgc3RyaW5nICAgIG9yaWdpbmF0b3IgSVAgYWRkcmVzc1xuICAgICAgICB1aW50MzIgICAgb3JpZ2luYXRvciBwb3J0XG4gICAgICAqL1xuICAgICAgdmFyIGRlc3RJUCA9IHJlYWRTdHJpbmcocGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuX3BvcyArPSA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzY2lpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICBpZiAoZGVzdElQID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGRlc3RQb3J0ID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChkZXN0UG9ydCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIHNyY0lQID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKHNyY0lQID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgc3JjUG9ydCA9IHJlYWRJbnQocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAoc3JjUG9ydCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNoYW5uZWwgPSB7XG4gICAgICAgIHR5cGU6IGNoYW5UeXBlLFxuICAgICAgICBzZW5kZXI6IHNlbmRlcixcbiAgICAgICAgd2luZG93OiB3aW5kb3csXG4gICAgICAgIHBhY2tldFNpemU6IHBhY2tldFNpemUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBkZXN0SVA6IGRlc3RJUCxcbiAgICAgICAgICBkZXN0UG9ydDogZGVzdFBvcnQsXG4gICAgICAgICAgc3JjSVA6IHNyY0lQLFxuICAgICAgICAgIHNyY1BvcnQ6IHNyY1BvcnRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKC8vIFNlcnZlci0+Q2xpZW50XG4gICAgICAgICAgICAgICBjaGFuVHlwZSA9PT0gJ2ZvcndhcmRlZC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbSdcbiAgICAgICAgICAgICAgIC8vIENsaWVudC0+U2VydmVyXG4gICAgICAgICAgICAgICB8fCBjaGFuVHlwZSA9PT0gJ2RpcmVjdC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbScpIHtcbiAgICAgIC8qXG4gICAgICAgIHN0cmluZyAgICBzb2NrZXQgcGF0aFxuICAgICAgICBzdHJpbmcgICAgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAgICAgICovXG4gICAgICBzb2NrZXRQYXRoID0gcmVhZFN0cmluZyhwYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5fcG9zICs9IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmOCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgaWYgKHNvY2tldFBhdGggPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjaGFubmVsID0ge1xuICAgICAgICB0eXBlOiBjaGFuVHlwZSxcbiAgICAgICAgc2VuZGVyOiBzZW5kZXIsXG4gICAgICAgIHdpbmRvdzogd2luZG93LFxuICAgICAgICBwYWNrZXRTaXplOiBwYWNrZXRTaXplLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc29ja2V0UGF0aDogc29ja2V0UGF0aCxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNoYW5UeXBlID09PSAneDExJykgeyAvLyBTZXJ2ZXItPkNsaWVudFxuICAgICAgLypcbiAgICAgICAgc3RyaW5nICAgIG9yaWdpbmF0b3IgYWRkcmVzcyAoZS5nLiwgXCIxOTIuMTY4LjcuMzhcIilcbiAgICAgICAgdWludDMyICAgIG9yaWdpbmF0b3IgcG9ydFxuICAgICAgKi9cbiAgICAgIHNyY0lQID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKHNyY0lQID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgc3JjUG9ydCA9IHJlYWRJbnQocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAoc3JjUG9ydCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNoYW5uZWwgPSB7XG4gICAgICAgIHR5cGU6IGNoYW5UeXBlLFxuICAgICAgICBzZW5kZXI6IHNlbmRlcixcbiAgICAgICAgd2luZG93OiB3aW5kb3csXG4gICAgICAgIHBhY2tldFNpemU6IHBhY2tldFNpemUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBzcmNJUDogc3JjSVAsXG4gICAgICAgICAgc3JjUG9ydDogc3JjUG9ydFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAnc2Vzc2lvbicgKENsaWVudC0+U2VydmVyKSwgJ2F1dGgtYWdlbnRAb3BlbnNzaC5jb20nIChTZXJ2ZXItPkNsaWVudClcbiAgICAgIGNoYW5uZWwgPSB7XG4gICAgICAgIHR5cGU6IGNoYW5UeXBlLFxuICAgICAgICBzZW5kZXI6IHNlbmRlcixcbiAgICAgICAgd2luZG93OiB3aW5kb3csXG4gICAgICAgIHBhY2tldFNpemU6IHBhY2tldFNpemUsXG4gICAgICAgIGRhdGE6IHt9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHNlbGYuZW1pdCgnQ0hBTk5FTF9PUEVOJywgY2hhbm5lbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5DSEFOTkVMX09QRU5fQ09ORklSTUFUSU9OKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfT1BFTl9DT05GSVJNQVRJT05cbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgdWludDMyICAgIHNlbmRlciBjaGFubmVsXG4gICAgICB1aW50MzIgICAgaW5pdGlhbCB3aW5kb3cgc2l6ZVxuICAgICAgdWludDMyICAgIG1heGltdW0gcGFja2V0IHNpemVcbiAgICAgIC4uLi4gICAgICBjaGFubmVsIHR5cGUgc3BlY2lmaWMgZGF0YSBmb2xsb3dzXG4gICAgKi9cbiAgICAvLyBcIlRoZSAncmVjaXBpZW50IGNoYW5uZWwnIGlzIHRoZSBjaGFubmVsIG51bWJlciBnaXZlbiBpbiB0aGVcbiAgICAvLyBvcmlnaW5hbCBvcGVuIHJlcXVlc3QsIGFuZCAnc2VuZGVyIGNoYW5uZWwnIGlzIHRoZSBjaGFubmVsIG51bWJlclxuICAgIC8vIGFsbG9jYXRlZCBieSB0aGUgb3RoZXIgc2lkZS5cIlxuICAgIHJlY2lwaWVudCA9IHJlYWRJbnQocGF5bG9hZCwgMSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChyZWNpcGllbnQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHNlbmRlciA9IHJlYWRJbnQocGF5bG9hZCwgNSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChzZW5kZXIgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHdpbmRvdyA9IHJlYWRJbnQocGF5bG9hZCwgOSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh3aW5kb3cgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHBhY2tldFNpemUgPSByZWFkSW50KHBheWxvYWQsIDEzLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHBhY2tldFNpemUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaW5mbyA9IHtcbiAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50LFxuICAgICAgc2VuZGVyOiBzZW5kZXIsXG4gICAgICB3aW5kb3c6IHdpbmRvdyxcbiAgICAgIHBhY2tldFNpemU6IHBhY2tldFNpemVcbiAgICB9O1xuXG4gICAgaWYgKHBheWxvYWQubGVuZ3RoID4gMTcpXG4gICAgICBpbmZvLmRhdGEgPSBwYXlsb2FkLnNsaWNlKDE3KTtcblxuICAgIHNlbGYuZW1pdCgnQ0hBTk5FTF9PUEVOX0NPTkZJUk1BVElPTjonICsgaW5mby5yZWNpcGllbnQsIGluZm8pO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NBR0UuQ0hBTk5FTF9PUEVOX0ZBSUxVUkUpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9PUEVOX0ZBSUxVUkVcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgdWludDMyICAgIHJlYXNvbiBjb2RlXG4gICAgICBzdHJpbmcgICAgZGVzY3JpcHRpb24gaW4gSVNPLTEwNjQ2IFVURi04IGVuY29kaW5nXG4gICAgICBzdHJpbmcgICAgbGFuZ3VhZ2UgdGFnXG4gICAgKi9cbiAgICByZWNpcGllbnQgPSByZWFkSW50KHBheWxvYWQsIDEsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAocmVjaXBpZW50ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVhc29uQ29kZSA9IHJlYWRJbnQocGF5bG9hZCwgNSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChyZWFzb25Db2RlID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBkZXNjcmlwdGlvbiA9IHJlYWRTdHJpbmcocGF5bG9hZCwgOSwgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsYW5nID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChsYW5nID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBwYXlsb2FkLl9wb3MgPSA5O1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlYXNvbkNvZGU6IHJlYXNvbkNvZGUsXG4gICAgICByZWFzb246IENIQU5ORUxfT1BFTl9GQUlMVVJFW3JlYXNvbkNvZGVdLFxuICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgbGFuZzogbGFuZ1xuICAgIH07XG5cbiAgICBzZWxmLmVtaXQoJ0NIQU5ORUxfT1BFTl9GQUlMVVJFOicgKyBpbmZvLnJlY2lwaWVudCwgaW5mbyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5DSEFOTkVMX0NMT1NFKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfQ0xPU0VcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICovXG4gICAgY2hhbiA9IHJlYWRJbnQocGF5bG9hZCwgMSwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChjaGFuID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIHBhY2tldDogQ0hBTk5FTF9DTE9TRSAoJ1xuICAgICAgICAgICAgICAgKyBjaGFuXG4gICAgICAgICAgICAgICArICcpJyk7XG4gICAgc2VsZi5lbWl0KCdDSEFOTkVMX0NMT1NFOicgKyBjaGFuKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLklHTk9SRSkge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19JR05PUkVcbiAgICAgIHN0cmluZyAgICBkYXRhXG4gICAgKi9cbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLkRJU0NPTk5FQ1QpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfRElTQ09OTkVDVFxuICAgICAgdWludDMyICAgIHJlYXNvbiBjb2RlXG4gICAgICBzdHJpbmcgICAgZGVzY3JpcHRpb24gaW4gSVNPLTEwNjQ2IFVURi04IGVuY29kaW5nXG4gICAgICBzdHJpbmcgICAgbGFuZ3VhZ2UgdGFnXG4gICAgKi9cbiAgICB2YXIgcmVhc29uID0gcmVhZEludChwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHJlYXNvbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlYXNvblRleHQgPSBESVNDT05ORUNUX1JFQVNPTltyZWFzb25dO1xuICAgIGRlc2NyaXB0aW9uID0gcmVhZFN0cmluZyhwYXlsb2FkLCA1LCAndXRmOCcsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoZGVzY3JpcHRpb24gPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHBheWxvYWQuX3BvcyA8IHBheWxvYWQubGVuZ3RoKVxuICAgICAgbGFuZyA9IHJlYWRTdHJpbmcocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCAnYXNjaWknLCBzZWxmLCBjYWxsYmFjayk7XG5cbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIHBhY2tldDogRElTQ09OTkVDVCAoJ1xuICAgICAgICAgICAgICAgKyByZWFzb25UZXh0XG4gICAgICAgICAgICAgICArICcpJyk7XG5cbiAgICBzZWxmLmVtaXQoJ0RJU0NPTk5FQ1QnLCByZWFzb25UZXh0LCByZWFzb24sIGRlc2NyaXB0aW9uLCBsYW5nKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLkRFQlVHKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0RFQlVHXG4gICAgICBib29sZWFuICAgYWx3YXlzX2Rpc3BsYXlcbiAgICAgIHN0cmluZyAgICBtZXNzYWdlIGluIElTTy0xMDY0NiBVVEYtOCBlbmNvZGluZ1xuICAgICAgc3RyaW5nICAgIGxhbmd1YWdlIHRhZ1xuICAgICovXG4gICAgbWVzc2FnZSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgMiwgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKG1lc3NhZ2UgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxhbmcgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChsYW5nID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHNlbGYuZW1pdCgnREVCVUcnLCBtZXNzYWdlLCBsYW5nKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLk5FV0tFWVMpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfTkVXX0tFWVNcbiAgICAqL1xuICAgIHNlbGYuZW1pdCgnTkVXS0VZUycpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NBR0UuU0VSVklDRV9SRVFVRVNUKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX1NFUlZJQ0VfUkVRVUVTVFxuICAgICAgc3RyaW5nICAgIHNlcnZpY2UgbmFtZVxuICAgICovXG4gICAgc2VydmljZU5hbWUgPSByZWFkU3RyaW5nKHBheWxvYWQsIDEsICdhc2NpaScsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoc2VydmljZU5hbWUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgc2VsZi5lbWl0KCdTRVJWSUNFX1JFUVVFU1QnLCBzZXJ2aWNlTmFtZSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5TRVJWSUNFX0FDQ0VQVCkge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19TRVJWSUNFX0FDQ0VQVFxuICAgICAgc3RyaW5nICAgIHNlcnZpY2UgbmFtZVxuICAgICovXG4gICAgc2VydmljZU5hbWUgPSByZWFkU3RyaW5nKHBheWxvYWQsIDEsICdhc2NpaScsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoc2VydmljZU5hbWUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgc2VsZi5lbWl0KCdTRVJWSUNFX0FDQ0VQVCcsIHNlcnZpY2VOYW1lKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLlVTRVJBVVRIX1JFUVVFU1QpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfUkVRVUVTVFxuICAgICAgc3RyaW5nICAgIHVzZXIgbmFtZSBpbiBJU08tMTA2NDYgVVRGLTggZW5jb2RpbmcgW1JGQzM2MjldXG4gICAgICBzdHJpbmcgICAgc2VydmljZSBuYW1lIGluIFVTLUFTQ0lJXG4gICAgICBzdHJpbmcgICAgbWV0aG9kIG5hbWUgaW4gVVMtQVNDSUlcbiAgICAgIC4uLi4gICAgICBtZXRob2Qgc3BlY2lmaWMgZmllbGRzXG4gICAgKi9cbiAgICB2YXIgdXNlcm5hbWUgPSByZWFkU3RyaW5nKHBheWxvYWQsIDEsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh1c2VybmFtZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHN2Y05hbWUgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChzdmNOYW1lID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgbWV0aG9kID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICdhc2NpaScsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAobWV0aG9kID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBtZXRob2REYXRhO1xuICAgIHZhciBtZXRob2REZXNjO1xuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgbWV0aG9kRGF0YSA9IHJlYWRTdHJpbmcocGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuX3BvcyArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmOCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgaWYgKG1ldGhvZERhdGEgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdwdWJsaWNrZXknIHx8IG1ldGhvZCA9PT0gJ2hvc3RiYXNlZCcpIHtcbiAgICAgIHZhciBwa1NpZ25lZDtcbiAgICAgIHZhciBrZXlBbGdvO1xuICAgICAgdmFyIGtleTtcbiAgICAgIHZhciBzaWduYXR1cmU7XG4gICAgICB2YXIgYmxvYjtcbiAgICAgIHZhciBob3N0bmFtZTtcbiAgICAgIHZhciB1c2VybG9jYWw7XG4gICAgICBpZiAobWV0aG9kID09PSAncHVibGlja2V5Jykge1xuICAgICAgICBwa1NpZ25lZCA9IHBheWxvYWRbcGF5bG9hZC5fcG9zKytdO1xuICAgICAgICBpZiAocGtTaWduZWQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHBrU2lnbmVkID0gKHBrU2lnbmVkICE9PSAwKTtcbiAgICAgIH1cbiAgICAgIGtleUFsZ28gPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKGtleUFsZ28gPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBrZXkgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3Bvcywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKGtleSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgaWYgKHBrU2lnbmVkIHx8IG1ldGhvZCA9PT0gJ2hvc3RiYXNlZCcpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2hvc3RiYXNlZCcpIHtcbiAgICAgICAgICBob3N0bmFtZSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCAnYXNjaWknLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKGhvc3RuYW1lID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB1c2VybG9jYWwgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKHVzZXJsb2NhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYmxvYkVuZCA9IHBheWxvYWQuX3BvcztcbiAgICAgICAgc2lnbmF0dXJlID0gcmVhZFN0cmluZyhwYXlsb2FkLCBibG9iRW5kLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICAgIGlmIChzaWduYXR1cmUgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAoc2lnbmF0dXJlLmxlbmd0aCA+ICg0ICsga2V5QWxnby5sZW5ndGggKyA0KVxuICAgICAgICAgICAgJiYgc2lnbmF0dXJlLnRvU3RyaW5nKCdhc2NpaScsIDQsIDQgKyBrZXlBbGdvLmxlbmd0aCkgPT09IGtleUFsZ28pIHtcbiAgICAgICAgICAvLyBTa2lwIGFsZ29MZW4gKyBhbGdvICsgc2lnTGVuXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlLnNsaWNlKDQgKyBrZXlBbGdvLmxlbmd0aCArIDQpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2lnbmF0dXJlID0gc2lnU1NIVG9BU04xKHNpZ25hdHVyZSwga2V5QWxnbywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgICBpZiAoc2lnbmF0dXJlID09PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgYmxvYiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICsgb3V0c3RhdGUuc2Vzc2lvbklkLmxlbmd0aCArIGJsb2JFbmQpO1xuICAgICAgICB3cml0ZVVJbnQzMkJFKGJsb2IsIG91dHN0YXRlLnNlc3Npb25JZC5sZW5ndGgsIDApO1xuICAgICAgICBvdXRzdGF0ZS5zZXNzaW9uSWQuY29weShibG9iLCA0KTtcbiAgICAgICAgcGF5bG9hZC5jb3B5KGJsb2IsIDQgKyBvdXRzdGF0ZS5zZXNzaW9uSWQubGVuZ3RoLCAwLCBibG9iRW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1ldGhvZERlc2MgPSAncHVibGlja2V5IC0tIGNoZWNrJztcbiAgICAgIH1cblxuICAgICAgbWV0aG9kRGF0YSA9IHtcbiAgICAgICAga2V5QWxnbzoga2V5QWxnbyxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlLFxuICAgICAgICBibG9iOiBibG9iLFxuICAgICAgICBsb2NhbEhvc3RuYW1lOiBob3N0bmFtZSxcbiAgICAgICAgbG9jYWxVc2VybmFtZTogdXNlcmxvY2FsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAna2V5Ym9hcmQtaW50ZXJhY3RpdmUnKSB7XG4gICAgICAvLyBTa2lwIGxhbmd1YWdlLCBpdCdzIGRlcHJlY2F0ZWRcbiAgICAgIHZhciBza2lwTGVuID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChza2lwTGVuID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgbWV0aG9kRGF0YSA9IHJlYWRTdHJpbmcocGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuX3BvcyArIDQgKyBza2lwTGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3V0ZjgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgIGlmIChtZXRob2REYXRhID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kICE9PSAnbm9uZScpXG4gICAgICBtZXRob2REYXRhID0gcGF5bG9hZC5zbGljZShwYXlsb2FkLl9wb3MpO1xuXG4gICAgaWYgKG1ldGhvZERlc2MgPT09IHVuZGVmaW5lZClcbiAgICAgIG1ldGhvZERlc2MgPSBtZXRob2Q7XG5cbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIHBhY2tldDogVVNFUkFVVEhfUkVRVUVTVCAoJ1xuICAgICAgICAgICAgICAgKyBtZXRob2REZXNjXG4gICAgICAgICAgICAgICArICcpJyk7XG5cbiAgICBzZWxmLl9zdGF0ZS5hdXRoc1F1ZXVlLnB1c2gobWV0aG9kKTtcbiAgICBzZWxmLmVtaXQoJ1VTRVJBVVRIX1JFUVVFU1QnLCB1c2VybmFtZSwgc3ZjTmFtZSwgbWV0aG9kLCBtZXRob2REYXRhKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLlVTRVJBVVRIX1NVQ0NFU1MpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfU1VDQ0VTU1xuICAgICovXG4gICAgaWYgKG91dHN0YXRlLmNvbXByZXNzLnR5cGUgPT09ICd6bGliQG9wZW5zc2guY29tJykge1xuICAgICAgb3V0c3RhdGUuY29tcHJlc3MuaW5zdGFuY2UgPSB6bGliLmNyZWF0ZURlZmxhdGUoWkxJQl9PUFRTKTtcbiAgICAgIG91dHN0YXRlLmNvbXByZXNzLnF1ZXVlID0gW107XG4gICAgfVxuICAgIGlmIChpbnN0YXRlLmRlY29tcHJlc3MudHlwZSA9PT0gJ3psaWJAb3BlbnNzaC5jb20nKVxuICAgICAgaW5zdGF0ZS5kZWNvbXByZXNzLmluc3RhbmNlID0gemxpYi5jcmVhdGVJbmZsYXRlKFpMSUJfT1BUUyk7XG5cbiAgICBzZWxmLl9zdGF0ZS5hdXRoc1F1ZXVlLnNoaWZ0KCk7XG5cbiAgICBzZWxmLmVtaXQoJ1VTRVJBVVRIX1NVQ0NFU1MnKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLlVTRVJBVVRIX0ZBSUxVUkUpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfRkFJTFVSRVxuICAgICAgbmFtZS1saXN0ICAgIGF1dGhlbnRpY2F0aW9ucyB0aGF0IGNhbiBjb250aW51ZVxuICAgICAgYm9vbGVhbiAgICAgIHBhcnRpYWwgc3VjY2Vzc1xuICAgICovXG4gICAgdmFyIGF1dGhzID0gcmVhZFN0cmluZyhwYXlsb2FkLCAxLCAnYXNjaWknLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGF1dGhzID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcGFydFN1Y2Nlc3MgPSBwYXlsb2FkW3BheWxvYWQuX3Bvc107XG4gICAgaWYgKHBhcnRTdWNjZXNzID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBwYXJ0U3VjY2VzcyA9IChwYXJ0U3VjY2VzcyAhPT0gMCk7XG4gICAgYXV0aHMgPSBhdXRocy5zcGxpdCgnLCcpO1xuXG4gICAgc2VsZi5fc3RhdGUuYXV0aHNRdWV1ZS5zaGlmdCgpO1xuICAgIHNlbGYuZW1pdCgnVVNFUkFVVEhfRkFJTFVSRScsIGF1dGhzLCBwYXJ0U3VjY2Vzcyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5VU0VSQVVUSF9CQU5ORVIpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfQkFOTkVSXG4gICAgICBzdHJpbmcgICAgbWVzc2FnZSBpbiBJU08tMTA2NDYgVVRGLTggZW5jb2RpbmdcbiAgICAgIHN0cmluZyAgICBsYW5ndWFnZSB0YWdcbiAgICAqL1xuICAgIG1lc3NhZ2UgPSByZWFkU3RyaW5nKHBheWxvYWQsIDEsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChtZXNzYWdlID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsYW5nID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChsYW5nID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHNlbGYuZW1pdCgnVVNFUkFVVEhfQkFOTkVSJywgbWVzc2FnZSwgbGFuZyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5HTE9CQUxfUkVRVUVTVCkge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19HTE9CQUxfUkVRVUVTVFxuICAgICAgc3RyaW5nICAgIHJlcXVlc3QgbmFtZSBpbiBVUy1BU0NJSSBvbmx5XG4gICAgICBib29sZWFuICAgd2FudCByZXBseVxuICAgICAgLi4uLiAgICAgIHJlcXVlc3Qtc3BlY2lmaWMgZGF0YSBmb2xsb3dzXG4gICAgKi9cbiAgICB2YXIgcmVxdWVzdCA9IHJlYWRTdHJpbmcocGF5bG9hZCwgMSwgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChyZXF1ZXN0ID09PSBmYWxzZSkge1xuICAgICAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogSU5fUEFDS0VUREFUQUFGVEVSLCBwYWNrZXQ6IEdMT0JBTF9SRVFVRVNUJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IElOX1BBQ0tFVERBVEFBRlRFUiwgcGFja2V0OiBHTE9CQUxfUkVRVUVTVCAoJ1xuICAgICAgICAgICAgICAgKyByZXF1ZXN0XG4gICAgICAgICAgICAgICArICcpJyk7XG5cbiAgICB2YXIgd2FudFJlcGx5ID0gcGF5bG9hZFtwYXlsb2FkLl9wb3MrK107XG4gICAgaWYgKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHdhbnRSZXBseSA9ICh3YW50UmVwbHkgIT09IDApO1xuXG4gICAgdmFyIHJlcURhdGE7XG4gICAgaWYgKHJlcXVlc3QgPT09ICd0Y3BpcC1mb3J3YXJkJyB8fCByZXF1ZXN0ID09PSAnY2FuY2VsLXRjcGlwLWZvcndhcmQnKSB7XG4gICAgICB2YXIgYmluZEFkZHIgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKGJpbmRBZGRyID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGJpbmRQb3J0ID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChiaW5kUG9ydCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIHJlcURhdGEgPSB7XG4gICAgICAgIGJpbmRBZGRyOiBiaW5kQWRkcixcbiAgICAgICAgYmluZFBvcnQ6IGJpbmRQb3J0XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ3N0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20nXG4gICAgICAgICAgICAgICB8fCByZXF1ZXN0ID09PSAnY2FuY2VsLXN0cmVhbWxvY2FsLWZvcndhcmRAb3BlbnNzaC5jb20nKSB7XG4gICAgICBzb2NrZXRQYXRoID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKHNvY2tldFBhdGggPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICByZXFEYXRhID0ge1xuICAgICAgICBzb2NrZXRQYXRoOiBzb2NrZXRQYXRoXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ25vLW1vcmUtc2Vzc2lvbnNAb3BlbnNzaC5jb20nKSB7XG4gICAgICAvLyBObyBkYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcURhdGEgPSBwYXlsb2FkLnNsaWNlKHBheWxvYWQuX3Bvcyk7XG4gICAgfVxuXG4gICAgc2VsZi5lbWl0KCdHTE9CQUxfUkVRVUVTVCcsIHJlcXVlc3QsIHdhbnRSZXBseSwgcmVxRGF0YSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5SRVFVRVNUX1NVQ0NFU1MpIHtcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfUkVRVUVTVF9TVUNDRVNTXG4gICAgICAuLi4uICAgICAgcmVzcG9uc2Ugc3BlY2lmaWMgZGF0YVxuICAgICovXG4gICAgaWYgKHBheWxvYWQubGVuZ3RoID4gMSlcbiAgICAgIHNlbGYuZW1pdCgnUkVRVUVTVF9TVUNDRVNTJywgcGF5bG9hZC5zbGljZSgxKSk7XG4gICAgZWxzZVxuICAgICAgc2VsZi5lbWl0KCdSRVFVRVNUX1NVQ0NFU1MnKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLlJFUVVFU1RfRkFJTFVSRSkge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19SRVFVRVNUX0ZBSUxVUkVcbiAgICAqL1xuICAgIHNlbGYuZW1pdCgnUkVRVUVTVF9GQUlMVVJFJyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5VTklNUExFTUVOVEVEKSB7XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX1VOSU1QTEVNRU5URURcbiAgICAgIHVpbnQzMiAgICBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyIG9mIHJlamVjdGVkIG1lc3NhZ2VcbiAgICAqL1xuICAgIC8vIFRPRE9cbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLktFWElOSVQpXG4gICAgcmV0dXJuIHBhcnNlX0tFWElOSVQoc2VsZiwgY2FsbGJhY2spO1xuICBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLkNIQU5ORUxfUkVRVUVTVClcbiAgICByZXR1cm4gcGFyc2VfQ0hBTk5FTF9SRVFVRVNUKHNlbGYsIGNhbGxiYWNrKTtcbiAgZWxzZSBpZiAodHlwZSA+PSAzMCAmJiB0eXBlIDw9IDQ5KSAvLyBLZXkgZXhjaGFuZ2UgbWV0aG9kLXNwZWNpZmljIG1lc3NhZ2VzXG4gICAgcmV0dXJuIHBhcnNlX0tFWChzZWxmLCB0eXBlLCBjYWxsYmFjayk7XG4gIGVsc2UgaWYgKHR5cGUgPj0gNjAgJiYgdHlwZSA8PSA3MCkgLy8gVXNlciBhdXRoIGNvbnRleHQtc3BlY2lmaWMgbWVzc2FnZXNcbiAgICByZXR1cm4gcGFyc2VfVVNFUkFVVEgoc2VsZiwgdHlwZSwgY2FsbGJhY2spO1xuICBlbHNlIHtcbiAgICAvLyBVbmtub3duIHBhY2tldCB0eXBlXG4gICAgdmFyIHVuaW1wbCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCk7XG4gICAgdW5pbXBsWzBdID0gTUVTU0FHRS5VTklNUExFTUVOVEVEO1xuICAgIHdyaXRlVUludDMyQkUodW5pbXBsLCBzZXFubywgMSk7XG4gICAgc2VuZChzZWxmLCB1bmltcGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlX0tFWElOSVQoc2VsZiwgY2FsbGJhY2spIHtcbiAgdmFyIGluc3RhdGUgPSBzZWxmLl9zdGF0ZS5pbmNvbWluZztcbiAgdmFyIHBheWxvYWQgPSBpbnN0YXRlLnBheWxvYWQ7XG5cbiAgLypcbiAgICBieXRlICAgICAgICAgU1NIX01TR19LRVhJTklUXG4gICAgYnl0ZVsxNl0gICAgIGNvb2tpZSAocmFuZG9tIGJ5dGVzKVxuICAgIG5hbWUtbGlzdCAgICBrZXhfYWxnb3JpdGhtc1xuICAgIG5hbWUtbGlzdCAgICBzZXJ2ZXJfaG9zdF9rZXlfYWxnb3JpdGhtc1xuICAgIG5hbWUtbGlzdCAgICBlbmNyeXB0aW9uX2FsZ29yaXRobXNfY2xpZW50X3RvX3NlcnZlclxuICAgIG5hbWUtbGlzdCAgICBlbmNyeXB0aW9uX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudFxuICAgIG5hbWUtbGlzdCAgICBtYWNfYWxnb3JpdGhtc19jbGllbnRfdG9fc2VydmVyXG4gICAgbmFtZS1saXN0ICAgIG1hY19hbGdvcml0aG1zX3NlcnZlcl90b19jbGllbnRcbiAgICBuYW1lLWxpc3QgICAgY29tcHJlc3Npb25fYWxnb3JpdGhtc19jbGllbnRfdG9fc2VydmVyXG4gICAgbmFtZS1saXN0ICAgIGNvbXByZXNzaW9uX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudFxuICAgIG5hbWUtbGlzdCAgICBsYW5ndWFnZXNfY2xpZW50X3RvX3NlcnZlclxuICAgIG5hbWUtbGlzdCAgICBsYW5ndWFnZXNfc2VydmVyX3RvX2NsaWVudFxuICAgIGJvb2xlYW4gICAgICBmaXJzdF9rZXhfcGFja2V0X2ZvbGxvd3NcbiAgICB1aW50MzIgICAgICAgMCAocmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb24pXG4gICovXG4gIHZhciBpbml0ID0ge1xuICAgIGFsZ29yaXRobXM6IHtcbiAgICAgIGtleDogdW5kZWZpbmVkLFxuICAgICAgc3J2SG9zdEtleTogdW5kZWZpbmVkLFxuICAgICAgY3M6IHtcbiAgICAgICAgZW5jcnlwdDogdW5kZWZpbmVkLFxuICAgICAgICBtYWM6IHVuZGVmaW5lZCxcbiAgICAgICAgY29tcHJlc3M6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHNjOiB7XG4gICAgICAgIGVuY3J5cHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgbWFjOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbXByZXNzOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuICAgIGxhbmd1YWdlczoge1xuICAgICAgY3M6IHVuZGVmaW5lZCxcbiAgICAgIHNjOiB1bmRlZmluZWRcbiAgICB9XG4gIH07XG4gIHZhciB2YWw7XG5cbiAgdmFsID0gcmVhZExpc3QocGF5bG9hZCwgMTcsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpbml0LmFsZ29yaXRobXMua2V4ID0gdmFsO1xuICB2YWwgPSByZWFkTGlzdChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpbml0LmFsZ29yaXRobXMuc3J2SG9zdEtleSA9IHZhbDtcbiAgdmFsID0gcmVhZExpc3QocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gIGlmICh2YWwgPT09IGZhbHNlKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaW5pdC5hbGdvcml0aG1zLmNzLmVuY3J5cHQgPSB2YWw7XG4gIHZhbCA9IHJlYWRMaXN0KHBheWxvYWQsIHBheWxvYWQuX3Bvcywgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAodmFsID09PSBmYWxzZSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGluaXQuYWxnb3JpdGhtcy5zYy5lbmNyeXB0ID0gdmFsO1xuICB2YWwgPSByZWFkTGlzdChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpbml0LmFsZ29yaXRobXMuY3MubWFjID0gdmFsO1xuICB2YWwgPSByZWFkTGlzdChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpbml0LmFsZ29yaXRobXMuc2MubWFjID0gdmFsO1xuICB2YWwgPSByZWFkTGlzdChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpbml0LmFsZ29yaXRobXMuY3MuY29tcHJlc3MgPSB2YWw7XG4gIHZhbCA9IHJlYWRMaXN0KHBheWxvYWQsIHBheWxvYWQuX3Bvcywgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAodmFsID09PSBmYWxzZSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGluaXQuYWxnb3JpdGhtcy5zYy5jb21wcmVzcyA9IHZhbDtcbiAgdmFsID0gcmVhZExpc3QocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gIGlmICh2YWwgPT09IGZhbHNlKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaW5pdC5sYW5ndWFnZXMuY3MgPSB2YWw7XG4gIHZhbCA9IHJlYWRMaXN0KHBheWxvYWQsIHBheWxvYWQuX3Bvcywgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAodmFsID09PSBmYWxzZSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGluaXQubGFuZ3VhZ2VzLnNjID0gdmFsO1xuXG4gIHZhciBmaXJzdEZvbGxvd3MgPSAocGF5bG9hZC5fcG9zIDwgcGF5bG9hZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAmJiBwYXlsb2FkW3BheWxvYWQuX3Bvc10gPT09IDEpO1xuXG4gIGluc3RhdGUua2V4aW5pdCA9IHBheWxvYWQ7XG5cbiAgc2VsZi5lbWl0KCdLRVhJTklUJywgaW5pdCwgZmlyc3RGb2xsb3dzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfS0VYKHNlbGYsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3N0YXRlO1xuICB2YXIgaW5zdGF0ZSA9IHN0YXRlLmluY29taW5nO1xuICB2YXIgcGF5bG9hZCA9IGluc3RhdGUucGF5bG9hZDtcblxuICBpZiAoc3RhdGUub3V0Z29pbmcuc3RhdHVzID09PSBPVVRfUkVBRFlcbiAgICAgIHx8IGdldFBhY2tldFR5cGUoc2VsZiwgdHlwZSkgIT09IGluc3RhdGUuZXhwZWN0ZWRQYWNrZXQpIHtcbiAgICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIGV4cGVjdGVkOiAnXG4gICAgICAgICAgICAgICArIGluc3RhdGUuZXhwZWN0ZWRQYWNrZXRcbiAgICAgICAgICAgICAgICsgJyBidXQgZ290OiAnXG4gICAgICAgICAgICAgICArIGdldFBhY2tldFR5cGUoc2VsZiwgdHlwZSkpO1xuICAgIHNlbGYuZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5QUk9UT0NPTF9FUlJPUik7XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignUmVjZWl2ZWQgdW5leHBlY3RlZCBwYWNrZXQnKTtcbiAgICBlcnIubGV2ZWwgPSAncHJvdG9jb2wnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5rZXgudHlwZSA9PT0gJ2dyb3VwZXgnKSB7XG4gICAgLy8gRHluYW1pYyBncm91cCBleGNoYW5nZS1yZWxhdGVkXG5cbiAgICBpZiAoc2VsZi5zZXJ2ZXIpIHtcbiAgICAgIC8vIFRPRE86IFN1cHBvcnQgZ3JvdXAgZXhjaGFuZ2Ugc2VydmVyLXNpZGVcbiAgICAgIHNlbGYuZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5QUk9UT0NPTF9FUlJPUik7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdESCBncm91cCBleGNoYW5nZSBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlcicpO1xuICAgICAgZXJyLmxldmVsID0gJ2hhbmRzaGFrZSc7XG4gICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGUgPT09IE1FU1NBR0UuS0VYREhfR0VYX0dST1VQKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgYnl0ZSAgICBTU0hfTVNHX0tFWF9ESF9HRVhfR1JPVVBcbiAgICAgICAgICBtcGludCAgIHAsIHNhZmUgcHJpbWVcbiAgICAgICAgICBtcGludCAgIGcsIGdlbmVyYXRvciBmb3Igc3ViZ3JvdXAgaW4gR0YocClcbiAgICAgICAgKi9cbiAgICAgICAgdmFyIHByaW1lID0gcmVhZFN0cmluZyhwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICAgIGlmIChwcmltZSA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZ2VuID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGdlbiA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBzZWxmLmVtaXQoJ0tFWERIX0dFWF9HUk9VUCcsIHByaW1lLCBnZW4pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLktFWERIX0dFWF9SRVBMWSlcbiAgICAgICAgcmV0dXJuIHBhcnNlX0tFWERIX1JFUExZKHNlbGYsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU3RhdGljIGdyb3VwIG9yIEVDREgtcmVsYXRlZFxuXG4gICAgaWYgKHR5cGUgPT09IE1FU1NBR0UuS0VYREhfSU5JVCkge1xuICAgICAgLypcbiAgICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfS0VYREhfSU5JVFxuICAgICAgICBtcGludCAgICAgZVxuICAgICAgKi9cbiAgICAgIHZhciBlID0gcmVhZFN0cmluZyhwYXlsb2FkLCAxLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAoZSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgc2VsZi5lbWl0KCdLRVhESF9JTklUJywgZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBNRVNTQUdFLktFWERIX1JFUExZKVxuICAgICAgcmV0dXJuIHBhcnNlX0tFWERIX1JFUExZKHNlbGYsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZV9LRVhESF9SRVBMWShzZWxmLCBjYWxsYmFjaykge1xuICB2YXIgcGF5bG9hZCA9IHNlbGYuX3N0YXRlLmluY29taW5nLnBheWxvYWQ7XG4gIC8qXG4gICAgYnl0ZSAgICAgIFNTSF9NU0dfS0VYREhfUkVQTFlcbiAgICAgICAgICAgICAgICAvIFNTSF9NU0dfS0VYX0RIX0dFWF9SRVBMWVxuICAgICAgICAgICAgICAgIC8gU1NIX01TR19LRVhfRUNESF9SRVBMWVxuICAgIHN0cmluZyAgICBzZXJ2ZXIgcHVibGljIGhvc3Qga2V5IGFuZCBjZXJ0aWZpY2F0ZXMgKEtfUylcbiAgICBtcGludCAgICAgZlxuICAgIHN0cmluZyAgICBzaWduYXR1cmUgb2YgSFxuICAqL1xuICB2YXIgaG9zdGtleSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgMSwgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAoaG9zdGtleSA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB2YXIgcHVia2V5ID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHB1YmtleSA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2lnID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHNpZyA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB2YXIgaW5mbyA9IHtcbiAgICBob3N0a2V5OiBob3N0a2V5LFxuICAgIGhvc3RrZXlfZm9ybWF0OiB1bmRlZmluZWQsXG4gICAgcHVia2V5OiBwdWJrZXksXG4gICAgc2lnOiBzaWcsXG4gICAgc2lnX2Zvcm1hdDogdW5kZWZpbmVkXG4gIH07XG4gIHZhciBob3N0a2V5X2Zvcm1hdCA9IHJlYWRTdHJpbmcoaG9zdGtleSwgMCwgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAoaG9zdGtleV9mb3JtYXQgPT09IGZhbHNlKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaW5mby5ob3N0a2V5X2Zvcm1hdCA9IGhvc3RrZXlfZm9ybWF0O1xuICB2YXIgc2lnX2Zvcm1hdCA9IHJlYWRTdHJpbmcoc2lnLCAwLCAnYXNjaWknLCBzZWxmLCBjYWxsYmFjayk7XG4gIGlmIChzaWdfZm9ybWF0ID09PSBmYWxzZSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGluZm8uc2lnX2Zvcm1hdCA9IHNpZ19mb3JtYXQ7XG4gIHNlbGYuZW1pdCgnS0VYREhfUkVQTFknLCBpbmZvKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfVVNFUkFVVEgoc2VsZiwgdHlwZSwgY2FsbGJhY2spIHtcbiAgdmFyIHN0YXRlID0gc2VsZi5fc3RhdGU7XG4gIHZhciBhdXRoTWV0aG9kID0gc3RhdGUuYXV0aHNRdWV1ZVswXTtcbiAgdmFyIHBheWxvYWQgPSBzdGF0ZS5pbmNvbWluZy5wYXlsb2FkO1xuICB2YXIgbWVzc2FnZTtcbiAgdmFyIGxhbmc7XG4gIHZhciB0ZXh0O1xuXG4gIGlmIChhdXRoTWV0aG9kID09PSAncGFzc3dvcmQnKSB7XG4gICAgaWYgKHR5cGUgPT09IE1FU1NBR0UuVVNFUkFVVEhfUEFTU1dEX0NIQU5HRVJFUSkge1xuICAgICAgLypcbiAgICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfVVNFUkFVVEhfUEFTU1dEX0NIQU5HRVJFUVxuICAgICAgICBzdHJpbmcgICAgcHJvbXB0IGluIElTTy0xMDY0NiBVVEYtOCBlbmNvZGluZ1xuICAgICAgICBzdHJpbmcgICAgbGFuZ3VhZ2UgdGFnXG4gICAgICAqL1xuICAgICAgbWVzc2FnZSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgMSwgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAobWVzc2FnZSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGxhbmcgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAobGFuZyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIHNlbGYuZW1pdCgnVVNFUkFVVEhfUEFTU1dEX0NIQU5HRVJFUScsIG1lc3NhZ2UsIGxhbmcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhdXRoTWV0aG9kID09PSAna2V5Ym9hcmQtaW50ZXJhY3RpdmUnKSB7XG4gICAgaWYgKHR5cGUgPT09IE1FU1NBR0UuVVNFUkFVVEhfSU5GT19SRVFVRVNUKSB7XG4gICAgICAvKlxuICAgICAgICBieXRlICAgICAgU1NIX01TR19VU0VSQVVUSF9JTkZPX1JFUVVFU1RcbiAgICAgICAgc3RyaW5nICAgIG5hbWUgKElTTy0xMDY0NiBVVEYtOClcbiAgICAgICAgc3RyaW5nICAgIGluc3RydWN0aW9uIChJU08tMTA2NDYgVVRGLTgpXG4gICAgICAgIHN0cmluZyAgICBsYW5ndWFnZSB0YWcgLS0gTUFZIGJlIGVtcHR5XG4gICAgICAgIGludCAgICAgICBudW0tcHJvbXB0c1xuICAgICAgICBzdHJpbmcgICAgcHJvbXB0WzFdIChJU08tMTA2NDYgVVRGLTgpXG4gICAgICAgIGJvb2xlYW4gICBlY2hvWzFdXG4gICAgICAgIC4uLlxuICAgICAgICBzdHJpbmcgICAgcHJvbXB0W251bS1wcm9tcHRzXSAoSVNPLTEwNjQ2IFVURi04KVxuICAgICAgICBib29sZWFuICAgZWNob1tudW0tcHJvbXB0c11cbiAgICAgICovXG4gICAgICB2YXIgbmFtZTtcbiAgICAgIHZhciBpbnN0cjtcbiAgICAgIHZhciBucHJvbXB0cztcblxuICAgICAgbmFtZSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgMSwgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAobmFtZSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGluc3RyID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKGluc3RyID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgbGFuZyA9IHJlYWRTdHJpbmcocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCAndXRmOCcsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChsYW5nID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgbnByb21wdHMgPSByZWFkSW50KHBheWxvYWQsIHBheWxvYWQuX3Bvcywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKG5wcm9tcHRzID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBwYXlsb2FkLl9wb3MgKz0gNDtcblxuICAgICAgdmFyIHByb21wdHMgPSBbXTtcbiAgICAgIGZvciAodmFyIHByb21wdCA9IDA7IHByb21wdCA8IG5wcm9tcHRzOyArK3Byb21wdCkge1xuICAgICAgICB0ZXh0ID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgICBpZiAodGV4dCA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZWNobyA9IHBheWxvYWRbcGF5bG9hZC5fcG9zKytdO1xuICAgICAgICBpZiAoZWNobyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZWNobyA9IChlY2hvICE9PSAwKTtcbiAgICAgICAgcHJvbXB0cy5wdXNoKHtcbiAgICAgICAgICBwcm9tcHQ6IHRleHQsXG4gICAgICAgICAgZWNobzogZWNob1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHNlbGYuZW1pdCgnVVNFUkFVVEhfSU5GT19SRVFVRVNUJywgbmFtZSwgaW5zdHIsIGxhbmcsIHByb21wdHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRS5VU0VSQVVUSF9JTkZPX1JFU1BPTlNFKSB7XG4gICAgICAvKlxuICAgICAgICBieXRlICAgICAgU1NIX01TR19VU0VSQVVUSF9JTkZPX1JFU1BPTlNFXG4gICAgICAgIGludCAgICAgICBudW0tcmVzcG9uc2VzXG4gICAgICAgIHN0cmluZyAgICByZXNwb25zZVsxXSAoSVNPLTEwNjQ2IFVURi04KVxuICAgICAgICAuLi5cbiAgICAgICAgc3RyaW5nICAgIHJlc3BvbnNlW251bS1yZXNwb25zZXNdIChJU08tMTA2NDYgVVRGLTgpXG4gICAgICAqL1xuICAgICAgdmFyIG5yZXNwb25zZXMgPSByZWFkSW50KHBheWxvYWQsIDEsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICAgIGlmIChucmVzcG9uc2VzID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBwYXlsb2FkLl9wb3MgPSA1O1xuXG4gICAgICB2YXIgcmVzcG9uc2VzID0gW107XG4gICAgICBmb3IgKHZhciByZXNwb25zZSA9IDA7IHJlc3BvbnNlIDwgbnJlc3BvbnNlczsgKytyZXNwb25zZSkge1xuICAgICAgICB0ZXh0ID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgICBpZiAodGV4dCA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXNwb25zZXMucHVzaCh0ZXh0KTtcbiAgICAgIH1cbiAgICAgIHNlbGYuZW1pdCgnVVNFUkFVVEhfSU5GT19SRVNQT05TRScsIHJlc3BvbnNlcyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGF1dGhNZXRob2QgPT09ICdwdWJsaWNrZXknKSB7XG4gICAgaWYgKHR5cGUgPT09IE1FU1NBR0UuVVNFUkFVVEhfUEtfT0spIHtcbiAgICAgIC8qXG4gICAgICAgIGJ5dGUgICAgICBTU0hfTVNHX1VTRVJBVVRIX1BLX09LXG4gICAgICAgIHN0cmluZyAgICBwdWJsaWMga2V5IGFsZ29yaXRobSBuYW1lIGZyb20gdGhlIHJlcXVlc3RcbiAgICAgICAgc3RyaW5nICAgIHB1YmxpYyBrZXkgYmxvYiBmcm9tIHRoZSByZXF1ZXN0XG4gICAgICAqL1xuICAgICAgdmFyIGF1dGhzUXVldWUgPSBzZWxmLl9zdGF0ZS5hdXRoc1F1ZXVlO1xuICAgICAgaWYgKCFhdXRoc1F1ZXVlLmxlbmd0aCB8fCBhdXRoc1F1ZXVlWzBdICE9PSAncHVibGlja2V5JylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgYXV0aHNRdWV1ZS5zaGlmdCgpO1xuICAgICAgc2VsZi5lbWl0KCdVU0VSQVVUSF9QS19PSycpO1xuICAgICAgLy8gWFhYOiBQYXJzZSBwdWJsaWMga2V5IGluZm8/IGNsaWVudCBjdXJyZW50bHkgY2FuIGlnbm9yZSBpdCBiZWNhdXNlXG4gICAgICAvLyB0aGVyZSBpcyBvbmx5IG9uZSBvdXRzdGFuZGluZyBhdXRoIHJlcXVlc3QgYXQgYW55IGdpdmVuIHRpbWUsIHNvIGl0XG4gICAgICAvLyBrbm93cyB3aGljaCBrZXkgd2FzIE9LJ2RcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXV0aE1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gSW52YWxpZCBwYWNrZXQgZm9yIHRoaXMgYXV0aCB0eXBlXG4gICAgc2VsZi5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLlBST1RPQ09MX0VSUk9SKTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdJbnZhbGlkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZDogJyArIGF1dGhNZXRob2QpO1xuICAgIGVyci5sZXZlbCA9ICdwcm90b2NvbCc7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VfQ0hBTk5FTF9SRVFVRVNUKHNlbGYsIGNhbGxiYWNrKSB7XG4gIHZhciBwYXlsb2FkID0gc2VsZi5fc3RhdGUuaW5jb21pbmcucGF5bG9hZDtcbiAgdmFyIGluZm87XG4gIHZhciBjb2xzO1xuICB2YXIgcm93cztcbiAgdmFyIHdpZHRoO1xuICB2YXIgaGVpZ2h0O1xuICB2YXIgd2FudFJlcGx5O1xuICB2YXIgc2lnbmFsO1xuXG4gIHZhciByZWNpcGllbnQgPSByZWFkSW50KHBheWxvYWQsIDEsIHNlbGYsIGNhbGxiYWNrKTtcbiAgaWYgKHJlY2lwaWVudCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB2YXIgcmVxdWVzdCA9IHJlYWRTdHJpbmcocGF5bG9hZCwgNSwgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICBpZiAocmVxdWVzdCA9PT0gZmFsc2UpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChyZXF1ZXN0ID09PSAnZXhpdC1zdGF0dXMnKSB7IC8vIFNlcnZlci0+Q2xpZW50XG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfUkVRVUVTVFxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICBzdHJpbmcgICAgXCJleGl0LXN0YXR1c1wiXG4gICAgICBib29sZWFuICAgRkFMU0VcbiAgICAgIHVpbnQzMiAgICBleGl0X3N0YXR1c1xuICAgICovXG4gICAgdmFyIGNvZGUgPSByZWFkSW50KHBheWxvYWQsICsrcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNvZGUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IGZhbHNlLFxuICAgICAgY29kZTogY29kZVxuICAgIH07XG4gIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ2V4aXQtc2lnbmFsJykgeyAvLyBTZXJ2ZXItPkNsaWVudFxuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX1JFUVVFU1RcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgc3RyaW5nICAgIFwiZXhpdC1zaWduYWxcIlxuICAgICAgYm9vbGVhbiAgIEZBTFNFXG4gICAgICBzdHJpbmcgICAgc2lnbmFsIG5hbWUgKHdpdGhvdXQgdGhlIFwiU0lHXCIgcHJlZml4KVxuICAgICAgYm9vbGVhbiAgIGNvcmUgZHVtcGVkXG4gICAgICBzdHJpbmcgICAgZXJyb3IgbWVzc2FnZSBpbiBJU08tMTA2NDYgVVRGLTggZW5jb2RpbmdcbiAgICAgIHN0cmluZyAgICBsYW5ndWFnZSB0YWdcbiAgICAqL1xuICAgIHZhciBjb3JlZHVtcDtcbiAgICBpZiAoIShzZWxmLnJlbW90ZUJ1Z3MgJiBCVUdTLk9MRF9FWElUKSkge1xuICAgICAgc2lnbmFsID0gcmVhZFN0cmluZyhwYXlsb2FkLCArK3BheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgICAgaWYgKHNpZ25hbCA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNvcmVkdW1wID0gcGF5bG9hZFtwYXlsb2FkLl9wb3MrK107XG4gICAgICBpZiAoY29yZWR1bXAgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY29yZWR1bXAgPSAoY29yZWR1bXAgIT09IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKlxuICAgICAgICBJbnN0ZWFkIG9mIGBzaWduYWwgbmFtZWAgYW5kIGBjb3JlIGR1bXBlZGAsIHdlIGhhdmUganVzdDpcblxuICAgICAgICB1aW50MzIgIHNpZ25hbCBudW1iZXJcbiAgICAgICovXG4gICAgICBzaWduYWwgPSByZWFkSW50KHBheWxvYWQsICsrcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAoc2lnbmFsID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgc3dpdGNoIChzaWduYWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHNpZ25hbCA9ICdIVVAnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2lnbmFsID0gJ0lOVCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzaWduYWwgPSAnUVVJVCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBzaWduYWwgPSAnQUJSVCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBzaWduYWwgPSAnS0lMTCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgc2lnbmFsID0gJ0FMUk0nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHNpZ25hbCA9ICdURVJNJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBVbmtub3duIG9yIE9TLXNwZWNpZmljXG4gICAgICAgICAgc2lnbmFsID0gJ1VOS05PV04gKCcgKyBzaWduYWwgKyAnKSc7XG4gICAgICB9XG4gICAgICBjb3JlZHVtcCA9IGZhbHNlO1xuICAgIH1cbiAgICB2YXIgZGVzY3JpcHRpb24gPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ3V0ZjgnLCBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGxhbmcgPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ3V0ZjgnLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGxhbmcgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IGZhbHNlLFxuICAgICAgc2lnbmFsOiBzaWduYWwsXG4gICAgICBjb3JlZHVtcDogY29yZWR1bXAsXG4gICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICBsYW5nOiBsYW5nXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0ID09PSAncHR5LXJlcScpIHsgLy8gQ2xpZW50LT5TZXJ2ZXJcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9SRVFVRVNUXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAgIHN0cmluZyAgICBcInB0eS1yZXFcIlxuICAgICAgYm9vbGVhbiAgIHdhbnRfcmVwbHlcbiAgICAgIHN0cmluZyAgICBURVJNIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlIChlLmcuLCB2dDEwMClcbiAgICAgIHVpbnQzMiAgICB0ZXJtaW5hbCB3aWR0aCwgY2hhcmFjdGVycyAoZS5nLiwgODApXG4gICAgICB1aW50MzIgICAgdGVybWluYWwgaGVpZ2h0LCByb3dzIChlLmcuLCAyNClcbiAgICAgIHVpbnQzMiAgICB0ZXJtaW5hbCB3aWR0aCwgcGl4ZWxzIChlLmcuLCA2NDApXG4gICAgICB1aW50MzIgICAgdGVybWluYWwgaGVpZ2h0LCBwaXhlbHMgKGUuZy4sIDQ4MClcbiAgICAgIHN0cmluZyAgICBlbmNvZGVkIHRlcm1pbmFsIG1vZGVzXG4gICAgKi9cbiAgICB3YW50UmVwbHkgPSBwYXlsb2FkW3BheWxvYWQuX3BvcysrXTtcbiAgICBpZiAod2FudFJlcGx5ID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2FudFJlcGx5ID0gKHdhbnRSZXBseSAhPT0gMCk7XG4gICAgdmFyIHRlcm0gPSByZWFkU3RyaW5nKHBheWxvYWQsIHBheWxvYWQuX3BvcywgJ2FzY2lpJywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh0ZXJtID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb2xzID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoY29scyA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcm93cyA9IHJlYWRJbnQocGF5bG9hZCwgcGF5bG9hZC5fcG9zICs9IDQsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAocm93cyA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2lkdGggPSByZWFkSW50KHBheWxvYWQsIHBheWxvYWQuX3BvcyArPSA0LCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHdpZHRoID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBoZWlnaHQgPSByZWFkSW50KHBheWxvYWQsIHBheWxvYWQuX3BvcyArPSA0LCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGhlaWdodCA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIG1vZGVzID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChtb2RlcyA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgbW9kZXMgPSBieXRlc1RvTW9kZXMobW9kZXMpO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IHdhbnRSZXBseSxcbiAgICAgIHRlcm06IHRlcm0sXG4gICAgICBjb2xzOiBjb2xzLFxuICAgICAgcm93czogcm93cyxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgbW9kZXM6IG1vZGVzXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0ID09PSAnd2luZG93LWNoYW5nZScpIHsgLy8gQ2xpZW50LT5TZXJ2ZXJcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9SRVFVRVNUXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAgIHN0cmluZyAgICBcIndpbmRvdy1jaGFuZ2VcIlxuICAgICAgYm9vbGVhbiAgIEZBTFNFXG4gICAgICB1aW50MzIgICAgdGVybWluYWwgd2lkdGgsIGNvbHVtbnNcbiAgICAgIHVpbnQzMiAgICB0ZXJtaW5hbCBoZWlnaHQsIHJvd3NcbiAgICAgIHVpbnQzMiAgICB0ZXJtaW5hbCB3aWR0aCwgcGl4ZWxzXG4gICAgICB1aW50MzIgICAgdGVybWluYWwgaGVpZ2h0LCBwaXhlbHNcbiAgICAqL1xuICAgIGNvbHMgPSByZWFkSW50KHBheWxvYWQsICsrcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNvbHMgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJvd3MgPSByZWFkSW50KHBheWxvYWQsIHBheWxvYWQuX3BvcyArPSA0LCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHJvd3MgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHdpZHRoID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh3aWR0aCA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaGVpZ2h0ID0gcmVhZEludChwYXlsb2FkLCBwYXlsb2FkLl9wb3MgKz0gNCwgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChoZWlnaHQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IGZhbHNlLFxuICAgICAgY29sczogY29scyxcbiAgICAgIHJvd3M6IHJvd3MsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH07XG4gIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ3gxMS1yZXEnKSB7IC8vIENsaWVudC0+U2VydmVyXG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfUkVRVUVTVFxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICBzdHJpbmcgICAgXCJ4MTEtcmVxXCJcbiAgICAgIGJvb2xlYW4gICB3YW50IHJlcGx5XG4gICAgICBib29sZWFuICAgc2luZ2xlIGNvbm5lY3Rpb25cbiAgICAgIHN0cmluZyAgICB4MTEgYXV0aGVudGljYXRpb24gcHJvdG9jb2xcbiAgICAgIHN0cmluZyAgICB4MTEgYXV0aGVudGljYXRpb24gY29va2llXG4gICAgICB1aW50MzIgICAgeDExIHNjcmVlbiBudW1iZXJcbiAgICAqL1xuICAgIHdhbnRSZXBseSA9IHBheWxvYWRbcGF5bG9hZC5fcG9zKytdO1xuICAgIGlmICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB3YW50UmVwbHkgPSAod2FudFJlcGx5ICE9PSAwKTtcbiAgICB2YXIgc2luZ2xlID0gcGF5bG9hZFtwYXlsb2FkLl9wb3MrK107XG4gICAgaWYgKHNpbmdsZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHNpbmdsZSA9IChzaW5nbGUgIT09IDApO1xuICAgIHZhciBwcm90b2NvbCA9IHJlYWRTdHJpbmcocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCAnYXNjaWknLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHByb3RvY29sID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgY29va2llID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICdiaW5hcnknLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKGNvb2tpZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHNjcmVlbiA9IHJlYWRJbnQocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgaWYgKHNjcmVlbiA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaW5mbyA9IHtcbiAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50LFxuICAgICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICAgIHdhbnRSZXBseTogd2FudFJlcGx5LFxuICAgICAgc2luZ2xlOiBzaW5nbGUsXG4gICAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgICBjb29raWU6IGNvb2tpZSxcbiAgICAgIHNjcmVlbjogc2NyZWVuXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0ID09PSAnZW52JykgeyAvLyBDbGllbnQtPlNlcnZlclxuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX1JFUVVFU1RcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgc3RyaW5nICAgIFwiZW52XCJcbiAgICAgIGJvb2xlYW4gICB3YW50IHJlcGx5XG4gICAgICBzdHJpbmcgICAgdmFyaWFibGUgbmFtZVxuICAgICAgc3RyaW5nICAgIHZhcmlhYmxlIHZhbHVlXG4gICAgKi9cbiAgICB3YW50UmVwbHkgPSBwYXlsb2FkW3BheWxvYWQuX3BvcysrXTtcbiAgICBpZiAod2FudFJlcGx5ID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2FudFJlcGx5ID0gKHdhbnRSZXBseSAhPT0gMCk7XG4gICAgdmFyIGtleSA9IHJlYWRTdHJpbmcocGF5bG9hZCwgcGF5bG9hZC5fcG9zLCAndXRmOCcsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoa2V5ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmICh2YWwgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IHdhbnRSZXBseSxcbiAgICAgIGtleToga2V5LFxuICAgICAgdmFsOiB2YWxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlcXVlc3QgPT09ICdzaGVsbCcpIHsgLy8gQ2xpZW50LT5TZXJ2ZXJcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9SRVFVRVNUXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAgIHN0cmluZyAgICBcInNoZWxsXCJcbiAgICAgIGJvb2xlYW4gICB3YW50IHJlcGx5XG4gICAgKi9cbiAgICB3YW50UmVwbHkgPSBwYXlsb2FkW3BheWxvYWQuX3Bvc107XG4gICAgaWYgKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHdhbnRSZXBseSA9ICh3YW50UmVwbHkgIT09IDApO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IHdhbnRSZXBseVxuICAgIH07XG4gIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ2V4ZWMnKSB7IC8vIENsaWVudC0+U2VydmVyXG4gICAgLypcbiAgICAgIGJ5dGUgICAgICBTU0hfTVNHX0NIQU5ORUxfUkVRVUVTVFxuICAgICAgdWludDMyICAgIHJlY2lwaWVudCBjaGFubmVsXG4gICAgICBzdHJpbmcgICAgXCJleGVjXCJcbiAgICAgIGJvb2xlYW4gICB3YW50IHJlcGx5XG4gICAgICBzdHJpbmcgICAgY29tbWFuZFxuICAgICovXG4gICAgd2FudFJlcGx5ID0gcGF5bG9hZFtwYXlsb2FkLl9wb3MrK107XG4gICAgaWYgKHdhbnRSZXBseSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHdhbnRSZXBseSA9ICh3YW50UmVwbHkgIT09IDApO1xuICAgIHZhciBjb21tYW5kID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChjb21tYW5kID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpbmZvID0ge1xuICAgICAgcmVjaXBpZW50OiByZWNpcGllbnQsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgICAgd2FudFJlcGx5OiB3YW50UmVwbHksXG4gICAgICBjb21tYW5kOiBjb21tYW5kXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0ID09PSAnc3Vic3lzdGVtJykgeyAvLyBDbGllbnQtPlNlcnZlclxuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX1JFUVVFU1RcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgc3RyaW5nICAgIFwic3Vic3lzdGVtXCJcbiAgICAgIGJvb2xlYW4gICB3YW50IHJlcGx5XG4gICAgICBzdHJpbmcgICAgc3Vic3lzdGVtIG5hbWVcbiAgICAqL1xuICAgIHdhbnRSZXBseSA9IHBheWxvYWRbcGF5bG9hZC5fcG9zKytdO1xuICAgIGlmICh3YW50UmVwbHkgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB3YW50UmVwbHkgPSAod2FudFJlcGx5ICE9PSAwKTtcbiAgICB2YXIgc3Vic3lzdGVtID0gcmVhZFN0cmluZyhwYXlsb2FkLCBwYXlsb2FkLl9wb3MsICd1dGY4Jywgc2VsZiwgY2FsbGJhY2spO1xuICAgIGlmIChzdWJzeXN0ZW0gPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IHdhbnRSZXBseSxcbiAgICAgIHN1YnN5c3RlbTogc3Vic3lzdGVtXG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0ID09PSAnc2lnbmFsJykgeyAvLyBDbGllbnQtPlNlcnZlclxuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX1JFUVVFU1RcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgc3RyaW5nICAgIFwic2lnbmFsXCJcbiAgICAgIGJvb2xlYW4gICBGQUxTRVxuICAgICAgc3RyaW5nICAgIHNpZ25hbCBuYW1lICh3aXRob3V0IHRoZSBcIlNJR1wiIHByZWZpeClcbiAgICAqL1xuICAgIHNpZ25hbCA9IHJlYWRTdHJpbmcocGF5bG9hZCwgKytwYXlsb2FkLl9wb3MsICdhc2NpaScsIHNlbGYsIGNhbGxiYWNrKTtcbiAgICBpZiAoc2lnbmFsID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpbmZvID0ge1xuICAgICAgcmVjaXBpZW50OiByZWNpcGllbnQsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgICAgd2FudFJlcGx5OiBmYWxzZSxcbiAgICAgIHNpZ25hbDogJ1NJRycgKyBzaWduYWxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlcXVlc3QgPT09ICd4b24teG9mZicpIHsgLy8gQ2xpZW50LT5TZXJ2ZXJcbiAgICAvKlxuICAgICAgYnl0ZSAgICAgIFNTSF9NU0dfQ0hBTk5FTF9SRVFVRVNUXG4gICAgICB1aW50MzIgICAgcmVjaXBpZW50IGNoYW5uZWxcbiAgICAgIHN0cmluZyAgICBcInhvbi14b2ZmXCJcbiAgICAgIGJvb2xlYW4gICBGQUxTRVxuICAgICAgYm9vbGVhbiAgIGNsaWVudCBjYW4gZG9cbiAgICAqL1xuICAgIHZhciBjbGllbnRDb250cm9sID0gcGF5bG9hZFsrK3BheWxvYWQuX3Bvc107XG4gICAgaWYgKGNsaWVudENvbnRyb2wgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjbGllbnRDb250cm9sID0gKGNsaWVudENvbnRyb2wgIT09IDApO1xuICAgIGluZm8gPSB7XG4gICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICB3YW50UmVwbHk6IGZhbHNlLFxuICAgICAgY2xpZW50Q29udHJvbDogY2xpZW50Q29udHJvbFxuICAgIH07XG4gIH0gZWxzZSBpZiAocmVxdWVzdCA9PT0gJ2F1dGgtYWdlbnQtcmVxQG9wZW5zc2guY29tJykgeyAvLyBDbGllbnQtPlNlcnZlclxuICAgIC8qXG4gICAgICBieXRlICAgICAgU1NIX01TR19DSEFOTkVMX1JFUVVFU1RcbiAgICAgIHVpbnQzMiAgICByZWNpcGllbnQgY2hhbm5lbFxuICAgICAgc3RyaW5nICAgIFwiYXV0aC1hZ2VudC1yZXFAb3BlbnNzaC5jb21cIlxuICAgICAgYm9vbGVhbiAgIHdhbnQgcmVwbHlcbiAgICAqL1xuICAgIHdhbnRSZXBseSA9IHBheWxvYWRbcGF5bG9hZC5fcG9zXTtcbiAgICBpZiAod2FudFJlcGx5ID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2FudFJlcGx5ID0gKHdhbnRSZXBseSAhPT0gMCk7XG4gICAgaW5mbyA9IHtcbiAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50LFxuICAgICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICAgIHdhbnRSZXBseTogd2FudFJlcGx5XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVbmtub3duIHJlcXVlc3QgdHlwZVxuICAgIHdhbnRSZXBseSA9IHBheWxvYWRbcGF5bG9hZC5fcG9zXTtcbiAgICBpZiAod2FudFJlcGx5ID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgd2FudFJlcGx5ID0gKHdhbnRSZXBseSAhPT0gMCk7XG4gICAgaW5mbyA9IHtcbiAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50LFxuICAgICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICAgIHdhbnRSZXBseTogd2FudFJlcGx5XG4gICAgfTtcbiAgfVxuICBzZWxmLmRlYnVnKCdERUJVRzogUGFyc2VyOiBJTl9QQUNLRVREQVRBQUZURVIsIHBhY2tldDogQ0hBTk5FTF9SRVFVRVNUICgnXG4gICAgICAgICAgICAgKyByZWNpcGllbnRcbiAgICAgICAgICAgICArICcsICdcbiAgICAgICAgICAgICArIHJlcXVlc3RcbiAgICAgICAgICAgICArICcpJyk7XG4gIHNlbGYuZW1pdCgnQ0hBTk5FTF9SRVFVRVNUOicgKyByZWNpcGllbnQsIGluZm8pO1xufVxuXG5mdW5jdGlvbiBobWFjVmVyaWZ5KHNlbGYsIGRhdGEpIHtcbiAgdmFyIGluc3RhdGUgPSBzZWxmLl9zdGF0ZS5pbmNvbWluZztcbiAgdmFyIGhtYWMgPSBpbnN0YXRlLmhtYWM7XG5cbiAgc2VsZi5kZWJ1ZygnREVCVUc6IFBhcnNlcjogVmVyaWZ5aW5nIE1BQycpO1xuXG4gIGlmIChpbnN0YXRlLmRlY3J5cHQuaW5mby5hdXRoTGVuID4gMCkge1xuICAgIHZhciBkZWNyeXB0ID0gaW5zdGF0ZS5kZWNyeXB0O1xuICAgIHZhciBpbnN0YW5jZSA9IGRlY3J5cHQuaW5zdGFuY2U7XG5cbiAgICBpbnN0YW5jZS5zZXRBdXRoVGFnKGRhdGEpO1xuXG4gICAgdmFyIHBheWxvYWQgPSBpbnN0YW5jZS51cGRhdGUoaW5zdGF0ZS5wYWNrZXQpO1xuICAgIGluc3RhdGUucGF5bG9hZCA9IHBheWxvYWQuc2xpY2UoMSwgaW5zdGF0ZS5wYWNrZXQubGVuZ3RoIC0gcGF5bG9hZFswXSk7XG4gICAgaXZfaW5jKGRlY3J5cHQuaXYpO1xuXG4gICAgZGVjcnlwdC5pbnN0YW5jZSA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KFxuICAgICAgICAgICAgICAgICAgICAgICAgIFNTSF9UT19PUEVOU1NMW2RlY3J5cHQudHlwZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdC5pdlxuICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgIGRlY3J5cHQuaW5zdGFuY2Uuc2V0QXV0b1BhZGRpbmcoZmFsc2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBjYWxjSG1hYyA9IGNyeXB0by5jcmVhdGVIbWFjKFNTSF9UT19PUEVOU1NMW2htYWMudHlwZV0sIGhtYWMua2V5KTtcblxuICAgIHdyaXRlVUludDMyQkUoSE1BQ19DT01QVVRFLCBpbnN0YXRlLnNlcW5vLCAwKTtcbiAgICB3cml0ZVVJbnQzMkJFKEhNQUNfQ09NUFVURSwgaW5zdGF0ZS5wa3RMZW4sIDQpO1xuICAgIEhNQUNfQ09NUFVURVs4XSA9IGluc3RhdGUucGFkTGVuO1xuXG4gICAgY2FsY0htYWMudXBkYXRlKEhNQUNfQ09NUFVURSk7XG4gICAgY2FsY0htYWMudXBkYXRlKGluc3RhdGUucGFja2V0KTtcblxuICAgIHZhciBtYWMgPSBjYWxjSG1hYy5kaWdlc3QoKTtcbiAgICBpZiAobWFjLmxlbmd0aCA+IGluc3RhdGUuaG1hYy5pbmZvLmFjdHVhbExlbilcbiAgICAgIG1hYyA9IG1hYy5zbGljZSgwLCBpbnN0YXRlLmhtYWMuaW5mby5hY3R1YWxMZW4pO1xuICAgIHJldHVybiB0aW1pbmdTYWZlRXF1YWwobWFjLCBkYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNyeXB0RGF0YShzZWxmLCBkYXRhKSB7XG4gIHZhciBpbnN0YW5jZSA9IHNlbGYuX3N0YXRlLmluY29taW5nLmRlY3J5cHQuaW5zdGFuY2U7XG4gIHNlbGYuZGVidWcoJ0RFQlVHOiBQYXJzZXI6IERlY3J5cHRpbmcnKTtcbiAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZShkYXRhKTtcbn1cblxuZnVuY3Rpb24gZXhwZWN0RGF0YShzZWxmLCB0eXBlLCBhbW91bnQsIGJ1ZmZlcikge1xuICB2YXIgZXhwZWN0ID0gc2VsZi5fc3RhdGUuaW5jb21pbmcuZXhwZWN0O1xuICBleHBlY3QuYW1vdW50ID0gYW1vdW50O1xuICBleHBlY3QudHlwZSA9IHR5cGU7XG4gIGV4cGVjdC5wdHIgPSAwO1xuICBpZiAoYnVmZmVyKVxuICAgIGV4cGVjdC5idWYgPSBidWZmZXI7XG4gIGVsc2UgaWYgKGFtb3VudClcbiAgICBleHBlY3QuYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKGFtb3VudCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRMaXN0KGJ1ZmZlciwgc3RhcnQsIHN0cmVhbSwgY2FsbGJhY2spIHtcbiAgdmFyIGxpc3QgPSByZWFkU3RyaW5nKGJ1ZmZlciwgc3RhcnQsICdhc2NpaScsIHN0cmVhbSwgY2FsbGJhY2spO1xuICByZXR1cm4gKGxpc3QgIT09IGZhbHNlID8gKGxpc3QubGVuZ3RoID8gbGlzdC5zcGxpdCgnLCcpIDogW10pIDogZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBieXRlc1RvTW9kZXMoYnVmZmVyKSB7XG4gIHZhciBtb2RlcyA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBidWZmZXIubGVuZ3RoLCBvcGNvZGU7IGkgPCBsZW47IGkgKz0gNSkge1xuICAgIG9wY29kZSA9IGJ1ZmZlcltpXTtcbiAgICBpZiAob3Bjb2RlID09PSBURVJNSU5BTF9NT0RFLlRUWV9PUF9FTkRcbiAgICAgICAgfHwgVEVSTUlOQUxfTU9ERVtvcGNvZGVdID09PSB1bmRlZmluZWRcbiAgICAgICAgfHwgaSArIDUgPiBsZW4pXG4gICAgICBicmVhaztcbiAgICBtb2Rlc1tURVJNSU5BTF9NT0RFW29wY29kZV1dID0gcmVhZFVJbnQzMkJFKGJ1ZmZlciwgaSArIDEpO1xuICB9XG5cbiAgcmV0dXJuIG1vZGVzO1xufVxuXG5mdW5jdGlvbiBtb2Rlc1RvQnl0ZXMobW9kZXMpIHtcbiAgdmFyIFJFX0lTX05VTSA9IC9eXFxkKyQvO1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG1vZGVzKTtcbiAgdmFyIGIgPSAwO1xuICB2YXIgYnl0ZXMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0ga2V5cy5sZW5ndGgsIGtleSwgb3Bjb2RlLCB2YWw7IGkgPCBsZW47ICsraSkge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb3Bjb2RlID0gVEVSTUlOQUxfTU9ERVtrZXldO1xuICAgIGlmIChvcGNvZGVcbiAgICAgICAgJiYgIVJFX0lTX05VTS50ZXN0KGtleSlcbiAgICAgICAgJiYgdHlwZW9mIG1vZGVzW2tleV0gPT09ICdudW1iZXInXG4gICAgICAgICYmIGtleSAhPT0gJ1RUWV9PUF9FTkQnKSB7XG4gICAgICB2YWwgPSBtb2Rlc1trZXldO1xuICAgICAgYnl0ZXNbYisrXSA9IG9wY29kZTtcbiAgICAgIGJ5dGVzW2IrK10gPSAodmFsID4+PiAyNCkgJiAweEZGO1xuICAgICAgYnl0ZXNbYisrXSA9ICh2YWwgPj4+IDE2KSAmIDB4RkY7XG4gICAgICBieXRlc1tiKytdID0gKHZhbCA+Pj4gOCkgJiAweEZGO1xuICAgICAgYnl0ZXNbYisrXSA9IHZhbCAmIDB4RkY7XG4gICAgfVxuICB9XG5cbiAgYnl0ZXNbYl0gPSBURVJNSU5BTF9NT0RFLlRUWV9PUF9FTkQ7XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG4vLyBTaGFyZWQgb3V0Z29pbmcgZnVuY3Rpb25zXG5mdW5jdGlvbiBLRVhJTklUKHNlbGYsIGNiKSB7IC8vIENsaWVudC9TZXJ2ZXJcbiAgcmFuZEJ5dGVzKDE2LCBmdW5jdGlvbihteUNvb2tpZSkge1xuICAgIC8qXG4gICAgICBieXRlICAgICAgICAgU1NIX01TR19LRVhJTklUXG4gICAgICBieXRlWzE2XSAgICAgY29va2llIChyYW5kb20gYnl0ZXMpXG4gICAgICBuYW1lLWxpc3QgICAga2V4X2FsZ29yaXRobXNcbiAgICAgIG5hbWUtbGlzdCAgICBzZXJ2ZXJfaG9zdF9rZXlfYWxnb3JpdGhtc1xuICAgICAgbmFtZS1saXN0ICAgIGVuY3J5cHRpb25fYWxnb3JpdGhtc19jbGllbnRfdG9fc2VydmVyXG4gICAgICBuYW1lLWxpc3QgICAgZW5jcnlwdGlvbl9hbGdvcml0aG1zX3NlcnZlcl90b19jbGllbnRcbiAgICAgIG5hbWUtbGlzdCAgICBtYWNfYWxnb3JpdGhtc19jbGllbnRfdG9fc2VydmVyXG4gICAgICBuYW1lLWxpc3QgICAgbWFjX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudFxuICAgICAgbmFtZS1saXN0ICAgIGNvbXByZXNzaW9uX2FsZ29yaXRobXNfY2xpZW50X3RvX3NlcnZlclxuICAgICAgbmFtZS1saXN0ICAgIGNvbXByZXNzaW9uX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudFxuICAgICAgbmFtZS1saXN0ICAgIGxhbmd1YWdlc19jbGllbnRfdG9fc2VydmVyXG4gICAgICBuYW1lLWxpc3QgICAgbGFuZ3VhZ2VzX3NlcnZlcl90b19jbGllbnRcbiAgICAgIGJvb2xlYW4gICAgICBmaXJzdF9rZXhfcGFja2V0X2ZvbGxvd3NcbiAgICAgIHVpbnQzMiAgICAgICAwIChyZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbilcbiAgICAqL1xuICAgIHZhciBhbGdvcyA9IHNlbGYuY29uZmlnLmFsZ29yaXRobXM7XG5cbiAgICB2YXIga2V4QnVmID0gYWxnb3Mua2V4QnVmO1xuICAgIGlmIChzZWxmLnJlbW90ZUJ1Z3MgJiBCVUdTLkJBRF9ESEdFWCkge1xuICAgICAgdmFyIGNvcGllZCA9IGZhbHNlO1xuICAgICAgdmFyIGtleExpc3QgPSBhbGdvcy5rZXg7XG4gICAgICBmb3IgKHZhciBqID0ga2V4TGlzdC5sZW5ndGggLSAxOyBqID49IDA7IC0taikge1xuICAgICAgICBpZiAoa2V4TGlzdFtqXS5pbmRleE9mKCdncm91cC1leGNoYW5nZScpICE9PSAtMSkge1xuICAgICAgICAgIGlmICghY29waWVkKSB7XG4gICAgICAgICAgICBrZXhMaXN0ID0ga2V4TGlzdC5zbGljZSgpO1xuICAgICAgICAgICAgY29waWVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAga2V4TGlzdC5zcGxpY2UoaiwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb3BpZWQpXG4gICAgICAgIGtleEJ1ZiA9IEJ1ZmZlci5mcm9tKGtleExpc3Quam9pbignLCcpKTtcbiAgICB9XG5cbiAgICB2YXIgaG9zdEtleUJ1ZiA9IGFsZ29zLnNlcnZlckhvc3RLZXlCdWY7XG5cbiAgICB2YXIga2V4SW5pdFNpemUgPSAxICsgMTZcbiAgICAgICAgICAgICAgICAgICAgICArIDQgKyBrZXhCdWYubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgKyA0ICsgaG9zdEtleUJ1Zi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICArICgyICogKDQgKyBhbGdvcy5jaXBoZXJCdWYubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICArICgyICogKDQgKyBhbGdvcy5obWFjQnVmLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgKyAoMiAqICg0ICsgYWxnb3MuY29tcHJlc3NCdWYubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICArICgyICogKDQgLyogbGFuZ3VhZ2VzIHNraXBwZWQgKi8pKVxuICAgICAgICAgICAgICAgICAgICAgICsgMSArIDQ7XG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShrZXhJbml0U2l6ZSk7XG4gICAgdmFyIHAgPSAxNztcblxuICAgIGJ1ZlswXSA9IE1FU1NBR0UuS0VYSU5JVDtcblxuICAgIGlmIChteUNvb2tpZSAhPT0gZmFsc2UpXG4gICAgICBteUNvb2tpZS5jb3B5KGJ1ZiwgMSk7XG5cbiAgICB3cml0ZVVJbnQzMkJFKGJ1Ziwga2V4QnVmLmxlbmd0aCwgcCk7XG4gICAgcCArPSA0O1xuICAgIGtleEJ1Zi5jb3B5KGJ1ZiwgcCk7XG4gICAgcCArPSBrZXhCdWYubGVuZ3RoO1xuXG4gICAgd3JpdGVVSW50MzJCRShidWYsIGhvc3RLZXlCdWYubGVuZ3RoLCBwKTtcbiAgICBwICs9IDQ7XG4gICAgaG9zdEtleUJ1Zi5jb3B5KGJ1ZiwgcCk7XG4gICAgcCArPSBob3N0S2V5QnVmLmxlbmd0aDtcblxuICAgIHdyaXRlVUludDMyQkUoYnVmLCBhbGdvcy5jaXBoZXJCdWYubGVuZ3RoLCBwKTtcbiAgICBwICs9IDQ7XG4gICAgYWxnb3MuY2lwaGVyQnVmLmNvcHkoYnVmLCBwKTtcbiAgICBwICs9IGFsZ29zLmNpcGhlckJ1Zi5sZW5ndGg7XG5cbiAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYWxnb3MuY2lwaGVyQnVmLmxlbmd0aCwgcCk7XG4gICAgcCArPSA0O1xuICAgIGFsZ29zLmNpcGhlckJ1Zi5jb3B5KGJ1ZiwgcCk7XG4gICAgcCArPSBhbGdvcy5jaXBoZXJCdWYubGVuZ3RoO1xuXG4gICAgd3JpdGVVSW50MzJCRShidWYsIGFsZ29zLmhtYWNCdWYubGVuZ3RoLCBwKTtcbiAgICBwICs9IDQ7XG4gICAgYWxnb3MuaG1hY0J1Zi5jb3B5KGJ1ZiwgcCk7XG4gICAgcCArPSBhbGdvcy5obWFjQnVmLmxlbmd0aDtcblxuICAgIHdyaXRlVUludDMyQkUoYnVmLCBhbGdvcy5obWFjQnVmLmxlbmd0aCwgcCk7XG4gICAgcCArPSA0O1xuICAgIGFsZ29zLmhtYWNCdWYuY29weShidWYsIHApO1xuICAgIHAgKz0gYWxnb3MuaG1hY0J1Zi5sZW5ndGg7XG5cbiAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYWxnb3MuY29tcHJlc3NCdWYubGVuZ3RoLCBwKTtcbiAgICBwICs9IDQ7XG4gICAgYWxnb3MuY29tcHJlc3NCdWYuY29weShidWYsIHApO1xuICAgIHAgKz0gYWxnb3MuY29tcHJlc3NCdWYubGVuZ3RoO1xuXG4gICAgd3JpdGVVSW50MzJCRShidWYsIGFsZ29zLmNvbXByZXNzQnVmLmxlbmd0aCwgcCk7XG4gICAgcCArPSA0O1xuICAgIGFsZ29zLmNvbXByZXNzQnVmLmNvcHkoYnVmLCBwKTtcbiAgICBwICs9IGFsZ29zLmNvbXByZXNzQnVmLmxlbmd0aDtcblxuICAgIC8vIFNraXAgbGFuZ3VhZ2UgbGlzdHMsIGZpcnN0X2tleF9wYWNrZXRfZm9sbG93cywgYW5kIHJlc2VydmVkIGJ5dGVzXG4gICAgYnVmLmZpbGwoMCwgYnVmLmxlbmd0aCAtIDEzKTtcblxuICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBLRVhJTklUJyk7XG5cbiAgICBzZWxmLl9zdGF0ZS5pbmNvbWluZy5leHBlY3RlZFBhY2tldCA9ICdLRVhJTklUJztcblxuICAgIHZhciBvdXRzdGF0ZSA9IHNlbGYuX3N0YXRlLm91dGdvaW5nO1xuXG4gICAgb3V0c3RhdGUua2V4aW5pdCA9IGJ1ZjtcblxuICAgIGlmIChvdXRzdGF0ZS5zdGF0dXMgPT09IE9VVF9SRUFEWSkge1xuICAgICAgLy8gV2UgYXJlIHRoZSBvbmUgc3RhcnRpbmcgdGhlIHJla2V5aW5nIHByb2Nlc3MgLi4uXG4gICAgICBvdXRzdGF0ZS5zdGF0dXMgPSBPVVRfUkVLRVlJTkc7XG4gICAgfVxuXG4gICAgc2VuZChzZWxmLCBidWYsIGNiLCB0cnVlKTtcbiAgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBLRVhESF9JTklUKHNlbGYpIHsgLy8gQ2xpZW50XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3N0YXRlO1xuICB2YXIgb3V0c3RhdGUgPSBzdGF0ZS5vdXRnb2luZztcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxICsgNCArIG91dHN0YXRlLnB1YmtleS5sZW5ndGgpO1xuXG4gIHN0YXRlLmluY29taW5nLmV4cGVjdGVkUGFja2V0ID0gc3RhdGUua2V4LnBrdFJlcGx5O1xuICBpZiAoc3RhdGUua2V4LnR5cGUgPT09ICdncm91cGV4Jykge1xuICAgIGJ1ZlswXSA9IE1FU1NBR0UuS0VYREhfR0VYX0lOSVQ7XG4gICAgc2VsZi5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIEtFWERIX0dFWF9JTklUJyk7XG4gIH0gZWxzZSB7XG4gICAgYnVmWzBdID0gTUVTU0FHRS5LRVhESF9JTklUO1xuICAgIGlmIChzdGF0ZS5rZXgudHlwZSA9PT0gJ2dyb3VwJylcbiAgICAgIHNlbGYuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBLRVhESF9JTklUJyk7XG4gICAgZWxzZVxuICAgICAgc2VsZi5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIEtFWEVDREhfSU5JVCcpO1xuICB9XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIG91dHN0YXRlLnB1YmtleS5sZW5ndGgsIDEpO1xuICBvdXRzdGF0ZS5wdWJrZXkuY29weShidWYsIDUpO1xuXG4gIHJldHVybiBzZW5kKHNlbGYsIGJ1ZiwgdW5kZWZpbmVkLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gS0VYREhfUkVQTFkoc2VsZiwgZSkgeyAvLyBTZXJ2ZXJcbiAgdmFyIHN0YXRlID0gc2VsZi5fc3RhdGU7XG4gIHZhciBvdXRzdGF0ZSA9IHN0YXRlLm91dGdvaW5nO1xuICB2YXIgaW5zdGF0ZSA9IHN0YXRlLmluY29taW5nO1xuICB2YXIgY3VySG9zdEtleSA9IHNlbGYuY29uZmlnLmhvc3RLZXlzW3N0YXRlLmhvc3RrZXlGb3JtYXRdO1xuICBpZiAoQXJyYXkuaXNBcnJheShjdXJIb3N0S2V5KSlcbiAgICBjdXJIb3N0S2V5ID0gY3VySG9zdEtleVswXTtcbiAgdmFyIGhvc3RrZXkgPSBjdXJIb3N0S2V5LmdldFB1YmxpY1NTSCgpO1xuICB2YXIgaG9zdGtleUFsZ28gPSBjdXJIb3N0S2V5LnR5cGU7XG5cbiAgLy8gZSA9PT0gY2xpZW50IERIIHB1YmxpYyBrZXlcblxuICBlID0gc3RhdGUua2V4LmNvbnZlcnRQdWJsaWNLZXkoZSk7XG5cbiAgdmFyIHNlY3JldCA9IHN0YXRlLmtleC5jb21wdXRlU2VjcmV0KGUpO1xuXG4gIGlmIChzZWNyZXQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHNlY3JldC5tZXNzYWdlID0gJ0Vycm9yIHdoaWxlIGNvbXB1dGluZyBESCBzZWNyZXQgKCdcbiAgICAgICAgICAgICAgICAgICAgICsgc3RhdGUua2V4LnR5cGUgKyAnKTogJ1xuICAgICAgICAgICAgICAgICAgICAgKyBzZWNyZXQubWVzc2FnZTtcbiAgICBzZWNyZXQubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgc2VjcmV0KTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChzdGF0ZS5rZXguaGFzaCk7XG5cbiAgdmFyIGxlbl9pZGVudCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGluc3RhdGUuaWRlbnRSYXcpO1xuICB2YXIgbGVuX3NpZGVudCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHNlbGYuY29uZmlnLmlkZW50KTtcbiAgdmFyIGxlbl9pbml0ID0gaW5zdGF0ZS5rZXhpbml0Lmxlbmd0aDtcbiAgdmFyIGxlbl9zaW5pdCA9IG91dHN0YXRlLmtleGluaXQubGVuZ3RoO1xuICB2YXIgbGVuX2hvc3RrZXkgPSBob3N0a2V5Lmxlbmd0aDtcbiAgdmFyIGxlbl9wdWJrZXkgPSBlLmxlbmd0aDtcbiAgdmFyIGxlbl9zcHVia2V5ID0gb3V0c3RhdGUucHVia2V5Lmxlbmd0aDtcbiAgdmFyIGxlbl9zZWNyZXQgPSBzZWNyZXQubGVuZ3RoO1xuXG4gIHZhciBleGNoYW5nZUJ1ZkxlbiA9IGxlbl9pZGVudFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zaWRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgKyBsZW5faW5pdFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zaW5pdFxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9ob3N0a2V5XG4gICAgICAgICAgICAgICAgICAgICAgICsgbGVuX3B1YmtleVxuICAgICAgICAgICAgICAgICAgICAgICArIGxlbl9zcHVia2V5XG4gICAgICAgICAgICAgICAgICAgICAgICsgbGVuX3NlY3JldFxuICAgICAgICAgICAgICAgICAgICAgICArICg0ICogOCk7IC8vIExlbmd0aCBmaWVsZHMgZm9yIGFib3ZlIHZhbHVlc1xuXG4gIC8vIEdyb3VwIGV4Y2hhbmdlLXJlbGF0ZWRcbiAgdmFyIGxlbl9nZXhfcHJpbWU7XG4gIHZhciBsZW5fZ2V4X2dlbjtcbiAgdmFyIGdleF9wcmltZTtcbiAgdmFyIGdleF9nZW47XG4gIHZhciBkaFBhcmFtcyA9IHN0YXRlLmtleC5nZXRESFBhcmFtcygpO1xuICBpZiAoZGhQYXJhbXMpIHtcbiAgICBnZXhfcHJpbWUgPSBkaFBhcmFtcy5wcmltZTtcbiAgICBnZXhfZ2VuID0gZGhQYXJhbXMuZ2VuZXJhdG9yO1xuICAgIGxlbl9nZXhfcHJpbWUgPSBnZXhfcHJpbWUubGVuZ3RoO1xuICAgIGxlbl9nZXhfZ2VuID0gZ2V4X2dlbi5sZW5ndGg7XG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gKDQgKiAzKTsgLy8gbWluLCBuLCBtYXggdmFsdWVzXG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gKDQgKiAyKTsgLy8gcHJpbWUsIGdlbmVyYXRvciBsZW5ndGggZmllbGRzXG4gICAgZXhjaGFuZ2VCdWZMZW4gKz0gbGVuX2dleF9wcmltZTtcbiAgICBleGNoYW5nZUJ1ZkxlbiArPSBsZW5fZ2V4X2dlbjtcbiAgfVxuXG4gIHZhciBicCA9IDA7XG4gIHZhciBleGNoYW5nZUJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShleGNoYW5nZUJ1Zkxlbik7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX2lkZW50LCBicCk7XG4gIGJwICs9IDQ7XG4gIGV4Y2hhbmdlQnVmLndyaXRlKGluc3RhdGUuaWRlbnRSYXcsIGJwLCAndXRmOCcpOyAvLyBWX0NcbiAgYnAgKz0gbGVuX2lkZW50O1xuXG4gIHdyaXRlVUludDMyQkUoZXhjaGFuZ2VCdWYsIGxlbl9zaWRlbnQsIGJwKTtcbiAgYnAgKz0gNDtcbiAgZXhjaGFuZ2VCdWYud3JpdGUoc2VsZi5jb25maWcuaWRlbnQsIGJwLCAndXRmOCcpOyAvLyBWX1NcbiAgYnAgKz0gbGVuX3NpZGVudDtcblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5faW5pdCwgYnApO1xuICBicCArPSA0O1xuICBpbnN0YXRlLmtleGluaXQuY29weShleGNoYW5nZUJ1ZiwgYnApOyAvLyBJX0NcbiAgYnAgKz0gbGVuX2luaXQ7XG4gIGluc3RhdGUua2V4aW5pdCA9IHVuZGVmaW5lZDtcblxuICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5fc2luaXQsIGJwKTtcbiAgYnAgKz0gNDtcbiAgb3V0c3RhdGUua2V4aW5pdC5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIElfU1xuICBicCArPSBsZW5fc2luaXQ7XG4gIG91dHN0YXRlLmtleGluaXQgPSB1bmRlZmluZWQ7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX2hvc3RrZXksIGJwKTtcbiAgYnAgKz0gNDtcbiAgaG9zdGtleS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIEtfU1xuICBicCArPSBsZW5faG9zdGtleTtcblxuICBpZiAoZGhQYXJhbXMpIHtcbiAgICBLRVhESF9HRVhfUkVRX1BBQ0tFVC5zbGljZSgxKS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIG1pbiwgbiwgbWF4XG4gICAgYnAgKz0gKDQgKiAzKTsgLy8gU2tpcCBvdmVyIGJ5dGVzIGp1c3QgY29waWVkXG5cbiAgICB3cml0ZVVJbnQzMkJFKGV4Y2hhbmdlQnVmLCBsZW5fZ2V4X3ByaW1lLCBicCk7XG4gICAgYnAgKz0gNDtcbiAgICBnZXhfcHJpbWUuY29weShleGNoYW5nZUJ1ZiwgYnApOyAvLyBwXG4gICAgYnAgKz0gbGVuX2dleF9wcmltZTtcblxuICAgIHdyaXRlVUludDMyQkUoZXhjaGFuZ2VCdWYsIGxlbl9nZXhfZ2VuLCBicCk7XG4gICAgYnAgKz0gNDtcbiAgICBnZXhfZ2VuLmNvcHkoZXhjaGFuZ2VCdWYsIGJwKTsgLy8gZ1xuICAgIGJwICs9IGxlbl9nZXhfZ2VuO1xuICB9XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX3B1YmtleSwgYnApO1xuICBicCArPSA0O1xuICBlLmNvcHkoZXhjaGFuZ2VCdWYsIGJwKTsgLy8gZVxuICBicCArPSBsZW5fcHVia2V5O1xuXG4gIHdyaXRlVUludDMyQkUoZXhjaGFuZ2VCdWYsIGxlbl9zcHVia2V5LCBicCk7XG4gIGJwICs9IDQ7XG4gIG91dHN0YXRlLnB1YmtleS5jb3B5KGV4Y2hhbmdlQnVmLCBicCk7IC8vIGZcbiAgYnAgKz0gbGVuX3NwdWJrZXk7XG5cbiAgd3JpdGVVSW50MzJCRShleGNoYW5nZUJ1ZiwgbGVuX3NlY3JldCwgYnApO1xuICBicCArPSA0O1xuICBzZWNyZXQuY29weShleGNoYW5nZUJ1ZiwgYnApOyAvLyBLXG5cbiAgb3V0c3RhdGUuZXhjaGFuZ2VIYXNoID0gaGFzaC51cGRhdGUoZXhjaGFuZ2VCdWYpLmRpZ2VzdCgpOyAvLyBIXG5cbiAgaWYgKG91dHN0YXRlLnNlc3Npb25JZCA9PT0gdW5kZWZpbmVkKVxuICAgIG91dHN0YXRlLnNlc3Npb25JZCA9IG91dHN0YXRlLmV4Y2hhbmdlSGFzaDtcbiAgb3V0c3RhdGUua2V4c2VjcmV0ID0gc2VjcmV0O1xuXG4gIHZhciBzaWduYXR1cmUgPSBjdXJIb3N0S2V5LnNpZ24ob3V0c3RhdGUuZXhjaGFuZ2VIYXNoKTtcbiAgaWYgKHNpZ25hdHVyZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgc2lnbmF0dXJlLm1lc3NhZ2UgPSAnRXJyb3Igd2hpbGUgc2lnbmluZyBkYXRhIHdpdGggaG9zdCBrZXkgKCdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgaG9zdGtleUFsZ28gKyAnKTogJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKyBzaWduYXR1cmUubWVzc2FnZTtcbiAgICBzaWduYXR1cmUubGV2ZWwgPSAnaGFuZHNoYWtlJztcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgc2lnbmF0dXJlKTtcbiAgICBzZWxmLmRpc2Nvbm5lY3QoRElTQ09OTkVDVF9SRUFTT04uS0VZX0VYQ0hBTkdFX0ZBSUxFRCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2lnbmF0dXJlID0gY29udmVydFNpZ25hdHVyZShzaWduYXR1cmUsIGhvc3RrZXlBbGdvKTtcbiAgaWYgKHNpZ25hdHVyZSA9PT0gZmFsc2UpIHtcbiAgICBzaWduYXR1cmUubWVzc2FnZSA9ICdFcnJvciB3aGlsZSBjb252ZXJ0aW5nIGhhbmRzaGFrZSBzaWduYXR1cmUnO1xuICAgIHNpZ25hdHVyZS5sZXZlbCA9ICdoYW5kc2hha2UnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBzaWduYXR1cmUpO1xuICAgIHNlbGYuZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5LRVlfRVhDSEFOR0VfRkFJTEVEKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKlxuICAgIGJ5dGUgICAgICBTU0hfTVNHX0tFWERIX1JFUExZXG4gICAgc3RyaW5nICAgIHNlcnZlciBwdWJsaWMgaG9zdCBrZXkgYW5kIGNlcnRpZmljYXRlcyAoS19TKVxuICAgIG1waW50ICAgICBmXG4gICAgc3RyaW5nICAgIHNpZ25hdHVyZSBvZiBIXG4gICovXG5cbiAgdmFyIHNpZ2xlbiA9IDQgKyBob3N0a2V5QWxnby5sZW5ndGggKyA0ICsgc2lnbmF0dXJlLmxlbmd0aDtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA0ICsgbGVuX2hvc3RrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDQgKyBsZW5fc3B1YmtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgNCArIHNpZ2xlbik7XG5cbiAgYnAgPSAwO1xuICBidWZbYnBdID0gTUVTU0FHRVtzdGF0ZS5rZXgucGt0UmVwbHldO1xuICArK2JwO1xuXG4gIHdyaXRlVUludDMyQkUoYnVmLCBsZW5faG9zdGtleSwgYnApO1xuICBicCArPSA0O1xuICBob3N0a2V5LmNvcHkoYnVmLCBicCk7IC8vIEtfU1xuICBicCArPSBsZW5faG9zdGtleTtcblxuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgbGVuX3NwdWJrZXksIGJwKTtcbiAgYnAgKz0gNDtcbiAgb3V0c3RhdGUucHVia2V5LmNvcHkoYnVmLCBicCk7IC8vIGZcbiAgYnAgKz0gbGVuX3NwdWJrZXk7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHNpZ2xlbiwgYnApO1xuICBicCArPSA0O1xuICB3cml0ZVVJbnQzMkJFKGJ1ZiwgaG9zdGtleUFsZ28ubGVuZ3RoLCBicCk7XG4gIGJwICs9IDQ7XG4gIGJ1Zi53cml0ZShob3N0a2V5QWxnbywgYnAsIGhvc3RrZXlBbGdvLmxlbmd0aCwgJ2FzY2lpJyk7XG4gIGJwICs9IGhvc3RrZXlBbGdvLmxlbmd0aDtcbiAgd3JpdGVVSW50MzJCRShidWYsIHNpZ25hdHVyZS5sZW5ndGgsIGJwKTtcbiAgYnAgKz0gNDtcbiAgc2lnbmF0dXJlLmNvcHkoYnVmLCBicCk7XG5cbiAgc3RhdGUuaW5jb21pbmcuZXhwZWN0ZWRQYWNrZXQgPSAnTkVXS0VZUyc7XG5cbiAgc2VsZi5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nICcgKyBzdGF0ZS5rZXgucGt0UmVwbHkpO1xuICBzZW5kKHNlbGYsIGJ1ZiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICBvdXRzdGF0ZS5zZW50TkVXS0VZUyA9IHRydWU7XG4gIHNlbGYuZGVidWcoJ0RFQlVHOiBPdXRnb2luZzogV3JpdGluZyBORVdLRVlTJyk7XG4gIHJldHVybiBzZW5kKHNlbGYsIE5FV0tFWVNfUEFDS0VULCB1bmRlZmluZWQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBLRVhESF9HRVhfUkVRKHNlbGYpIHsgLy8gQ2xpZW50XG4gIHNlbGYuX3N0YXRlLmluY29taW5nLmV4cGVjdGVkUGFja2V0ID0gJ0tFWERIX0dFWF9HUk9VUCc7XG5cbiAgc2VsZi5kZWJ1ZygnREVCVUc6IE91dGdvaW5nOiBXcml0aW5nIEtFWERIX0dFWF9SRVFVRVNUJyk7XG4gIHJldHVybiBzZW5kKHNlbGYsIEtFWERIX0dFWF9SRVFfUEFDS0VULCB1bmRlZmluZWQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBjb21wcmVzc1BheWxvYWQoc2VsZiwgcGF5bG9hZCwgY2IpIHtcbiAgdmFyIGNvbXByZXNzID0gc2VsZi5fc3RhdGUub3V0Z29pbmcuY29tcHJlc3MuaW5zdGFuY2U7XG4gIGNvbXByZXNzLndyaXRlKHBheWxvYWQpO1xuICBjb21wcmVzcy5mbHVzaChaX1BBUlRJQUxfRkxVU0gsIGNvbXByZXNzRmx1c2hDYi5iaW5kKHNlbGYsIGNiKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXByZXNzRmx1c2hDYihjYikge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKVxuICAgIHJldHVybjtcbiAgc2VuZF8odGhpcywgdGhpcy5fc3RhdGUub3V0Z29pbmcuY29tcHJlc3MuaW5zdGFuY2UucmVhZCgpLCBjYik7XG5cbiAgdmFyIHF1ZXVlID0gdGhpcy5fc3RhdGUub3V0Z29pbmcuY29tcHJlc3MucXVldWU7XG4gIHF1ZXVlLnNoaWZ0KCk7XG4gIGlmIChxdWV1ZS5sZW5ndGggPiAwKVxuICAgIGNvbXByZXNzUGF5bG9hZCh0aGlzLCBxdWV1ZVswXVswXSwgcXVldWVbMF1bMV0pO1xufVxuXG5mdW5jdGlvbiBzZW5kKHNlbGYsIHBheWxvYWQsIGNiLCBieXBhc3MpIHtcbiAgdmFyIHN0YXRlID0gc2VsZi5fc3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIG91dHN0YXRlID0gc3RhdGUub3V0Z29pbmc7XG4gIGlmIChvdXRzdGF0ZS5zdGF0dXMgPT09IE9VVF9SRUtFWUlORyAmJiAhYnlwYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIG91dHN0YXRlLnJla2V5UXVldWUucHVzaChbcGF5bG9hZCwgY2JdKTtcbiAgICBlbHNlXG4gICAgICBvdXRzdGF0ZS5yZWtleVF1ZXVlLnB1c2gocGF5bG9hZCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKHNlbGYuX3JlYWRhYmxlU3RhdGUuZW5kZWQgfHwgc2VsZi5fd3JpdGFibGVTdGF0ZS5lbmRlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChvdXRzdGF0ZS5jb21wcmVzcy5pbnN0YW5jZSkge1xuICAgIC8vIFRoaXMgcXVldWUgbm9uc2Vuc2Ugb25seSBleGlzdHMgYmVjYXVzZSBvZiBhIGNoYW5nZSBtYWRlIGluIG5vZGUgdjEwLjEyLjBcbiAgICAvLyB0aGF0IGNoYW5nZWQgZmx1c2hpbmcgYmVoYXZpb3IsIHdoaWNoIG5vdyBjb2FsZXNjZXMgbXVsdGlwbGUgd3JpdGVzIHRvIGFcbiAgICAvLyBzaW5nbGUgZmx1c2gsIHdoaWNoIGRvZXMgbm90IHdvcmsgZm9yIHVzLlxuICAgIHZhciBxdWV1ZSA9IG91dHN0YXRlLmNvbXByZXNzLnF1ZXVlO1xuICAgIHF1ZXVlLnB1c2goW3BheWxvYWQsIGNiXSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSlcbiAgICAgIGNvbXByZXNzUGF5bG9hZChzZWxmLCBxdWV1ZVswXVswXSwgcXVldWVbMF1bMV0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZW5kXyhzZWxmLCBwYXlsb2FkLCBjYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VuZF8oc2VsZiwgcGF5bG9hZCwgY2IpIHtcbiAgLy8gVE9ETzogSW1wbGVtZW50IGxlbmd0aCBjaGVja3NcblxuICB2YXIgc3RhdGUgPSBzZWxmLl9zdGF0ZTtcbiAgdmFyIG91dHN0YXRlID0gc3RhdGUub3V0Z29pbmc7XG4gIHZhciBlbmNyeXB0ID0gb3V0c3RhdGUuZW5jcnlwdDtcbiAgdmFyIGhtYWMgPSBvdXRzdGF0ZS5obWFjO1xuICB2YXIgcGt0TGVuO1xuICB2YXIgcGFkTGVuO1xuICB2YXIgYnVmO1xuICB2YXIgbWFjO1xuICB2YXIgcmV0O1xuXG4gIHBrdExlbiA9IHBheWxvYWQubGVuZ3RoICsgOTtcblxuICBpZiAoZW5jcnlwdC5pbnN0YW5jZSAhPT0gZmFsc2UpIHtcbiAgICBpZiAoZW5jcnlwdC5pbmZvLmF1dGhMZW4gPiAwKSB7XG4gICAgICB2YXIgcHRsZW4gPSAxICsgcGF5bG9hZC5sZW5ndGggKyA0LyogTXVzdCBoYXZlIGF0IGxlYXN0IDQgYnl0ZXMgcGFkZGluZyovO1xuICAgICAgd2hpbGUgKChwdGxlbiAlIGVuY3J5cHQuaW5mby5ibG9ja0xlbikgIT09IDApXG4gICAgICAgICsrcHRsZW47XG4gICAgICBwYWRMZW4gPSBwdGxlbiAtIDEgLSBwYXlsb2FkLmxlbmd0aDtcbiAgICAgIHBrdExlbiA9IDQgKyBwdGxlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGJsb2NrTGVuID0gZW5jcnlwdC5pbmZvLmJsb2NrTGVuO1xuICAgICAgcGt0TGVuICs9ICgoYmxvY2tMZW4gLSAxKSAqIHBrdExlbikgJSBibG9ja0xlbjtcbiAgICAgIHBhZExlbiA9IHBrdExlbiAtIHBheWxvYWQubGVuZ3RoIC0gNTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGt0TGVuICs9ICg3ICogcGt0TGVuKSAlIDg7XG4gICAgcGFkTGVuID0gcGt0TGVuIC0gcGF5bG9hZC5sZW5ndGggLSA1O1xuICB9XG5cbiAgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBrdExlbik7XG5cbiAgd3JpdGVVSW50MzJCRShidWYsIHBrdExlbiAtIDQsIDApO1xuICBidWZbNF0gPSBwYWRMZW47XG4gIHBheWxvYWQuY29weShidWYsIDUpO1xuXG4gIGNvcHlSYW5kUGFkQnl0ZXMoYnVmLCA1ICsgcGF5bG9hZC5sZW5ndGgsIHBhZExlbik7XG5cbiAgaWYgKGhtYWMudHlwZSAhPT0gZmFsc2UgJiYgaG1hYy5rZXkpIHtcbiAgICBtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYyhTU0hfVE9fT1BFTlNTTFtobWFjLnR5cGVdLCBobWFjLmtleSk7XG4gICAgd3JpdGVVSW50MzJCRShvdXRzdGF0ZS5idWZTZXFubywgb3V0c3RhdGUuc2Vxbm8sIDApO1xuICAgIG1hYy51cGRhdGUob3V0c3RhdGUuYnVmU2Vxbm8pO1xuICAgIG1hYy51cGRhdGUoYnVmKTtcbiAgICBtYWMgPSBtYWMuZGlnZXN0KCk7XG4gICAgaWYgKG1hYy5sZW5ndGggPiBobWFjLmluZm8uYWN0dWFsTGVuKVxuICAgICAgbWFjID0gbWFjLnNsaWNlKDAsIGhtYWMuaW5mby5hY3R1YWxMZW4pO1xuICB9XG5cbiAgdmFyIG5iID0gMDtcbiAgdmFyIGVuY0RhdGE7XG5cbiAgaWYgKGVuY3J5cHQuaW5zdGFuY2UgIT09IGZhbHNlKSB7XG4gICAgaWYgKGVuY3J5cHQuaW5mby5hdXRoTGVuID4gMCkge1xuICAgICAgdmFyIGVuY3J5cHRlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihTU0hfVE9fT1BFTlNTTFtlbmNyeXB0LnR5cGVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0LmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdC5pdik7XG4gICAgICBlbmNyeXB0ZXIuc2V0QXV0b1BhZGRpbmcoZmFsc2UpO1xuXG4gICAgICB2YXIgbGVuYnVmID0gYnVmLnNsaWNlKDAsIDQpO1xuXG4gICAgICBlbmNyeXB0ZXIuc2V0QUFEKGxlbmJ1Zik7XG4gICAgICBzZWxmLnB1c2gobGVuYnVmKTtcbiAgICAgIG5iICs9IGxlbmJ1ZjtcblxuICAgICAgZW5jRGF0YSA9IGVuY3J5cHRlci51cGRhdGUoYnVmLnNsaWNlKDQpKTtcbiAgICAgIHNlbGYucHVzaChlbmNEYXRhKTtcbiAgICAgIG5iICs9IGVuY0RhdGEubGVuZ3RoO1xuXG4gICAgICB2YXIgZmluYWwgPSBlbmNyeXB0ZXIuZmluYWwoKTtcbiAgICAgIGlmIChmaW5hbC5sZW5ndGgpIHtcbiAgICAgICAgc2VsZi5wdXNoKGZpbmFsKTtcbiAgICAgICAgbmIgKz0gZmluYWwubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXV0aFRhZyA9IGVuY3J5cHRlci5nZXRBdXRoVGFnKCk7XG4gICAgICByZXQgPSBzZWxmLnB1c2goYXV0aFRhZyk7XG4gICAgICBuYiArPSBhdXRoVGFnLmxlbmd0aDtcblxuICAgICAgaXZfaW5jKGVuY3J5cHQuaXYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNEYXRhID0gZW5jcnlwdC5pbnN0YW5jZS51cGRhdGUoYnVmKTtcbiAgICAgIHNlbGYucHVzaChlbmNEYXRhKTtcbiAgICAgIG5iICs9IGVuY0RhdGEubGVuZ3RoO1xuXG4gICAgICByZXQgPSBzZWxmLnB1c2gobWFjKTtcbiAgICAgIG5iICs9IG1hYy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldCA9IHNlbGYucHVzaChidWYpO1xuICAgIG5iID0gYnVmLmxlbmd0aDtcbiAgfVxuXG4gIHNlbGYuYnl0ZXNTZW50ICs9IG5iO1xuXG4gIGlmICgrK291dHN0YXRlLnNlcW5vID4gTUFYX1NFUU5PKVxuICAgIG91dHN0YXRlLnNlcW5vID0gMDtcblxuICBjYiAmJiBjYigpO1xuXG4gIHJldHVybiByZXQ7XG59XG5cbnZhciBjb3B5UmFuZFBhZEJ5dGVzID0gKGZ1bmN0aW9uKCkge1xuICBpZiAodHlwZW9mIGNyeXB0by5yYW5kb21GaWxsU3luYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjcnlwdG8ucmFuZG9tRmlsbFN5bmM7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvcHlSYW5kUGFkQnl0ZXMoYnVmLCBvZmZzZXQsIGNvdW50KSB7XG4gICAgICB2YXIgcGFkQnl0ZXMgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoY291bnQpO1xuICAgICAgcGFkQnl0ZXMuY29weShidWYsIG9mZnNldCk7XG4gICAgfTtcbiAgfVxufSkoKTtcblxuZnVuY3Rpb24gcmFuZEJ5dGVzKG4sIGNiKSB7XG4gIGNyeXB0by5yYW5kb21CeXRlcyhuLCBmdW5jdGlvbiByZXRyeShlcnIsIGJ1Zikge1xuICAgIGlmIChlcnIpXG4gICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKG4sIHJldHJ5KTtcbiAgICBjYiAmJiBjYihidWYpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY29udmVydFNpZ25hdHVyZShzaWduYXR1cmUsIGtleVR5cGUpIHtcbiAgc3dpdGNoIChrZXlUeXBlKSB7XG4gICAgY2FzZSAnc3NoLWRzcyc6XG4gICAgICByZXR1cm4gRFNBU2lnQkVSVG9CYXJlKHNpZ25hdHVyZSk7XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDI1Nic6XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDM4NCc6XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDUyMSc6XG4gICAgICByZXR1cm4gRUNEU0FTaWdBU04xVG9TU0goc2lnbmF0dXJlKTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbnZhciB0aW1pbmdTYWZlRXF1YWwgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2YgY3J5cHRvLnRpbWluZ1NhZmVFcXVhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiB0aW1pbmdTYWZlRXF1YWxzKGEsIGIpIHtcbiAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgICAgY3J5cHRvLnRpbWluZ1NhZmVFcXVhbChhLCBhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by50aW1pbmdTYWZlRXF1YWwoYSwgYik7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gdGltaW5nU2FmZUVxdWFscyhhLCBiKSB7XG4gICAgICB2YXIgdmFsO1xuICAgICAgaWYgKGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgICAgICB2YWwgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gMTtcbiAgICAgICAgYiA9IGE7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhLmxlbmd0aDsgaSA8IGxlbjsgKytpKVxuICAgICAgICB2YWwgfD0gKGFbaV0gXiBiW2ldKTtcblxuICAgICAgcmV0dXJuICh2YWwgPT09IDApO1xuICAgIH1cbiAgfVxufSkoKTtcblxuZnVuY3Rpb24gS2V5RXhjaGFuZ2UoYWxnbywgb3B0aW9ucykge1xuICBzd2l0Y2ggKGFsZ28pIHtcbiAgICBjYXNlICdjdXJ2ZTI1NTE5LXNoYTI1Nic6XG4gICAgY2FzZSAnY3VydmUyNTUxOS1zaGEyNTZAbGlic3NoLm9yZyc6XG4gICAgICBpZiAoIUNVUlZFMjU1MTlfU1VQUE9SVEVEKVxuICAgICAgICBicmVhaztcbiAgICAgIHRoaXMudHlwZSA9ICcyNTUxOSc7XG4gICAgICB0aGlzLmhhc2ggPSAnc2hhMjU2JztcbiAgICAgIHRoaXMucGt0SW5pdCA9ICdLRVhFQ0RIX0lOSVQnO1xuICAgICAgdGhpcy5wa3RSZXBseSA9ICdLRVhFQ0RIX1JFUExZJztcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdlY2RoLXNoYTItbmlzdHAyNTYnOlxuICAgICAgdGhpcy50eXBlID0gJ2VjZGgnO1xuICAgICAgdGhpcy5uYW1lID0gJ3ByaW1lMjU2djEnO1xuICAgICAgdGhpcy5oYXNoID0gJ3NoYTI1Nic7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYRUNESF9JTklUJztcbiAgICAgIHRoaXMucGt0UmVwbHkgPSAnS0VYRUNESF9SRVBMWSc7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZWNkaC1zaGEyLW5pc3RwMzg0JzpcbiAgICAgIHRoaXMudHlwZSA9ICdlY2RoJztcbiAgICAgIHRoaXMubmFtZSA9ICdzZWNwMzg0cjEnO1xuICAgICAgdGhpcy5oYXNoID0gJ3NoYTM4NCc7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYRUNESF9JTklUJztcbiAgICAgIHRoaXMucGt0UmVwbHkgPSAnS0VYRUNESF9SRVBMWSc7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZWNkaC1zaGEyLW5pc3RwNTIxJzpcbiAgICAgIHRoaXMudHlwZSA9ICdlY2RoJztcbiAgICAgIHRoaXMubmFtZSA9ICdzZWNwNTIxcjEnO1xuICAgICAgdGhpcy5oYXNoID0gJ3NoYTUxMic7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYRUNESF9JTklUJztcbiAgICAgIHRoaXMucGt0UmVwbHkgPSAnS0VYRUNESF9SRVBMWSc7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZGlmZmllLWhlbGxtYW4tZ3JvdXAxLXNoYTEnOlxuICAgICAgdGhpcy50eXBlID0gJ2dyb3VwJztcbiAgICAgIHRoaXMubmFtZSA9ICdtb2RwMic7XG4gICAgICB0aGlzLmhhc2ggPSAnc2hhMSc7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYREhfSU5JVCc7XG4gICAgICB0aGlzLnBrdFJlcGx5ID0gJ0tFWERIX1JFUExZJztcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEnOlxuICAgICAgdGhpcy50eXBlID0gJ2dyb3VwJztcbiAgICAgIHRoaXMubmFtZSA9ICdtb2RwMTQnO1xuICAgICAgdGhpcy5oYXNoID0gJ3NoYTEnO1xuICAgICAgdGhpcy5wa3RJbml0ID0gJ0tFWERIX0lOSVQnO1xuICAgICAgdGhpcy5wa3RSZXBseSA9ICdLRVhESF9SRVBMWSc7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZGlmZmllLWhlbGxtYW4tZ3JvdXAxNC1zaGEyNTYnOlxuICAgICAgdGhpcy50eXBlID0gJ2dyb3VwJztcbiAgICAgIHRoaXMubmFtZSA9ICdtb2RwMTQnO1xuICAgICAgdGhpcy5oYXNoID0gJ3NoYTI1Nic7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYREhfSU5JVCc7XG4gICAgICB0aGlzLnBrdFJlcGx5ID0gJ0tFWERIX1JFUExZJztcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdkaWZmaWUtaGVsbG1hbi1ncm91cDE2LXNoYTUxMic6XG4gICAgICB0aGlzLnR5cGUgPSAnZ3JvdXAnO1xuICAgICAgdGhpcy5uYW1lID0gJ21vZHAxNic7XG4gICAgICB0aGlzLmhhc2ggPSAnc2hhNTEyJztcbiAgICAgIHRoaXMucGt0SW5pdCA9ICdLRVhESF9JTklUJztcbiAgICAgIHRoaXMucGt0UmVwbHkgPSAnS0VYREhfUkVQTFknO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgJ2RpZmZpZS1oZWxsbWFuLWdyb3VwMTgtc2hhNTEyJzpcbiAgICAgIHRoaXMudHlwZSA9ICdncm91cCc7XG4gICAgICB0aGlzLm5hbWUgPSAnbW9kcDE4JztcbiAgICAgIHRoaXMuaGFzaCA9ICdzaGE1MTInO1xuICAgICAgdGhpcy5wa3RJbml0ID0gJ0tFWERIX0lOSVQnO1xuICAgICAgdGhpcy5wa3RSZXBseSA9ICdLRVhESF9SRVBMWSc7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZGlmZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMSc6XG4gICAgICB0aGlzLnR5cGUgPSAnZ3JvdXBleCc7XG4gICAgICB0aGlzLmhhc2ggPSAnc2hhMSc7XG4gICAgICB0aGlzLnBrdEluaXQgPSAnS0VYREhfR0VYX1JFUSc7XG4gICAgICB0aGlzLnBrdFJlcGx5ID0gJ0tFWERIX0dFWF9SRVBMWSc7XG4gICAgICB0aGlzLl9wcmltZSA9IG51bGw7XG4gICAgICB0aGlzLl9nZW5lcmF0b3IgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgJ2RpZmZpZS1oZWxsbWFuLWdyb3VwLWV4Y2hhbmdlLXNoYTI1Nic6XG4gICAgICB0aGlzLnR5cGUgPSAnZ3JvdXBleCc7XG4gICAgICB0aGlzLmhhc2ggPSAnc2hhMjU2JztcbiAgICAgIHRoaXMucGt0SW5pdCA9ICdLRVhESF9HRVhfUkVRJztcbiAgICAgIHRoaXMucGt0UmVwbHkgPSAnS0VYREhfR0VYX1JFUExZJztcbiAgICAgIHRoaXMuX3ByaW1lID0gbnVsbDtcbiAgICAgIHRoaXMuX2dlbmVyYXRvciA9IG51bGw7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtOiAnICsgYWxnbyk7XG59XG5LZXlFeGNoYW5nZS5wcm90b3R5cGUuc2V0REhQYXJhbXMgPSBmdW5jdGlvbihwcmltZSwgZ2VuZXJhdG9yKSB7XG4gIGlmICh0aGlzLnR5cGUgPT09ICdncm91cGV4Jykge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHByaW1lKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwcmltZSB2YWx1ZScpO1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGdlbmVyYXRvcikpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2VuZXJhdG9yIHZhbHVlJyk7XG4gICAgdGhpcy5fcHJpbWUgPSBwcmltZTtcbiAgICB0aGlzLl9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7XG4gIH1cbn07XG5LZXlFeGNoYW5nZS5wcm90b3R5cGUuZ2V0REhQYXJhbXMgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMudHlwZSA9PT0gJ2dyb3VwZXgnICYmIHRoaXMuX2tleCkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmltZTogY29udmVydFRvTXBpbnQodGhpcy5fa2V4LmdldFByaW1lKCkpLFxuICAgICAgZ2VuZXJhdG9yOiBjb252ZXJ0VG9NcGludCh0aGlzLl9rZXguZ2V0R2VuZXJhdG9yKCkpLFxuICAgIH07XG4gIH1cbn07XG5LZXlFeGNoYW5nZS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzID0gZnVuY3Rpb24oKSB7XG4gIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgY2FzZSAnMjU1MTknOlxuICAgICAgaWYgKCF0aGlzLl9rZXlzKVxuICAgICAgICB0aGlzLl9rZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoJ3gyNTUxOScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZWNkaCc6XG4gICAgICBpZiAoIXRoaXMuX2tleCkge1xuICAgICAgICB0aGlzLl9rZXggPSBjcnlwdG8uY3JlYXRlRUNESCh0aGlzLm5hbWUpO1xuICAgICAgICB0aGlzLl9wdWJsaWMgPSB0aGlzLl9rZXguZ2VuZXJhdGVLZXlzKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cCc6XG4gICAgY2FzZSAnZ3JvdXBleCc6XG4gICAgICBpZiAoIXRoaXMuX2tleCkge1xuICAgICAgICBpZiAodGhpcy5uYW1lKVxuICAgICAgICAgIHRoaXMuX2tleCA9IGNyeXB0by5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAodGhpcy5uYW1lKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fcHJpbWUgJiYgdGhpcy5fZ2VuZXJhdG9yKVxuICAgICAgICAgIHRoaXMuX2tleCA9IGNyeXB0by5jcmVhdGVEaWZmaWVIZWxsbWFuKHRoaXMuX3ByaW1lLCB0aGlzLl9nZW5lcmF0b3IpO1xuICAgICAgICBpZiAodGhpcy5fa2V4KVxuICAgICAgICAgIHRoaXMuX3B1YmxpYyA9IHRoaXMuX2tleC5nZW5lcmF0ZUtleXMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59O1xuS2V5RXhjaGFuZ2UucHJvdG90eXBlLmdldFB1YmxpY0tleSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmdlbmVyYXRlS2V5cygpO1xuXG4gIHZhciBrZXk7XG4gIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgY2FzZSAnMjU1MTknOlxuICAgICAga2V5ID0gdGhpcy5fa2V5cy5wdWJsaWNLZXkuZXhwb3J0KHsgdHlwZTogJ3Nwa2knLCBmb3JtYXQ6ICdkZXInIH0pO1xuICAgICAgcmV0dXJuIGtleS5zbGljZSgtMzIpOyAvLyBIQUNLOiBhdm9pZHMgcGFyc2luZyBERVIvQkVSIGhlYWRlclxuICAgIGNhc2UgJ2VjZGgnOlxuICAgIGNhc2UgJ2dyb3VwJzpcbiAgICBjYXNlICdncm91cGV4JzpcbiAgICAgIGtleSA9IHRoaXMuX3B1YmxpYztcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmIChrZXkpXG4gICAgcmV0dXJuIHRoaXMuY29udmVydFB1YmxpY0tleShrZXkpO1xufTtcbktleUV4Y2hhbmdlLnByb3RvdHlwZS5jb252ZXJ0UHVibGljS2V5ID0gZnVuY3Rpb24oa2V5KSB7XG4gIHZhciBuZXdLZXk7XG4gIHZhciBpZHggPSAwO1xuICB2YXIgbGVuID0ga2V5Lmxlbmd0aDtcbiAgd2hpbGUgKGtleVtpZHhdID09PSAweDAwKSB7XG4gICAgKytpZHg7XG4gICAgLS1sZW47XG4gIH1cbiAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICBjYXNlICcyNTUxOSc6XG4gICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMzIpXG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKGtleVtpZHhdICYgMHg4MCkge1xuICAgICAgICBuZXdLZXkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMSArIGxlbik7XG4gICAgICAgIG5ld0tleVswXSA9IDA7XG4gICAgICAgIGtleS5jb3B5KG5ld0tleSwgMSwgaWR4KTtcbiAgICAgICAgcmV0dXJuIG5ld0tleTtcbiAgICAgIH1cbiAgfVxuICBpZiAobGVuICE9PSBrZXkubGVuZ3RoKSB7XG4gICAgbmV3S2V5ID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbik7XG4gICAga2V5LmNvcHkobmV3S2V5LCAwLCBpZHgpO1xuICAgIGtleSA9IG5ld0tleTtcbiAgfVxuICByZXR1cm4ga2V5O1xufTtcbktleUV4Y2hhbmdlLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0ID0gZnVuY3Rpb24ob3RoZXJQdWJsaWNLZXkpIHtcbiAgdGhpcy5nZW5lcmF0ZUtleXMoKTtcblxuICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgIGNhc2UgJzI1NTE5JzpcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBhc25Xcml0ZXIgPSBuZXcgQmVyLldyaXRlcigpO1xuICAgICAgICBhc25Xcml0ZXIuc3RhcnRTZXF1ZW5jZSgpO1xuICAgICAgICAgIC8vIGFsZ29yaXRobVxuICAgICAgICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgICAgICAgICBhc25Xcml0ZXIud3JpdGVPSUQoJzEuMy4xMDEuMTEwJyk7IC8vIGlkLVgyNTUxOVxuICAgICAgICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuXG4gICAgICAgICAgLy8gUHVibGljS2V5XG4gICAgICAgICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoQmVyLkJpdFN0cmluZyk7XG4gICAgICAgICAgICBhc25Xcml0ZXIud3JpdGVCeXRlKDB4MDApO1xuICAgICAgICAgICAgLy8gWFhYOiBoYWNrIHRvIHdyaXRlIGEgcmF3IGJ1ZmZlciB3aXRob3V0IGEgdGFnIC0tIHl1Y2tcbiAgICAgICAgICAgIGFzbldyaXRlci5fZW5zdXJlKG90aGVyUHVibGljS2V5Lmxlbmd0aCk7XG4gICAgICAgICAgICBvdGhlclB1YmxpY0tleS5jb3B5KGFzbldyaXRlci5fYnVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc25Xcml0ZXIuX29mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJQdWJsaWNLZXkubGVuZ3RoKTtcbiAgICAgICAgICAgIGFzbldyaXRlci5fb2Zmc2V0ICs9IG90aGVyUHVibGljS2V5Lmxlbmd0aDtcbiAgICAgICAgICBhc25Xcml0ZXIuZW5kU2VxdWVuY2UoKTtcbiAgICAgICAgYXNuV3JpdGVyLmVuZFNlcXVlbmNlKCk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRUb01waW50KGNyeXB0by5kaWZmaWVIZWxsbWFuKHtcbiAgICAgICAgICBwcml2YXRlS2V5OiB0aGlzLl9rZXlzLnByaXZhdGVLZXksXG4gICAgICAgICAgcHVibGljS2V5OiBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogYXNuV3JpdGVyLmJ1ZmZlcixcbiAgICAgICAgICAgIHR5cGU6ICdzcGtpJyxcbiAgICAgICAgICAgIGZvcm1hdDogJ2RlcicsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pKTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIHJldHVybiBleDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VjZGgnOlxuICAgIGNhc2UgJ2dyb3VwJzpcbiAgICBjYXNlICdncm91cGV4JzpcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0VG9NcGludCh0aGlzLl9rZXguY29tcHV0ZVNlY3JldChvdGhlclB1YmxpY0tleSkpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcmV0dXJuIGV4O1xuICAgICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjb252ZXJ0VG9NcGludChidWYpIHtcbiAgdmFyIGlkeCA9IDA7XG4gIHZhciBsZW5ndGggPSBidWYubGVuZ3RoO1xuICB3aGlsZSAoYnVmW2lkeF0gPT09IDB4MDApIHtcbiAgICArK2lkeDtcbiAgICAtLWxlbmd0aDtcbiAgfVxuICB2YXIgbmV3QnVmO1xuICBpZiAoYnVmW2lkeF0gJiAweDgwKSB7XG4gICAgbmV3QnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEgKyBsZW5ndGgpO1xuICAgIG5ld0J1ZlswXSA9IDA7XG4gICAgYnVmLmNvcHkobmV3QnVmLCAxLCBpZHgpO1xuICAgIGJ1ZiA9IG5ld0J1ZjtcbiAgfSBlbHNlIGlmIChsZW5ndGggIT09IGJ1Zi5sZW5ndGgpIHtcbiAgICBuZXdCdWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKTtcbiAgICBidWYuY29weShuZXdCdWYsIDAsIGlkeCk7XG4gICAgYnVmID0gbmV3QnVmO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU1NIMlN0cmVhbTtcbm1vZHVsZS5leHBvcnRzLl9zZW5kID0gc2VuZDtcbiIsInZhciBCZXIgPSByZXF1aXJlKCdhc24xJykuQmVyO1xuXG52YXIgcmVhZFVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLnJlYWRVSW50MzJCRTtcbnZhciB3cml0ZVVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLndyaXRlVUludDMyQkU7XG5cbi8vIFhYWCB0aGUgdmFsdWUgb2YgMjQwMCBmcm9tIGRyb3BiZWFyIGlzIG9ubHkgZm9yIGNlcnRhaW4gc3RyaW5ncywgbm90IGFsbFxuLy8gc3RyaW5ncy4gZm9yIGV4YW1wbGUgdGhlIGxpc3Qgc3RyaW5ncyB1c2VkIGR1cmluZyBoYW5kc2hha2VzXG52YXIgTUFYX1NUUklOR19MRU4gPSBJbmZpbml0eTsvLzI0MDA7IC8vIHRha2VuIGZyb20gZHJvcGJlYXJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGl2X2luYzogaXZfaW5jLFxuICByZWFkSW50OiByZWFkSW50LFxuICByZWFkU3RyaW5nOiByZWFkU3RyaW5nLFxuICBwYXJzZUtleTogcmVxdWlyZSgnLi9rZXlQYXJzZXInKS5wYXJzZUtleSxcbiAgc2lnU1NIVG9BU04xOiBzaWdTU0hUb0FTTjEsXG4gIERTQVNpZ0JFUlRvQmFyZTogRFNBU2lnQkVSVG9CYXJlLFxuICBFQ0RTQVNpZ0FTTjFUb1NTSDogRUNEU0FTaWdBU04xVG9TU0hcbn07XG5cbmZ1bmN0aW9uIGl2X2luYyhpdikge1xuICB2YXIgbiA9IDEyO1xuICB2YXIgYyA9IDA7XG4gIGRvIHtcbiAgICAtLW47XG4gICAgYyA9IGl2W25dO1xuICAgIGlmIChjID09PSAyNTUpXG4gICAgICBpdltuXSA9IDA7XG4gICAgZWxzZSB7XG4gICAgICBpdltuXSA9ICsrYztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gd2hpbGUgKG4gPiA0KTtcbn1cblxuZnVuY3Rpb24gcmVhZEludChidWZmZXIsIHN0YXJ0LCBzdHJlYW0sIGNiKSB7XG4gIHZhciBidWZmZXJMZW4gPSBidWZmZXIubGVuZ3RoO1xuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IGJ1ZmZlckxlbiB8fCAoYnVmZmVyTGVuIC0gc3RhcnQpIDwgNCkge1xuICAgIHN0cmVhbSAmJiBzdHJlYW0uX2NsZWFudXAoY2IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiByZWFkVUludDMyQkUoYnVmZmVyLCBzdGFydCk7XG59XG5cbmZ1bmN0aW9uIERTQVNpZ0JFUlRvQmFyZShzaWduYXR1cmUpIHtcbiAgaWYgKHNpZ25hdHVyZS5sZW5ndGggPD0gNDApXG4gICAgcmV0dXJuIHNpZ25hdHVyZTtcbiAgLy8gVGhpcyBpcyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gZ2V0IGZyb20gQkVSIGVuY29kZWQgciBhbmQgcyB0aGF0XG4gIC8vIE9wZW5TU0wgZ2l2ZXMgdXMsIHRvIGp1c3QgdGhlIGJhcmUgdmFsdWVzIGJhY2sgdG8gYmFjayAoNDAgYnl0ZXNcbiAgLy8gdG90YWwpIGxpa2UgT3BlblNTSCAoYW5kIHBvc3NpYmx5IG90aGVycykgYXJlIGV4cGVjdGluZ1xuICB2YXIgYXNuUmVhZGVyID0gbmV3IEJlci5SZWFkZXIoc2lnbmF0dXJlKTtcbiAgYXNuUmVhZGVyLnJlYWRTZXF1ZW5jZSgpO1xuICB2YXIgciA9IGFzblJlYWRlci5yZWFkU3RyaW5nKEJlci5JbnRlZ2VyLCB0cnVlKTtcbiAgdmFyIHMgPSBhc25SZWFkZXIucmVhZFN0cmluZyhCZXIuSW50ZWdlciwgdHJ1ZSk7XG4gIHZhciByT2Zmc2V0ID0gMDtcbiAgdmFyIHNPZmZzZXQgPSAwO1xuICBpZiAoci5sZW5ndGggPCAyMCkge1xuICAgIHZhciByTmV3ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIwKTtcbiAgICByLmNvcHkock5ldywgMSk7XG4gICAgciA9IHJOZXc7XG4gICAgclswXSA9IDA7XG4gIH1cbiAgaWYgKHMubGVuZ3RoIDwgMjApIHtcbiAgICB2YXIgc05ldyA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyMCk7XG4gICAgcy5jb3B5KHNOZXcsIDEpO1xuICAgIHMgPSBzTmV3O1xuICAgIHNbMF0gPSAwO1xuICB9XG4gIGlmIChyLmxlbmd0aCA+IDIwICYmIHJbMF0gPT09IDB4MDApXG4gICAgck9mZnNldCA9IDE7XG4gIGlmIChzLmxlbmd0aCA+IDIwICYmIHNbMF0gPT09IDB4MDApXG4gICAgc09mZnNldCA9IDE7XG4gIHZhciBuZXdTaWcgPSBCdWZmZXIuYWxsb2NVbnNhZmUoKHIubGVuZ3RoIC0gck9mZnNldCkgKyAocy5sZW5ndGggLSBzT2Zmc2V0KSk7XG4gIHIuY29weShuZXdTaWcsIDAsIHJPZmZzZXQpO1xuICBzLmNvcHkobmV3U2lnLCByLmxlbmd0aCAtIHJPZmZzZXQsIHNPZmZzZXQpO1xuICByZXR1cm4gbmV3U2lnO1xufVxuXG5mdW5jdGlvbiBFQ0RTQVNpZ0FTTjFUb1NTSChzaWduYXR1cmUpIHtcbiAgaWYgKHNpZ25hdHVyZVswXSA9PT0gMHgwMClcbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICAvLyBDb252ZXJ0IFNTSCBzaWduYXR1cmUgcGFyYW1ldGVycyB0byBBU04uMSBCRVIgdmFsdWVzIGZvciBPcGVuU1NMXG4gIHZhciBhc25SZWFkZXIgPSBuZXcgQmVyLlJlYWRlcihzaWduYXR1cmUpO1xuICBhc25SZWFkZXIucmVhZFNlcXVlbmNlKCk7XG4gIHZhciByID0gYXNuUmVhZGVyLnJlYWRTdHJpbmcoQmVyLkludGVnZXIsIHRydWUpO1xuICB2YXIgcyA9IGFzblJlYWRlci5yZWFkU3RyaW5nKEJlci5JbnRlZ2VyLCB0cnVlKTtcbiAgaWYgKHIgPT09IG51bGwgfHwgcyA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBuZXdTaWcgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCArIHIubGVuZ3RoICsgNCArIHMubGVuZ3RoKTtcbiAgd3JpdGVVSW50MzJCRShuZXdTaWcsIHIubGVuZ3RoLCAwKTtcbiAgci5jb3B5KG5ld1NpZywgNCk7XG4gIHdyaXRlVUludDMyQkUobmV3U2lnLCBzLmxlbmd0aCwgNCArIHIubGVuZ3RoKTtcbiAgcy5jb3B5KG5ld1NpZywgNCArIDQgKyByLmxlbmd0aCk7XG4gIHJldHVybiBuZXdTaWc7XG59XG5cbmZ1bmN0aW9uIHNpZ1NTSFRvQVNOMShzaWcsIHR5cGUsIHNlbGYsIGNhbGxiYWNrKSB7XG4gIHZhciBhc25Xcml0ZXI7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3NzaC1kc3MnOlxuICAgICAgaWYgKHNpZy5sZW5ndGggPiA0MClcbiAgICAgICAgcmV0dXJuIHNpZztcbiAgICAgIC8vIENoYW5nZSBiYXJlIHNpZ25hdHVyZSByIGFuZCBzIHZhbHVlcyB0byBBU04uMSBCRVIgdmFsdWVzIGZvciBPcGVuU1NMXG4gICAgICBhc25Xcml0ZXIgPSBuZXcgQmVyLldyaXRlcigpO1xuICAgICAgYXNuV3JpdGVyLnN0YXJ0U2VxdWVuY2UoKTtcbiAgICAgIHZhciByID0gc2lnLnNsaWNlKDAsIDIwKTtcbiAgICAgIHZhciBzID0gc2lnLnNsaWNlKDIwKTtcbiAgICAgIGlmIChyWzBdICYgMHg4MCkge1xuICAgICAgICB2YXIgck5ldyA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyMSk7XG4gICAgICAgIHJOZXdbMF0gPSAweDAwO1xuICAgICAgICByLmNvcHkock5ldywgMSk7XG4gICAgICAgIHIgPSByTmV3O1xuICAgICAgfSBlbHNlIGlmIChyWzBdID09PSAweDAwICYmICEoclsxXSAmIDB4ODApKSB7XG4gICAgICAgIHIgPSByLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNbMF0gJiAweDgwKSB7XG4gICAgICAgIHZhciBzTmV3ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIxKTtcbiAgICAgICAgc05ld1swXSA9IDB4MDA7XG4gICAgICAgIHMuY29weShzTmV3LCAxKTtcbiAgICAgICAgcyA9IHNOZXc7XG4gICAgICB9IGVsc2UgaWYgKHNbMF0gPT09IDB4MDAgJiYgIShzWzFdICYgMHg4MCkpIHtcbiAgICAgICAgcyA9IHMuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIociwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHMsIEJlci5JbnRlZ2VyKTtcbiAgICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICAgICAgcmV0dXJuIGFzbldyaXRlci5idWZmZXI7XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDI1Nic6XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDM4NCc6XG4gICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDUyMSc6XG4gICAgICB2YXIgciA9IHJlYWRTdHJpbmcoc2lnLCAwLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAociA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBzID0gcmVhZFN0cmluZyhzaWcsIHNpZy5fcG9zLCBzZWxmLCBjYWxsYmFjayk7XG4gICAgICBpZiAocyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgYXNuV3JpdGVyID0gbmV3IEJlci5Xcml0ZXIoKTtcbiAgICAgIGFzbldyaXRlci5zdGFydFNlcXVlbmNlKCk7XG4gICAgICBhc25Xcml0ZXIud3JpdGVCdWZmZXIociwgQmVyLkludGVnZXIpO1xuICAgICAgYXNuV3JpdGVyLndyaXRlQnVmZmVyKHMsIEJlci5JbnRlZ2VyKTtcbiAgICAgIGFzbldyaXRlci5lbmRTZXF1ZW5jZSgpO1xuICAgICAgcmV0dXJuIGFzbldyaXRlci5idWZmZXI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzaWc7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhZFN0cmluZyhidWZmZXIsIHN0YXJ0LCBlbmNvZGluZywgc3RyZWFtLCBjYiwgbWF4TGVuKSB7XG4gIGlmIChlbmNvZGluZyAmJiAhQnVmZmVyLmlzQnVmZmVyKGVuY29kaW5nKSAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ251bWJlcicpXG4gICAgICBtYXhMZW4gPSBjYjtcbiAgICBjYiA9IHN0cmVhbTtcbiAgICBzdHJlYW0gPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXJ0IHx8IChzdGFydCA9IDApO1xuICB2YXIgYnVmZmVyTGVuID0gYnVmZmVyLmxlbmd0aDtcbiAgdmFyIGxlZnQgPSAoYnVmZmVyTGVuIC0gc3RhcnQpO1xuICB2YXIgbGVuO1xuICB2YXIgZW5kO1xuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IGJ1ZmZlckxlbiB8fCBsZWZ0IDwgNCkge1xuICAgIHN0cmVhbSAmJiBzdHJlYW0uX2NsZWFudXAoY2IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxlbiA9IHJlYWRVSW50MzJCRShidWZmZXIsIHN0YXJ0KTtcbiAgaWYgKGxlbiA+IChtYXhMZW4gfHwgTUFYX1NUUklOR19MRU4pIHx8IGxlZnQgPCAoNCArIGxlbikpIHtcbiAgICBzdHJlYW0gJiYgc3RyZWFtLl9jbGVhbnVwKGNiKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGFydCArPSA0O1xuICBlbmQgPSBzdGFydCArIGxlbjtcbiAgYnVmZmVyLl9wb3MgPSBlbmQ7XG5cbiAgaWYgKGVuY29kaW5nKSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihlbmNvZGluZykpIHtcbiAgICAgIGJ1ZmZlci5jb3B5KGVuY29kaW5nLCAwLCBzdGFydCwgZW5kKTtcbiAgICAgIHJldHVybiBlbmNvZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZyhlbmNvZGluZywgc3RhcnQsIGVuZCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cbn1cblxuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xudmFyIER1cGxleFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLkR1cGxleDtcbnZhciBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlJlYWRhYmxlO1xudmFyIFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuV3JpdGFibGU7XG5cbnZhciBTVERFUlIgPSByZXF1aXJlKCdAb2x6aWUtMTIvc3NoMi1zdHJlYW1zJykuY29uc3RhbnRzLkNIQU5ORUxfRVhURU5ERURfREFUQVRZUEUuU1RERVJSO1xuXG52YXIgUEFDS0VUX1NJWkUgPSAzMiAqIDEwMjQ7XG52YXIgTUFYX1dJTkRPVyA9IDIgKiAxMDI0ICogMTAyNDtcbnZhciBXSU5ET1dfVEhSRVNIT0xEID0gTUFYX1dJTkRPVyAvIDI7XG52YXIgQ1VTVE9NX0VWRU5UUyA9IFtcbiAgJ0NIQU5ORUxfRU9GJyxcbiAgJ0NIQU5ORUxfQ0xPU0UnLFxuICAnQ0hBTk5FTF9EQVRBJyxcbiAgJ0NIQU5ORUxfRVhURU5ERURfREFUQScsXG4gICdDSEFOTkVMX1dJTkRPV19BREpVU1QnLFxuICAnQ0hBTk5FTF9TVUNDRVNTJyxcbiAgJ0NIQU5ORUxfRkFJTFVSRScsXG4gICdDSEFOTkVMX1JFUVVFU1QnXG5dO1xudmFyIENVU1RPTV9FVkVOVFNfTEVOID0gQ1VTVE9NX0VWRU5UUy5sZW5ndGg7XG5cbmZ1bmN0aW9uIENoYW5uZWwoaW5mbywgY2xpZW50LCBvcHRzKSB7XG4gIHZhciBzdHJlYW1PcHRzID0ge1xuICAgIGhpZ2hXYXRlck1hcms6IE1BWF9XSU5ET1csXG4gICAgYWxsb3dIYWxmT3BlbjogKCFvcHRzIHx8IChvcHRzICYmIG9wdHMuYWxsb3dIYWxmT3BlbiAhPT0gZmFsc2UpKVxuICB9O1xuXG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHN0cmVhbU9wdHMuYWxsb3dIYWxmT3BlbjtcblxuICBEdXBsZXhTdHJlYW0uY2FsbCh0aGlzLCBzdHJlYW1PcHRzKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBzZXJ2ZXIgPSBvcHRzICYmIG9wdHMuc2VydmVyO1xuXG4gIHRoaXMuc2VydmVyID0gc2VydmVyO1xuICB0aGlzLnR5cGUgPSBpbmZvLnR5cGU7XG4gIHRoaXMuc3VidHlwZSA9IHVuZGVmaW5lZDtcbiAgLypcbiAgICBpbmNvbWluZyBhbmQgb3V0Z29pbmcgY29udGFpbiB0aGVzZSBwcm9wZXJ0aWVzOlxuICAgIHtcbiAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICB3aW5kb3c6IHVuZGVmaW5lZCxcbiAgICAgIHBhY2tldFNpemU6IHVuZGVmaW5lZCxcbiAgICAgIHN0YXRlOiAnY2xvc2VkJ1xuICAgIH1cbiAgKi9cbiAgdmFyIGluY29taW5nID0gdGhpcy5pbmNvbWluZyA9IGluZm8uaW5jb21pbmc7XG4gIHZhciBpbmNvbWluZ0lkID0gaW5jb21pbmcuaWQ7XG4gIHZhciBvdXRnb2luZyA9IHRoaXMub3V0Z29pbmcgPSBpbmZvLm91dGdvaW5nO1xuICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzID0gW107XG4gIHZhciBleGl0Q29kZTtcbiAgdmFyIGV4aXRTaWduYWw7XG4gIHZhciBleGl0RHVtcDtcbiAgdmFyIGV4aXREZXNjO1xuICB2YXIgZXhpdExhbmc7XG5cbiAgdGhpcy5fY2xpZW50ID0gY2xpZW50O1xuICB0aGlzLl9oYXNYMTEgPSBmYWxzZTtcblxuICB2YXIgY2hhbm5lbHMgPSBjbGllbnQuX2NoYW5uZWxzO1xuICB2YXIgc3Noc3RyZWFtID0gY2xpZW50Ll9zc2hzdHJlYW07XG5cbiAgZnVuY3Rpb24gb25kcmFpbigpIHtcbiAgICBpZiAoc2VsZi5fd2FpdENsaWVudERyYWluKSB7XG4gICAgICBzZWxmLl93YWl0Q2xpZW50RHJhaW4gPSBmYWxzZTtcbiAgICAgIGlmICghc2VsZi5fd2FpdFdpbmRvdykge1xuICAgICAgICBpZiAoc2VsZi5fY2h1bmspXG4gICAgICAgICAgc2VsZi5fd3JpdGUoc2VsZi5fY2h1bmssIG51bGwsIHNlbGYuX2NodW5rY2IpO1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9jaHVua2NiKVxuICAgICAgICAgIHNlbGYuX2NodW5rY2IoKTtcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5fY2h1bmtFcnIpXG4gICAgICAgICAgc2VsZi5zdGRlcnIuX3dyaXRlKHNlbGYuX2NodW5rRXJyLCBudWxsLCBzZWxmLl9jaHVua2NiRXJyKTtcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5fY2h1bmtjYkVycilcbiAgICAgICAgICBzZWxmLl9jaHVua2NiRXJyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNsaWVudC5fc29jay5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICBzc2hzdHJlYW0ub25jZSgnQ0hBTk5FTF9FT0Y6JyArIGluY29taW5nSWQsIGZ1bmN0aW9uKCkge1xuICAgIGlmIChpbmNvbWluZy5zdGF0ZSAhPT0gJ29wZW4nKVxuICAgICAgcmV0dXJuO1xuICAgIGluY29taW5nLnN0YXRlID0gJ2VvZic7XG5cbiAgICBpZiAoc2VsZi5yZWFkYWJsZSlcbiAgICAgIHNlbGYucHVzaChudWxsKTtcbiAgICBpZiAoIXNlcnZlciAmJiBzZWxmLnN0ZGVyci5yZWFkYWJsZSlcbiAgICAgIHNlbGYuc3RkZXJyLnB1c2gobnVsbCk7XG4gIH0pLm9uY2UoJ0NIQU5ORUxfQ0xPU0U6JyArIGluY29taW5nSWQsIGZ1bmN0aW9uKCkge1xuICAgIGlmIChpbmNvbWluZy5zdGF0ZSA9PT0gJ2Nsb3NlZCcpXG4gICAgICByZXR1cm47XG4gICAgaW5jb21pbmcuc3RhdGUgPSAnY2xvc2VkJztcblxuICAgIGlmIChzZWxmLnJlYWRhYmxlKVxuICAgICAgc2VsZi5wdXNoKG51bGwpO1xuICAgIGlmIChzZXJ2ZXIgJiYgc2VsZi5zdGRlcnIud3JpdGFibGUpXG4gICAgICBzZWxmLnN0ZGVyci5lbmQoKTtcbiAgICBlbHNlIGlmICghc2VydmVyICYmIHNlbGYuc3RkZXJyLnJlYWRhYmxlKVxuICAgICAgc2VsZi5zdGRlcnIucHVzaChudWxsKTtcblxuICAgIGlmIChvdXRnb2luZy5zdGF0ZSA9PT0gJ29wZW4nIHx8IG91dGdvaW5nLnN0YXRlID09PSAnZW9mJylcbiAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICBpZiAob3V0Z29pbmcuc3RhdGUgPT09ICdjbG9zaW5nJylcbiAgICAgIG91dGdvaW5nLnN0YXRlID0gJ2Nsb3NlZCc7XG5cbiAgICBkZWxldGUgY2hhbm5lbHNbaW5jb21pbmdJZF07XG5cbiAgICB2YXIgc3RhdGUgPSBzZWxmLl93cml0YWJsZVN0YXRlO1xuICAgIGNsaWVudC5fc29jay5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBpZiAoIXN0YXRlLmVuZGluZyAmJiAhc3RhdGUuZmluaXNoZWQpXG4gICAgICBzZWxmLmVuZCgpO1xuXG4gICAgLy8gVGFrZSBjYXJlIG9mIGFueSBvdXRzdGFuZGluZyBjaGFubmVsIHJlcXVlc3RzXG4gICAgc2VsZi5fY2FsbGJhY2tzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyArK2kpXG4gICAgICBjYWxsYmFja3NbaV0odHJ1ZSk7XG4gICAgY2FsbGJhY2tzID0gc2VsZi5fY2FsbGJhY2tzO1xuXG4gICAgaWYgKCFzZXJ2ZXIpIHtcbiAgICAgIC8vIGFsaWduIG1vcmUgd2l0aCBub2RlIGNoaWxkIHByb2Nlc3Nlcywgd2hlcmUgdGhlIGNsb3NlIGV2ZW50IGdldHMgdGhlXG4gICAgICAvLyBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgZXhpdCBldmVudFxuICAgICAgaWYgKCFzZWxmLnJlYWRhYmxlKSB7XG4gICAgICAgIGlmIChleGl0Q29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHNlbGYuZW1pdCgnY2xvc2UnLCBleGl0Q29kZSwgZXhpdFNpZ25hbCwgZXhpdER1bXAsIGV4aXREZXNjLFxuICAgICAgICAgICAgICAgICAgICBleGl0TGFuZyk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHNlbGYuZW1pdCgnY2xvc2UnLCBleGl0Q29kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChleGl0Q29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScsIGV4aXRDb2RlLCBleGl0U2lnbmFsLCBleGl0RHVtcCwgZXhpdERlc2MsXG4gICAgICAgICAgICAgICAgICAgICAgZXhpdExhbmcpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScsIGV4aXRDb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc2VsZi5zdGRlcnIucmVhZGFibGUpXG4gICAgICAgIHNlbGYuc3RkZXJyLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2VsZi5zdGRlcnIub25jZSgnZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc2VsZi5zdGRlcnIuZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gU2VydmVyIG1vZGVcbiAgICAgIGlmICghc2VsZi5yZWFkYWJsZSlcbiAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHNlbGYub25jZSgnZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENVU1RPTV9FVkVOVFNfTEVOOyArK2kpXG4gICAgICBzc2hzdHJlYW0ucmVtb3ZlQWxsTGlzdGVuZXJzKENVU1RPTV9FVkVOVFNbaV0gKyAnOicgKyBpbmNvbWluZ0lkKTtcbiAgfSkub24oJ0NIQU5ORUxfREFUQTonICsgaW5jb21pbmdJZCwgZnVuY3Rpb24oZGF0YSkge1xuICAgIC8vIHRoZSByZW1vdGUgcGFydHkgc2hvdWxkIG5vdCBiZSBzZW5kaW5nIHVzIGRhdGEgaWYgdGhlcmUgaXMgbm8gd2luZG93XG4gICAgLy8gc3BhY2UgYXZhaWxhYmxlIC4uLlxuICAgIC8vIFRPRE86IHJhaXNlIGVycm9yIG9uIGRhdGEgd2l0aCBub3QgZW5vdWdoIHdpbmRvd1xuICAgIGlmIChpbmNvbWluZy53aW5kb3cgPT09IDApXG4gICAgICByZXR1cm47XG5cbiAgICBpbmNvbWluZy53aW5kb3cgLT0gZGF0YS5sZW5ndGg7XG5cbiAgICBpZiAoIXNlbGYucHVzaChkYXRhKSkge1xuICAgICAgc2VsZi5fd2FpdENoYW5EcmFpbiA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGluY29taW5nLndpbmRvdyA8PSBXSU5ET1dfVEhSRVNIT0xEKVxuICAgICAgd2luZG93QWRqdXN0KHNlbGYpO1xuICB9KS5vbignQ0hBTk5FTF9XSU5ET1dfQURKVVNUOicgKyBpbmNvbWluZ0lkLCBmdW5jdGlvbihhbXQpIHtcbiAgICAvLyB0aGUgc2VydmVyIGlzIGFsbG93aW5nIHVzIHRvIHNlbmQgYGFtdGAgbW9yZSBieXRlcyBvZiBkYXRhXG4gICAgb3V0Z29pbmcud2luZG93ICs9IGFtdDtcblxuICAgIGlmIChzZWxmLl93YWl0V2luZG93KSB7XG4gICAgICBzZWxmLl93YWl0V2luZG93ID0gZmFsc2U7XG4gICAgICBpZiAoIXNlbGYuX3dhaXRDbGllbnREcmFpbikge1xuICAgICAgICBpZiAoc2VsZi5fY2h1bmspXG4gICAgICAgICAgc2VsZi5fd3JpdGUoc2VsZi5fY2h1bmssIG51bGwsIHNlbGYuX2NodW5rY2IpO1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9jaHVua2NiKVxuICAgICAgICAgIHNlbGYuX2NodW5rY2IoKTtcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5fY2h1bmtFcnIpXG4gICAgICAgICAgc2VsZi5zdGRlcnIuX3dyaXRlKHNlbGYuX2NodW5rRXJyLCBudWxsLCBzZWxmLl9jaHVua2NiRXJyKTtcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5fY2h1bmtjYkVycilcbiAgICAgICAgICBzZWxmLl9jaHVua2NiRXJyKCk7XG4gICAgICB9XG4gICAgfVxuICB9KS5vbignQ0hBTk5FTF9TVUNDRVNTOicgKyBpbmNvbWluZ0lkLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICBzc2hzdHJlYW0uX2thbGFzdCA9IERhdGUubm93KCk7XG4gICAgICBzc2hzdHJlYW0uX2thY250ID0gMDtcbiAgICB9IGVsc2VcbiAgICAgIGNsaWVudC5fcmVzZXRLQSgpO1xuICAgIGlmIChjYWxsYmFja3MubGVuZ3RoKVxuICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkoZmFsc2UpO1xuICB9KS5vbignQ0hBTk5FTF9GQUlMVVJFOicgKyBpbmNvbWluZ0lkLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICBzc2hzdHJlYW0uX2thbGFzdCA9IERhdGUubm93KCk7XG4gICAgICBzc2hzdHJlYW0uX2thY250ID0gMDtcbiAgICB9IGVsc2VcbiAgICAgIGNsaWVudC5fcmVzZXRLQSgpO1xuICAgIGlmIChjYWxsYmFja3MubGVuZ3RoKVxuICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkodHJ1ZSk7XG4gIH0pLm9uKCdDSEFOTkVMX1JFUVVFU1Q6JyArIGluY29taW5nSWQsIGZ1bmN0aW9uKGluZm8pIHtcbiAgICBpZiAoIXNlcnZlcikge1xuICAgICAgaWYgKGluZm8ucmVxdWVzdCA9PT0gJ2V4aXQtc3RhdHVzJykge1xuICAgICAgICBzZWxmLmVtaXQoJ2V4aXQnLCBleGl0Q29kZSA9IGluZm8uY29kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoaW5mby5yZXF1ZXN0ID09PSAnZXhpdC1zaWduYWwnKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXhpdCcsXG4gICAgICAgICAgICAgICAgICBleGl0Q29kZSA9IG51bGwsXG4gICAgICAgICAgICAgICAgICBleGl0U2lnbmFsID0gJ1NJRycgKyBpbmZvLnNpZ25hbCxcbiAgICAgICAgICAgICAgICAgIGV4aXREdW1wID0gaW5mby5jb3JlZHVtcCxcbiAgICAgICAgICAgICAgICAgIGV4aXREZXNjID0gaW5mby5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgIGV4aXRMYW5nID0gaW5mby5sYW5nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGtlZXBhbGl2ZSByZXF1ZXN0PyBPcGVuU1NIIHdpbGwgc2VuZCBvbmUgYXMgYSBjaGFubmVsIHJlcXVlc3QgaWYgdGhlcmVcbiAgICAvLyBpcyBhIGNoYW5uZWwgb3BlblxuXG4gICAgaWYgKGluZm8ud2FudFJlcGx5KVxuICAgICAgc3Noc3RyZWFtLmNoYW5uZWxGYWlsdXJlKG91dGdvaW5nLmlkKTtcbiAgfSk7XG5cbiAgdGhpcy5zdGRpbiA9IHRoaXMuc3Rkb3V0ID0gdGhpcztcblxuICBpZiAoc2VydmVyKVxuICAgIHRoaXMuc3RkZXJyID0gbmV3IFNlcnZlclN0ZGVycih0aGlzKTtcbiAgZWxzZSB7XG4gICAgdGhpcy5zdGRlcnIgPSBuZXcgUmVhZGFibGVTdHJlYW0oc3RyZWFtT3B0cyk7XG4gICAgdGhpcy5zdGRlcnIuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gICAgICBpZiAoc2VsZi5fd2FpdENoYW5EcmFpbikge1xuICAgICAgICBzZWxmLl93YWl0Q2hhbkRyYWluID0gZmFsc2U7XG4gICAgICAgIGlmIChpbmNvbWluZy53aW5kb3cgPD0gV0lORE9XX1RIUkVTSE9MRClcbiAgICAgICAgICB3aW5kb3dBZGp1c3Qoc2VsZik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNzaHN0cmVhbS5vbignQ0hBTk5FTF9FWFRFTkRFRF9EQVRBOicgKyBpbmNvbWluZ0lkLFxuICAgICAgZnVuY3Rpb24odHlwZSwgZGF0YSkge1xuICAgICAgICAvLyB0aGUgcmVtb3RlIHBhcnR5IHNob3VsZCBub3QgYmUgc2VuZGluZyB1cyBkYXRhIGlmIHRoZXJlIGlzIG5vIHdpbmRvd1xuICAgICAgICAvLyBzcGFjZSBhdmFpbGFibGUgLi4uXG4gICAgICAgIC8vIFRPRE86IHJhaXNlIGVycm9yIG9uIGRhdGEgd2l0aCBub3QgZW5vdWdoIHdpbmRvd1xuICAgICAgICBpZiAoaW5jb21pbmcud2luZG93ID09PSAwKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpbmNvbWluZy53aW5kb3cgLT0gZGF0YS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKCFzZWxmLnN0ZGVyci5wdXNoKGRhdGEpKSB7XG4gICAgICAgICAgc2VsZi5fd2FpdENoYW5EcmFpbiA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluY29taW5nLndpbmRvdyA8PSBXSU5ET1dfVEhSRVNIT0xEKVxuICAgICAgICAgIHdpbmRvd0FkanVzdChzZWxmKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLy8gb3V0Z29pbmcgZGF0YVxuICB0aGlzLl93YWl0Q2xpZW50RHJhaW4gPSBmYWxzZTsgLy8gQ2xpZW50IHN0cmVhbS1sZXZlbCBiYWNrcHJlc3N1cmVcbiAgdGhpcy5fd2FpdFdpbmRvdyA9IGZhbHNlOyAvLyBTU0gtbGV2ZWwgYmFja3ByZXNzdXJlXG5cbiAgLy8gaW5jb21pbmcgZGF0YVxuICB0aGlzLl93YWl0Q2hhbkRyYWluID0gZmFsc2U7IC8vIENoYW5uZWwgUmVhZGFibGUgc2lkZSBiYWNrcHJlc3N1cmVcblxuICB0aGlzLl9jaHVuayA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fY2h1bmtjYiA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fY2h1bmtFcnIgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX2NodW5rY2JFcnIgPSB1bmRlZmluZWQ7XG5cbiAgZnVuY3Rpb24gb25GaW5pc2goKSB7XG4gICAgc2VsZi5lb2YoKTtcbiAgICBpZiAoc2VydmVyIHx8ICghc2VydmVyICYmICFzZWxmLmFsbG93SGFsZk9wZW4pKVxuICAgICAgc2VsZi5jbG9zZSgpO1xuICAgIHNlbGYud3JpdGFibGUgPSBmYWxzZTtcbiAgfVxuICB0aGlzLm9uKCdmaW5pc2gnLCBvbkZpbmlzaClcbiAgICAgIC5vbigncHJlZmluaXNoJywgb25GaW5pc2gpOyAvLyBmb3Igbm9kZSB2MC4xMStcbiAgZnVuY3Rpb24gb25FbmQoKSB7XG4gICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICB9XG4gIHRoaXMub24oJ2VuZCcsIG9uRW5kKVxuICAgICAgLm9uKCdjbG9zZScsIG9uRW5kKTtcbn1cbmluaGVyaXRzKENoYW5uZWwsIER1cGxleFN0cmVhbSk7XG5cbkNoYW5uZWwucHJvdG90eXBlLmVvZiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmV0ID0gdHJ1ZTtcbiAgdmFyIG91dGdvaW5nID0gdGhpcy5vdXRnb2luZztcblxuICBpZiAob3V0Z29pbmcuc3RhdGUgPT09ICdvcGVuJykge1xuICAgIG91dGdvaW5nLnN0YXRlID0gJ2VvZic7XG4gICAgcmV0ID0gdGhpcy5fY2xpZW50Ll9zc2hzdHJlYW0uY2hhbm5lbEVPRihvdXRnb2luZy5pZCk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuQ2hhbm5lbC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJldCA9IHRydWU7XG4gIHZhciBvdXRnb2luZyA9IHRoaXMub3V0Z29pbmc7XG5cbiAgaWYgKG91dGdvaW5nLnN0YXRlID09PSAnb3BlbicgfHwgb3V0Z29pbmcuc3RhdGUgPT09ICdlb2YnKSB7XG4gICAgb3V0Z29pbmcuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgcmV0ID0gdGhpcy5fY2xpZW50Ll9zc2hzdHJlYW0uY2hhbm5lbENsb3NlKG91dGdvaW5nLmlkKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5DaGFubmVsLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKHRoaXMuX3dhaXRDaGFuRHJhaW4pIHtcbiAgICB0aGlzLl93YWl0Q2hhbkRyYWluID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaW5jb21pbmcud2luZG93IDw9IFdJTkRPV19USFJFU0hPTEQpXG4gICAgICB3aW5kb3dBZGp1c3QodGhpcyk7XG4gIH1cbn07XG5cbkNoYW5uZWwucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uKGRhdGEsIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3Noc3RyZWFtID0gdGhpcy5fY2xpZW50Ll9zc2hzdHJlYW07XG4gIHZhciBvdXRnb2luZyA9IHRoaXMub3V0Z29pbmc7XG4gIHZhciBwYWNrZXRTaXplID0gb3V0Z29pbmcucGFja2V0U2l6ZTtcbiAgdmFyIGlkID0gb3V0Z29pbmcuaWQ7XG4gIHZhciB3aW5kb3cgPSBvdXRnb2luZy53aW5kb3c7XG4gIHZhciBsZW4gPSBkYXRhLmxlbmd0aDtcbiAgdmFyIHAgPSAwO1xuICB2YXIgcmV0O1xuICB2YXIgYnVmO1xuICB2YXIgc2xpY2VMZW47XG5cbiAgaWYgKG91dGdvaW5nLnN0YXRlICE9PSAnb3BlbicpXG4gICAgcmV0dXJuO1xuXG4gIHdoaWxlIChsZW4gLSBwID4gMCAmJiB3aW5kb3cgPiAwKSB7XG4gICAgc2xpY2VMZW4gPSBsZW4gLSBwO1xuICAgIGlmIChzbGljZUxlbiA+IHdpbmRvdylcbiAgICAgIHNsaWNlTGVuID0gd2luZG93O1xuICAgIGlmIChzbGljZUxlbiA+IHBhY2tldFNpemUpXG4gICAgICBzbGljZUxlbiA9IHBhY2tldFNpemU7XG5cbiAgICByZXQgPSBzc2hzdHJlYW0uY2hhbm5lbERhdGEoaWQsIGRhdGEuc2xpY2UocCwgcCArIHNsaWNlTGVuKSk7XG5cbiAgICBwICs9IHNsaWNlTGVuO1xuICAgIHdpbmRvdyAtPSBzbGljZUxlbjtcblxuICAgIGlmICghcmV0KSB7XG4gICAgICB0aGlzLl93YWl0Q2xpZW50RHJhaW4gPSB0cnVlO1xuICAgICAgdGhpcy5fY2h1bmsgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jaHVua2NiID0gY2I7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvdXRnb2luZy53aW5kb3cgPSB3aW5kb3c7XG5cbiAgaWYgKGxlbiAtIHAgPiAwKSB7XG4gICAgaWYgKHdpbmRvdyA9PT0gMClcbiAgICAgIHRoaXMuX3dhaXRXaW5kb3cgPSB0cnVlO1xuICAgIGlmIChwID4gMCkge1xuICAgICAgLy8gcGFydGlhbFxuICAgICAgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbiAtIHApO1xuICAgICAgZGF0YS5jb3B5KGJ1ZiwgMCwgcCk7XG4gICAgICB0aGlzLl9jaHVuayA9IGJ1ZjtcbiAgICB9IGVsc2VcbiAgICAgIHRoaXMuX2NodW5rID0gZGF0YTtcbiAgICB0aGlzLl9jaHVua2NiID0gY2I7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCF0aGlzLl93YWl0Q2xpZW50RHJhaW4pXG4gICAgY2IoKTtcbn07XG5cbkNoYW5uZWwucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbmQoKTtcbn07XG5cbi8vIHNlc3Npb24gdHlwZS1zcGVjaWZpYyBtZXRob2RzXG5DaGFubmVsLnByb3RvdHlwZS5zZXRXaW5kb3cgPSBmdW5jdGlvbihyb3dzLCBjb2xzLCBoZWlnaHQsIHdpZHRoKSB7XG4gIGlmICh0aGlzLnNlcnZlcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudC1vbmx5IG1ldGhvZCBjYWxsZWQgaW4gc2VydmVyIG1vZGUnKTtcblxuICBpZiAodGhpcy50eXBlID09PSAnc2Vzc2lvbidcbiAgICAgICYmICh0aGlzLnN1YnR5cGUgPT09ICdzaGVsbCcgfHwgdGhpcy5zdWJ0eXBlID09PSAnZXhlYycpXG4gICAgICAmJiB0aGlzLndyaXRhYmxlXG4gICAgICAmJiB0aGlzLm91dGdvaW5nLnN0YXRlID09PSAnb3BlbicpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50Ll9zc2hzdHJlYW0ud2luZG93Q2hhbmdlKHRoaXMub3V0Z29pbmcuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29scyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbkNoYW5uZWwucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0aW9uKHNpZ25hbE5hbWUpIHtcbiAgaWYgKHRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50LW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBzZXJ2ZXIgbW9kZScpO1xuXG4gIGlmICh0aGlzLnR5cGUgPT09ICdzZXNzaW9uJ1xuICAgICAgJiYgdGhpcy53cml0YWJsZVxuICAgICAgJiYgdGhpcy5vdXRnb2luZy5zdGF0ZSA9PT0gJ29wZW4nKVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuX3NzaHN0cmVhbS5zaWduYWwodGhpcy5vdXRnb2luZy5pZCwgc2lnbmFsTmFtZSk7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuQ2hhbm5lbC5wcm90b3R5cGUuZXhpdCA9IGZ1bmN0aW9uKG5hbWUsIGNvcmVEdW1wZWQsIG1zZykge1xuICBpZiAoIXRoaXMuc2VydmVyKVxuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyLW9ubHkgbWV0aG9kIGNhbGxlZCBpbiBjbGllbnQgbW9kZScpO1xuXG4gIGlmICh0aGlzLnR5cGUgPT09ICdzZXNzaW9uJ1xuICAgICAgJiYgdGhpcy53cml0YWJsZVxuICAgICAgJiYgdGhpcy5vdXRnb2luZy5zdGF0ZSA9PT0gJ29wZW4nKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnbnVtYmVyJylcbiAgICAgIHJldHVybiB0aGlzLl9jbGllbnQuX3NzaHN0cmVhbS5leGl0U3RhdHVzKHRoaXMub3V0Z29pbmcuaWQsIG5hbWUpO1xuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5fc3Noc3RyZWFtLmV4aXRTaWduYWwodGhpcy5vdXRnb2luZy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlRHVtcGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkNoYW5uZWwuTUFYX1dJTkRPVyA9IE1BWF9XSU5ET1c7XG5DaGFubmVsLlBBQ0tFVF9TSVpFID0gUEFDS0VUX1NJWkU7XG5cbmZ1bmN0aW9uIHdpbmRvd0FkanVzdChzZWxmKSB7XG4gIGlmIChzZWxmLm91dGdvaW5nLnN0YXRlID09PSAnY2xvc2VkJylcbiAgICByZXR1cm4gdHJ1ZTtcbiAgdmFyIGFtdCA9IE1BWF9XSU5ET1cgLSBzZWxmLmluY29taW5nLndpbmRvdztcbiAgaWYgKGFtdCA8PSAwKVxuICAgIHJldHVybiB0cnVlO1xuICBzZWxmLmluY29taW5nLndpbmRvdyArPSBhbXQ7XG4gIHJldHVybiBzZWxmLl9jbGllbnQuX3NzaHN0cmVhbS5jaGFubmVsV2luZG93QWRqdXN0KHNlbGYub3V0Z29pbmcuaWQsIGFtdCk7XG59XG5cbmZ1bmN0aW9uIFNlcnZlclN0ZGVycihjaGFubmVsKSB7XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgeyBoaWdoV2F0ZXJNYXJrOiBNQVhfV0lORE9XIH0pO1xuICB0aGlzLl9jaGFubmVsID0gY2hhbm5lbDtcbn1cbmluaGVyaXRzKFNlcnZlclN0ZGVyciwgV3JpdGFibGVTdHJlYW0pO1xuXG5TZXJ2ZXJTdGRlcnIucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uKGRhdGEsIGVuY29kaW5nLCBjYikge1xuICB2YXIgY2hhbm5lbCA9IHRoaXMuX2NoYW5uZWw7XG4gIHZhciBzc2hzdHJlYW0gPSBjaGFubmVsLl9jbGllbnQuX3NzaHN0cmVhbTtcbiAgdmFyIG91dGdvaW5nID0gY2hhbm5lbC5vdXRnb2luZztcbiAgdmFyIHBhY2tldFNpemUgPSBvdXRnb2luZy5wYWNrZXRTaXplO1xuICB2YXIgaWQgPSBvdXRnb2luZy5pZDtcbiAgdmFyIHdpbmRvdyA9IG91dGdvaW5nLndpbmRvdztcbiAgdmFyIGxlbiA9IGRhdGEubGVuZ3RoO1xuICB2YXIgcCA9IDA7XG4gIHZhciByZXQ7XG4gIHZhciBidWY7XG4gIHZhciBzbGljZUxlbjtcblxuICBpZiAoY2hhbm5lbC5vdXRnb2luZy5zdGF0ZSAhPT0gJ29wZW4nKVxuICAgIHJldHVybjtcblxuICB3aGlsZSAobGVuIC0gcCA+IDAgJiYgd2luZG93ID4gMCkge1xuICAgIHNsaWNlTGVuID0gbGVuIC0gcDtcbiAgICBpZiAoc2xpY2VMZW4gPiB3aW5kb3cpXG4gICAgICBzbGljZUxlbiA9IHdpbmRvdztcbiAgICBpZiAoc2xpY2VMZW4gPiBwYWNrZXRTaXplKVxuICAgICAgc2xpY2VMZW4gPSBwYWNrZXRTaXplO1xuXG4gICAgcmV0ID0gc3Noc3RyZWFtLmNoYW5uZWxFeHREYXRhKGlkLCBkYXRhLnNsaWNlKHAsIHAgKyBzbGljZUxlbiksIFNUREVSUik7XG5cbiAgICBwICs9IHNsaWNlTGVuO1xuICAgIHdpbmRvdyAtPSBzbGljZUxlbjtcblxuICAgIGlmICghcmV0KSB7XG4gICAgICBjaGFubmVsLl93YWl0Q2xpZW50RHJhaW4gPSB0cnVlO1xuICAgICAgY2hhbm5lbC5fY2h1bmtFcnIgPSB1bmRlZmluZWQ7XG4gICAgICBjaGFubmVsLl9jaHVua2NiRXJyID0gY2I7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvdXRnb2luZy53aW5kb3cgPSB3aW5kb3c7XG5cbiAgaWYgKGxlbiAtIHAgPiAwKSB7XG4gICAgaWYgKHdpbmRvdyA9PT0gMClcbiAgICAgIGNoYW5uZWwuX3dhaXRXaW5kb3cgPSB0cnVlO1xuICAgIGlmIChwID4gMCkge1xuICAgICAgLy8gcGFydGlhbFxuICAgICAgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbiAtIHApO1xuICAgICAgZGF0YS5jb3B5KGJ1ZiwgMCwgcCk7XG4gICAgICBjaGFubmVsLl9jaHVua0VyciA9IGJ1ZjtcbiAgICB9IGVsc2VcbiAgICAgIGNoYW5uZWwuX2NodW5rRXJyID0gZGF0YTtcbiAgICBjaGFubmVsLl9jaHVua2NiRXJyID0gY2I7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFjaGFubmVsLl93YWl0Q2xpZW50RHJhaW4pXG4gICAgY2IoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2hhbm5lbDtcbiIsIi8vIFRoaXMgd3JhcHBlciBjbGFzcyBpcyB1c2VkIHRvIHJldGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoXG4vLyBwcmUtdjAuNCBzc2gyLiBJZiBpdCB3ZXJlbid0IGZvciBgcmVhZCgpYCBhbmQgYHdyaXRlKClgIGJlaW5nIHVzZWQgYnkgdGhlXG4vLyBzdHJlYW1zMi8zIEFQSSwgd2UgY291bGQganVzdCBwYXNzIHRoZSBTRlRQU3RyZWFtIGRpcmVjdGx5IHRvIHRoZSBlbmQgdXNlci4uLlxuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG5mdW5jdGlvbiBTRlRQV3JhcHBlcihzdHJlYW0pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcblxuICBzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gIH0pLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLmVtaXQoJ2VuZCcpO1xuICB9KS5vbignY2xvc2UnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLmVtaXQoJ2Nsb3NlJyk7XG4gIH0pLm9uKCdjb250aW51ZScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnY29udGludWUnKTtcbiAgfSk7XG59XG5pbmhlcml0cyhTRlRQV3JhcHBlciwgRXZlbnRFbWl0dGVyKTtcblxuLy8gc3RyZWFtLXJlbGF0ZWQgbWV0aG9kcyB0byBwYXNzIG9uXG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uZW5kKCk7XG59O1xuLy8gU0ZUUFN0cmVhbSBjbGllbnQgbWV0aG9kc1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmNyZWF0ZVJlYWRTdHJlYW0gPSBmdW5jdGlvbihwYXRoLCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uY3JlYXRlUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuY3JlYXRlV3JpdGVTdHJlYW0gPSBmdW5jdGlvbihwYXRoLCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uY3JlYXRlV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihwYXRoLCBmbGFncywgYXR0cnMsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0ub3BlbihwYXRoLCBmbGFncywgYXR0cnMsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbihoYW5kbGUsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uY2xvc2UoaGFuZGxlLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihoYW5kbGUsIGJ1Ziwgb2ZmLCBsZW4sIHBvc2l0aW9uLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnJlYWREYXRhKGhhbmRsZSwgYnVmLCBvZmYsIGxlbiwgcG9zaXRpb24sIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihoYW5kbGUsIGJ1Ziwgb2ZmLCBsZW4sIHBvc2l0aW9uLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLndyaXRlRGF0YShoYW5kbGUsIGJ1Ziwgb2ZmLCBsZW4sIHBvc2l0aW9uLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmZhc3RHZXQgPSBmdW5jdGlvbihyZW1vdGVQYXRoLCBsb2NhbFBhdGgsIG9wdHMsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uZmFzdEdldChyZW1vdGVQYXRoLCBsb2NhbFBhdGgsIG9wdHMsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZmFzdFB1dCA9IGZ1bmN0aW9uKGxvY2FsUGF0aCwgcmVtb3RlUGF0aCwgb3B0cywgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5mYXN0UHV0KGxvY2FsUGF0aCwgcmVtb3RlUGF0aCwgb3B0cywgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5yZWFkRmlsZSA9IGZ1bmN0aW9uKHBhdGgsIG9wdGlvbnMsIGNhbGxiYWNrXykge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGNhbGxiYWNrXyk7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLndyaXRlRmlsZSA9IGZ1bmN0aW9uKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNhbGxiYWNrXykge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLndyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYWxsYmFja18pO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5hcHBlbmRGaWxlID0gZnVuY3Rpb24ocGF0aCwgZGF0YSwgb3B0aW9ucywgY2FsbGJhY2tfKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYWxsYmFja18pO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmV4aXN0cyhwYXRoLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uKGZpbGVuYW1lLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnVubGluayhmaWxlbmFtZSwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5yZW5hbWUgPSBmdW5jdGlvbihvbGRQYXRoLCBuZXdQYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnJlbmFtZShvbGRQYXRoLCBuZXdQYXRoLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLm1rZGlyID0gZnVuY3Rpb24ocGF0aCwgYXR0cnMsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0ubWtkaXIocGF0aCwgYXR0cnMsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUucm1kaXIgPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnJtZGlyKHBhdGgsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKHdoZXJlLCBvcHRzLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnJlYWRkaXIod2hlcmUsIG9wdHMsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZnN0YXQgPSBmdW5jdGlvbihoYW5kbGUsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uZnN0YXQoaGFuZGxlLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLnN0YXQgPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnN0YXQocGF0aCwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5sc3RhdCA9IGZ1bmN0aW9uKHBhdGgsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0ubHN0YXQocGF0aCwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5vcGVuZGlyID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5vcGVuZGlyKHBhdGgsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuc2V0c3RhdCA9IGZ1bmN0aW9uKHBhdGgsIGF0dHJzLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnNldHN0YXQocGF0aCwgYXR0cnMsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZnNldHN0YXQgPSBmdW5jdGlvbihoYW5kbGUsIGF0dHJzLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmZzZXRzdGF0KGhhbmRsZSwgYXR0cnMsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZnV0aW1lcyA9IGZ1bmN0aW9uKGhhbmRsZSwgYXRpbWUsIG10aW1lLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmZ1dGltZXMoaGFuZGxlLCBhdGltZSwgbXRpbWUsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUudXRpbWVzID0gZnVuY3Rpb24ocGF0aCwgYXRpbWUsIG10aW1lLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLnV0aW1lcyhwYXRoLCBhdGltZSwgbXRpbWUsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZmNob3duID0gZnVuY3Rpb24oaGFuZGxlLCB1aWQsIGdpZCwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5mY2hvd24oaGFuZGxlLCB1aWQsIGdpZCwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5jaG93biA9IGZ1bmN0aW9uKHBhdGgsIHVpZCwgZ2lkLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmNob3duKHBhdGgsIHVpZCwgZ2lkLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmZjaG1vZCA9IGZ1bmN0aW9uKGhhbmRsZSwgbW9kZSwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5mY2htb2QoaGFuZGxlLCBtb2RlLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmNobW9kID0gZnVuY3Rpb24ocGF0aCwgbW9kZSwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5jaG1vZChwYXRoLCBtb2RlLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLnJlYWRsaW5rID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5yZWFkbGluayhwYXRoLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLnN5bWxpbmsgPSBmdW5jdGlvbih0YXJnZXRQYXRoLCBsaW5rUGF0aCwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5zeW1saW5rKHRhcmdldFBhdGgsIGxpbmtQYXRoLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLnJlYWxwYXRoID0gZnVuY3Rpb24ocGF0aCwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5yZWFscGF0aChwYXRoLCBjYik7XG59O1xuLy8gZXh0ZW5kZWQgcmVxdWVzdHNcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5leHRfb3BlbnNzaF9yZW5hbWUgPSBmdW5jdGlvbihvbGRQYXRoLCBuZXdQYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmV4dF9vcGVuc3NoX3JlbmFtZShvbGRQYXRoLCBuZXdQYXRoLCBjYik7XG59O1xuU0ZUUFdyYXBwZXIucHJvdG90eXBlLmV4dF9vcGVuc3NoX3N0YXR2ZnMgPSBmdW5jdGlvbihwYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmV4dF9vcGVuc3NoX3N0YXR2ZnMocGF0aCwgY2IpO1xufTtcblNGVFBXcmFwcGVyLnByb3RvdHlwZS5leHRfb3BlbnNzaF9mc3RhdHZmcyA9IGZ1bmN0aW9uKGhhbmRsZSwgY2IpIHtcbiAgcmV0dXJuIHRoaXMuX3N0cmVhbS5leHRfb3BlbnNzaF9mc3RhdHZmcyhoYW5kbGUsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZXh0X29wZW5zc2hfaGFyZGxpbmsgPSBmdW5jdGlvbihvbGRQYXRoLCBuZXdQYXRoLCBjYikge1xuICByZXR1cm4gdGhpcy5fc3RyZWFtLmV4dF9vcGVuc3NoX2hhcmRsaW5rKG9sZFBhdGgsIG5ld1BhdGgsIGNiKTtcbn07XG5TRlRQV3JhcHBlci5wcm90b3R5cGUuZXh0X29wZW5zc2hfZnN5bmMgPSBmdW5jdGlvbihoYW5kbGUsIGNiKSB7XG4gIHJldHVybiB0aGlzLl9zdHJlYW0uZXh0X29wZW5zc2hfZnN5bmMoaGFuZGxlLCBjYik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNGVFBXcmFwcGVyO1xuIiwidmFyIFNvY2tldCA9IHJlcXVpcmUoJ25ldCcpLlNvY2tldDtcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgY3AgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG5cbnZhciByZWFkVUludDMyQkUgPSByZXF1aXJlKCcuL2J1ZmZlci1oZWxwZXJzJykucmVhZFVJbnQzMkJFO1xudmFyIHdyaXRlVUludDMyQkUgPSByZXF1aXJlKCcuL2J1ZmZlci1oZWxwZXJzJykud3JpdGVVSW50MzJCRTtcbnZhciB3cml0ZVVJbnQzMkxFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLndyaXRlVUludDMyTEU7XG5cbnZhciBSRVFVRVNUX0lERU5USVRJRVMgPSAxMTtcbnZhciBJREVOVElUSUVTX0FOU1dFUiA9IDEyO1xudmFyIFNJR05fUkVRVUVTVCA9IDEzO1xudmFyIFNJR05fUkVTUE9OU0UgPSAxNDtcbnZhciBGQUlMVVJFID0gNTtcblxudmFyIFJFX0NZR1dJTl9TT0NLID0gL15cXCE8c29ja2V0ID4oXFxkKykgcyAoW0EtWjAtOV17OH1cXC1bQS1aMC05XXs4fVxcLVtBLVowLTldezh9XFwtW0EtWjAtOV17OH0pLztcblxuLy8gRm9ybWF0IG9mIGAvLy4vcGlwZS9BTllUSElOR2AsIHdpdGggZm9yd2FyZCBzbGFzaGVzIGFuZCBiYWNrd2FyZCBzbGFzaGVzIGJlaW5nIGludGVyY2hhbmdlYWJsZVxudmFyIFdJTkRPV1NfUElQRV9SRUdFWCA9IC9eWy9cXFxcXVsvXFxcXF1cXC5bL1xcXFxdcGlwZVsvXFxcXF0uKy87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc29ja1BhdGgsIGtleSwga2V5VHlwZSwgZGF0YSwgY2IpIHtcbiAgdmFyIHNvY2s7XG4gIHZhciBlcnJvcjtcbiAgdmFyIHNpZztcbiAgdmFyIGRhdGFsZW47XG4gIHZhciBrZXlsZW4gPSAwO1xuICB2YXIgaXNTaWduaW5nID0gQnVmZmVyLmlzQnVmZmVyKGtleSk7XG4gIHZhciB0eXBlO1xuICB2YXIgY291bnQgPSAwO1xuICB2YXIgc2lnbGVuID0gMDtcbiAgdmFyIG5rZXlzID0gMDtcbiAgdmFyIGtleXM7XG4gIHZhciBjb21sZW4gPSAwO1xuICB2YXIgY29tbWVudCA9IGZhbHNlO1xuICB2YXIgYWNjZXB0O1xuICB2YXIgcmVqZWN0O1xuXG4gIGlmICh0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBrZXlUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gYWdlbnQgZm9yd2FyZGluZ1xuICAgIGFjY2VwdCA9IGtleTtcbiAgICByZWplY3QgPSBrZXlUeXBlO1xuICB9IGVsc2UgaWYgKGlzU2lnbmluZykge1xuICAgIGtleWxlbiA9IGtleS5sZW5ndGg7XG4gICAgZGF0YWxlbiA9IGRhdGEubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIGNiID0ga2V5O1xuICAgIGtleSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uY29ubmVjdCgpIHtcbiAgICB2YXIgYnVmO1xuICAgIGlmIChpc1NpZ25pbmcpIHtcbiAgICAgIC8qXG4gICAgICAgIGJ5dGUgICAgICAgIFNTSDJfQUdFTlRDX1NJR05fUkVRVUVTVFxuICAgICAgICBzdHJpbmcgICAgICBrZXlfYmxvYlxuICAgICAgICBzdHJpbmcgICAgICBkYXRhXG4gICAgICAgIHVpbnQzMiAgICAgIGZsYWdzXG4gICAgICAqL1xuICAgICAgdmFyIHAgPSA5O1xuICAgICAgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQgKyAxICsgNCArIGtleWxlbiArIDQgKyBkYXRhbGVuICsgNCk7XG4gICAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgYnVmLmxlbmd0aCAtIDQsIDApO1xuICAgICAgYnVmWzRdID0gU0lHTl9SRVFVRVNUO1xuICAgICAgd3JpdGVVSW50MzJCRShidWYsIGtleWxlbiwgNSk7XG4gICAgICBrZXkuY29weShidWYsIHApO1xuICAgICAgd3JpdGVVSW50MzJCRShidWYsIGRhdGFsZW4sIHAgKz0ga2V5bGVuKTtcbiAgICAgIGRhdGEuY29weShidWYsIHAgKz0gNCk7XG4gICAgICB3cml0ZVVJbnQzMkJFKGJ1ZiwgMCwgcCArPSBkYXRhbGVuKTtcbiAgICAgIHNvY2sud3JpdGUoYnVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLypcbiAgICAgICAgYnl0ZSAgICAgICAgU1NIMl9BR0VOVENfUkVRVUVTVF9JREVOVElUSUVTXG4gICAgICAqL1xuICAgICAgc29jay53cml0ZShCdWZmZXIuZnJvbShbMCwgMCwgMCwgMSwgUkVRVUVTVF9JREVOVElUSUVTXSkpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2h1bmsubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gc2tpcCBvdmVyIHBhY2tldCBsZW5ndGhcbiAgICAgICAgaWYgKCsrY291bnQgPT09IDUpIHtcbiAgICAgICAgICB0eXBlID0gY2h1bmtbaV07XG4gICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNJR05fUkVTUE9OU0UpIHtcbiAgICAgICAgLypcbiAgICAgICAgICBieXRlICAgICAgICBTU0gyX0FHRU5UX1NJR05fUkVTUE9OU0VcbiAgICAgICAgICBzdHJpbmcgICAgICBzaWduYXR1cmVfYmxvYlxuICAgICAgICAqL1xuICAgICAgICBpZiAoIXNpZykge1xuICAgICAgICAgIHNpZ2xlbiA8PD0gODtcbiAgICAgICAgICBzaWdsZW4gKz0gY2h1bmtbaV07XG4gICAgICAgICAgaWYgKCsrY291bnQgPT09IDQpIHtcbiAgICAgICAgICAgIHNpZyA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShzaWdsZW4pO1xuICAgICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaWdbY291bnRdID0gY2h1bmtbaV07XG4gICAgICAgICAgaWYgKCsrY291bnQgPT09IHNpZ2xlbikge1xuICAgICAgICAgICAgc29jay5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKTtcbiAgICAgICAgICAgIHJldHVybiBzb2NrLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gSURFTlRJVElFU19BTlNXRVIpIHtcbiAgICAgICAgLypcbiAgICAgICAgICBieXRlICAgICAgICBTU0gyX0FHRU5UX0lERU5USVRJRVNfQU5TV0VSXG4gICAgICAgICAgdWludDMyICAgICAgbnVtX2tleXNcblxuICAgICAgICBGb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgY29uc2VjdXRpdmUga2V5cywgZW5jb2RlZCBhczpcblxuICAgICAgICAgIHN0cmluZyAgICAgIHB1YmxpYyBrZXkgYmxvYlxuICAgICAgICAgIHN0cmluZyAgICAgIHB1YmxpYyBrZXkgY29tbWVudFxuICAgICAgICAqL1xuICAgICAgICBpZiAoa2V5cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbmtleXMgPDw9IDg7XG4gICAgICAgICAgbmtleXMgKz0gY2h1bmtbaV07XG4gICAgICAgICAgaWYgKCsrY291bnQgPT09IDQpIHtcbiAgICAgICAgICAgIGtleXMgPSBuZXcgQXJyYXkobmtleXMpO1xuICAgICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICAgICAgaWYgKG5rZXlzID09PSAwKSB7XG4gICAgICAgICAgICAgIHNvY2sucmVtb3ZlQWxsTGlzdGVuZXJzKCdkYXRhJyk7XG4gICAgICAgICAgICAgIHJldHVybiBzb2NrLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIGtleWxlbiA8PD0gODtcbiAgICAgICAgICAgIGtleWxlbiArPSBjaHVua1tpXTtcbiAgICAgICAgICAgIGlmICgrK2NvdW50ID09PSA0KSB7XG4gICAgICAgICAgICAgIGtleSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShrZXlsZW4pO1xuICAgICAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjb21tZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAga2V5W2NvdW50XSA9IGNodW5rW2ldO1xuICAgICAgICAgICAgaWYgKCsrY291bnQgPT09IGtleWxlbikge1xuICAgICAgICAgICAgICBrZXlzW25rZXlzIC0gMV0gPSBrZXk7XG4gICAgICAgICAgICAgIGtleWxlbiA9IDA7XG4gICAgICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgICAgICAgY29tbWVudCA9IHRydWU7XG4gICAgICAgICAgICAgIGlmICgtLW5rZXlzID09PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHNvY2sucmVtb3ZlQWxsTGlzdGVuZXJzKCdkYXRhJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvY2suZGVzdHJveSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjb21tZW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb21sZW4gPDw9IDg7XG4gICAgICAgICAgICBjb21sZW4gKz0gY2h1bmtbaV07XG4gICAgICAgICAgICBpZiAoKytjb3VudCA9PT0gNCkge1xuICAgICAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgICAgICAgIGlmIChjb21sZW4gPiAwKVxuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBjb21sZW47XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGtleSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29tbGVuID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2tpcCBjb21tZW50c1xuICAgICAgICAgICAgaWYgKCsrY291bnQgPT09IGNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgY29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgICAgICAgIGtleSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRkFJTFVSRSkge1xuICAgICAgICBpZiAoaXNTaWduaW5nKVxuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdBZ2VudCB1bmFibGUgdG8gc2lnbiBkYXRhJyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIGxpc3Qgb2Yga2V5cyBmcm9tIGFnZW50Jyk7XG4gICAgICAgIHNvY2sucmVtb3ZlQWxsTGlzdGVuZXJzKCdkYXRhJyk7XG4gICAgICAgIHJldHVybiBzb2NrLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25lcnJvcihlcnIpIHtcbiAgICBlcnJvciA9IGVycjtcbiAgfVxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGlmIChlcnJvcilcbiAgICAgIGNiKGVycm9yKTtcbiAgICBlbHNlIGlmICgoaXNTaWduaW5nICYmICFzaWcpIHx8ICghaXNTaWduaW5nICYmICFrZXlzKSlcbiAgICAgIGNiKG5ldyBFcnJvcignVW5leHBlY3RlZCBkaXNjb25uZWN0aW9uIGZyb20gYWdlbnQnKSk7XG4gICAgZWxzZSBpZiAoaXNTaWduaW5nICYmIHNpZylcbiAgICAgIGNiKHVuZGVmaW5lZCwgc2lnKTtcbiAgICBlbHNlIGlmICghaXNTaWduaW5nICYmIGtleXMpXG4gICAgICBjYih1bmRlZmluZWQsIGtleXMpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgJiYgIVdJTkRPV1NfUElQRV9SRUdFWC50ZXN0KHNvY2tQYXRoKSkge1xuICAgIGlmIChzb2NrUGF0aCA9PT0gJ3BhZ2VhbnQnKSB7XG4gICAgICAvLyBQYWdlYW50IChQdVRUWSBhdXRoZW50aWNhdGlvbiBhZ2VudClcbiAgICAgIHNvY2sgPSBuZXcgUGFnZWFudFNvY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY3lnd2luIHNzaC1hZ2VudCBpbnN0YW5jZVxuICAgICAgdmFyIHRyaWVkQ3lncGF0aCA9IGZhbHNlO1xuICAgICAgZnMucmVhZEZpbGUoc29ja1BhdGgsIGZ1bmN0aW9uIHJlYWRDeWdzb2NrZXQoZXJyLCBkYXRhKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAodHJpZWRDeWdwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignSW52YWxpZCBjeWd3aW4gdW5peCBzb2NrZXQgcGF0aCcpKTtcbiAgICAgICAgICAvLyB0cnkgdXNpbmcgYGN5Z3BhdGhgIHRvIGNvbnZlcnQgYSBwb3NzaWJsZSAqbml4LXN0eWxlIHBhdGggdG8gdGhlXG4gICAgICAgICAgLy8gcmVhbCBXaW5kb3dzIHBhdGggYmVmb3JlIGdpdmluZyB1cCAuLi5cbiAgICAgICAgICBjcC5leGVjKCdjeWdwYXRoIC13IFwiJyArIHNvY2tQYXRoICsgJ1wiJyxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGVyciwgc3Rkb3V0LCBzdGRlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgfHwgc3Rkb3V0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignSW52YWxpZCBjeWd3aW4gdW5peCBzb2NrZXQgcGF0aCcpKTtcbiAgICAgICAgICAgIHRyaWVkQ3lncGF0aCA9IHRydWU7XG4gICAgICAgICAgICBzb2NrUGF0aCA9IHN0ZG91dC50b1N0cmluZygpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcnKTtcbiAgICAgICAgICAgIGZzLnJlYWRGaWxlKHNvY2tQYXRoLCByZWFkQ3lnc29ja2V0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbTtcbiAgICAgICAgaWYgKG0gPSBSRV9DWUdXSU5fU09DSy5leGVjKGRhdGEudG9TdHJpbmcoJ2FzY2lpJykpKSB7XG4gICAgICAgICAgdmFyIHBvcnQ7XG4gICAgICAgICAgdmFyIHNlY3JldDtcbiAgICAgICAgICB2YXIgc2VjcmV0YnVmO1xuICAgICAgICAgIHZhciBzdGF0ZTtcbiAgICAgICAgICB2YXIgYmMgPSAwO1xuICAgICAgICAgIHZhciBpc1JldHJ5aW5nID0gZmFsc2U7XG4gICAgICAgICAgdmFyIGluYnVmID0gW107XG4gICAgICAgICAgdmFyIGNyZWRzYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDEyKTtcbiAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICB2YXIgajtcblxuICAgICAgICAgIC8vIHVzZSAwIGZvciBwaWQsIHVpZCwgYW5kIGdpZCB0byBlbnN1cmUgd2UgZ2V0IGFuIGVycm9yIGFuZCBhbHNvXG4gICAgICAgICAgLy8gYSB2YWxpZCB1aWQgYW5kIGdpZCBmcm9tIGN5Z3dpbiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZmlndXJlIGl0XG4gICAgICAgICAgLy8gb3V0IG91cnNlbHZlc1xuICAgICAgICAgIGNyZWRzYnVmLmZpbGwoMCk7XG5cbiAgICAgICAgICAvLyBwYXJzZSBjeWd3aW4gdW5peCBzb2NrZXQgZmlsZSBjb250ZW50c1xuICAgICAgICAgIHBvcnQgPSBwYXJzZUludChtWzFdLCAxMCk7XG4gICAgICAgICAgc2VjcmV0ID0gbVsyXS5yZXBsYWNlKC9cXC0vZywgJycpO1xuICAgICAgICAgIHNlY3JldGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxNik7XG4gICAgICAgICAgZm9yIChpID0gMCwgaiA9IDA7IGogPCAzMjsgKytpLGorPTIpXG4gICAgICAgICAgICBzZWNyZXRidWZbaV0gPSBwYXJzZUludChzZWNyZXQuc3Vic3RyaW5nKGosIGogKyAyKSwgMTYpO1xuXG4gICAgICAgICAgLy8gY29udmVydCB0byBob3N0IG9yZGVyIChhbHdheXMgTEUgZm9yIFdpbmRvd3MpXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDQpXG4gICAgICAgICAgICB3cml0ZVVJbnQzMkxFKHNlY3JldGJ1ZiwgcmVhZFVJbnQzMkJFKHNlY3JldGJ1ZiwgaSksIGkpO1xuXG4gICAgICAgICAgZnVuY3Rpb24gX29uY29ubmVjdCgpIHtcbiAgICAgICAgICAgIGJjID0gMDtcbiAgICAgICAgICAgIHN0YXRlID0gJ3NlY3JldCc7XG4gICAgICAgICAgICBzb2NrLndyaXRlKHNlY3JldGJ1Zik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIF9vbmRhdGEoZGF0YSkge1xuICAgICAgICAgICAgYmMgKz0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdzZWNyZXQnKSB7XG4gICAgICAgICAgICAgIC8vIHRoZSBzZWNyZXQgd2Ugc2VudCBpcyBlY2hvZWQgYmFjayB0byB1cyBieSBjeWd3aW4sIG5vdCBzdXJlIG9mXG4gICAgICAgICAgICAgIC8vIHRoZSByZWFzb24gZm9yIHRoYXQsIGJ1dCB3ZSBpZ25vcmUgaXQgbm9uZXRoZWxlc3MgLi4uXG4gICAgICAgICAgICAgIGlmIChiYyA9PT0gMTYpIHtcbiAgICAgICAgICAgICAgICBiYyA9IDA7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSAnY3JlZHMnO1xuICAgICAgICAgICAgICAgIHNvY2sud3JpdGUoY3JlZHNidWYpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnY3JlZHMnKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGF0dGVtcHQsIG1ha2Ugc3VyZSB0byBnYXRoZXIgdGhlIHZhbGlkXG4gICAgICAgICAgICAgIC8vIHVpZCBhbmQgZ2lkIGZvciBvdXIgbmV4dCBhdHRlbXB0XG4gICAgICAgICAgICAgIGlmICghaXNSZXRyeWluZylcbiAgICAgICAgICAgICAgICBpbmJ1Zi5wdXNoKGRhdGEpO1xuXG4gICAgICAgICAgICAgIGlmIChiYyA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBzb2NrLnJlbW92ZUxpc3RlbmVyKCdjb25uZWN0JywgX29uY29ubmVjdCk7XG4gICAgICAgICAgICAgICAgc29jay5yZW1vdmVMaXN0ZW5lcignZGF0YScsIF9vbmRhdGEpO1xuICAgICAgICAgICAgICAgIHNvY2sucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgX29uY2xvc2UpO1xuICAgICAgICAgICAgICAgIGlmIChpc1JldHJ5aW5nKSB7XG4gICAgICAgICAgICAgICAgICBhZGRTb2NrTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgICBzb2NrLmVtaXQoJ2Nvbm5lY3QnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaXNSZXRyeWluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBjcmVkc2J1ZiA9IEJ1ZmZlci5jb25jYXQoaW5idWYpO1xuICAgICAgICAgICAgICAgICAgd3JpdGVVSW50MzJMRShjcmVkc2J1ZiwgcHJvY2Vzcy5waWQsIDApO1xuICAgICAgICAgICAgICAgICAgc29jay5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICB0cnlDb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIF9vbmNsb3NlKCkge1xuICAgICAgICAgICAgY2IobmV3IEVycm9yKCdQcm9ibGVtIG5lZ290aWF0aW5nIGN5Z3dpbiB1bml4IHNvY2tldCBzZWN1cml0eScpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gdHJ5Q29ubmVjdCgpIHtcbiAgICAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KCk7XG4gICAgICAgICAgICBzb2NrLm9uY2UoJ2Nvbm5lY3QnLCBfb25jb25uZWN0KTtcbiAgICAgICAgICAgIHNvY2sub24oJ2RhdGEnLCBfb25kYXRhKTtcbiAgICAgICAgICAgIHNvY2sub25jZSgnY2xvc2UnLCBfb25jbG9zZSk7XG4gICAgICAgICAgICBzb2NrLmNvbm5lY3QocG9ydCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeUNvbm5lY3QoKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgY2IobmV3IEVycm9yKCdNYWxmb3JtZWQgY3lnd2luIHVuaXggc29ja2V0IGZpbGUnKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZVxuICAgIHNvY2sgPSBuZXcgU29ja2V0KCk7XG5cbiAgZnVuY3Rpb24gYWRkU29ja0xpc3RlbmVycygpIHtcbiAgICBpZiAoIWFjY2VwdCAmJiAhcmVqZWN0KSB7XG4gICAgICBzb2NrLm9uY2UoJ2Nvbm5lY3QnLCBvbmNvbm5lY3QpO1xuICAgICAgc29jay5vbignZGF0YScsIG9uZGF0YSk7XG4gICAgICBzb2NrLm9uY2UoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgICBzb2NrLm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGFuO1xuICAgICAgc29jay5vbmNlKCdjb25uZWN0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNoYW4gPSBhY2NlcHQoKTtcbiAgICAgICAgdmFyIGlzRG9uZSA9IGZhbHNlO1xuICAgICAgICBmdW5jdGlvbiBvbkRvbmUoKSB7XG4gICAgICAgICAgaWYgKGlzRG9uZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBzb2NrLmRlc3Ryb3koKTtcbiAgICAgICAgICBpc0RvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoYW4ub25jZSgnZW5kJywgb25Eb25lKVxuICAgICAgICAgICAgLm9uY2UoJ2Nsb3NlJywgb25Eb25lKVxuICAgICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIHNvY2sud3JpdGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzb2NrLm9uKCdkYXRhJywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIGNoYW4ud3JpdGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBzb2NrLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghY2hhbilcbiAgICAgICAgICByZWplY3QoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBhZGRTb2NrTGlzdGVuZXJzKCk7XG4gIHNvY2suY29ubmVjdChzb2NrUGF0aCk7XG59O1xuXG5cbi8vIHdpbjMyIG9ubHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICB2YXIgUkVUX0VSUl9CQURBUkdTID0gMTA7XG4gIHZhciBSRVRfRVJSX1VOQVZBSUxBQkxFID0gMTE7XG4gIHZhciBSRVRfRVJSX05PTUFQID0gMTI7XG4gIHZhciBSRVRfRVJSX0JJTlNURElOID0gMTM7XG4gIHZhciBSRVRfRVJSX0JJTlNURE9VVCA9IDE0O1xuICB2YXIgUkVUX0VSUl9CQURMRU4gPSAxNTtcblxuICB2YXIgRVJST1IgPSB7fTtcbiAgdmFyIEVYRVBBVEggPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAndXRpbC9wYWdlbnQuZXhlJyk7XG4gIEVSUk9SW1JFVF9FUlJfQkFEQVJHU10gPSBuZXcgRXJyb3IoJ0ludmFsaWQgcGFnZW50LmV4ZSBhcmd1bWVudHMnKTtcbiAgRVJST1JbUkVUX0VSUl9VTkFWQUlMQUJMRV0gPSBuZXcgRXJyb3IoJ1BhZ2VhbnQgaXMgbm90IHJ1bm5pbmcnKTtcbiAgRVJST1JbUkVUX0VSUl9OT01BUF0gPSBuZXcgRXJyb3IoJ3BhZ2VudC5leGUgY291bGQgbm90IGNyZWF0ZSBhbiBtbWFwJyk7XG4gIEVSUk9SW1JFVF9FUlJfQklOU1RESU5dID0gbmV3IEVycm9yKCdwYWdlbnQuZXhlIGNvdWxkIG5vdCBzZXQgbW9kZSBmb3Igc3RkaW4nKTtcbiAgRVJST1JbUkVUX0VSUl9CSU5TVERPVVRdID0gbmV3IEVycm9yKCdwYWdlbnQuZXhlIGNvdWxkIG5vdCBzZXQgbW9kZSBmb3Igc3Rkb3V0Jyk7XG4gIEVSUk9SW1JFVF9FUlJfQkFETEVOXSA9IG5ldyBFcnJvcigncGFnZW50LmV4ZSBkaWQgbm90IGdldCBleHBlY3RlZCBpbnB1dCBwYXlsb2FkJyk7XG5cbiAgZnVuY3Rpb24gUGFnZWFudFNvY2soKSB7XG4gICAgdGhpcy5wcm9jID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgfVxuICBpbmhlcml0cyhQYWdlYW50U29jaywgRXZlbnRFbWl0dGVyKTtcblxuICBQYWdlYW50U29jay5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICBpZiAodGhpcy5idWZmZXIgPT09IG51bGwpXG4gICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZjtcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWZmZXIsIGJ1Zl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIubGVuZ3RoICsgYnVmLmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIFdhaXQgZm9yIGF0IGxlYXN0IGFsbCBsZW5ndGggYnl0ZXNcbiAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoIDwgNClcbiAgICAgIHJldHVybjtcblxuICAgIHZhciBsZW4gPSByZWFkVUludDMyQkUodGhpcy5idWZmZXIsIDApO1xuICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZnVsbCBtZXNzYWdlIGJlZm9yZSBxdWVyeWluZyBwYWdlYW50XG4gICAgaWYgKCh0aGlzLmJ1ZmZlci5sZW5ndGggLSA0KSA8IGxlbilcbiAgICAgIHJldHVybjtcblxuICAgIGJ1ZiA9IHRoaXMuYnVmZmVyLnNsaWNlKDAsIDQgKyBsZW4pO1xuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPiAoNCArIGxlbikpXG4gICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnNsaWNlKDQgKyBsZW4pO1xuICAgIGVsc2VcbiAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvYztcbiAgICB2YXIgaGFkRXJyb3IgPSBmYWxzZTtcbiAgICBwcm9jID0gdGhpcy5wcm9jID0gY3Auc3Bhd24oRVhFUEFUSCwgWyBidWYubGVuZ3RoIF0pO1xuICAgIHByb2Muc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgc2VsZi5lbWl0KCdkYXRhJywgZGF0YSk7XG4gICAgfSk7XG4gICAgcHJvYy5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgICAgaWYgKCFoYWRFcnJvcikge1xuICAgICAgICBoYWRFcnJvciA9IHRydWU7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHByb2Mub25jZSgnY2xvc2UnLCBmdW5jdGlvbihjb2RlKSB7XG4gICAgICBzZWxmLnByb2MgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoRVJST1JbY29kZV0gJiYgIWhhZEVycm9yKSB7XG4gICAgICAgIGhhZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIEVSUk9SW2NvZGVdKTtcbiAgICAgIH1cbiAgICAgIHNlbGYuZW1pdCgnY2xvc2UnLCBoYWRFcnJvcik7XG4gICAgfSk7XG4gICAgcHJvYy5zdGRpbi5lbmQoYnVmKTtcbiAgfTtcbiAgUGFnZWFudFNvY2sucHJvdG90eXBlLmVuZCA9IFBhZ2VhbnRTb2NrLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgIHRoaXMucHJvYy5raWxsKCk7XG4gICAgICB0aGlzLnByb2MgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuICBQYWdlYW50U29jay5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpO1xuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlYWRVSW50MzJCRTogZnVuY3Rpb24gcmVhZFVJbnQzMkJFKGJ1Ziwgb2Zmc2V0KSB7XG4gICAgcmV0dXJuIGJ1ZltvZmZzZXQrK10gKiAxNjc3NzIxNlxuICAgICAgICAgICArIGJ1ZltvZmZzZXQrK10gKiA2NTUzNlxuICAgICAgICAgICArIGJ1ZltvZmZzZXQrK10gKiAyNTZcbiAgICAgICAgICAgKyBidWZbb2Zmc2V0XTtcbiAgfSxcbiAgd3JpdGVVSW50MzJCRTogZnVuY3Rpb24gd3JpdGVVSW50MzJCRShidWYsIHZhbHVlLCBvZmZzZXQpIHtcbiAgICBidWZbb2Zmc2V0KytdID0gKHZhbHVlID4+PiAyNCk7XG4gICAgYnVmW29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gMTYpO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAodmFsdWUgPj4+IDgpO1xuICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9LFxuICB3cml0ZVVJbnQzMkxFOiBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFKGJ1ZiwgdmFsdWUsIG9mZnNldCkge1xuICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgICBidWZbb2Zmc2V0KytdID0gKHZhbHVlID4+PiA4KTtcbiAgICBidWZbb2Zmc2V0KytdID0gKHZhbHVlID4+PiAxNik7XG4gICAgYnVmW29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gMjQpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbn07XG4iLCJ2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgU29ja2V0ID0gcmVxdWlyZSgnbmV0JykuU29ja2V0O1xudmFyIGRuc0xvb2t1cCA9IHJlcXVpcmUoJ2RucycpLmxvb2t1cDtcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgSEFTSEVTID0gY3J5cHRvLmdldEhhc2hlcygpO1xuXG52YXIgc3NoMl9zdHJlYW1zID0gcmVxdWlyZSgnQG9semllLTEyL3NzaDItc3RyZWFtcycpO1xudmFyIFNTSDJTdHJlYW0gPSBzc2gyX3N0cmVhbXMuU1NIMlN0cmVhbTtcbnZhciBTRlRQU3RyZWFtID0gc3NoMl9zdHJlYW1zLlNGVFBTdHJlYW07XG52YXIgY29uc3RzID0gc3NoMl9zdHJlYW1zLmNvbnN0YW50cztcbnZhciBCVUdTID0gY29uc3RzLkJVR1M7XG52YXIgQUxHT1JJVEhNUyA9IGNvbnN0cy5BTEdPUklUSE1TO1xudmFyIEVERFNBX1NVUFBPUlRFRCA9IGNvbnN0cy5FRERTQV9TVVBQT1JURUQ7XG52YXIgcGFyc2VLZXkgPSBzc2gyX3N0cmVhbXMudXRpbHMucGFyc2VLZXk7XG5cbnZhciBIVFRQQWdlbnRzID0gcmVxdWlyZSgnLi9odHRwLWFnZW50cycpO1xudmFyIENoYW5uZWwgPSByZXF1aXJlKCcuL0NoYW5uZWwnKTtcbnZhciBhZ2VudFF1ZXJ5ID0gcmVxdWlyZSgnLi9hZ2VudCcpO1xudmFyIFNGVFBXcmFwcGVyID0gcmVxdWlyZSgnLi9TRlRQV3JhcHBlcicpO1xudmFyIHJlYWRVSW50MzJCRSA9IHJlcXVpcmUoJy4vYnVmZmVyLWhlbHBlcnMnKS5yZWFkVUludDMyQkU7XG5cbnZhciBNQVhfQ0hBTk5FTCA9IE1hdGgucG93KDIsIDMyKSAtIDE7XG52YXIgUkVfT1BFTlNTSCA9IC9eT3BlblNTSF8oPzooPyFbMC00XSlcXGQpfCg/OlxcZHsyLH0pLztcbnZhciBERUJVR19OT09QID0gZnVuY3Rpb24obXNnKSB7fTtcblxuZnVuY3Rpb24gQ2xpZW50KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2xpZW50KSlcbiAgICByZXR1cm4gbmV3IENsaWVudCgpO1xuXG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHRoaXMuY29uZmlnID0ge1xuICAgIGhvc3Q6IHVuZGVmaW5lZCxcbiAgICBwb3J0OiB1bmRlZmluZWQsXG4gICAgbG9jYWxBZGRyZXNzOiB1bmRlZmluZWQsXG4gICAgbG9jYWxQb3J0OiB1bmRlZmluZWQsXG4gICAgZm9yY2VJUHY0OiB1bmRlZmluZWQsXG4gICAgZm9yY2VJUHY2OiB1bmRlZmluZWQsXG4gICAga2VlcGFsaXZlQ291bnRNYXg6IHVuZGVmaW5lZCxcbiAgICBrZWVwYWxpdmVJbnRlcnZhbDogdW5kZWZpbmVkLFxuICAgIHJlYWR5VGltZW91dDogdW5kZWZpbmVkLFxuXG4gICAgdXNlcm5hbWU6IHVuZGVmaW5lZCxcbiAgICBwYXNzd29yZDogdW5kZWZpbmVkLFxuICAgIHByaXZhdGVLZXk6IHVuZGVmaW5lZCxcbiAgICB0cnlLZXlib2FyZDogdW5kZWZpbmVkLFxuICAgIGFnZW50OiB1bmRlZmluZWQsXG4gICAgYWxsb3dBZ2VudEZ3ZDogdW5kZWZpbmVkLFxuICAgIGF1dGhIYW5kbGVyOiB1bmRlZmluZWQsXG5cbiAgICBob3N0SGFzaEFsZ286IHVuZGVmaW5lZCxcbiAgICBob3N0SGFzaENiOiB1bmRlZmluZWQsXG4gICAgc3RyaWN0VmVuZG9yOiB1bmRlZmluZWQsXG4gICAgZGVidWc6IHVuZGVmaW5lZFxuICB9O1xuXG4gIHRoaXMuX3JlYWR5VGltZW91dCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fY2hhbm5lbHMgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fZm9yd2FyZGluZyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fZm9yd2FyZGluZ1VuaXggPSB1bmRlZmluZWQ7XG4gIHRoaXMuX2FjY2VwdFgxMSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fYWdlbnRGd2RFbmFibGVkID0gdW5kZWZpbmVkO1xuICB0aGlzLl9jdXJDaGFuID0gdW5kZWZpbmVkO1xuICB0aGlzLl9yZW1vdGVWZXIgPSB1bmRlZmluZWQ7XG5cbiAgdGhpcy5fc3Noc3RyZWFtID0gdW5kZWZpbmVkO1xuICB0aGlzLl9zb2NrID0gdW5kZWZpbmVkO1xuICB0aGlzLl9yZXNldEtBID0gdW5kZWZpbmVkO1xufVxuaW5oZXJpdHMoQ2xpZW50LCBFdmVudEVtaXR0ZXIpO1xuXG5DbGllbnQucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbihjZmcpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0aGlzLl9zb2NrICYmIHRoaXMuX3NvY2sud3JpdGFibGUpIHtcbiAgICB0aGlzLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmNvbm5lY3QoY2ZnKTtcbiAgICB9KTtcbiAgICB0aGlzLmVuZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuY29uZmlnLmhvc3QgPSBjZmcuaG9zdG5hbWUgfHwgY2ZnLmhvc3QgfHwgJ2xvY2FsaG9zdCc7XG4gIHRoaXMuY29uZmlnLnBvcnQgPSBjZmcucG9ydCB8fCAyMjtcbiAgdGhpcy5jb25maWcubG9jYWxBZGRyZXNzID0gKHR5cGVvZiBjZmcubG9jYWxBZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcubG9jYWxBZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIHRoaXMuY29uZmlnLmxvY2FsUG9ydCA9ICh0eXBlb2YgY2ZnLmxvY2FsUG9ydCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR5cGVvZiBjZmcubG9jYWxQb3J0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcubG9jYWxQb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIHRoaXMuY29uZmlnLmZvcmNlSVB2NCA9IGNmZy5mb3JjZUlQdjQgfHwgZmFsc2U7XG4gIHRoaXMuY29uZmlnLmZvcmNlSVB2NiA9IGNmZy5mb3JjZUlQdjYgfHwgZmFsc2U7XG4gIHRoaXMuY29uZmlnLmtlZXBhbGl2ZUNvdW50TWF4ID0gKHR5cGVvZiBjZmcua2VlcGFsaXZlQ291bnRNYXggPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNmZy5rZWVwYWxpdmVDb3VudE1heCA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2ZnLmtlZXBhbGl2ZUNvdW50TWF4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMyk7XG4gIHRoaXMuY29uZmlnLmtlZXBhbGl2ZUludGVydmFsID0gKHR5cGVvZiBjZmcua2VlcGFsaXZlSW50ZXJ2YWwgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNmZy5rZWVwYWxpdmVJbnRlcnZhbCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcua2VlcGFsaXZlSW50ZXJ2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwKTtcbiAgdGhpcy5jb25maWcucmVhZHlUaW1lb3V0ID0gKHR5cGVvZiBjZmcucmVhZHlUaW1lb3V0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2ZnLnJlYWR5VGltZW91dCA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNmZy5yZWFkeVRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMjAwMDApO1xuXG4gIHZhciBhbGdvcml0aG1zID0ge1xuICAgIGtleDogdW5kZWZpbmVkLFxuICAgIGtleEJ1ZjogdW5kZWZpbmVkLFxuICAgIGNpcGhlcjogdW5kZWZpbmVkLFxuICAgIGNpcGhlckJ1ZjogdW5kZWZpbmVkLFxuICAgIHNlcnZlckhvc3RLZXk6IHVuZGVmaW5lZCxcbiAgICBzZXJ2ZXJIb3N0S2V5QnVmOiB1bmRlZmluZWQsXG4gICAgaG1hYzogdW5kZWZpbmVkLFxuICAgIGhtYWNCdWY6IHVuZGVmaW5lZCxcbiAgICBjb21wcmVzczogdW5kZWZpbmVkLFxuICAgIGNvbXByZXNzQnVmOiB1bmRlZmluZWRcbiAgfTtcbiAgdmFyIGk7XG4gIGlmICh0eXBlb2YgY2ZnLmFsZ29yaXRobXMgPT09ICdvYmplY3QnICYmIGNmZy5hbGdvcml0aG1zICE9PSBudWxsKSB7XG4gICAgdmFyIGFsZ29zU3VwcG9ydGVkO1xuICAgIHZhciBhbGdvTGlzdDtcblxuICAgIGFsZ29MaXN0ID0gY2ZnLmFsZ29yaXRobXMua2V4O1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsZ29MaXN0KSAmJiBhbGdvTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBhbGdvc1N1cHBvcnRlZCA9IEFMR09SSVRITVMuU1VQUE9SVEVEX0tFWDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhbGdvTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoYWxnb3NTdXBwb3J0ZWQuaW5kZXhPZihhbGdvTGlzdFtpXSkgPT09IC0xKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQga2V5IGV4Y2hhbmdlIGFsZ29yaXRobTogJyArIGFsZ29MaXN0W2ldKTtcbiAgICAgIH1cbiAgICAgIGFsZ29yaXRobXMua2V4ID0gYWxnb0xpc3Q7XG4gICAgfVxuXG4gICAgYWxnb0xpc3QgPSBjZmcuYWxnb3JpdGhtcy5jaXBoZXI7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb0xpc3QpICYmIGFsZ29MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFsZ29zU3VwcG9ydGVkID0gQUxHT1JJVEhNUy5TVVBQT1JURURfQ0lQSEVSO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFsZ29MaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhbGdvc1N1cHBvcnRlZC5pbmRleE9mKGFsZ29MaXN0W2ldKSA9PT0gLTEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjaXBoZXIgYWxnb3JpdGhtOiAnICsgYWxnb0xpc3RbaV0pO1xuICAgICAgfVxuICAgICAgYWxnb3JpdGhtcy5jaXBoZXIgPSBhbGdvTGlzdDtcbiAgICB9XG5cbiAgICBhbGdvTGlzdCA9IGNmZy5hbGdvcml0aG1zLnNlcnZlckhvc3RLZXk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb0xpc3QpICYmIGFsZ29MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFsZ29zU3VwcG9ydGVkID0gQUxHT1JJVEhNUy5TVVBQT1JURURfU0VSVkVSX0hPU1RfS0VZO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFsZ29MaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhbGdvc1N1cHBvcnRlZC5pbmRleE9mKGFsZ29MaXN0W2ldKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHNlcnZlciBob3N0IGtleSBhbGdvcml0aG06ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYWxnb0xpc3RbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhbGdvcml0aG1zLnNlcnZlckhvc3RLZXkgPSBhbGdvTGlzdDtcbiAgICB9XG5cbiAgICBhbGdvTGlzdCA9IGNmZy5hbGdvcml0aG1zLmhtYWM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb0xpc3QpICYmIGFsZ29MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFsZ29zU3VwcG9ydGVkID0gQUxHT1JJVEhNUy5TVVBQT1JURURfSE1BQztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhbGdvTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoYWxnb3NTdXBwb3J0ZWQuaW5kZXhPZihhbGdvTGlzdFtpXSkgPT09IC0xKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgSE1BQyBhbGdvcml0aG06ICcgKyBhbGdvTGlzdFtpXSk7XG4gICAgICB9XG4gICAgICBhbGdvcml0aG1zLmhtYWMgPSBhbGdvTGlzdDtcbiAgICB9XG5cbiAgICBhbGdvTGlzdCA9IGNmZy5hbGdvcml0aG1zLmNvbXByZXNzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsZ29MaXN0KSAmJiBhbGdvTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBhbGdvc1N1cHBvcnRlZCA9IEFMR09SSVRITVMuU1VQUE9SVEVEX0NPTVBSRVNTO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFsZ29MaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhbGdvc1N1cHBvcnRlZC5pbmRleE9mKGFsZ29MaXN0W2ldKSA9PT0gLTEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjb21wcmVzc2lvbiBhbGdvcml0aG06ICcgKyBhbGdvTGlzdFtpXSk7XG4gICAgICB9XG4gICAgICBhbGdvcml0aG1zLmNvbXByZXNzID0gYWxnb0xpc3Q7XG4gICAgfVxuICB9XG4gIGlmIChhbGdvcml0aG1zLmNvbXByZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoY2ZnLmNvbXByZXNzKSB7XG4gICAgICBhbGdvcml0aG1zLmNvbXByZXNzID0gWyd6bGliQG9wZW5zc2guY29tJywgJ3psaWInXTtcbiAgICAgIGlmIChjZmcuY29tcHJlc3MgIT09ICdmb3JjZScpXG4gICAgICAgIGFsZ29yaXRobXMuY29tcHJlc3MucHVzaCgnbm9uZScpO1xuICAgIH0gZWxzZSBpZiAoY2ZnLmNvbXByZXNzID09PSBmYWxzZSlcbiAgICAgIGFsZ29yaXRobXMuY29tcHJlc3MgPSBbJ25vbmUnXTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2ZnLnVzZXJuYW1lID09PSAnc3RyaW5nJylcbiAgICB0aGlzLmNvbmZpZy51c2VybmFtZSA9IGNmZy51c2VybmFtZTtcbiAgZWxzZSBpZiAodHlwZW9mIGNmZy51c2VyID09PSAnc3RyaW5nJylcbiAgICB0aGlzLmNvbmZpZy51c2VybmFtZSA9IGNmZy51c2VyO1xuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXJuYW1lJyk7XG5cbiAgdGhpcy5jb25maWcucGFzc3dvcmQgPSAodHlwZW9mIGNmZy5wYXNzd29yZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcucGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpO1xuICB0aGlzLmNvbmZpZy5wcml2YXRlS2V5ID0gKHR5cGVvZiBjZmcucHJpdmF0ZUtleSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBCdWZmZXIuaXNCdWZmZXIoY2ZnLnByaXZhdGVLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcucHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgdGhpcy5jb25maWcubG9jYWxIb3N0bmFtZSA9ICh0eXBlb2YgY2ZnLmxvY2FsSG9zdG5hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2ZnLmxvY2FsSG9zdG5hbWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcubG9jYWxIb3N0bmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgdGhpcy5jb25maWcubG9jYWxVc2VybmFtZSA9ICh0eXBlb2YgY2ZnLmxvY2FsVXNlcm5hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2ZnLmxvY2FsVXNlcm5hbWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjZmcubG9jYWxVc2VybmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgdGhpcy5jb25maWcudHJ5S2V5Ym9hcmQgPSAoY2ZnLnRyeUtleWJvYXJkID09PSB0cnVlKTtcbiAgdGhpcy5jb25maWcuYWdlbnQgPSAodHlwZW9mIGNmZy5hZ2VudCA9PT0gJ3N0cmluZycgJiYgY2ZnLmFnZW50Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICA/IGNmZy5hZ2VudFxuICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIHRoaXMuY29uZmlnLmFsbG93QWdlbnRGd2QgPSAoY2ZnLmFnZW50Rm9yd2FyZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuY29uZmlnLmFnZW50ICE9PSB1bmRlZmluZWQpO1xuICB2YXIgYXV0aEhhbmRsZXIgPSB0aGlzLmNvbmZpZy5hdXRoSGFuZGxlciA9IChcbiAgICB0eXBlb2YgY2ZnLmF1dGhIYW5kbGVyID09PSAnZnVuY3Rpb24nID8gY2ZnLmF1dGhIYW5kbGVyIDogdW5kZWZpbmVkXG4gICk7XG5cbiAgdGhpcy5jb25maWcuc3RyaWN0VmVuZG9yID0gKHR5cGVvZiBjZmcuc3RyaWN0VmVuZG9yID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2ZnLnN0cmljdFZlbmRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlKTtcblxuICB2YXIgZGVidWcgPSB0aGlzLmNvbmZpZy5kZWJ1ZyA9ICh0eXBlb2YgY2ZnLmRlYnVnID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2ZnLmRlYnVnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogREVCVUdfTk9PUCk7XG5cbiAgaWYgKGNmZy5hZ2VudEZvcndhcmQgPT09IHRydWUgJiYgIXRoaXMuY29uZmlnLmFsbG93QWdlbnRGd2QpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzZXQgYSB2YWxpZCBhZ2VudCBwYXRoIHRvIGFsbG93IGFnZW50IGZvcndhcmRpbmcnKTtcblxuICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzID0gW107XG4gIHRoaXMuX2NoYW5uZWxzID0ge307XG4gIHRoaXMuX2ZvcndhcmRpbmcgPSB7fTtcbiAgdGhpcy5fZm9yd2FyZGluZ1VuaXggPSB7fTtcbiAgdGhpcy5fYWNjZXB0WDExID0gMDtcbiAgdGhpcy5fYWdlbnRGd2RFbmFibGVkID0gZmFsc2U7XG4gIHRoaXMuX2N1ckNoYW4gPSAtMTtcbiAgdGhpcy5fcmVtb3RlVmVyID0gdW5kZWZpbmVkO1xuICB2YXIgcHJpdmF0ZUtleTtcblxuICBpZiAodGhpcy5jb25maWcucHJpdmF0ZUtleSkge1xuICAgIHByaXZhdGVLZXkgPSBwYXJzZUtleSh0aGlzLmNvbmZpZy5wcml2YXRlS2V5LCBjZmcucGFzc3BocmFzZSk7XG4gICAgaWYgKHByaXZhdGVLZXkgaW5zdGFuY2VvZiBFcnJvcilcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIHByaXZhdGVLZXk6ICcgKyBwcml2YXRlS2V5Lm1lc3NhZ2UpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByaXZhdGVLZXkpKVxuICAgICAgcHJpdmF0ZUtleSA9IHByaXZhdGVLZXlbMF07IC8vIE9wZW5TU0gncyBuZXdlciBmb3JtYXQgb25seSBzdG9yZXMgMSBrZXkgZm9yIG5vd1xuICAgIGlmIChwcml2YXRlS2V5LmdldFByaXZhdGVQRU0oKSA9PT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJpdmF0ZUtleSB2YWx1ZSBkb2VzIG5vdCBjb250YWluIGEgKHZhbGlkKSBwcml2YXRlIGtleScpO1xuICB9XG5cbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3NzaHN0cmVhbSA9IG5ldyBTU0gyU3RyZWFtKHtcbiAgICBhbGdvcml0aG1zOiBhbGdvcml0aG1zLFxuICAgIGRlYnVnOiAoZGVidWcgPT09IERFQlVHX05PT1AgPyB1bmRlZmluZWQgOiBkZWJ1ZylcbiAgfSk7XG4gIHZhciBzb2NrID0gdGhpcy5fc29jayA9IChjZmcuc29jayB8fCBuZXcgU29ja2V0KCkpO1xuXG4gIC8vIGRyYWluIHN0ZGVyciBpZiB3ZSBhcmUgY29ubmVjdGlvbiBob3BwaW5nIHVzaW5nIGFuIGV4ZWMgc3RyZWFtXG4gIGlmICh0aGlzLl9zb2NrLnN0ZGVyciAmJiB0eXBlb2YgdGhpcy5fc29jay5zdGRlcnIucmVzdW1lID09PSAnZnVuY3Rpb24nKVxuICAgIHRoaXMuX3NvY2suc3RkZXJyLnJlc3VtZSgpO1xuXG4gIC8vIGtlZXBhbGl2ZS1yZWxhdGVkXG4gIHZhciBrYWludGVydmFsID0gdGhpcy5jb25maWcua2VlcGFsaXZlSW50ZXJ2YWw7XG4gIHZhciBrYWNvdW50bWF4ID0gdGhpcy5jb25maWcua2VlcGFsaXZlQ291bnRNYXg7XG4gIHZhciBrYWNvdW50ID0gMDtcbiAgdmFyIGthdGltZXI7XG4gIGZ1bmN0aW9uIHNlbmRLQSgpIHtcbiAgICBpZiAoKytrYWNvdW50ID4ga2Fjb3VudG1heCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChrYXRpbWVyKTtcbiAgICAgIGlmIChzb2NrLnJlYWRhYmxlKSB7XG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0tlZXBhbGl2ZSB0aW1lb3V0Jyk7XG4gICAgICAgIGVyci5sZXZlbCA9ICdjbGllbnQtdGltZW91dCc7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzb2NrLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNvY2sud3JpdGFibGUpIHtcbiAgICAgIC8vIGFwcGVuZCBkdW1teSBjYWxsYmFjayB0byBrZWVwIGNvcnJlY3QgY2FsbGJhY2sgb3JkZXJcbiAgICAgIGNhbGxiYWNrcy5wdXNoKHJlc2V0S0EpO1xuICAgICAgc3RyZWFtLnBpbmcoKTtcbiAgICB9IGVsc2VcbiAgICAgIGNsZWFySW50ZXJ2YWwoa2F0aW1lcik7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRLQSgpIHtcbiAgICBpZiAoa2FpbnRlcnZhbCA+IDApIHtcbiAgICAgIGthY291bnQgPSAwO1xuICAgICAgY2xlYXJJbnRlcnZhbChrYXRpbWVyKTtcbiAgICAgIGlmIChzb2NrLndyaXRhYmxlKVxuICAgICAgICBrYXRpbWVyID0gc2V0SW50ZXJ2YWwoc2VuZEtBLCBrYWludGVydmFsKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5fcmVzZXRLQSA9IHJlc2V0S0E7XG5cbiAgc3RyZWFtLm9uKCdVU0VSQVVUSF9CQU5ORVInLCBmdW5jdGlvbihtc2cpIHtcbiAgICBzZWxmLmVtaXQoJ2Jhbm5lcicsIG1zZyk7XG4gIH0pO1xuXG4gIHNvY2sub24oJ2Nvbm5lY3QnLCBmdW5jdGlvbigpIHtcbiAgICBkZWJ1ZygnREVCVUc6IENsaWVudDogQ29ubmVjdGVkJyk7XG4gICAgc2VsZi5lbWl0KCdjb25uZWN0Jyk7XG4gICAgaWYgKCFjZmcuc29jaylcbiAgICAgIHN0cmVhbS5waXBlKHNvY2spLnBpcGUoc3RyZWFtKTtcbiAgfSkub24oJ3RpbWVvdXQnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLmVtaXQoJ3RpbWVvdXQnKTtcbiAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgY2xlYXJUaW1lb3V0KHNlbGYuX3JlYWR5VGltZW91dCk7XG4gICAgZXJyLmxldmVsID0gJ2NsaWVudC1zb2NrZXQnO1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9KS5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgc3RyZWFtLnVucGlwZShzb2NrKTtcbiAgICBjbGVhclRpbWVvdXQoc2VsZi5fcmVhZHlUaW1lb3V0KTtcbiAgICBjbGVhckludGVydmFsKGthdGltZXIpO1xuICAgIHNlbGYuZW1pdCgnZW5kJyk7XG4gIH0pLm9uKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgIHN0cmVhbS51bnBpcGUoc29jayk7XG4gICAgY2xlYXJUaW1lb3V0KHNlbGYuX3JlYWR5VGltZW91dCk7XG4gICAgY2xlYXJJbnRlcnZhbChrYXRpbWVyKTtcbiAgICBzZWxmLmVtaXQoJ2Nsb3NlJyk7XG5cbiAgICAvLyBub3RpZnkgb3V0c3RhbmRpbmcgY2hhbm5lbCByZXF1ZXN0cyBvZiBkaXNjb25uZWN0aW9uIC4uLlxuICAgIHZhciBjYWxsYmFja3NfID0gY2FsbGJhY2tzO1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ05vIHJlc3BvbnNlIGZyb20gc2VydmVyJyk7XG4gICAgY2FsbGJhY2tzID0gc2VsZi5fY2FsbGJhY2tzID0gW107XG4gICAgZm9yIChpID0gMDsgaSA8IGNhbGxiYWNrc18ubGVuZ3RoOyArK2kpXG4gICAgICBjYWxsYmFja3NfW2ldKGVycik7XG5cbiAgICAvLyBzaW11bGF0ZSBlcnJvciBmb3IgYW55IGNoYW5uZWxzIHdhaXRpbmcgdG8gYmUgb3BlbmVkLiB0aGlzIGlzIHNhZmVcbiAgICAvLyBhZ2FpbnN0IHN1Y2Nlc3NmdWxseSBvcGVuZWQgY2hhbm5lbHMgYmVjYXVzZSB0aGUgc3VjY2VzcyBhbmQgZmFpbHVyZVxuICAgIC8vIGV2ZW50IGhhbmRsZXJzIGFyZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgd2hlbiBhIHN1Y2Nlc3MvZmFpbHVyZSByZXNwb25zZVxuICAgIC8vIGlzIHJlY2VpdmVkXG4gICAgdmFyIGNoYW5uZWxzID0gc2VsZi5fY2hhbm5lbHM7XG4gICAgdmFyIGNoYW5Ob3MgPSBPYmplY3Qua2V5cyhjaGFubmVscyk7XG4gICAgc2VsZi5fY2hhbm5lbHMgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgY2hhbk5vcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGV2MSA9IHN0cmVhbS5lbWl0KCdDSEFOTkVMX09QRU5fRkFJTFVSRTonICsgY2hhbk5vc1tpXSwgZXJyKTtcbiAgICAgIC8vIGVtaXR0aW5nIENIQU5ORUxfQ0xPU0Ugc2hvdWxkIGJlIHNhZmUgdG9vIGFuZCBzaG91bGQgaGVscCBmb3IgYW55XG4gICAgICAvLyBzcGVjaWFsIGNoYW5uZWxzIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBrZWVwIHRoZSBwcm9jZXNzIGFsaXZlLCBzdWNoXG4gICAgICAvLyBhcyBhZ2VudCBmb3J3YXJkaW5nIGNoYW5uZWxzIHdoaWNoIGhhdmUgb3BlbiB1bml4IHNvY2tldHMgLi4uXG4gICAgICB2YXIgZXYyID0gc3RyZWFtLmVtaXQoJ0NIQU5ORUxfQ0xPU0U6JyArIGNoYW5Ob3NbaV0pO1xuICAgICAgdmFyIGVhcmx5Q2I7XG4gICAgICBpZiAoIWV2MSAmJiAhZXYyICYmIChlYXJseUNiID0gY2hhbm5lbHNbY2hhbk5vc1tpXV0pXG4gICAgICAgICAgJiYgdHlwZW9mIGVhcmx5Q2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZWFybHlDYihlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHN0cmVhbS5vbignZHJhaW4nLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLmVtaXQoJ2RyYWluJyk7XG4gIH0pLm9uY2UoJ2hlYWRlcicsIGZ1bmN0aW9uKGhlYWRlcikge1xuICAgIHNlbGYuX3JlbW90ZVZlciA9IGhlYWRlci52ZXJzaW9ucy5zb2Z0d2FyZTtcbiAgICBpZiAoaGVhZGVyLmdyZWV0aW5nKVxuICAgICAgc2VsZi5lbWl0KCdncmVldGluZycsIGhlYWRlci5ncmVldGluZyk7XG4gIH0pLm9uKCdjb250aW51ZScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnY29udGludWUnKTtcbiAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgaWYgKGVyci5sZXZlbCA9PT0gdW5kZWZpbmVkKVxuICAgICAgZXJyLmxldmVsID0gJ3Byb3RvY29sJztcbiAgICBlbHNlIGlmIChlcnIubGV2ZWwgPT09ICdoYW5kc2hha2UnKVxuICAgICAgY2xlYXJUaW1lb3V0KHNlbGYuX3JlYWR5VGltZW91dCk7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gIH0pLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICBzb2NrLnJlc3VtZSgpO1xuICB9KTtcblxuICBpZiAodHlwZW9mIGNmZy5ob3N0VmVyaWZpZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoSEFTSEVTLmluZGV4T2YoY2ZnLmhvc3RIYXNoKSA9PT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaG9zdCBoYXNoIGFsZ29yaXRobTogJyArIGNmZy5ob3N0SGFzaCk7XG4gICAgdmFyIGhhc2hDYiA9IGNmZy5ob3N0VmVyaWZpZXI7XG4gICAgdmFyIGhhc2hlciA9IGNyeXB0by5jcmVhdGVIYXNoKGNmZy5ob3N0SGFzaCk7XG4gICAgc3RyZWFtLm9uY2UoJ2ZpbmdlcnByaW50JywgZnVuY3Rpb24oa2V5LCB2ZXJpZnkpIHtcbiAgICAgIGhhc2hlci51cGRhdGUoa2V5KTtcbiAgICAgIHZhciByZXQgPSBoYXNoQ2IoaGFzaGVyLmRpZ2VzdCgnaGV4JyksIHZlcmlmeSk7XG4gICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHZlcmlmeShyZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gYmVnaW4gYXV0aGVudGljYXRpb24gaGFuZGxpbmcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBjdXJBdXRoO1xuICB2YXIgY3VyUGFydGlhbCA9IG51bGw7XG4gIHZhciBjdXJBdXRoc0xlZnQgPSBudWxsO1xuICB2YXIgYWdlbnRLZXlzO1xuICB2YXIgYWdlbnRLZXlQb3MgPSAwO1xuICB2YXIgYXV0aHNBbGxvd2VkID0gWydub25lJ107XG4gIGlmICh0aGlzLmNvbmZpZy5wYXNzd29yZCAhPT0gdW5kZWZpbmVkKVxuICAgIGF1dGhzQWxsb3dlZC5wdXNoKCdwYXNzd29yZCcpO1xuICBpZiAocHJpdmF0ZUtleSAhPT0gdW5kZWZpbmVkKVxuICAgIGF1dGhzQWxsb3dlZC5wdXNoKCdwdWJsaWNrZXknKTtcbiAgaWYgKHRoaXMuY29uZmlnLmFnZW50ICE9PSB1bmRlZmluZWQpXG4gICAgYXV0aHNBbGxvd2VkLnB1c2goJ2FnZW50Jyk7XG4gIGlmICh0aGlzLmNvbmZpZy50cnlLZXlib2FyZClcbiAgICBhdXRoc0FsbG93ZWQucHVzaCgna2V5Ym9hcmQtaW50ZXJhY3RpdmUnKTtcbiAgaWYgKHByaXZhdGVLZXkgIT09IHVuZGVmaW5lZFxuICAgICAgJiYgdGhpcy5jb25maWcubG9jYWxIb3N0bmFtZSAhPT0gdW5kZWZpbmVkXG4gICAgICAmJiB0aGlzLmNvbmZpZy5sb2NhbFVzZXJuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBhdXRoc0FsbG93ZWQucHVzaCgnaG9zdGJhc2VkJyk7XG4gIH1cblxuICBpZiAoYXV0aEhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBhdXRoUG9zID0gMDtcbiAgICBhdXRoSGFuZGxlciA9IGZ1bmN0aW9uIGF1dGhIYW5kbGVyKGF1dGhzTGVmdCwgcGFydGlhbCwgY2IpIHtcbiAgICAgIGlmIChhdXRoUG9zID09PSBhdXRoc0FsbG93ZWQubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gYXV0aHNBbGxvd2VkW2F1dGhQb3MrK107XG4gICAgfTtcbiAgfVxuXG4gIHZhciBoYXNTZW50QXV0aCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkb05leHRBdXRoKGF1dGhOYW1lKSB7XG4gICAgaGFzU2VudEF1dGggPSB0cnVlO1xuICAgIGlmIChhdXRoTmFtZSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignVVNFUkFVVEhfRkFJTFVSRScsIG9uVVNFUkFVVEhfRkFJTFVSRSk7XG4gICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ1VTRVJBVVRIX1BLX09LJywgb25VU0VSQVVUSF9QS19PSyk7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdBbGwgY29uZmlndXJlZCBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGZhaWxlZCcpO1xuICAgICAgZXJyLmxldmVsID0gJ2NsaWVudC1hdXRoZW50aWNhdGlvbic7XG4gICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIGlmIChzdHJlYW0ud3JpdGFibGUpXG4gICAgICAgIHNlbGYuZW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhdXRoc0FsbG93ZWQuaW5kZXhPZihhdXRoTmFtZSkgPT09IC0xKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBtZXRob2Qgbm90IGFsbG93ZWQ6ICcgKyBhdXRoTmFtZSk7XG4gICAgY3VyQXV0aCA9IGF1dGhOYW1lO1xuICAgIHN3aXRjaCAoY3VyQXV0aCkge1xuICAgICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgICBzdHJlYW0uYXV0aFBhc3N3b3JkKHNlbGYuY29uZmlnLnVzZXJuYW1lLCBzZWxmLmNvbmZpZy5wYXNzd29yZCk7XG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3B1YmxpY2tleSc6XG4gICAgICAgIHN0cmVhbS5hdXRoUEsoc2VsZi5jb25maWcudXNlcm5hbWUsIHByaXZhdGVLZXkpO1xuICAgICAgICBzdHJlYW0ub25jZSgnVVNFUkFVVEhfUEtfT0snLCBvblVTRVJBVVRIX1BLX09LKTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaG9zdGJhc2VkJzpcbiAgICAgICAgZnVuY3Rpb24gaG9zdGJhc2VkQ2IoYnVmLCBjYikge1xuICAgICAgICAgIHZhciBzaWduYXR1cmUgPSBwcml2YXRlS2V5LnNpZ24oYnVmKTtcbiAgICAgICAgICBpZiAoc2lnbmF0dXJlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHNpZ25hdHVyZS5tZXNzYWdlID0gJ0Vycm9yIHdoaWxlIHNpZ25pbmcgZGF0YSB3aXRoIHByaXZhdGVLZXk6ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzaWduYXR1cmUubWVzc2FnZTtcbiAgICAgICAgICAgIHNpZ25hdHVyZS5sZXZlbCA9ICdjbGllbnQtYXV0aGVudGljYXRpb24nO1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIHNpZ25hdHVyZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ5TmV4dEF1dGgoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYihzaWduYXR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbS5hdXRoSG9zdGJhc2VkKHNlbGYuY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5sb2NhbEhvc3RuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5sb2NhbFVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0YmFzZWRDYik7XG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FnZW50JzpcbiAgICAgICAgYWdlbnRRdWVyeShzZWxmLmNvbmZpZy5hZ2VudCwgZnVuY3Rpb24oZXJyLCBrZXlzKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgZXJyLmxldmVsID0gJ2FnZW50JztcbiAgICAgICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgICAgYWdlbnRLZXlzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHRyeU5leHRBdXRoKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVidWcoJ0RFQlVHOiBBZ2VudDogTm8ga2V5cyBzdG9yZWQgaW4gYWdlbnQnKTtcbiAgICAgICAgICAgIGFnZW50S2V5cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiB0cnlOZXh0QXV0aCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFnZW50S2V5cyA9IGtleXM7XG4gICAgICAgICAgYWdlbnRLZXlQb3MgPSAwO1xuXG4gICAgICAgICAgc3RyZWFtLmF1dGhQSyhzZWxmLmNvbmZpZy51c2VybmFtZSwga2V5c1swXSk7XG4gICAgICAgICAgc3RyZWFtLm9uY2UoJ1VTRVJBVVRIX1BLX09LJywgb25VU0VSQVVUSF9QS19PSyk7XG4gICAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdrZXlib2FyZC1pbnRlcmFjdGl2ZSc6XG4gICAgICAgIHN0cmVhbS5hdXRoS2V5Ym9hcmQoc2VsZi5jb25maWcudXNlcm5hbWUpO1xuICAgICAgICBzdHJlYW0ub24oJ1VTRVJBVVRIX0lORk9fUkVRVUVTVCcsIG9uVVNFUkFVVEhfSU5GT19SRVFVRVNUKTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHN0cmVhbS5hdXRoTm9uZShzZWxmLmNvbmZpZy51c2VybmFtZSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdHJ5TmV4dEF1dGgoKSB7XG4gICAgaGFzU2VudEF1dGggPSBmYWxzZTtcbiAgICB2YXIgYXV0aCA9IGF1dGhIYW5kbGVyKGN1ckF1dGhzTGVmdCwgY3VyUGFydGlhbCwgZG9OZXh0QXV0aCk7XG4gICAgaWYgKGhhc1NlbnRBdXRoIHx8IGF1dGggPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybjtcbiAgICBkb05leHRBdXRoKGF1dGgpO1xuICB9XG4gIGZ1bmN0aW9uIHRyeU5leHRBZ2VudEtleSgpIHtcbiAgICBpZiAoY3VyQXV0aCA9PT0gJ2FnZW50Jykge1xuICAgICAgaWYgKGFnZW50S2V5UG9zID49IGFnZW50S2V5cy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICgrK2FnZW50S2V5UG9zID49IGFnZW50S2V5cy5sZW5ndGgpIHtcbiAgICAgICAgZGVidWcoJ0RFQlVHOiBBZ2VudDogTm8gbW9yZSBrZXlzIGxlZnQgdG8gdHJ5Jyk7XG4gICAgICAgIGRlYnVnKCdERUJVRzogQ2xpZW50OiBhZ2VudCBhdXRoIGZhaWxlZCcpO1xuICAgICAgICBhZ2VudEtleXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeU5leHRBdXRoKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnREVCVUc6IEFnZW50OiBUcnlpbmcga2V5ICMnICsgKGFnZW50S2V5UG9zICsgMSkpO1xuICAgICAgICBzdHJlYW0uYXV0aFBLKHNlbGYuY29uZmlnLnVzZXJuYW1lLCBhZ2VudEtleXNbYWdlbnRLZXlQb3NdKTtcbiAgICAgICAgc3RyZWFtLm9uY2UoJ1VTRVJBVVRIX1BLX09LJywgb25VU0VSQVVUSF9QS19PSyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIG9uVVNFUkFVVEhfSU5GT19SRVFVRVNUKG5hbWUsIGluc3RydWN0aW9ucywgbGFuZywgcHJvbXB0cykge1xuICAgIHZhciBucHJvbXB0cyA9IChBcnJheS5pc0FycmF5KHByb21wdHMpID8gcHJvbXB0cy5sZW5ndGggOiAwKTtcbiAgICBpZiAobnByb21wdHMgPT09IDApIHtcbiAgICAgIGRlYnVnKCdERUJVRzogQ2xpZW50OiBTZW5kaW5nIGF1dG9tYXRpYyBVU0VSQVVUSF9JTkZPX1JFU1BPTlNFJyk7XG4gICAgICByZXR1cm4gc3RyZWFtLmF1dGhJbmZvUmVzKCk7XG4gICAgfVxuICAgIC8vIHdlIHNlbnQgYSBrZXlib2FyZC1pbnRlcmFjdGl2ZSB1c2VyIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgYW5kIG5vdyB0aGVcbiAgICAvLyBzZXJ2ZXIgaXMgc2VuZGluZyB1cyB0aGUgcHJvbXB0cyB3ZSBuZWVkIHRvIHByZXNlbnQgdG8gdGhlIHVzZXJcbiAgICBzZWxmLmVtaXQoJ2tleWJvYXJkLWludGVyYWN0aXZlJyxcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgICBwcm9tcHRzLFxuICAgICAgICAgICAgICBmdW5jdGlvbihhbnN3ZXJzKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLmF1dGhJbmZvUmVzKGFuc3dlcnMpO1xuICAgICAgICAgICAgICB9XG4gICAgKTtcbiAgfVxuICBmdW5jdGlvbiBvblVTRVJBVVRIX1BLX09LKCkge1xuICAgIGlmIChjdXJBdXRoID09PSAnYWdlbnQnKSB7XG4gICAgICB2YXIgYWdlbnRLZXkgPSBhZ2VudEtleXNbYWdlbnRLZXlQb3NdO1xuICAgICAgdmFyIGtleUxlbiA9IHJlYWRVSW50MzJCRShhZ2VudEtleSwgMCk7XG4gICAgICB2YXIgcHViS2V5RnVsbFR5cGUgPSBhZ2VudEtleS50b1N0cmluZygnYXNjaWknLCA0LCA0ICsga2V5TGVuKTtcbiAgICAgIHZhciBwdWJLZXlUeXBlID0gcHViS2V5RnVsbFR5cGUuc2xpY2UoNCk7XG4gICAgICAvLyBDaGVjayB0aGF0IHdlIHN1cHBvcnQgdGhlIGtleSB0eXBlIGZpcnN0XG4gICAgICAvLyBUT0RPOiBtb3ZlIGtleSB0eXBlIGNoZWNraW5nIGxvZ2ljIHRvIHNzaDItc3RyZWFtc1xuICAgICAgc3dpdGNoIChwdWJLZXlGdWxsVHlwZSkge1xuICAgICAgICBjYXNlICdzc2gtcnNhJzpcbiAgICAgICAgY2FzZSAnc3NoLWRzcyc6XG4gICAgICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHAyNTYnOlxuICAgICAgICBjYXNlICdlY2RzYS1zaGEyLW5pc3RwMzg0JzpcbiAgICAgICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDUyMSc6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKEVERFNBX1NVUFBPUlRFRCAmJiBwdWJLZXlGdWxsVHlwZSA9PT0gJ3NzaC1lZDI1NTE5JylcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlYnVnKCdERUJVRzogQWdlbnQ6IFNraXBwaW5nIHVuc3VwcG9ydGVkIGtleSB0eXBlOiAnXG4gICAgICAgICAgICAgICAgKyBwdWJLZXlGdWxsVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIHRyeU5leHRBZ2VudEtleSgpO1xuICAgICAgfVxuICAgICAgc3RyZWFtLmF1dGhQSyhzZWxmLmNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRLZXksXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGJ1ZiwgY2IpIHtcbiAgICAgICAgYWdlbnRRdWVyeShzZWxmLmNvbmZpZy5hZ2VudCxcbiAgICAgICAgICAgICAgICAgICBhZ2VudEtleSxcbiAgICAgICAgICAgICAgICAgICBwdWJLZXlUeXBlLFxuICAgICAgICAgICAgICAgICAgIGJ1ZixcbiAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnIsIHNpZ25lZCkge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGVyci5sZXZlbCA9ICdhZ2VudCc7XG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHNpZ0Z1bGxUeXBlTGVuID0gcmVhZFVJbnQzMkJFKHNpZ25lZCwgMCk7XG4gICAgICAgICAgICBpZiAoNCArIHNpZ0Z1bGxUeXBlTGVuICsgNCA8IHNpZ25lZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdmFyIHNpZ0Z1bGxUeXBlID0gc2lnbmVkLnRvU3RyaW5nKCdhc2NpaScsIDQsIDQgKyBzaWdGdWxsVHlwZUxlbik7XG4gICAgICAgICAgICAgIGlmIChzaWdGdWxsVHlwZSAhPT0gcHViS2V5RnVsbFR5cGUpIHtcbiAgICAgICAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IoJ0FnZW50IGtleS9zaWduYXR1cmUgdHlwZSBtaXNtYXRjaCcpO1xuICAgICAgICAgICAgICAgIGVyci5sZXZlbCA9ICdhZ2VudCc7XG4gICAgICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc2tpcCBhbGdvTGVuICsgYWxnbyArIHNpZ0xlblxuICAgICAgICAgICAgICAgIHJldHVybiBjYihzaWduZWQuc2xpY2UoNCArIHNpZ0Z1bGxUeXBlTGVuICsgNCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5TmV4dEFnZW50S2V5KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjdXJBdXRoID09PSAncHVibGlja2V5Jykge1xuICAgICAgc3RyZWFtLmF1dGhQSyhzZWxmLmNvbmZpZy51c2VybmFtZSwgcHJpdmF0ZUtleSwgZnVuY3Rpb24oYnVmLCBjYikge1xuICAgICAgICB2YXIgc2lnbmF0dXJlID0gcHJpdmF0ZUtleS5zaWduKGJ1Zik7XG4gICAgICAgIGlmIChzaWduYXR1cmUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHNpZ25hdHVyZS5tZXNzYWdlID0gJ0Vycm9yIHdoaWxlIHNpZ25pbmcgZGF0YSB3aXRoIHByaXZhdGVLZXk6ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc2lnbmF0dXJlLm1lc3NhZ2U7XG4gICAgICAgICAgc2lnbmF0dXJlLmxldmVsID0gJ2NsaWVudC1hdXRoZW50aWNhdGlvbic7XG4gICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIHNpZ25hdHVyZSk7XG4gICAgICAgICAgcmV0dXJuIHRyeU5leHRBdXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2Ioc2lnbmF0dXJlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvblVTRVJBVVRIX0ZBSUxVUkUoYXV0aHNMZWZ0LCBwYXJ0aWFsKSB7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdVU0VSQVVUSF9QS19PSycsIG9uVVNFUkFVVEhfUEtfT0spO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignVVNFUkFVVEhfSU5GT19SRVFVRVNUJywgb25VU0VSQVVUSF9JTkZPX1JFUVVFU1QpO1xuICAgIGlmIChjdXJBdXRoID09PSAnYWdlbnQnKSB7XG4gICAgICBkZWJ1ZygnREVCVUc6IENsaWVudDogQWdlbnQga2V5ICMnICsgKGFnZW50S2V5UG9zICsgMSkgKyAnIGZhaWxlZCcpO1xuICAgICAgcmV0dXJuIHRyeU5leHRBZ2VudEtleSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZygnREVCVUc6IENsaWVudDogJyArIGN1ckF1dGggKyAnIGF1dGggZmFpbGVkJyk7XG4gICAgfVxuXG4gICAgY3VyUGFydGlhbCA9IHBhcnRpYWw7XG4gICAgY3VyQXV0aHNMZWZ0ID0gYXV0aHNMZWZ0O1xuICAgIHRyeU5leHRBdXRoKCk7XG4gIH1cbiAgc3RyZWFtLm9uY2UoJ1VTRVJBVVRIX1NVQ0NFU1MnLCBmdW5jdGlvbigpIHtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ1VTRVJBVVRIX0ZBSUxVUkUnLCBvblVTRVJBVVRIX0ZBSUxVUkUpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignVVNFUkFVVEhfSU5GT19SRVFVRVNUJywgb25VU0VSQVVUSF9JTkZPX1JFUVVFU1QpO1xuXG4gICAgLy8gc3RhcnQga2VlcGFsaXZlIG1lY2hhbmlzbVxuICAgIHJlc2V0S0EoKTtcblxuICAgIGNsZWFyVGltZW91dChzZWxmLl9yZWFkeVRpbWVvdXQpO1xuXG4gICAgc2VsZi5lbWl0KCdyZWFkeScpO1xuICB9KS5vbignVVNFUkFVVEhfRkFJTFVSRScsIG9uVVNFUkFVVEhfRkFJTFVSRSk7XG4gIC8vIGVuZCBhdXRoZW50aWNhdGlvbiBoYW5kbGluZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIGhhbmRsZSBpbml0aWFsIGhhbmRzaGFrZSBjb21wbGV0aW9uXG4gIHN0cmVhbS5vbmNlKCdyZWFkeScsIGZ1bmN0aW9uKCkge1xuICAgIHN0cmVhbS5zZXJ2aWNlKCdzc2gtdXNlcmF1dGgnKTtcbiAgICBzdHJlYW0ub25jZSgnU0VSVklDRV9BQ0NFUFQnLCBmdW5jdGlvbihzdmNOYW1lKSB7XG4gICAgICBpZiAoc3ZjTmFtZSA9PT0gJ3NzaC11c2VyYXV0aCcpXG4gICAgICAgIHRyeU5leHRBdXRoKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGhhbmRsZSBpbmNvbWluZyByZXF1ZXN0cyBmcm9tIHNlcnZlciwgdHlwaWNhbGx5IGEgZm9yd2FyZGVkIFRDUCBvciBYMTFcbiAgLy8gY29ubmVjdGlvblxuICBzdHJlYW0ub24oJ0NIQU5ORUxfT1BFTicsIGZ1bmN0aW9uKGluZm8pIHtcbiAgICBvbkNIQU5ORUxfT1BFTihzZWxmLCBpbmZvKTtcbiAgfSk7XG5cbiAgLy8gaGFuZGxlIHJlc3BvbnNlcyBmb3IgdGNwaXAtZm9yd2FyZCBhbmQgb3RoZXIgZ2xvYmFsIHJlcXVlc3RzXG4gIHN0cmVhbS5vbignUkVRVUVTVF9TVUNDRVNTJywgZnVuY3Rpb24oZGF0YSkge1xuICAgIGlmIChjYWxsYmFja3MubGVuZ3RoKVxuICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkoZmFsc2UsIGRhdGEpO1xuICB9KS5vbignUkVRVUVTVF9GQUlMVVJFJywgZnVuY3Rpb24oKSB7XG4gICAgaWYgKGNhbGxiYWNrcy5sZW5ndGgpXG4gICAgICBjYWxsYmFja3Muc2hpZnQoKSh0cnVlKTtcbiAgfSk7XG5cbiAgc3RyZWFtLm9uKCdHTE9CQUxfUkVRVUVTVCcsIGZ1bmN0aW9uKG5hbWUsIHdhbnRSZXBseSwgZGF0YSkge1xuICAgIC8vIGF1dG8tcmVqZWN0IGFsbCBnbG9iYWwgcmVxdWVzdHMsIHRoaXMgY2FuIGJlIGVzcGVjaWFsbHkgdXNlZnVsIGlmIHRoZVxuICAgIC8vIHNlcnZlciBpcyBzZW5kaW5nIHVzIGR1bW15IGtlZXBhbGl2ZSBnbG9iYWwgcmVxdWVzdHNcbiAgICBpZiAod2FudFJlcGx5KVxuICAgICAgc3RyZWFtLnJlcXVlc3RGYWlsdXJlKCk7XG4gIH0pO1xuXG4gIGlmICghY2ZnLnNvY2spIHtcbiAgICB2YXIgaG9zdCA9IHRoaXMuY29uZmlnLmhvc3Q7XG4gICAgdmFyIGZvcmNlSVB2NCA9IHRoaXMuY29uZmlnLmZvcmNlSVB2NDtcbiAgICB2YXIgZm9yY2VJUHY2ID0gdGhpcy5jb25maWcuZm9yY2VJUHY2O1xuXG4gICAgZGVidWcoJ0RFQlVHOiBDbGllbnQ6IFRyeWluZyAnXG4gICAgICAgICAgKyBob3N0XG4gICAgICAgICAgKyAnIG9uIHBvcnQgJ1xuICAgICAgICAgICsgdGhpcy5jb25maWcucG9ydFxuICAgICAgICAgICsgJyAuLi4nKTtcblxuICAgIGZ1bmN0aW9uIGRvQ29ubmVjdCgpIHtcbiAgICAgIHN0YXJ0VGltZW91dCgpO1xuICAgICAgc2VsZi5fc29jay5jb25uZWN0KHtcbiAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgcG9ydDogc2VsZi5jb25maWcucG9ydCxcbiAgICAgICAgbG9jYWxBZGRyZXNzOiBzZWxmLmNvbmZpZy5sb2NhbEFkZHJlc3MsXG4gICAgICAgIGxvY2FsUG9ydDogc2VsZi5jb25maWcubG9jYWxQb3J0XG4gICAgICB9KTtcbiAgICAgIHNlbGYuX3NvY2suc2V0Tm9EZWxheSh0cnVlKTtcbiAgICAgIHNlbGYuX3NvY2suc2V0TWF4TGlzdGVuZXJzKDApO1xuICAgICAgc2VsZi5fc29jay5zZXRUaW1lb3V0KHR5cGVvZiBjZmcudGltZW91dCA9PT0gJ251bWJlcicgPyBjZmcudGltZW91dCA6IDApO1xuICAgIH1cblxuICAgIGlmICgoIWZvcmNlSVB2NCAmJiAhZm9yY2VJUHY2KSB8fCAoZm9yY2VJUHY0ICYmIGZvcmNlSVB2NikpXG4gICAgICBkb0Nvbm5lY3QoKTtcbiAgICBlbHNlIHtcbiAgICAgIGRuc0xvb2t1cChob3N0LCAoZm9yY2VJUHY0ID8gNCA6IDYpLCBmdW5jdGlvbihlcnIsIGFkZHJlc3MsIGZhbWlseSkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdFcnJvciB3aGlsZSBsb29raW5nIHVwICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoZm9yY2VJUHY0ID8gJ0lQdjQnIDogJ0lQdjYnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICcgYWRkcmVzcyBmb3IgaG9zdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaG9zdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICc6ICcgKyBlcnIpO1xuICAgICAgICAgIGNsZWFyVGltZW91dChzZWxmLl9yZWFkeVRpbWVvdXQpO1xuICAgICAgICAgIGVycm9yLmxldmVsID0gJ2NsaWVudC1kbnMnO1xuICAgICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBob3N0ID0gYWRkcmVzcztcbiAgICAgICAgZG9Db25uZWN0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRUaW1lb3V0KCk7XG4gICAgc3RyZWFtLnBpcGUoc29jaykucGlwZShzdHJlYW0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRUaW1lb3V0KCkge1xuICAgIGlmIChzZWxmLmNvbmZpZy5yZWFkeVRpbWVvdXQgPiAwKSB7XG4gICAgICBzZWxmLl9yZWFkeVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgaGFuZHNoYWtlJyk7XG4gICAgICAgIGVyci5sZXZlbCA9ICdjbGllbnQtdGltZW91dCc7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzb2NrLmRlc3Ryb3koKTtcbiAgICAgIH0sIHNlbGYuY29uZmlnLnJlYWR5VGltZW91dCk7XG4gICAgfVxuICB9XG59O1xuXG5DbGllbnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc29ja1xuICAgICAgJiYgdGhpcy5fc29jay53cml0YWJsZVxuICAgICAgJiYgdGhpcy5fc3Noc3RyZWFtXG4gICAgICAmJiB0aGlzLl9zc2hzdHJlYW0ud3JpdGFibGUpXG4gICAgcmV0dXJuIHRoaXMuX3NzaHN0cmVhbS5kaXNjb25uZWN0KCk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9zb2NrICYmIHRoaXMuX3NvY2suZGVzdHJveSgpO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24oY21kLCBvcHRzLCBjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBleHRyYU9wdHMgPSB7IGFsbG93SGFsZk9wZW46IChvcHRzLmFsbG93SGFsZk9wZW4gIT09IGZhbHNlKSB9O1xuXG4gIHJldHVybiBvcGVuQ2hhbm5lbCh0aGlzLCAnc2Vzc2lvbicsIGV4dHJhT3B0cywgZnVuY3Rpb24oZXJyLCBjaGFuKSB7XG4gICAgaWYgKGVycilcbiAgICAgIHJldHVybiBjYihlcnIpO1xuXG4gICAgdmFyIHRvZG8gPSBbXTtcblxuICAgIGZ1bmN0aW9uIHJlcUNiKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBjaGFuLmNsb3NlKCk7XG4gICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgfVxuICAgICAgaWYgKHRvZG8ubGVuZ3RoKVxuICAgICAgICB0b2RvLnNoaWZ0KCkoKTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dBZ2VudEZ3ZCA9PT0gdHJ1ZVxuICAgICAgICB8fCAob3B0c1xuICAgICAgICAgICAgJiYgb3B0cy5hZ2VudEZvcndhcmQgPT09IHRydWVcbiAgICAgICAgICAgICYmIHNlbGYuY29uZmlnLmFnZW50ICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICB0b2RvLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlcUFnZW50RndkKGNoYW4sIHJlcUNiKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgb3B0cyAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzLmVudiA9PT0gJ29iamVjdCcgJiYgb3B0cy5lbnYgIT09IG51bGwpXG4gICAgICAgIHJlcUVudihjaGFuLCBvcHRzLmVudik7XG4gICAgICBpZiAoKHR5cGVvZiBvcHRzLnB0eSA9PT0gJ29iamVjdCcgJiYgb3B0cy5wdHkgIT09IG51bGwpXG4gICAgICAgICAgfHwgb3B0cy5wdHkgPT09IHRydWUpIHtcbiAgICAgICAgdG9kby5wdXNoKGZ1bmN0aW9uKCkgeyByZXFQdHkoY2hhbiwgb3B0cy5wdHksIHJlcUNiKTsgfSk7XG4gICAgICB9XG4gICAgICBpZiAoKHR5cGVvZiBvcHRzLngxMSA9PT0gJ29iamVjdCcgJiYgb3B0cy54MTEgIT09IG51bGwpXG4gICAgICAgICAgfHwgb3B0cy54MTEgPT09ICdudW1iZXInXG4gICAgICAgICAgfHwgb3B0cy54MTEgPT09IHRydWUpIHtcbiAgICAgICAgdG9kby5wdXNoKGZ1bmN0aW9uKCkgeyByZXFYMTEoY2hhbiwgb3B0cy54MTEsIHJlcUNiKTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdG9kby5wdXNoKGZ1bmN0aW9uKCkgeyByZXFFeGVjKGNoYW4sIGNtZCwgb3B0cywgY2IpOyB9KTtcbiAgICB0b2RvLnNoaWZ0KCkoKTtcbiAgfSk7XG59O1xuXG5DbGllbnQucHJvdG90eXBlLnNoZWxsID0gZnVuY3Rpb24od25kb3B0cywgb3B0cywgY2IpIHtcbiAgaWYgKCF0aGlzLl9zb2NrXG4gICAgICB8fCAhdGhpcy5fc29jay53cml0YWJsZVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbS53cml0YWJsZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBjb25uZWN0ZWQnKTtcblxuICAvLyBzdGFydCBhbiBpbnRlcmFjdGl2ZSB0ZXJtaW5hbC9zaGVsbCBzZXNzaW9uXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAodHlwZW9mIHduZG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IHduZG9wdHM7XG4gICAgd25kb3B0cyA9IG9wdHMgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAod25kb3B0cyAmJiAod25kb3B0cy54MTEgIT09IHVuZGVmaW5lZCB8fCB3bmRvcHRzLmVudiAhPT0gdW5kZWZpbmVkKSkge1xuICAgIG9wdHMgPSB3bmRvcHRzO1xuICAgIHduZG9wdHMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gb3BlbkNoYW5uZWwodGhpcywgJ3Nlc3Npb24nLCBmdW5jdGlvbihlcnIsIGNoYW4pIHtcbiAgICBpZiAoZXJyKVxuICAgICAgcmV0dXJuIGNiKGVycik7XG5cbiAgICB2YXIgdG9kbyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gcmVxQ2IoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNoYW4uY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICB9XG4gICAgICBpZiAodG9kby5sZW5ndGgpXG4gICAgICAgIHRvZG8uc2hpZnQoKSgpO1xuICAgIH1cblxuICAgIGlmIChzZWxmLmNvbmZpZy5hbGxvd0FnZW50RndkID09PSB0cnVlXG4gICAgICAgIHx8IChvcHRzXG4gICAgICAgICAgICAmJiBvcHRzLmFnZW50Rm9yd2FyZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgJiYgc2VsZi5jb25maWcuYWdlbnQgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHRvZG8ucHVzaChmdW5jdGlvbigpIHsgcmVxQWdlbnRGd2QoY2hhbiwgcmVxQ2IpOyB9KTtcbiAgICB9XG5cbiAgICBpZiAod25kb3B0cyAhPT0gZmFsc2UpXG4gICAgICB0b2RvLnB1c2goZnVuY3Rpb24oKSB7IHJlcVB0eShjaGFuLCB3bmRvcHRzLCByZXFDYik7IH0pO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiBvcHRzICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMuZW52ID09PSAnb2JqZWN0JyAmJiBvcHRzLmVudiAhPT0gbnVsbClcbiAgICAgICAgcmVxRW52KGNoYW4sIG9wdHMuZW52KTtcbiAgICAgIGlmICgodHlwZW9mIG9wdHMueDExID09PSAnb2JqZWN0JyAmJiBvcHRzLngxMSAhPT0gbnVsbClcbiAgICAgICAgICB8fCBvcHRzLngxMSA9PT0gJ251bWJlcidcbiAgICAgICAgICB8fCBvcHRzLngxMSA9PT0gdHJ1ZSkge1xuICAgICAgICB0b2RvLnB1c2goZnVuY3Rpb24oKSB7IHJlcVgxMShjaGFuLCBvcHRzLngxMSwgcmVxQ2IpOyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0b2RvLnB1c2goZnVuY3Rpb24oKSB7IHJlcVNoZWxsKGNoYW4sIGNiKTsgfSk7XG4gICAgdG9kby5zaGlmdCgpKCk7XG4gIH0pO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS5zdWJzeXMgPSBmdW5jdGlvbihuYW1lLCBjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG5cdHJldHVybiBvcGVuQ2hhbm5lbCh0aGlzLCAnc2Vzc2lvbicsIGZ1bmN0aW9uKGVyciwgY2hhbikge1xuXHRcdGlmIChlcnIpXG5cdFx0XHRyZXR1cm4gY2IoZXJyKTtcblxuXHRcdHJlcVN1YnN5c3RlbShjaGFuLCBuYW1lLCBmdW5jdGlvbihlcnIsIHN0cmVhbSkge1xuXHRcdFx0aWYgKGVycilcblx0XHRcdFx0cmV0dXJuIGNiKGVycik7XG5cblx0XHRcdGNiKHVuZGVmaW5lZCwgc3RyZWFtKTtcblx0XHR9KTtcblx0fSk7XG59O1xuXG5DbGllbnQucHJvdG90eXBlLnNmdHAgPSBmdW5jdGlvbihjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBzdGFydCBhbiBTRlRQIHNlc3Npb25cbiAgcmV0dXJuIG9wZW5DaGFubmVsKHRoaXMsICdzZXNzaW9uJywgZnVuY3Rpb24oZXJyLCBjaGFuKSB7XG4gICAgaWYgKGVycilcbiAgICAgIHJldHVybiBjYihlcnIpO1xuXG4gICAgcmVxU3Vic3lzdGVtKGNoYW4sICdzZnRwJywgZnVuY3Rpb24oZXJyLCBzdHJlYW0pIHtcbiAgICAgIGlmIChlcnIpXG4gICAgICAgIHJldHVybiBjYihlcnIpO1xuXG4gICAgICB2YXIgc2VydmVySWRlbnRSYXcgPSBzZWxmLl9zc2hzdHJlYW0uX3N0YXRlLmluY29taW5nLmlkZW50UmF3O1xuICAgICAgdmFyIGNmZyA9IHsgZGVidWc6IHNlbGYuY29uZmlnLmRlYnVnIH07XG4gICAgICB2YXIgc2Z0cCA9IG5ldyBTRlRQU3RyZWFtKGNmZywgc2VydmVySWRlbnRSYXcpO1xuXG4gICAgICBmdW5jdGlvbiBvbkVycm9yKGVycikge1xuICAgICAgICBzZnRwLnJlbW92ZUxpc3RlbmVyKCdyZWFkeScsIG9uUmVhZHkpO1xuICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2V4aXQnLCBvbkV4aXQpO1xuICAgICAgICBjYihlcnIpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBvblJlYWR5KCkge1xuICAgICAgICBzZnRwLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2V4aXQnLCBvbkV4aXQpO1xuICAgICAgICBjYih1bmRlZmluZWQsIG5ldyBTRlRQV3JhcHBlcihzZnRwKSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG9uRXhpdChjb2RlLCBzaWduYWwpIHtcbiAgICAgICAgc2Z0cC5yZW1vdmVMaXN0ZW5lcigncmVhZHknLCBvblJlYWR5KTtcbiAgICAgICAgc2Z0cC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgdmFyIG1zZztcbiAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG1zZyA9ICdSZWNlaXZlZCBleGl0IGNvZGUgJ1xuICAgICAgICAgICAgICAgICsgY29kZVxuICAgICAgICAgICAgICAgICsgJyB3aGlsZSBlc3RhYmxpc2hpbmcgU0ZUUCBzZXNzaW9uJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtc2cgPSAnUmVjZWl2ZWQgc2lnbmFsICdcbiAgICAgICAgICAgICAgICArIHNpZ25hbFxuICAgICAgICAgICAgICAgICsgJyB3aGlsZSBlc3RhYmxpc2hpbmcgU0ZUUCBzZXNzaW9uJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIGVyci5jb2RlID0gY29kZTtcbiAgICAgICAgZXJyLnNpZ25hbCA9IHNpZ25hbDtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH1cblxuICAgICAgc2Z0cC5vbmNlKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICAgICAgLm9uY2UoJ3JlYWR5Jywgb25SZWFkeSlcbiAgICAgICAgICAub25jZSgnY2xvc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHN0cmVhbS5lbmQoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgLy8gT3BlblNTSCBzZXJ2ZXIgc2VuZHMgYW4gZXhpdC1zdGF0dXMgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBzcGlubmluZyB1cFxuICAgICAgLy8gYW4gc2Z0cCBzZXJ2ZXIgY2hpbGQgcHJvY2Vzcywgc28gd2UgbGlzdGVuIGZvciB0aGF0IGhlcmUgaW4gb3JkZXIgdG9cbiAgICAgIC8vIHByb3Blcmx5IHJhaXNlIGFuIGVycm9yLlxuICAgICAgc3RyZWFtLm9uY2UoJ2V4aXQnLCBvbkV4aXQpO1xuXG4gICAgICBzZnRwLnBpcGUoc3RyZWFtKS5waXBlKHNmdHApO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUuZm9yd2FyZEluID0gZnVuY3Rpb24oYmluZEFkZHIsIGJpbmRQb3J0LCBjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG4gIC8vIHNlbmQgYSByZXF1ZXN0IGZvciB0aGUgc2VydmVyIHRvIHN0YXJ0IGZvcndhcmRpbmcgVENQIGNvbm5lY3Rpb25zIHRvIHVzXG4gIC8vIG9uIGEgcGFydGljdWxhciBhZGRyZXNzIGFuZCBwb3J0XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgd2FudFJlcGx5ID0gKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyk7XG5cbiAgaWYgKHdhbnRSZXBseSkge1xuICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKGhhZF9lcnIsIGRhdGEpIHtcbiAgICAgIGlmIChoYWRfZXJyKSB7XG4gICAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICA/IGhhZF9lcnJcbiAgICAgICAgICAgICAgICAgIDogbmV3IEVycm9yKCdVbmFibGUgdG8gYmluZCB0byAnICsgYmluZEFkZHIgKyAnOicgKyBiaW5kUG9ydCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVhbFBvcnQgPSBiaW5kUG9ydDtcbiAgICAgIGlmIChiaW5kUG9ydCA9PT0gMCAmJiBkYXRhICYmIGRhdGEubGVuZ3RoID49IDQpIHtcbiAgICAgICAgcmVhbFBvcnQgPSByZWFkVUludDMyQkUoZGF0YSwgMCk7XG4gICAgICAgIGlmICghKHNlbGYuX3NzaHN0cmVhbS5yZW1vdGVCdWdzICYgQlVHUy5EWU5fUlBPUlRfQlVHKSlcbiAgICAgICAgICBiaW5kUG9ydCA9IHJlYWxQb3J0O1xuICAgICAgfVxuXG4gICAgICBzZWxmLl9mb3J3YXJkaW5nW2JpbmRBZGRyICsgJzonICsgYmluZFBvcnRdID0gcmVhbFBvcnQ7XG5cbiAgICAgIGNiKHVuZGVmaW5lZCwgcmVhbFBvcnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX3NzaHN0cmVhbS50Y3BpcEZvcndhcmQoYmluZEFkZHIsIGJpbmRQb3J0LCB3YW50UmVwbHkpO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS51bmZvcndhcmRJbiA9IGZ1bmN0aW9uKGJpbmRBZGRyLCBiaW5kUG9ydCwgY2IpIHtcbiAgaWYgKCF0aGlzLl9zb2NrXG4gICAgICB8fCAhdGhpcy5fc29jay53cml0YWJsZVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbS53cml0YWJsZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBjb25uZWN0ZWQnKTtcblxuICAvLyBzZW5kIGEgcmVxdWVzdCB0byBzdG9wIGZvcndhcmRpbmcgdXMgbmV3IGNvbm5lY3Rpb25zIGZvciBhIHBhcnRpY3VsYXJcbiAgLy8gYWRkcmVzcyBhbmQgcG9ydFxuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHdhbnRSZXBseSA9ICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpO1xuXG4gIGlmICh3YW50UmVwbHkpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MucHVzaChmdW5jdGlvbihoYWRfZXJyKSB7XG4gICAgICBpZiAoaGFkX2Vycikge1xuICAgICAgICByZXR1cm4gY2IoaGFkX2VyciAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgPyBoYWRfZXJyXG4gICAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcignVW5hYmxlIHRvIHVuYmluZCBmcm9tICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYmluZEFkZHIgKyAnOicgKyBiaW5kUG9ydCkpO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgc2VsZi5fZm9yd2FyZGluZ1tiaW5kQWRkciArICc6JyArIGJpbmRQb3J0XTtcblxuICAgICAgY2IoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9zc2hzdHJlYW0uY2FuY2VsVGNwaXBGb3J3YXJkKGJpbmRBZGRyLCBiaW5kUG9ydCwgd2FudFJlcGx5KTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUuZm9yd2FyZE91dCA9IGZ1bmN0aW9uKHNyY0lQLCBzcmNQb3J0LCBkc3RJUCwgZHN0UG9ydCwgY2IpIHtcbiAgaWYgKCF0aGlzLl9zb2NrXG4gICAgICB8fCAhdGhpcy5fc29jay53cml0YWJsZVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbS53cml0YWJsZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBjb25uZWN0ZWQnKTtcblxuICAvLyBzZW5kIGEgcmVxdWVzdCB0byBmb3J3YXJkIGEgVENQIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlclxuXG4gIHZhciBjZmcgPSB7XG4gICAgc3JjSVA6IHNyY0lQLFxuICAgIHNyY1BvcnQ6IHNyY1BvcnQsXG4gICAgZHN0SVA6IGRzdElQLFxuICAgIGRzdFBvcnQ6IGRzdFBvcnRcbiAgfTtcblxuICByZXR1cm4gb3BlbkNoYW5uZWwodGhpcywgJ2RpcmVjdC10Y3BpcCcsIGNmZywgY2IpO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS5vcGVuc3NoX25vTW9yZVNlc3Npb25zID0gZnVuY3Rpb24oY2IpIHtcbiAgaWYgKCF0aGlzLl9zb2NrXG4gICAgICB8fCAhdGhpcy5fc29jay53cml0YWJsZVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbVxuICAgICAgfHwgIXRoaXMuX3NzaHN0cmVhbS53cml0YWJsZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBjb25uZWN0ZWQnKTtcblxuICB2YXIgd2FudFJlcGx5ID0gKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLmNvbmZpZy5zdHJpY3RWZW5kb3JcbiAgICAgIHx8ICh0aGlzLmNvbmZpZy5zdHJpY3RWZW5kb3IgJiYgUkVfT1BFTlNTSC50ZXN0KHRoaXMuX3JlbW90ZVZlcikpKSB7XG4gICAgaWYgKHdhbnRSZXBseSkge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oaGFkX2Vycikge1xuICAgICAgICBpZiAoaGFkX2Vycikge1xuICAgICAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgID8gaGFkX2VyclxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcignVW5hYmxlIHRvIGRpc2FibGUgZnV0dXJlIHNlc3Npb25zJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2IoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zc2hzdHJlYW0ub3BlbnNzaF9ub01vcmVTZXNzaW9ucyh3YW50UmVwbHkpO1xuICB9IGVsc2UgaWYgKHdhbnRSZXBseSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBjYihuZXcgRXJyb3IoJ3N0cmljdFZlbmRvciBlbmFibGVkIGFuZCBzZXJ2ZXIgaXMgbm90IE9wZW5TU0ggb3IgY29tcGF0aWJsZSB2ZXJzaW9uJykpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5DbGllbnQucHJvdG90eXBlLm9wZW5zc2hfZm9yd2FyZEluU3RyZWFtTG9jYWwgPSBmdW5jdGlvbihzb2NrZXRQYXRoLCBjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG4gIHZhciB3YW50UmVwbHkgPSAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICghdGhpcy5jb25maWcuc3RyaWN0VmVuZG9yXG4gICAgICB8fCAodGhpcy5jb25maWcuc3RyaWN0VmVuZG9yICYmIFJFX09QRU5TU0gudGVzdCh0aGlzLl9yZW1vdGVWZXIpKSkge1xuICAgIGlmICh3YW50UmVwbHkpIHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKGhhZF9lcnIpIHtcbiAgICAgICAgaWYgKGhhZF9lcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2IoaGFkX2VyciAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA/IGhhZF9lcnJcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgRXJyb3IoJ1VuYWJsZSB0byBiaW5kIHRvICcgKyBzb2NrZXRQYXRoKSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5fZm9yd2FyZGluZ1VuaXhbc29ja2V0UGF0aF0gPSB0cnVlO1xuICAgICAgICBjYigpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3NzaHN0cmVhbS5vcGVuc3NoX3N0cmVhbUxvY2FsRm9yd2FyZChzb2NrZXRQYXRoLCB3YW50UmVwbHkpO1xuICB9IGVsc2UgaWYgKHdhbnRSZXBseSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBjYihuZXcgRXJyb3IoJ3N0cmljdFZlbmRvciBlbmFibGVkIGFuZCBzZXJ2ZXIgaXMgbm90IE9wZW5TU0ggb3IgY29tcGF0aWJsZSB2ZXJzaW9uJykpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5DbGllbnQucHJvdG90eXBlLm9wZW5zc2hfdW5mb3J3YXJkSW5TdHJlYW1Mb2NhbCA9IGZ1bmN0aW9uKHNvY2tldFBhdGgsIGNiKSB7XG4gIGlmICghdGhpcy5fc29ja1xuICAgICAgfHwgIXRoaXMuX3NvY2sud3JpdGFibGVcbiAgICAgIHx8ICF0aGlzLl9zc2hzdHJlYW1cbiAgICAgIHx8ICF0aGlzLl9zc2hzdHJlYW0ud3JpdGFibGUpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgY29ubmVjdGVkJyk7XG5cbiAgdmFyIHdhbnRSZXBseSA9ICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKCF0aGlzLmNvbmZpZy5zdHJpY3RWZW5kb3JcbiAgICAgIHx8ICh0aGlzLmNvbmZpZy5zdHJpY3RWZW5kb3IgJiYgUkVfT1BFTlNTSC50ZXN0KHRoaXMuX3JlbW90ZVZlcikpKSB7XG4gICAgaWYgKHdhbnRSZXBseSkge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oaGFkX2Vycikge1xuICAgICAgICBpZiAoaGFkX2Vycikge1xuICAgICAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgID8gaGFkX2VyclxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcignVW5hYmxlIHRvIHVuYmluZCBvbiAnICsgc29ja2V0UGF0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBzZWxmLl9mb3J3YXJkaW5nVW5peFtzb2NrZXRQYXRoXTtcbiAgICAgICAgY2IoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zc2hzdHJlYW0ub3BlbnNzaF9jYW5jZWxTdHJlYW1Mb2NhbEZvcndhcmQoc29ja2V0UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRSZXBseSk7XG4gIH0gZWxzZSBpZiAod2FudFJlcGx5KSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIGNiKG5ldyBFcnJvcignc3RyaWN0VmVuZG9yIGVuYWJsZWQgYW5kIHNlcnZlciBpcyBub3QgT3BlblNTSCBvciBjb21wYXRpYmxlIHZlcnNpb24nKSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUub3BlbnNzaF9mb3J3YXJkT3V0U3RyZWFtTG9jYWwgPSBmdW5jdGlvbihzb2NrZXRQYXRoLCBjYikge1xuICBpZiAoIXRoaXMuX3NvY2tcbiAgICAgIHx8ICF0aGlzLl9zb2NrLndyaXRhYmxlXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtXG4gICAgICB8fCAhdGhpcy5fc3Noc3RyZWFtLndyaXRhYmxlKVxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuXG4gIGlmICghdGhpcy5jb25maWcuc3RyaWN0VmVuZG9yXG4gICAgICB8fCAodGhpcy5jb25maWcuc3RyaWN0VmVuZG9yICYmIFJFX09QRU5TU0gudGVzdCh0aGlzLl9yZW1vdGVWZXIpKSkge1xuICAgIHZhciBjZmcgPSB7IHNvY2tldFBhdGg6IHNvY2tldFBhdGggfTtcbiAgICByZXR1cm4gb3BlbkNoYW5uZWwodGhpcywgJ2RpcmVjdC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbScsIGNmZywgY2IpO1xuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBjYihuZXcgRXJyb3IoJ3N0cmljdFZlbmRvciBlbmFibGVkIGFuZCBzZXJ2ZXIgaXMgbm90IE9wZW5TU0ggb3IgY29tcGF0aWJsZSB2ZXJzaW9uJykpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBvcGVuQ2hhbm5lbChzZWxmLCB0eXBlLCBvcHRzLCBjYikge1xuICAvLyBhc2sgdGhlIHNlcnZlciB0byBvcGVuIGEgY2hhbm5lbCBmb3Igc29tZSBwdXJwb3NlXG4gIC8vIChlLmcuIHNlc3Npb24gKHNmdHAsIGV4ZWMsIHNoZWxsKSwgb3IgZm9yd2FyZGluZyBhIFRDUCBjb25uZWN0aW9uXG4gIHZhciBsb2NhbENoYW4gPSBuZXh0Q2hhbm5lbChzZWxmKTtcbiAgdmFyIGluaXRXaW5kb3cgPSBDaGFubmVsLk1BWF9XSU5ET1c7XG4gIHZhciBtYXhQYWNrZXQgPSBDaGFubmVsLlBBQ0tFVF9TSVpFO1xuICB2YXIgcmV0ID0gdHJ1ZTtcblxuICBpZiAobG9jYWxDaGFuID09PSBmYWxzZSlcbiAgICByZXR1cm4gY2IobmV3IEVycm9yKCdObyBmcmVlIGNoYW5uZWxzIGF2YWlsYWJsZScpKTtcblxuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgc2VsZi5fY2hhbm5lbHNbbG9jYWxDaGFuXSA9IGNiO1xuXG4gIHZhciBzc2hzdHJlYW0gPSBzZWxmLl9zc2hzdHJlYW07XG4gIHNzaHN0cmVhbS5vbmNlKCdDSEFOTkVMX09QRU5fQ09ORklSTUFUSU9OOicgKyBsb2NhbENoYW4sIG9uU3VjY2VzcylcbiAgICAgICAgICAgLm9uY2UoJ0NIQU5ORUxfT1BFTl9GQUlMVVJFOicgKyBsb2NhbENoYW4sIG9uRmFpbHVyZSlcbiAgICAgICAgICAgLm9uY2UoJ0NIQU5ORUxfQ0xPU0U6JyArIGxvY2FsQ2hhbiwgb25GYWlsdXJlKTtcblxuICBpZiAodHlwZSA9PT0gJ3Nlc3Npb24nKVxuICAgIHJldCA9IHNzaHN0cmVhbS5zZXNzaW9uKGxvY2FsQ2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0KTtcbiAgZWxzZSBpZiAodHlwZSA9PT0gJ2RpcmVjdC10Y3BpcCcpXG4gICAgcmV0ID0gc3Noc3RyZWFtLmRpcmVjdFRjcGlwKGxvY2FsQ2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0LCBvcHRzKTtcbiAgZWxzZSBpZiAodHlwZSA9PT0gJ2RpcmVjdC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbScpIHtcbiAgICByZXQgPSBzc2hzdHJlYW0ub3BlbnNzaF9kaXJlY3RTdHJlYW1Mb2NhbChsb2NhbENoYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFdpbmRvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQYWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cyk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xuXG4gIGZ1bmN0aW9uIG9uU3VjY2VzcyhpbmZvKSB7XG4gICAgc3Noc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdDSEFOTkVMX09QRU5fRkFJTFVSRTonICsgbG9jYWxDaGFuLCBvbkZhaWx1cmUpO1xuICAgIHNzaHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignQ0hBTk5FTF9DTE9TRTonICsgbG9jYWxDaGFuLCBvbkZhaWx1cmUpO1xuXG4gICAgdmFyIGNoYW5pbmZvID0ge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGluY29taW5nOiB7XG4gICAgICAgIGlkOiBsb2NhbENoYW4sXG4gICAgICAgIHdpbmRvdzogaW5pdFdpbmRvdyxcbiAgICAgICAgcGFja2V0U2l6ZTogbWF4UGFja2V0LFxuICAgICAgICBzdGF0ZTogJ29wZW4nXG4gICAgICB9LFxuICAgICAgb3V0Z29pbmc6IHtcbiAgICAgICAgaWQ6IGluZm8uc2VuZGVyLFxuICAgICAgICB3aW5kb3c6IGluZm8ud2luZG93LFxuICAgICAgICBwYWNrZXRTaXplOiBpbmZvLnBhY2tldFNpemUsXG4gICAgICAgIHN0YXRlOiAnb3BlbidcbiAgICAgIH1cbiAgICB9O1xuICAgIGNiKHVuZGVmaW5lZCwgbmV3IENoYW5uZWwoY2hhbmluZm8sIHNlbGYpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRmFpbHVyZShpbmZvKSB7XG4gICAgc3Noc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdDSEFOTkVMX09QRU5fQ09ORklSTUFUSU9OOicgKyBsb2NhbENoYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VjY2Vzcyk7XG4gICAgc3Noc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdDSEFOTkVMX09QRU5fRkFJTFVSRTonICsgbG9jYWxDaGFuLCBvbkZhaWx1cmUpO1xuICAgIHNzaHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignQ0hBTk5FTF9DTE9TRTonICsgbG9jYWxDaGFuLCBvbkZhaWx1cmUpO1xuXG4gICAgZGVsZXRlIHNlbGYuX2NoYW5uZWxzW2xvY2FsQ2hhbl07XG5cbiAgICB2YXIgZXJyO1xuICAgIGlmIChpbmZvIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgICBlcnIgPSBpbmZvO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBpbmZvID09PSAnb2JqZWN0JyAmJiBpbmZvICE9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoJyhTU0gpIENoYW5uZWwgb3BlbiBmYWlsdXJlOiAnICsgaW5mby5kZXNjcmlwdGlvbik7XG4gICAgICBlcnIucmVhc29uID0gaW5mby5yZWFzb247XG4gICAgICBlcnIubGFuZyA9IGluZm8ubGFuZztcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyID0gbmV3IEVycm9yKCcoU1NIKSBDaGFubmVsIG9wZW4gZmFpbHVyZTogJ1xuICAgICAgICAgICAgICAgICAgICAgICsgJ3NlcnZlciBjbG9zZWQgY2hhbm5lbCB1bmV4cGVjdGVkbHknKTtcbiAgICAgIGVyci5yZWFzb24gPSBlcnIubGFuZyA9ICcnO1xuICAgIH1cbiAgICBjYihlcnIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5leHRDaGFubmVsKHNlbGYpIHtcbiAgLy8gZ2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBjaGFubmVsIG51bWJlclxuXG4gIC8vIG9wdGltaXplZCBwYXRoXG4gIGlmIChzZWxmLl9jdXJDaGFuIDwgTUFYX0NIQU5ORUwpXG4gICAgcmV0dXJuICsrc2VsZi5fY3VyQ2hhbjtcblxuICAvLyBzbG93ZXIgbG9va3VwIHBhdGhcbiAgZm9yICh2YXIgaSA9IDAsIGNoYW5uZWxzID0gc2VsZi5fY2hhbm5lbHM7IGkgPCBNQVhfQ0hBTk5FTDsgKytpKVxuICAgIGlmICghY2hhbm5lbHNbaV0pXG4gICAgICByZXR1cm4gaTtcblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlcVgxMShjaGFuLCBzY3JlZW4sIGNiKSB7XG4gIC8vIGFza3Mgc2VydmVyIHRvIHN0YXJ0IHNlbmRpbmcgdXMgWDExIGNvbm5lY3Rpb25zXG4gIHZhciBjZmcgPSB7XG4gICAgc2luZ2xlOiBmYWxzZSxcbiAgICBwcm90b2NvbDogJ01JVC1NQUdJQy1DT09LSUUtMScsXG4gICAgY29va2llOiB1bmRlZmluZWQsXG4gICAgc2NyZWVuOiAwXG4gIH07XG5cbiAgaWYgKHR5cGVvZiBzY3JlZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IHNjcmVlbjtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2NyZWVuID09PSAnb2JqZWN0JyAmJiBzY3JlZW4gIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHNjcmVlbi5zaW5nbGUgPT09ICdib29sZWFuJylcbiAgICAgIGNmZy5zaW5nbGUgPSBzY3JlZW4uc2luZ2xlO1xuICAgIGlmICh0eXBlb2Ygc2NyZWVuLnNjcmVlbiA9PT0gJ251bWJlcicpXG4gICAgICBjZmcuc2NyZWVuID0gc2NyZWVuLnNjcmVlbjtcbiAgICBpZiAodHlwZW9mIHNjcmVlbi5wcm90b2NvbCA9PT0gJ3N0cmluZycpXG4gICAgICBjZmcucHJvdG9jb2wgPSBzY3JlZW4ucHJvdG9jb2w7XG4gICAgaWYgKHR5cGVvZiBzY3JlZW4uY29va2llID09PSAnc3RyaW5nJylcbiAgICAgIGNmZy5jb29raWUgPSBzY3JlZW4uY29va2llO1xuICAgIGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzY3JlZW4uY29va2llKSlcbiAgICAgIGNmZy5jb29raWUgPSBzY3JlZW4uY29va2llLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuICBpZiAoY2ZnLmNvb2tpZSA9PT0gdW5kZWZpbmVkKVxuICAgIGNmZy5jb29raWUgPSByYW5kb21Db29raWUoKTtcblxuICB2YXIgd2FudFJlcGx5ID0gKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyk7XG5cbiAgaWYgKGNoYW4ub3V0Z29pbmcuc3RhdGUgIT09ICdvcGVuJykge1xuICAgIHdhbnRSZXBseSAmJiBjYihuZXcgRXJyb3IoJ0NoYW5uZWwgaXMgbm90IG9wZW4nKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAod2FudFJlcGx5KSB7XG4gICAgY2hhbi5fY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oaGFkX2Vycikge1xuICAgICAgaWYgKGhhZF9lcnIpIHtcbiAgICAgICAgcmV0dXJuIGNiKGhhZF9lcnIgIT09IHRydWVcbiAgICAgICAgICAgICAgICAgID8gaGFkX2VyclxuICAgICAgICAgICAgICAgICAgOiBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXF1ZXN0IFgxMScpKTtcbiAgICAgIH1cblxuICAgICAgY2hhbi5faGFzWDExID0gdHJ1ZTtcbiAgICAgICsrY2hhbi5fY2xpZW50Ll9hY2NlcHRYMTE7XG4gICAgICBjaGFuLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChjaGFuLl9jbGllbnQuX2FjY2VwdFgxMSlcbiAgICAgICAgICAtLWNoYW4uX2NsaWVudC5fYWNjZXB0WDExO1xuICAgICAgfSk7XG5cbiAgICAgIGNiKCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY2hhbi5fY2xpZW50Ll9zc2hzdHJlYW0ueDExRm9yd2FyZChjaGFuLm91dGdvaW5nLmlkLCBjZmcsIHdhbnRSZXBseSk7XG59XG5cbmZ1bmN0aW9uIHJlcVB0eShjaGFuLCBvcHRzLCBjYikge1xuICB2YXIgcm93cyA9IDI0O1xuICB2YXIgY29scyA9IDgwO1xuICB2YXIgd2lkdGggPSA2NDA7XG4gIHZhciBoZWlnaHQgPSA0ODA7XG4gIHZhciB0ZXJtID0gJ3Z0MTAwJztcbiAgdmFyIG1vZGVzID0gbnVsbDtcblxuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpXG4gICAgY2IgPSBvcHRzO1xuICBlbHNlIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgb3B0cyAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygb3B0cy5yb3dzID09PSAnbnVtYmVyJylcbiAgICAgIHJvd3MgPSBvcHRzLnJvd3M7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbHMgPT09ICdudW1iZXInKVxuICAgICAgY29scyA9IG9wdHMuY29scztcbiAgICBpZiAodHlwZW9mIG9wdHMud2lkdGggPT09ICdudW1iZXInKVxuICAgICAgd2lkdGggPSBvcHRzLndpZHRoO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5oZWlnaHQgPT09ICdudW1iZXInKVxuICAgICAgaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gICAgaWYgKHR5cGVvZiBvcHRzLnRlcm0gPT09ICdzdHJpbmcnKVxuICAgICAgdGVybSA9IG9wdHMudGVybTtcbiAgICBpZiAodHlwZW9mIG9wdHMubW9kZXMgPT09ICdvYmplY3QnKVxuICAgICAgbW9kZXMgPSBvcHRzLm1vZGVzO1xuICB9XG5cbiAgdmFyIHdhbnRSZXBseSA9ICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpO1xuXG4gIGlmIChjaGFuLm91dGdvaW5nLnN0YXRlICE9PSAnb3BlbicpIHtcbiAgICB3YW50UmVwbHkgJiYgY2IobmV3IEVycm9yKCdDaGFubmVsIGlzIG5vdCBvcGVuJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHdhbnRSZXBseSkge1xuICAgIGNoYW4uX2NhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKGhhZF9lcnIpIHtcbiAgICAgIGlmIChoYWRfZXJyKSB7XG4gICAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICA/IGhhZF9lcnJcbiAgICAgICAgICAgICAgICAgIDogbmV3IEVycm9yKCdVbmFibGUgdG8gcmVxdWVzdCBhIHBzZXVkby10ZXJtaW5hbCcpKTtcbiAgICAgIH1cbiAgICAgIGNiKCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY2hhbi5fY2xpZW50Ll9zc2hzdHJlYW0ucHR5KGNoYW4ub3V0Z29pbmcuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRSZXBseSk7XG59XG5cbmZ1bmN0aW9uIHJlcUFnZW50RndkKGNoYW4sIGNiKSB7XG4gIHZhciB3YW50UmVwbHkgPSAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKTtcblxuICBpZiAoY2hhbi5vdXRnb2luZy5zdGF0ZSAhPT0gJ29wZW4nKSB7XG4gICAgd2FudFJlcGx5ICYmIGNiKG5ldyBFcnJvcignQ2hhbm5lbCBpcyBub3Qgb3BlbicpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChjaGFuLl9jbGllbnQuX2FnZW50RndkRW5hYmxlZCkge1xuICAgIHdhbnRSZXBseSAmJiBjYihmYWxzZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjaGFuLl9jbGllbnQuX2FnZW50RndkRW5hYmxlZCA9IHRydWU7XG5cbiAgY2hhbi5fY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oaGFkX2Vycikge1xuICAgIGlmIChoYWRfZXJyKSB7XG4gICAgICBjaGFuLl9jbGllbnQuX2FnZW50RndkRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgd2FudFJlcGx5ICYmIGNiKGhhZF9lcnIgIT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICA/IGhhZF9lcnJcbiAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlcXVlc3QgYWdlbnQgZm9yd2FyZGluZycpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YW50UmVwbHkgJiYgY2IoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNoYW4uX2NsaWVudC5fc3Noc3RyZWFtLm9wZW5zc2hfYWdlbnRGb3J3YXJkKGNoYW4ub3V0Z29pbmcuaWQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiByZXFTaGVsbChjaGFuLCBjYikge1xuICBpZiAoY2hhbi5vdXRnb2luZy5zdGF0ZSAhPT0gJ29wZW4nKSB7XG4gICAgY2IobmV3IEVycm9yKCdDaGFubmVsIGlzIG5vdCBvcGVuJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNoYW4uX2NhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKGhhZF9lcnIpIHtcbiAgICBpZiAoaGFkX2Vycikge1xuICAgICAgcmV0dXJuIGNiKGhhZF9lcnIgIT09IHRydWVcbiAgICAgICAgICAgICAgICA/IGhhZF9lcnJcbiAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcignVW5hYmxlIHRvIG9wZW4gc2hlbGwnKSk7XG4gICAgfVxuICAgIGNoYW4uc3VidHlwZSA9ICdzaGVsbCc7XG4gICAgY2IodW5kZWZpbmVkLCBjaGFuKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNoYW4uX2NsaWVudC5fc3Noc3RyZWFtLnNoZWxsKGNoYW4ub3V0Z29pbmcuaWQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiByZXFFeGVjKGNoYW4sIGNtZCwgb3B0cywgY2IpIHtcbiAgaWYgKGNoYW4ub3V0Z29pbmcuc3RhdGUgIT09ICdvcGVuJykge1xuICAgIGNiKG5ldyBFcnJvcignQ2hhbm5lbCBpcyBub3Qgb3BlbicpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjaGFuLl9jYWxsYmFja3MucHVzaChmdW5jdGlvbihoYWRfZXJyKSB7XG4gICAgaWYgKGhhZF9lcnIpIHtcbiAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBoYWRfZXJyXG4gICAgICAgICAgICAgICAgOiBuZXcgRXJyb3IoJ1VuYWJsZSB0byBleGVjJykpO1xuICAgIH1cbiAgICBjaGFuLnN1YnR5cGUgPSAnZXhlYyc7XG4gICAgY2hhbi5hbGxvd0hhbGZPcGVuID0gKG9wdHMuYWxsb3dIYWxmT3BlbiAhPT0gZmFsc2UpO1xuICAgIGNiKHVuZGVmaW5lZCwgY2hhbik7XG4gIH0pO1xuXG4gIHJldHVybiBjaGFuLl9jbGllbnQuX3NzaHN0cmVhbS5leGVjKGNoYW4ub3V0Z29pbmcuaWQsIGNtZCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHJlcUVudihjaGFuLCBlbnYpIHtcbiAgaWYgKGNoYW4ub3V0Z29pbmcuc3RhdGUgIT09ICdvcGVuJylcbiAgICByZXR1cm4gdHJ1ZTtcbiAgdmFyIHJldCA9IHRydWU7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZW52IHx8IHt9KTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgdmFsID0gZW52W2tleV07XG4gICAgcmV0ID0gY2hhbi5fY2xpZW50Ll9zc2hzdHJlYW0uZW52KGNoYW4ub3V0Z29pbmcuaWQsIGtleSwgdmFsLCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiByZXFTdWJzeXN0ZW0oY2hhbiwgbmFtZSwgY2IpIHtcbiAgaWYgKGNoYW4ub3V0Z29pbmcuc3RhdGUgIT09ICdvcGVuJykge1xuICAgIGNiKG5ldyBFcnJvcignQ2hhbm5lbCBpcyBub3Qgb3BlbicpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjaGFuLl9jYWxsYmFja3MucHVzaChmdW5jdGlvbihoYWRfZXJyKSB7XG4gICAgaWYgKGhhZF9lcnIpIHtcbiAgICAgIHJldHVybiBjYihoYWRfZXJyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBoYWRfZXJyXG4gICAgICAgICAgICAgICAgOiBuZXcgRXJyb3IoJ1VuYWJsZSB0byBzdGFydCBzdWJzeXN0ZW06ICcgKyBuYW1lKSk7XG4gICAgfVxuICAgIGNoYW4uc3VidHlwZSA9ICdzdWJzeXN0ZW0nO1xuICAgIGNiKHVuZGVmaW5lZCwgY2hhbik7XG4gIH0pO1xuXG4gIHJldHVybiBjaGFuLl9jbGllbnQuX3NzaHN0cmVhbS5zdWJzeXN0ZW0oY2hhbi5vdXRnb2luZy5pZCwgbmFtZSwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIG9uQ0hBTk5FTF9PUEVOKHNlbGYsIGluZm8pIHtcbiAgLy8gdGhlIHNlcnZlciBpcyB0cnlpbmcgdG8gb3BlbiBhIGNoYW5uZWwgd2l0aCB1cywgdGhpcyBpcyB1c3VhbGx5IHdoZW5cbiAgLy8gd2UgYXNrZWQgdGhlIHNlcnZlciB0byBmb3J3YXJkIHVzIGNvbm5lY3Rpb25zIG9uIHNvbWUgcG9ydCBhbmQgbm93IHRoZXlcbiAgLy8gYXJlIGFza2luZyB1cyB0byBhY2NlcHQvZGVueSBhbiBpbmNvbWluZyBjb25uZWN0aW9uIG9uIHRoZWlyIHNpZGVcblxuICB2YXIgbG9jYWxDaGFuID0gZmFsc2U7XG4gIHZhciByZWFzb247XG5cbiAgZnVuY3Rpb24gYWNjZXB0KCkge1xuICAgIHZhciBjaGFuaW5mbyA9IHtcbiAgICAgIHR5cGU6IGluZm8udHlwZSxcbiAgICAgIGluY29taW5nOiB7XG4gICAgICAgIGlkOiBsb2NhbENoYW4sXG4gICAgICAgIHdpbmRvdzogQ2hhbm5lbC5NQVhfV0lORE9XLFxuICAgICAgICBwYWNrZXRTaXplOiBDaGFubmVsLlBBQ0tFVF9TSVpFLFxuICAgICAgICBzdGF0ZTogJ29wZW4nXG4gICAgICB9LFxuICAgICAgb3V0Z29pbmc6IHtcbiAgICAgICAgaWQ6IGluZm8uc2VuZGVyLFxuICAgICAgICB3aW5kb3c6IGluZm8ud2luZG93LFxuICAgICAgICBwYWNrZXRTaXplOiBpbmZvLnBhY2tldFNpemUsXG4gICAgICAgIHN0YXRlOiAnb3BlbidcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBzdHJlYW0gPSBuZXcgQ2hhbm5lbChjaGFuaW5mbywgc2VsZik7XG5cbiAgICBzZWxmLl9zc2hzdHJlYW0uY2hhbm5lbE9wZW5Db25maXJtKGluZm8uc2VuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxDaGFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbC5NQVhfV0lORE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbC5QQUNLRVRfU0laRSk7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuICBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgaWYgKHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobG9jYWxDaGFuID09PSBmYWxzZSlcbiAgICAgICAgcmVhc29uID0gY29uc3RzLkNIQU5ORUxfT1BFTl9GQUlMVVJFLlJFU09VUkNFX1NIT1JUQUdFO1xuICAgICAgZWxzZVxuICAgICAgICByZWFzb24gPSBjb25zdHMuQ0hBTk5FTF9PUEVOX0ZBSUxVUkUuQ09OTkVDVF9GQUlMRUQ7XG4gICAgfVxuXG4gICAgc2VsZi5fc3Noc3RyZWFtLmNoYW5uZWxPcGVuRmFpbChpbmZvLnNlbmRlciwgcmVhc29uLCAnJywgJycpO1xuICB9XG5cbiAgaWYgKGluZm8udHlwZSA9PT0gJ2ZvcndhcmRlZC10Y3BpcCdcbiAgICAgIHx8IGluZm8udHlwZSA9PT0gJ3gxMSdcbiAgICAgIHx8IGluZm8udHlwZSA9PT0gJ2F1dGgtYWdlbnRAb3BlbnNzaC5jb20nXG4gICAgICB8fCBpbmZvLnR5cGUgPT09ICdmb3J3YXJkZWQtc3RyZWFtbG9jYWxAb3BlbnNzaC5jb20nKSB7XG5cbiAgICAvLyBjaGVjayBmb3IgY29uZGl0aW9ucyBmb3IgYXV0b21hdGljIHJlamVjdGlvblxuICAgIHZhciByZWplY3RDb25uID0gKFxuICAgICAoaW5mby50eXBlID09PSAnZm9yd2FyZGVkLXRjcGlwJ1xuICAgICAgJiYgc2VsZi5fZm9yd2FyZGluZ1tpbmZvLmRhdGEuZGVzdElQXG4gICAgICAgICAgICAgICAgICAgICAgICAgKyAnOidcbiAgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8uZGF0YS5kZXN0UG9ydF0gPT09IHVuZGVmaW5lZClcbiAgICAgfHwgKGluZm8udHlwZSA9PT0gJ2ZvcndhcmRlZC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbSdcbiAgICAgICAgICYmIHNlbGYuX2ZvcndhcmRpbmdVbml4W2luZm8uZGF0YS5zb2NrZXRQYXRoXSA9PT0gdW5kZWZpbmVkKVxuICAgICB8fCAoaW5mby50eXBlID09PSAneDExJyAmJiBzZWxmLl9hY2NlcHRYMTEgPT09IDApXG4gICAgIHx8IChpbmZvLnR5cGUgPT09ICdhdXRoLWFnZW50QG9wZW5zc2guY29tJ1xuICAgICAgICAgJiYgIXNlbGYuX2FnZW50RndkRW5hYmxlZClcbiAgICApO1xuXG4gICAgaWYgKCFyZWplY3RDb25uKSB7XG4gICAgICBsb2NhbENoYW4gPSBuZXh0Q2hhbm5lbChzZWxmKTtcblxuICAgICAgaWYgKGxvY2FsQ2hhbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2VsZi5jb25maWcuZGVidWcoJ0RFQlVHOiBDbGllbnQ6IEF1dG9tYXRpYyByZWplY3Rpb24gb2YgaW5jb21pbmcgY2hhbm5lbCBvcGVuOiBubyBjaGFubmVscyBhdmFpbGFibGUnKTtcbiAgICAgICAgcmVqZWN0Q29ubiA9IHRydWU7XG4gICAgICB9IGVsc2VcbiAgICAgICAgc2VsZi5fY2hhbm5lbHNbbG9jYWxDaGFuXSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYXNvbiA9IGNvbnN0cy5DSEFOTkVMX09QRU5fRkFJTFVSRS5BRE1JTklTVFJBVElWRUxZX1BST0hJQklURUQ7XG4gICAgICBzZWxmLmNvbmZpZy5kZWJ1ZygnREVCVUc6IENsaWVudDogQXV0b21hdGljIHJlamVjdGlvbiBvZiBpbmNvbWluZyBjaGFubmVsIG9wZW46IHVuZXhwZWN0ZWQgY2hhbm5lbCBvcGVuIGZvcjogJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmZvLnR5cGUpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGF1dG9tYXRpYyByZWplY3Rpb24gYWZ0ZXIgc29tZSB0aW1lb3V0P1xuXG4gICAgaWYgKHJlamVjdENvbm4pXG4gICAgICByZWplY3QoKTtcblxuICAgIGlmIChsb2NhbENoYW4gIT09IGZhbHNlKSB7XG4gICAgICBpZiAoaW5mby50eXBlID09PSAnZm9yd2FyZGVkLXRjcGlwJykge1xuICAgICAgICBpZiAoaW5mby5kYXRhLmRlc3RQb3J0ID09PSAwKSB7XG4gICAgICAgICAgaW5mby5kYXRhLmRlc3RQb3J0ID0gc2VsZi5fZm9yd2FyZGluZ1tpbmZvLmRhdGEuZGVzdElQXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICc6J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmZvLmRhdGEuZGVzdFBvcnRdO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZW1pdCgndGNwIGNvbm5lY3Rpb24nLCBpbmZvLmRhdGEsIGFjY2VwdCwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBlID09PSAneDExJykge1xuICAgICAgICBzZWxmLmVtaXQoJ3gxMScsIGluZm8uZGF0YSwgYWNjZXB0LCByZWplY3QpO1xuICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUgPT09ICdmb3J3YXJkZWQtc3RyZWFtbG9jYWxAb3BlbnNzaC5jb20nKSB7XG4gICAgICAgIHNlbGYuZW1pdCgndW5peCBjb25uZWN0aW9uJywgaW5mby5kYXRhLCBhY2NlcHQsIHJlamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZ2VudFF1ZXJ5KHNlbGYuY29uZmlnLmFnZW50LCBhY2NlcHQsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGF1dG9tYXRpY2FsbHkgcmVqZWN0IGFueSB1bnN1cHBvcnRlZCBjaGFubmVsIG9wZW4gcmVxdWVzdHNcbiAgICBzZWxmLmNvbmZpZy5kZWJ1ZygnREVCVUc6IENsaWVudDogQXV0b21hdGljIHJlamVjdGlvbiBvZiBpbmNvbWluZyBjaGFubmVsIG9wZW46IHVuc3VwcG9ydGVkIHR5cGU6ICdcbiAgICAgICAgICAgICAgICAgICAgICArIGluZm8udHlwZSk7XG4gICAgcmVhc29uID0gY29uc3RzLkNIQU5ORUxfT1BFTl9GQUlMVVJFLlVOS05PV05fQ0hBTk5FTF9UWVBFO1xuICAgIHJlamVjdCgpO1xuICB9XG59XG5cbnZhciByYW5kb21Db29raWUgPSAoZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2YgY3J5cHRvLnJhbmRvbUZpbGxTeW5jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJhbmRvbUNvb2tpZSgpIHtcbiAgICAgIGNyeXB0by5yYW5kb21GaWxsU3luYyhidWZmZXIsIDAsIDE2KTtcbiAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoJ2hleCcpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJhbmRvbUNvb2tpZSgpIHtcbiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB9O1xuICB9XG59KSgpO1xuXG5DbGllbnQuQ2xpZW50ID0gQ2xpZW50O1xuQ2xpZW50LlNlcnZlciA9IHJlcXVpcmUoJy4vc2VydmVyJyk7XG4vLyBwYXNzIHNvbWUgdXNlZnVsIHV0aWxpdGllcyBvbiB0byBlbmQgdXNlciAoZS5nLiBwYXJzZUtleSgpKVxuQ2xpZW50LnV0aWxzID0gc3NoMl9zdHJlYW1zLnV0aWxzO1xuLy8gZXhwb3NlIHVzZWZ1bCBTRlRQU3RyZWFtIGNvbnN0YW50cyBmb3Igc2Z0cCBzZXJ2ZXIgdXNhZ2VcbkNsaWVudC5TRlRQX1NUQVRVU19DT0RFID0gU0ZUUFN0cmVhbS5TVEFUVVNfQ09ERTtcbkNsaWVudC5TRlRQX09QRU5fTU9ERSA9IFNGVFBTdHJlYW0uT1BFTl9NT0RFO1xuLy8gZXhwb3NlIGh0dHAocykuQWdlbnQgaW1wbGVtZW50YXRpb25zIHRvIGFsbG93IGVhc3kgdHVubmVsaW5nIG9mIEhUVFAoUylcbi8vIHJlcXVlc3RzXG5DbGllbnQuSFRUUEFnZW50ID0gSFRUUEFnZW50cy5TU0hUVFBBZ2VudDtcbkNsaWVudC5IVFRQU0FnZW50ID0gSFRUUEFnZW50cy5TU0hUVFBTQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2xpZW50OyAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuIiwidmFyIEh0dHBBZ2VudCA9IHJlcXVpcmUoJ2h0dHAnKS5BZ2VudDtcbnZhciBIdHRwc0FnZW50ID0gcmVxdWlyZSgnaHR0cHMnKS5BZ2VudDtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcblxudmFyIENsaWVudDtcblxuW0h0dHBBZ2VudCwgSHR0cHNBZ2VudF0uZm9yRWFjaCgoY3RvcikgPT4ge1xuICBmdW5jdGlvbiBTU0hBZ2VudChjb25uZWN0Q2ZnLCBhZ2VudE9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU1NIQWdlbnQpKVxuICAgICAgcmV0dXJuIG5ldyBTU0hBZ2VudChjb25uZWN0Q2ZnLCBhZ2VudE9wdGlvbnMpO1xuXG4gICAgY3Rvci5jYWxsKHRoaXMsIGFnZW50T3B0aW9ucyk7XG5cbiAgICB0aGlzLl9jb25uZWN0Q2ZnID0gY29ubmVjdENmZztcbiAgICB0aGlzLl9kZWZhdWx0U3JjSVAgPSAoYWdlbnRPcHRpb25zICYmIGFnZW50T3B0aW9ucy5zcmNJUCkgfHwgJ2xvY2FsaG9zdCc7XG4gIH1cbiAgaW5oZXJpdHMoU1NIQWdlbnQsIGN0b3IpO1xuXG4gIFNTSEFnZW50LnByb3RvdHlwZS5jcmVhdGVDb25uZWN0aW9uID0gY3JlYXRlQ29ubmVjdGlvbjtcblxuICBleHBvcnRzW2N0b3IgPT09IEh0dHBBZ2VudCA/ICdTU0hUVFBBZ2VudCcgOiAnU1NIVFRQU0FnZW50J10gPSBTU0hBZ2VudDtcbn0pO1xuXG5mdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzcmNJUCA9IChvcHRpb25zICYmIG9wdGlvbnMubG9jYWxBZGRyZXNzKSB8fCB0aGlzLl9kZWZhdWx0U3JjSVA7XG4gIHZhciBzcmNQb3J0ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5sb2NhbFBvcnQpIHx8IDA7XG4gIHZhciBkc3RJUCA9IG9wdGlvbnMuaG9zdDtcbiAgdmFyIGRzdFBvcnQgPSBvcHRpb25zLnBvcnQ7XG5cbiAgaWYgKENsaWVudCA9PT0gdW5kZWZpbmVkKVxuICAgIENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JykuQ2xpZW50O1xuXG4gIHZhciBjbGllbnQgPSBuZXcgQ2xpZW50KCk7XG4gIHZhciB0cmllZEZvcndhcmQgPSBmYWxzZTtcbiAgY2xpZW50Lm9uKCdyZWFkeScsICgpID0+IHtcbiAgICBjbGllbnQuZm9yd2FyZE91dChzcmNJUCwgc3JjUG9ydCwgZHN0SVAsIGRzdFBvcnQsIChlcnIsIHN0cmVhbSkgPT4ge1xuICAgICAgdHJpZWRGb3J3YXJkID0gdHJ1ZTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgY2xpZW50LmVuZCgpO1xuICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY2xpZW50LmVuZCgpO1xuICAgICAgfSk7XG4gICAgICBjYihudWxsLCBkZWNvcmF0ZVN0cmVhbShzdHJlYW0pKTtcbiAgICB9KTtcbiAgfSkub24oJ2Vycm9yJywgY2IpLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICBpZiAoIXRyaWVkRm9yd2FyZClcbiAgICAgIGNiKG5ldyBFcnJvcignVW5leHBlY3RlZCBjb25uZWN0aW9uIGxvc3MnKSk7XG4gIH0pLmNvbm5lY3QodGhpcy5fY29ubmVjdENmZyk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiBkZWNvcmF0ZVN0cmVhbShzdHJlYW0pIHtcbiAgc3RyZWFtLnNldEtlZXBBbGl2ZSA9IG5vb3A7XG4gIHN0cmVhbS5zZXROb0RlbGF5ID0gbm9vcDtcbiAgc3RyZWFtLnNldFRpbWVvdXQgPSBub29wO1xuICBzdHJlYW0ucmVmID0gbm9vcDtcbiAgc3RyZWFtLnVucmVmID0gbm9vcDtcbiAgc3RyZWFtLmRlc3Ryb3lTb29uID0gc3RyZWFtLmRlc3Ryb3k7XG4gIHJldHVybiBzdHJlYW07XG59XG4iLCJmdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4LCBrID0gaSArIDEsIG4gPSBsaXN0Lmxlbmd0aDsgayA8IG47IGkgKz0gMSwgayArPSAxKVxuICAgIGxpc3RbaV0gPSBsaXN0W2tdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiBNYW5hZ2VyKGludGVydmFsLCBzdHJlYW1JbnRlcnZhbCwga2FDb3VudE1heCkge1xuICB2YXIgc3RyZWFtcyA9IHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fdGltZXIgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3RpbWVySW50ZXJ2YWwgPSBpbnRlcnZhbDtcbiAgdGhpcy5fdGltZXJmbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdHJlYW1zLmxlbmd0aCwgcywgbGFzdDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBzID0gc3RyZWFtc1tpXTtcbiAgICAgIGxhc3QgPSBzLl9rYWxhc3Q7XG4gICAgICBpZiAobGFzdCAmJiAobm93IC0gbGFzdCkgPj0gc3RyZWFtSW50ZXJ2YWwpIHtcbiAgICAgICAgaWYgKCsrcy5fa2FjbnQgPiBrYUNvdW50TWF4KSB7XG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignS2VlcGFsaXZlIHRpbWVvdXQnKTtcbiAgICAgICAgICBlcnIubGV2ZWwgPSAnY2xpZW50LXRpbWVvdXQnO1xuICAgICAgICAgIHMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIHMuZGlzY29ubmVjdCgpO1xuICAgICAgICAgIHNwbGljZU9uZShzdHJlYW1zLCBpKTtcbiAgICAgICAgICAtLWk7XG4gICAgICAgICAgbGVuID0gc3RyZWFtcy5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcy5fa2FsYXN0ID0gbm93O1xuICAgICAgICAgIC8vIFhYWDogaWYgdGhlIHNlcnZlciBldmVyIHN0YXJ0cyBzZW5kaW5nIHJlYWwgZ2xvYmFsIHJlcXVlc3RzIHRvIHRoZVxuICAgICAgICAgIC8vICAgICAgY2xpZW50LCB3ZSB3aWxsIG5lZWQgdG8gYWRkIGEgZHVtbXkgY2FsbGJhY2sgaGVyZSB0byBrZWVwIHRoZVxuICAgICAgICAgIC8vICAgICAgY29ycmVjdCByZXBseSBvcmRlclxuICAgICAgICAgIHMucGluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5NYW5hZ2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fdGltZXIpXG4gICAgdGhpcy5zdG9wKCk7XG4gIHRoaXMuX3RpbWVyID0gc2V0SW50ZXJ2YWwodGhpcy5fdGltZXJmbiwgdGhpcy5fdGltZXJJbnRlcnZhbCk7XG59O1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl90aW1lcikge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpO1xuICAgIHRoaXMuX3RpbWVyID0gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHN0cmVhbXMgPSB0aGlzLl9zdHJlYW1zLFxuICAgICAgc2VsZiA9IHRoaXM7XG5cbiAgc3RyZWFtLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYucmVtb3ZlKHN0cmVhbSk7XG4gIH0pLm9uKCdwYWNrZXQnLCByZXNldEtBKTtcblxuICBzdHJlYW1zW3N0cmVhbXMubGVuZ3RoXSA9IHN0cmVhbTtcblxuICByZXNldEtBKCk7XG5cbiAgaWYgKCF0aGlzLl90aW1lcilcbiAgICB0aGlzLnN0YXJ0KCk7XG5cbiAgZnVuY3Rpb24gcmVzZXRLQSgpIHtcbiAgICBzdHJlYW0uX2thbGFzdCA9IERhdGUubm93KCk7XG4gICAgc3RyZWFtLl9rYWNudCA9IDA7XG4gIH1cbn07XG5cbk1hbmFnZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc3RyZWFtcyA9IHRoaXMuX3N0cmVhbXMsXG4gICAgICBpbmRleCA9IHN0cmVhbXMuaW5kZXhPZihzdHJlYW0pO1xuICBpZiAoaW5kZXggPiAtMSlcbiAgICBzcGxpY2VPbmUoc3RyZWFtcywgaW5kZXgpO1xuICBpZiAoIXN0cmVhbXMubGVuZ3RoKVxuICAgIHRoaXMuc3RvcCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYW5hZ2VyO1xuIiwidmFyIG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBsaXN0ZW5lckNvdW50ID0gRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQ7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG5cbnZhciBzc2gyX3N0cmVhbXMgPSByZXF1aXJlKCdAb2x6aWUtMTIvc3NoMi1zdHJlYW1zJyk7XG52YXIgcGFyc2VLZXkgPSBzc2gyX3N0cmVhbXMudXRpbHMucGFyc2VLZXk7XG52YXIgU1NIMlN0cmVhbSA9IHNzaDJfc3RyZWFtcy5TU0gyU3RyZWFtO1xudmFyIFNGVFBTdHJlYW0gPSBzc2gyX3N0cmVhbXMuU0ZUUFN0cmVhbTtcbnZhciBjb25zdHMgPSBzc2gyX3N0cmVhbXMuY29uc3RhbnRzO1xudmFyIERJU0NPTk5FQ1RfUkVBU09OID0gY29uc3RzLkRJU0NPTk5FQ1RfUkVBU09OO1xudmFyIENIQU5ORUxfT1BFTl9GQUlMVVJFID0gY29uc3RzLkNIQU5ORUxfT1BFTl9GQUlMVVJFO1xudmFyIEFMR09SSVRITVMgPSBjb25zdHMuQUxHT1JJVEhNUztcblxudmFyIENoYW5uZWwgPSByZXF1aXJlKCcuL0NoYW5uZWwnKTtcbnZhciBLZWVwYWxpdmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9rZWVwYWxpdmVtZ3InKTtcbnZhciB3cml0ZVVJbnQzMkJFID0gcmVxdWlyZSgnLi9idWZmZXItaGVscGVycycpLndyaXRlVUludDMyQkU7XG5cbnZhciBNQVhfQ0hBTk5FTCA9IE1hdGgucG93KDIsIDMyKSAtIDE7XG52YXIgTUFYX1BFTkRJTkdfQVVUSFMgPSAxMDtcblxudmFyIGthTWdyO1xuXG5mdW5jdGlvbiBTZXJ2ZXIoY2ZnLCBsaXN0ZW5lcikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU2VydmVyKSlcbiAgICByZXR1cm4gbmV3IFNlcnZlcihjZmcsIGxpc3RlbmVyKTtcblxuICB2YXIgaG9zdEtleXMgPSB7XG4gICAgJ3NzaC1yc2EnOiBudWxsLFxuICAgICdzc2gtZHNzJzogbnVsbCxcbiAgICAnc3NoLWVkMjU1MTknOiBudWxsLFxuICAgICdlY2RzYS1zaGEyLW5pc3RwMjU2JzogbnVsbCxcbiAgICAnZWNkc2Etc2hhMi1uaXN0cDM4NCc6IG51bGwsXG4gICAgJ2VjZHNhLXNoYTItbmlzdHA1MjEnOiBudWxsXG4gIH07XG5cbiAgdmFyIGhvc3RLZXlzXyA9IGNmZy5ob3N0S2V5cztcbiAgaWYgKCFBcnJheS5pc0FycmF5KGhvc3RLZXlzXykpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdob3N0S2V5cyBtdXN0IGJlIGFuIGFycmF5Jyk7XG5cbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBob3N0S2V5c18ubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcHJpdmF0ZUtleTtcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGhvc3RLZXlzX1tpXSkgfHwgdHlwZW9mIGhvc3RLZXlzX1tpXSA9PT0gJ3N0cmluZycpXG4gICAgICBwcml2YXRlS2V5ID0gcGFyc2VLZXkoaG9zdEtleXNfW2ldKTtcbiAgICBlbHNlXG4gICAgICBwcml2YXRlS2V5ID0gcGFyc2VLZXkoaG9zdEtleXNfW2ldLmtleSwgaG9zdEtleXNfW2ldLnBhc3NwaHJhc2UpO1xuICAgIGlmIChwcml2YXRlS2V5IGluc3RhbmNlb2YgRXJyb3IpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSBwcml2YXRlS2V5OiAnICsgcHJpdmF0ZUtleS5tZXNzYWdlKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcml2YXRlS2V5KSlcbiAgICAgIHByaXZhdGVLZXkgPSBwcml2YXRlS2V5WzBdOyAvLyBPcGVuU1NIJ3MgbmV3ZXIgZm9ybWF0IG9ubHkgc3RvcmVzIDEga2V5IGZvciBub3dcbiAgICBpZiAocHJpdmF0ZUtleS5nZXRQcml2YXRlUEVNKCkgPT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByaXZhdGVLZXkgdmFsdWUgY29udGFpbnMgYW4gaW52YWxpZCBwcml2YXRlIGtleScpO1xuICAgIGlmIChob3N0S2V5c1twcml2YXRlS2V5LnR5cGVdKVxuICAgICAgY29udGludWU7XG4gICAgaG9zdEtleXNbcHJpdmF0ZUtleS50eXBlXSA9IHByaXZhdGVLZXk7XG4gIH1cblxuICB2YXIgYWxnb3JpdGhtcyA9IHtcbiAgICBrZXg6IHVuZGVmaW5lZCxcbiAgICBrZXhCdWY6IHVuZGVmaW5lZCxcbiAgICBjaXBoZXI6IHVuZGVmaW5lZCxcbiAgICBjaXBoZXJCdWY6IHVuZGVmaW5lZCxcbiAgICBzZXJ2ZXJIb3N0S2V5OiB1bmRlZmluZWQsXG4gICAgc2VydmVySG9zdEtleUJ1ZjogdW5kZWZpbmVkLFxuICAgIGhtYWM6IHVuZGVmaW5lZCxcbiAgICBobWFjQnVmOiB1bmRlZmluZWQsXG4gICAgY29tcHJlc3M6IHVuZGVmaW5lZCxcbiAgICBjb21wcmVzc0J1ZjogdW5kZWZpbmVkXG4gIH07XG4gIGlmICh0eXBlb2YgY2ZnLmFsZ29yaXRobXMgPT09ICdvYmplY3QnICYmIGNmZy5hbGdvcml0aG1zICE9PSBudWxsKSB7XG4gICAgdmFyIGFsZ29zU3VwcG9ydGVkO1xuICAgIHZhciBhbGdvTGlzdDtcblxuICAgIGFsZ29MaXN0ID0gY2ZnLmFsZ29yaXRobXMua2V4O1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsZ29MaXN0KSAmJiBhbGdvTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBhbGdvc1N1cHBvcnRlZCA9IEFMR09SSVRITVMuU1VQUE9SVEVEX0tFWDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhbGdvTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoYWxnb3NTdXBwb3J0ZWQuaW5kZXhPZihhbGdvTGlzdFtpXSkgPT09IC0xKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQga2V5IGV4Y2hhbmdlIGFsZ29yaXRobTogJyArIGFsZ29MaXN0W2ldKTtcbiAgICAgIH1cbiAgICAgIGFsZ29yaXRobXMua2V4ID0gYWxnb0xpc3Q7XG4gICAgfVxuXG4gICAgYWxnb0xpc3QgPSBjZmcuYWxnb3JpdGhtcy5jaXBoZXI7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb0xpc3QpICYmIGFsZ29MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFsZ29zU3VwcG9ydGVkID0gQUxHT1JJVEhNUy5TVVBQT1JURURfQ0lQSEVSO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFsZ29MaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhbGdvc1N1cHBvcnRlZC5pbmRleE9mKGFsZ29MaXN0W2ldKSA9PT0gLTEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjaXBoZXIgYWxnb3JpdGhtOiAnICsgYWxnb0xpc3RbaV0pO1xuICAgICAgfVxuICAgICAgYWxnb3JpdGhtcy5jaXBoZXIgPSBhbGdvTGlzdDtcbiAgICB9XG5cbiAgICBhbGdvTGlzdCA9IGNmZy5hbGdvcml0aG1zLnNlcnZlckhvc3RLZXk7XG4gICAgdmFyIGNvcGllZCA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsZ29MaXN0KSAmJiBhbGdvTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBhbGdvc1N1cHBvcnRlZCA9IEFMR09SSVRITVMuU1VQUE9SVEVEX1NFUlZFUl9IT1NUX0tFWTtcbiAgICAgIGZvciAoaSA9IGFsZ29MaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIGlmIChhbGdvc1N1cHBvcnRlZC5pbmRleE9mKGFsZ29MaXN0W2ldKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHNlcnZlciBob3N0IGtleSBhbGdvcml0aG06ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYWxnb0xpc3RbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaG9zdEtleXNbYWxnb0xpc3RbaV1dKSB7XG4gICAgICAgICAgLy8gU2lsZW50bHkgZGlzY2FyZCBmb3Igbm93XG4gICAgICAgICAgaWYgKCFjb3BpZWQpIHtcbiAgICAgICAgICAgIGFsZ29MaXN0ID0gYWxnb0xpc3Quc2xpY2UoKTtcbiAgICAgICAgICAgIGNvcGllZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFsZ29MaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGFsZ29MaXN0Lmxlbmd0aCA+IDApXG4gICAgICAgIGFsZ29yaXRobXMuc2VydmVySG9zdEtleSA9IGFsZ29MaXN0O1xuICAgIH1cblxuICAgIGFsZ29MaXN0ID0gY2ZnLmFsZ29yaXRobXMuaG1hYztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbGdvTGlzdCkgJiYgYWxnb0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgYWxnb3NTdXBwb3J0ZWQgPSBBTEdPUklUSE1TLlNVUFBPUlRFRF9ITUFDO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFsZ29MaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhbGdvc1N1cHBvcnRlZC5pbmRleE9mKGFsZ29MaXN0W2ldKSA9PT0gLTEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBITUFDIGFsZ29yaXRobTogJyArIGFsZ29MaXN0W2ldKTtcbiAgICAgIH1cbiAgICAgIGFsZ29yaXRobXMuaG1hYyA9IGFsZ29MaXN0O1xuICAgIH1cblxuICAgIGFsZ29MaXN0ID0gY2ZnLmFsZ29yaXRobXMuY29tcHJlc3M7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxnb0xpc3QpICYmIGFsZ29MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFsZ29zU3VwcG9ydGVkID0gQUxHT1JJVEhNUy5TVVBQT1JURURfQ09NUFJFU1M7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYWxnb0xpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGFsZ29zU3VwcG9ydGVkLmluZGV4T2YoYWxnb0xpc3RbaV0pID09PSAtMSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbXByZXNzaW9uIGFsZ29yaXRobTogJyArIGFsZ29MaXN0W2ldKTtcbiAgICAgIH1cbiAgICAgIGFsZ29yaXRobXMuY29tcHJlc3MgPSBhbGdvTGlzdDtcbiAgICB9XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgd2UgYXQgbGVhc3QgaGF2ZSBzb21lIGtpbmQgb2YgdmFsaWQgbGlzdCBvZiBzdXBwb3J0IGtleVxuICAvLyBmb3JtYXRzXG4gIGlmIChhbGdvcml0aG1zLnNlcnZlckhvc3RLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBob3N0S2V5QWxnb3MgPSBPYmplY3Qua2V5cyhob3N0S2V5cyk7XG4gICAgZm9yIChpID0gaG9zdEtleUFsZ29zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBpZiAoIWhvc3RLZXlzW2hvc3RLZXlBbGdvc1tpXV0pXG4gICAgICAgIGhvc3RLZXlBbGdvcy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICAgIGFsZ29yaXRobXMuc2VydmVySG9zdEtleSA9IGhvc3RLZXlBbGdvcztcbiAgfVxuXG4gIGlmICgha2FNZ3JcbiAgICAgICYmIFNlcnZlci5LRUVQQUxJVkVfSU5URVJWQUwgPiAwXG4gICAgICAmJiBTZXJ2ZXIuS0VFUEFMSVZFX0NMSUVOVF9JTlRFUlZBTCA+IDBcbiAgICAgICYmIFNlcnZlci5LRUVQQUxJVkVfQ0xJRU5UX0NPVU5UX01BWCA+PSAwKSB7XG4gICAga2FNZ3IgPSBuZXcgS2VlcGFsaXZlTWFuYWdlcihTZXJ2ZXIuS0VFUEFMSVZFX0lOVEVSVkFMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmVyLktFRVBBTElWRV9DTElFTlRfSU5URVJWQUwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2ZXIuS0VFUEFMSVZFX0NMSUVOVF9DT1VOVF9NQVgpO1xuICB9XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgc2VsZi5vbignY29ubmVjdGlvbicsIGxpc3RlbmVyKTtcblxuICB2YXIgc3RyZWFtY2ZnID0ge1xuICAgIGFsZ29yaXRobXM6IGFsZ29yaXRobXMsXG4gICAgaG9zdEtleXM6IGhvc3RLZXlzLFxuICAgIHNlcnZlcjogdHJ1ZVxuICB9O1xuICB2YXIga2V5cztcbiAgdmFyIGxlbjtcbiAgZm9yIChpID0gMCwga2V5cyA9IE9iamVjdC5rZXlzKGNmZyksIGxlbiA9IGtleXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSAncHJpdmF0ZUtleSdcbiAgICAgICAgfHwga2V5ID09PSAncHVibGljS2V5J1xuICAgICAgICB8fCBrZXkgPT09ICdwYXNzcGhyYXNlJ1xuICAgICAgICB8fCBrZXkgPT09ICdhbGdvcml0aG1zJ1xuICAgICAgICB8fCBrZXkgPT09ICdob3N0S2V5cydcbiAgICAgICAgfHwga2V5ID09PSAnc2VydmVyJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHN0cmVhbWNmZ1trZXldID0gY2ZnW2tleV07XG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbWNmZy5kZWJ1ZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBvbGREZWJ1ZyA9IHN0cmVhbWNmZy5kZWJ1ZztcbiAgICB2YXIgY2ZnS2V5cyA9IE9iamVjdC5rZXlzKHN0cmVhbWNmZyk7XG4gIH1cblxuICB0aGlzLl9zcnYgPSBuZXcgbmV0LlNlcnZlcihmdW5jdGlvbihzb2NrZXQpIHtcbiAgICBpZiAoc2VsZi5fY29ubmVjdGlvbnMgPj0gc2VsZi5tYXhDb25uZWN0aW9ucykge1xuICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKytzZWxmLl9jb25uZWN0aW9ucztcbiAgICBzb2NrZXQub25jZSgnY2xvc2UnLCBmdW5jdGlvbihoYWRfZXJyKSB7XG4gICAgICAtLXNlbGYuX2Nvbm5lY3Rpb25zO1xuXG4gICAgICAvLyBzaW5jZSBqb3llbnQvbm9kZSM5OTNiYjkzZTBhLCB3ZSBoYXZlIHRvIFwicmVhZCBwYXN0IEVPRlwiIGluIG9yZGVyIHRvXG4gICAgICAvLyBnZXQgYW4gYGVuZGAgZXZlbnQgb24gc3RyZWFtcy4gdGhhbmtmdWxseSBhZGRpbmcgdGhpcyBkb2VzIG5vdFxuICAgICAgLy8gbmVnYXRpdmVseSBhZmZlY3Qgbm9kZSB2ZXJzaW9ucyBwcmUtam95ZW50L25vZGUjOTkzYmI5M2UwYS5cbiAgICAgIHNzaHN0cmVhbS5yZWFkKCk7XG4gICAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBzc2hzdHJlYW0ucmVzZXQoKTtcbiAgICAgIHNzaHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgfSk7XG5cbiAgICB2YXIgY29ubmNmZyA9IHN0cmVhbWNmZztcblxuICAgIC8vIHByZXBlbmQgZGVidWcgb3V0cHV0IHdpdGggYSB1bmlxdWUgaWRlbnRpZmllciBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICAgIC8vIGNsaWVudHMgY29ubmVjdGVkIGF0IHRoZSBzYW1lIHRpbWVcbiAgICBpZiAob2xkRGVidWcpIHtcbiAgICAgIGNvbm5jZmcgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBrZXk7IGkgPCBjZmdLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGtleSA9IGNmZ0tleXNbaV07XG4gICAgICAgIGNvbm5jZmdba2V5XSA9IHN0cmVhbWNmZ1trZXldO1xuICAgICAgfVxuICAgICAgdmFyIGRlYnVnUHJlZml4ID0gJ1snICsgcHJvY2Vzcy5ocnRpbWUoKS5qb2luKCcuJykgKyAnXSAnO1xuICAgICAgY29ubmNmZy5kZWJ1ZyA9IGZ1bmN0aW9uKG1zZykge1xuICAgICAgICBvbGREZWJ1ZyhkZWJ1Z1ByZWZpeCArIG1zZyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBzc2hzdHJlYW0gPSBuZXcgU1NIMlN0cmVhbShjb25uY2ZnKTtcbiAgICB2YXIgY2xpZW50ID0gbmV3IENsaWVudChzc2hzdHJlYW0sIHNvY2tldCk7XG5cbiAgICBzb2NrZXQucGlwZShzc2hzdHJlYW0pLnBpcGUoc29ja2V0KTtcblxuICAgIC8vIHNpbGVuY2UgcHJlLWhlYWRlciBlcnJvcnNcbiAgICBmdW5jdGlvbiBvbkNsaWVudFByZUhlYWRlckVycm9yKGVycikge31cbiAgICBjbGllbnQub24oJ2Vycm9yJywgb25DbGllbnRQcmVIZWFkZXJFcnJvcik7XG5cbiAgICBzc2hzdHJlYW0ub25jZSgnaGVhZGVyJywgZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICBpZiAoc3Noc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSB7XG4gICAgICAgIC8vIGFscmVhZHkgZGlzY29ubmVjdGVkIGludGVybmFsbHkgaW4gU1NIMlN0cmVhbSBkdWUgdG8gaW5jb21wYXRpYmxlXG4gICAgICAgIC8vIHByb3RvY29sIHZlcnNpb25cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICghbGlzdGVuZXJDb3VudChzZWxmLCAnY29ubmVjdGlvbicpKSB7XG4gICAgICAgIC8vIGF1dG8gcmVqZWN0XG4gICAgICAgIHJldHVybiBzc2hzdHJlYW0uZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5CWV9BUFBMSUNBVElPTik7XG4gICAgICB9XG5cbiAgICAgIGNsaWVudC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkNsaWVudFByZUhlYWRlckVycm9yKTtcblxuICAgICAgc2VsZi5lbWl0KCdjb25uZWN0aW9uJyxcbiAgICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgICAgeyBpcDogc29ja2V0LnJlbW90ZUFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICBmYW1pbHk6IHNvY2tldC5yZW1vdGVGYW1pbHksXG4gICAgICAgICAgICAgICAgICBwb3J0OiBzb2NrZXQucmVtb3RlUG9ydCxcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogaGVhZGVyIH0pO1xuICAgIH0pO1xuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfSkub24oJ2xpc3RlbmluZycsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnbGlzdGVuaW5nJyk7XG4gIH0pLm9uKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnKTtcbiAgfSk7XG4gIHRoaXMuX2Nvbm5lY3Rpb25zID0gMDtcbiAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IEluZmluaXR5O1xufVxuaW5oZXJpdHMoU2VydmVyLCBFdmVudEVtaXR0ZXIpO1xuXG5TZXJ2ZXIucHJvdG90eXBlLmxpc3RlbiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9zcnYubGlzdGVuLmFwcGx5KHRoaXMuX3NydiwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5TZXJ2ZXIucHJvdG90eXBlLmFkZHJlc3MgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3Nydi5hZGRyZXNzKCk7XG59O1xuXG5TZXJ2ZXIucHJvdG90eXBlLmdldENvbm5lY3Rpb25zID0gZnVuY3Rpb24oY2IpIHtcbiAgdGhpcy5fc3J2LmdldENvbm5lY3Rpb25zKGNiKTtcbn07XG5cblNlcnZlci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbihjYikge1xuICB0aGlzLl9zcnYuY2xvc2UoY2IpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblNlcnZlci5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Nydi5yZWYoKTtcbn07XG5cblNlcnZlci5wcm90b3R5cGUudW5yZWYgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fc3J2LnVucmVmKCk7XG59O1xuXG5cbmZ1bmN0aW9uIENsaWVudChzdHJlYW0sIHNvY2tldCkge1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5fc3Noc3RyZWFtID0gc3RyZWFtO1xuICB2YXIgY2hhbm5lbHMgPSB0aGlzLl9jaGFubmVscyA9IHt9O1xuICB0aGlzLl9jdXJDaGFuID0gLTE7XG4gIHRoaXMuX3NvY2sgPSBzb2NrZXQ7XG4gIHRoaXMubm9Nb3JlU2Vzc2lvbnMgPSBmYWxzZTtcbiAgdGhpcy5hdXRoZW50aWNhdGVkID0gZmFsc2U7XG5cbiAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICBzb2NrZXQucmVzdW1lKCk7XG4gICAgc2VsZi5lbWl0KCdlbmQnKTtcbiAgfSkub24oJ2Nsb3NlJywgZnVuY3Rpb24oaGFzRXJyKSB7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScsIGhhc0Vycik7XG4gIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9KS5vbignZHJhaW4nLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLmVtaXQoJ2RyYWluJyk7XG4gIH0pLm9uKCdjb250aW51ZScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnY29udGludWUnKTtcbiAgfSk7XG5cbiAgdmFyIGV4Y2hhbmdlcyA9IDA7XG4gIHZhciBhY2NlcHRlZEF1dGhTdmMgPSBmYWxzZTtcbiAgdmFyIHBlbmRpbmdBdXRocyA9IFtdO1xuICB2YXIgYXV0aEN0eDtcblxuICAvLyBiZWdpbiBzZXJ2aWNlL2F1dGgtcmVsYXRlZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgc3RyZWFtLm9uKCdTRVJWSUNFX1JFUVVFU1QnLCBmdW5jdGlvbihzZXJ2aWNlKSB7XG4gICAgaWYgKGV4Y2hhbmdlcyA9PT0gMFxuICAgICAgICB8fCBhY2NlcHRlZEF1dGhTdmNcbiAgICAgICAgfHwgc2VsZi5hdXRoZW50aWNhdGVkXG4gICAgICAgIHx8IHNlcnZpY2UgIT09ICdzc2gtdXNlcmF1dGgnKVxuICAgICAgcmV0dXJuIHN0cmVhbS5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLlNFUlZJQ0VfTk9UX0FWQUlMQUJMRSk7XG5cbiAgICBhY2NlcHRlZEF1dGhTdmMgPSB0cnVlO1xuICAgIHN0cmVhbS5zZXJ2aWNlQWNjZXB0KHNlcnZpY2UpO1xuICB9KS5vbignVVNFUkFVVEhfUkVRVUVTVCcsIG9uVVNFUkFVVEhfUkVRVUVTVCk7XG4gIGZ1bmN0aW9uIG9uVVNFUkFVVEhfUkVRVUVTVCh1c2VybmFtZSwgc2VydmljZSwgbWV0aG9kLCBtZXRob2REYXRhKSB7XG4gICAgaWYgKGV4Y2hhbmdlcyA9PT0gMFxuICAgICAgICB8fCAoYXV0aEN0eFxuICAgICAgICAgICAgJiYgKGF1dGhDdHgudXNlcm5hbWUgIT09IHVzZXJuYW1lIHx8IGF1dGhDdHguc2VydmljZSAhPT0gc2VydmljZSkpXG4gICAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBob3N0YmFzZWQgYXV0aFxuICAgICAgICB8fCAobWV0aG9kICE9PSAncGFzc3dvcmQnXG4gICAgICAgICAgICAmJiBtZXRob2QgIT09ICdwdWJsaWNrZXknXG4gICAgICAgICAgICAmJiBtZXRob2QgIT09ICdob3N0YmFzZWQnXG4gICAgICAgICAgICAmJiBtZXRob2QgIT09ICdrZXlib2FyZC1pbnRlcmFjdGl2ZSdcbiAgICAgICAgICAgICYmIG1ldGhvZCAhPT0gJ25vbmUnKVxuICAgICAgICB8fCBwZW5kaW5nQXV0aHMubGVuZ3RoID09PSBNQVhfUEVORElOR19BVVRIUylcbiAgICAgIHJldHVybiBzdHJlYW0uZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5QUk9UT0NPTF9FUlJPUik7XG4gICAgZWxzZSBpZiAoc2VydmljZSAhPT0gJ3NzaC1jb25uZWN0aW9uJylcbiAgICAgIHJldHVybiBzdHJlYW0uZGlzY29ubmVjdChESVNDT05ORUNUX1JFQVNPTi5TRVJWSUNFX05PVF9BVkFJTEFCTEUpO1xuXG4gICAgLy8gWFhYOiB0aGlzIHJlYWxseSBzaG91bGRuJ3QgYmUgcmVhY2hpbmcgaW50byBwcml2YXRlIHN0YXRlIC4uLlxuICAgIHN0cmVhbS5fc3RhdGUuYXV0aE1ldGhvZCA9IG1ldGhvZDtcblxuICAgIHZhciBjdHg7XG4gICAgaWYgKG1ldGhvZCA9PT0gJ2tleWJvYXJkLWludGVyYWN0aXZlJykge1xuICAgICAgY3R4ID0gbmV3IEtleWJvYXJkQXV0aENvbnRleHQoc3RyZWFtLCB1c2VybmFtZSwgc2VydmljZSwgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kRGF0YSwgb25BdXRoRGVjaWRlKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ3B1YmxpY2tleScpIHtcbiAgICAgIGN0eCA9IG5ldyBQS0F1dGhDb250ZXh0KHN0cmVhbSwgdXNlcm5hbWUsIHNlcnZpY2UsIG1ldGhvZCwgbWV0aG9kRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQXV0aERlY2lkZSk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdob3N0YmFzZWQnKSB7XG4gICAgICBjdHggPSBuZXcgSG9zdGJhc2VkQXV0aENvbnRleHQoc3RyZWFtLCB1c2VybmFtZSwgc2VydmljZSwgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZERhdGEsIG9uQXV0aERlY2lkZSk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgIGN0eCA9IG5ldyBQd2RBdXRoQ29udGV4dChzdHJlYW0sIHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsIG1ldGhvZERhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25BdXRoRGVjaWRlKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ25vbmUnKVxuICAgICAgY3R4ID0gbmV3IEF1dGhDb250ZXh0KHN0cmVhbSwgdXNlcm5hbWUsIHNlcnZpY2UsIG1ldGhvZCwgb25BdXRoRGVjaWRlKTtcblxuICAgIGlmIChhdXRoQ3R4KSB7XG4gICAgICBpZiAoIWF1dGhDdHguX2luaXRpYWxSZXNwb25zZSlcbiAgICAgICAgcmV0dXJuIHBlbmRpbmdBdXRocy5wdXNoKGN0eCk7XG4gICAgICBlbHNlIGlmIChhdXRoQ3R4Ll9tdWx0aXN0ZXAgJiYgIXRoaXMuX2ZpbmFsUmVzcG9uc2UpIHtcbiAgICAgICAgLy8gUkZDIDQyNTIgc2F5cyB0byBzaWxlbnRseSBhYm9ydCB0aGUgY3VycmVudCBhdXRoIHJlcXVlc3QgaWYgYSBuZXdcbiAgICAgICAgLy8gYXV0aCByZXF1ZXN0IGNvbWVzIGluIGJlZm9yZSB0aGUgZmluYWwgcmVzcG9uc2UgZnJvbSBhbiBhdXRoIG1ldGhvZFxuICAgICAgICAvLyB0aGF0IHJlcXVpcmVzIGFkZGl0aW9uYWwgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZXMgLS0gdGhpcyBtZWFuc1xuICAgICAgICAvLyBrZXlib2FyZC1pbnRlcmFjdGl2ZSBmb3Igbm93IC4uLlxuICAgICAgICBhdXRoQ3R4Ll9jbGVhbnVwICYmIGF1dGhDdHguX2NsZWFudXAoKTtcbiAgICAgICAgYXV0aEN0eC5lbWl0KCdhYm9ydCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF1dGhDdHggPSBjdHg7XG5cbiAgICBpZiAobGlzdGVuZXJDb3VudChzZWxmLCAnYXV0aGVudGljYXRpb24nKSlcbiAgICAgIHNlbGYuZW1pdCgnYXV0aGVudGljYXRpb24nLCBhdXRoQ3R4KTtcbiAgICBlbHNlXG4gICAgICBhdXRoQ3R4LnJlamVjdCgpO1xuICB9XG4gIGZ1bmN0aW9uIG9uQXV0aERlY2lkZShjdHgsIGFsbG93ZWQsIG1ldGhvZHNMZWZ0LCBpc1BhcnRpYWwpIHtcbiAgICBpZiAoYXV0aEN0eCA9PT0gY3R4ICYmICFzZWxmLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignVVNFUkFVVEhfUkVRVUVTVCcsIG9uVVNFUkFVVEhfUkVRVUVTVCk7XG4gICAgICAgIGF1dGhDdHggPSB1bmRlZmluZWQ7XG4gICAgICAgIHNlbGYuYXV0aGVudGljYXRlZCA9IHRydWU7XG4gICAgICAgIHN0cmVhbS5hdXRoU3VjY2VzcygpO1xuICAgICAgICBwZW5kaW5nQXV0aHMgPSBbXTtcbiAgICAgICAgc2VsZi5lbWl0KCdyZWFkeScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLmF1dGhGYWlsdXJlKG1ldGhvZHNMZWZ0LCBpc1BhcnRpYWwpO1xuICAgICAgICBpZiAocGVuZGluZ0F1dGhzLmxlbmd0aCkge1xuICAgICAgICAgIGF1dGhDdHggPSBwZW5kaW5nQXV0aHMucG9wKCk7XG4gICAgICAgICAgaWYgKGxpc3RlbmVyQ291bnQoc2VsZiwgJ2F1dGhlbnRpY2F0aW9uJykpXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2F1dGhlbnRpY2F0aW9uJywgYXV0aEN0eCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYXV0aEN0eC5yZWplY3QoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBlbmQgc2VydmljZS9hdXRoLXJlbGF0ZWQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgdW5zZW50R2xvYmFsUmVxdWVzdHNSZXBsaWVzID0gW107XG5cbiAgZnVuY3Rpb24gc2VuZFJlcGxpZXMoKSB7XG4gICAgdmFyIHJlcGx5O1xuICAgIHdoaWxlICh1bnNlbnRHbG9iYWxSZXF1ZXN0c1JlcGxpZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAmJiB1bnNlbnRHbG9iYWxSZXF1ZXN0c1JlcGxpZXNbMF0udHlwZSkge1xuICAgICAgcmVwbHkgPSB1bnNlbnRHbG9iYWxSZXF1ZXN0c1JlcGxpZXMuc2hpZnQoKTtcbiAgICAgIGlmIChyZXBseS50eXBlID09PSAnU1VDQ0VTUycpXG4gICAgICAgIHN0cmVhbS5yZXF1ZXN0U3VjY2VzcyhyZXBseS5idWYpO1xuICAgICAgaWYgKHJlcGx5LnR5cGUgPT09ICdGQUlMVVJFJylcbiAgICAgICAgc3RyZWFtLnJlcXVlc3RGYWlsdXJlKCk7XG4gICAgfVxuICB9XG5cbiAgc3RyZWFtLm9uKCdHTE9CQUxfUkVRVUVTVCcsIGZ1bmN0aW9uKG5hbWUsIHdhbnRSZXBseSwgZGF0YSkge1xuICAgIHZhciByZXBseSA9IHtcbiAgICAgIHR5cGU6IG51bGwsXG4gICAgICBidWY6IG51bGxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gc2V0UmVwbHkodHlwZSwgYnVmKSB7XG4gICAgICByZXBseS50eXBlID0gdHlwZTtcbiAgICAgIHJlcGx5LmJ1ZiA9IGJ1ZjtcbiAgICAgIHNlbmRSZXBsaWVzKCk7XG4gICAgfVxuXG4gICAgaWYgKHdhbnRSZXBseSlcbiAgICAgIHVuc2VudEdsb2JhbFJlcXVlc3RzUmVwbGllcy5wdXNoKHJlcGx5KTtcblxuICAgIGlmICgobmFtZSA9PT0gJ3RjcGlwLWZvcndhcmQnXG4gICAgICAgICB8fCBuYW1lID09PSAnY2FuY2VsLXRjcGlwLWZvcndhcmQnXG4gICAgICAgICB8fCBuYW1lID09PSAnbm8tbW9yZS1zZXNzaW9uc0BvcGVuc3NoLmNvbSdcbiAgICAgICAgIHx8IG5hbWUgPT09ICdzdHJlYW1sb2NhbC1mb3J3YXJkQG9wZW5zc2guY29tJ1xuICAgICAgICAgfHwgbmFtZSA9PT0gJ2NhbmNlbC1zdHJlYW1sb2NhbC1mb3J3YXJkQG9wZW5zc2guY29tJylcbiAgICAgICAgJiYgbGlzdGVuZXJDb3VudChzZWxmLCAncmVxdWVzdCcpXG4gICAgICAgICYmIHNlbGYuYXV0aGVudGljYXRlZCkge1xuICAgICAgdmFyIGFjY2VwdDtcbiAgICAgIHZhciByZWplY3Q7XG5cbiAgICAgIGlmICh3YW50UmVwbHkpIHtcbiAgICAgICAgdmFyIHJlcGxpZWQgPSBmYWxzZTtcbiAgICAgICAgYWNjZXB0ID0gZnVuY3Rpb24oY2hvc2VuUG9ydCkge1xuICAgICAgICAgIGlmIChyZXBsaWVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHJlcGxpZWQgPSB0cnVlO1xuICAgICAgICAgIHZhciBidWZQb3J0O1xuICAgICAgICAgIGlmIChuYW1lID09PSAndGNwaXAtZm9yd2FyZCdcbiAgICAgICAgICAgICAgJiYgZGF0YS5iaW5kUG9ydCA9PT0gMFxuICAgICAgICAgICAgICAmJiB0eXBlb2YgY2hvc2VuUG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGJ1ZlBvcnQgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgICAgICAgICB3cml0ZVVJbnQzMkJFKGJ1ZlBvcnQsIGNob3NlblBvcnQsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRSZXBseSgnU1VDQ0VTUycsIGJ1ZlBvcnQpO1xuICAgICAgICB9O1xuICAgICAgICByZWplY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAocmVwbGllZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICByZXBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICBzZXRSZXBseSgnRkFJTFVSRScpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gJ25vLW1vcmUtc2Vzc2lvbnNAb3BlbnNzaC5jb20nKSB7XG4gICAgICAgIHNlbGYubm9Nb3JlU2Vzc2lvbnMgPSB0cnVlO1xuICAgICAgICBhY2NlcHQgJiYgYWNjZXB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5lbWl0KCdyZXF1ZXN0JywgYWNjZXB0LCByZWplY3QsIG5hbWUsIGRhdGEpO1xuICAgIH0gZWxzZSBpZiAod2FudFJlcGx5KVxuICAgICAgc2V0UmVwbHkoJ0ZBSUxVUkUnKTtcbiAgfSk7XG5cbiAgc3RyZWFtLm9uKCdDSEFOTkVMX09QRU4nLCBmdW5jdGlvbihpbmZvKSB7XG4gICAgLy8gZG8gZWFybHkgcmVqZWN0IGluIHNvbWUgY2FzZXMgdG8gcHJldmVudCB3YXN0ZWZ1bCBjaGFubmVsIGFsbG9jYXRpb25cbiAgICBpZiAoKGluZm8udHlwZSA9PT0gJ3Nlc3Npb24nICYmIHNlbGYubm9Nb3JlU2Vzc2lvbnMpXG4gICAgICAgIHx8ICFzZWxmLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHZhciByZWFzb25Db2RlID0gQ0hBTk5FTF9PUEVOX0ZBSUxVUkUuQURNSU5JU1RSQVRJVkVMWV9QUk9ISUJJVEVEO1xuICAgICAgcmV0dXJuIHN0cmVhbS5jaGFubmVsT3BlbkZhaWwoaW5mby5zZW5kZXIsIHJlYXNvbkNvZGUpO1xuICAgIH1cblxuICAgIHZhciBsb2NhbENoYW4gPSBuZXh0Q2hhbm5lbChzZWxmKTtcbiAgICB2YXIgYWNjZXB0O1xuICAgIHZhciByZWplY3Q7XG4gICAgdmFyIHJlcGxpZWQgPSBmYWxzZTtcbiAgICBpZiAobG9jYWxDaGFuID09PSBmYWxzZSkge1xuICAgICAgLy8gYXV0by1yZWplY3QgZHVlIHRvIG5vIGNoYW5uZWxzIGF2YWlsYWJsZVxuICAgICAgcmV0dXJuIHN0cmVhbS5jaGFubmVsT3BlbkZhaWwoaW5mby5zZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX09QRU5fRkFJTFVSRS5SRVNPVVJDRV9TSE9SVEFHRSk7XG4gICAgfVxuXG4gICAgLy8gYmUgb3B0aW1pc3RpYywgcmVzZXJ2ZSBjaGFubmVsIHRvIHByZXZlbnQgYW5vdGhlciByZXF1ZXN0IGZyb20gdHJ5aW5nIHRvXG4gICAgLy8gdGFrZSB0aGUgc2FtZSBjaGFubmVsXG4gICAgY2hhbm5lbHNbbG9jYWxDaGFuXSA9IHRydWU7XG5cbiAgICByZWplY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChyZXBsaWVkKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIHJlcGxpZWQgPSB0cnVlO1xuXG4gICAgICBkZWxldGUgY2hhbm5lbHNbbG9jYWxDaGFuXTtcblxuICAgICAgdmFyIHJlYXNvbkNvZGUgPSBDSEFOTkVMX09QRU5fRkFJTFVSRS5BRE1JTklTVFJBVElWRUxZX1BST0hJQklURUQ7XG4gICAgICByZXR1cm4gc3RyZWFtLmNoYW5uZWxPcGVuRmFpbChpbmZvLnNlbmRlciwgcmVhc29uQ29kZSk7XG4gICAgfTtcblxuICAgIHN3aXRjaCAoaW5mby50eXBlKSB7XG4gICAgICBjYXNlICdzZXNzaW9uJzpcbiAgICAgICAgaWYgKGxpc3RlbmVyQ291bnQoc2VsZiwgJ3Nlc3Npb24nKSkge1xuICAgICAgICAgIGFjY2VwdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHJlcGxpZWQpXG4gICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgcmVwbGllZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHN0cmVhbS5jaGFubmVsT3BlbkNvbmZpcm0oaW5mby5zZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2hhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbC5NQVhfV0lORE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFubmVsLlBBQ0tFVF9TSVpFKTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uKHNlbGYsIGluZm8sIGxvY2FsQ2hhbik7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHNlbGYuZW1pdCgnc2Vzc2lvbicsIGFjY2VwdCwgcmVqZWN0KTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmVqZWN0KCk7XG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RpcmVjdC10Y3BpcCc6XG4gICAgICAgIGlmIChsaXN0ZW5lckNvdW50KHNlbGYsICd0Y3BpcCcpKSB7XG4gICAgICAgICAgYWNjZXB0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAocmVwbGllZClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICByZXBsaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgc3RyZWFtLmNoYW5uZWxPcGVuQ29uZmlybShpbmZvLnNlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxDaGFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFubmVsLk1BWF9XSU5ET1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwuUEFDS0VUX1NJWkUpO1xuXG4gICAgICAgICAgICB2YXIgY2hhbmluZm8gPSB7XG4gICAgICAgICAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgaW5jb21pbmc6IHtcbiAgICAgICAgICAgICAgICBpZDogbG9jYWxDaGFuLFxuICAgICAgICAgICAgICAgIHdpbmRvdzogQ2hhbm5lbC5NQVhfV0lORE9XLFxuICAgICAgICAgICAgICAgIHBhY2tldFNpemU6IENoYW5uZWwuUEFDS0VUX1NJWkUsXG4gICAgICAgICAgICAgICAgc3RhdGU6ICdvcGVuJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvdXRnb2luZzoge1xuICAgICAgICAgICAgICAgIGlkOiBpbmZvLnNlbmRlcixcbiAgICAgICAgICAgICAgICB3aW5kb3c6IGluZm8ud2luZG93LFxuICAgICAgICAgICAgICAgIHBhY2tldFNpemU6IGluZm8ucGFja2V0U2l6ZSxcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ29wZW4nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2hhbm5lbChjaGFuaW5mbywgc2VsZik7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHNlbGYuZW1pdCgndGNwaXAnLCBhY2NlcHQsIHJlamVjdCwgaW5mby5kYXRhKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmVqZWN0KCk7XG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RpcmVjdC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbSc6XG4gICAgICAgIGlmIChsaXN0ZW5lckNvdW50KHNlbGYsICdvcGVuc3NoLnN0cmVhbWxvY2FsJykpIHtcbiAgICAgICAgICBhY2NlcHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChyZXBsaWVkKVxuICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHJlcGxpZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBzdHJlYW0uY2hhbm5lbE9wZW5Db25maXJtKGluZm8uc2VuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbENoYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwuTUFYX1dJTkRPVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbC5QQUNLRVRfU0laRSk7XG5cbiAgICAgICAgICAgIHZhciBjaGFuaW5mbyA9IHtcbiAgICAgICAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBpbmNvbWluZzoge1xuICAgICAgICAgICAgICAgIGlkOiBsb2NhbENoYW4sXG4gICAgICAgICAgICAgICAgd2luZG93OiBDaGFubmVsLk1BWF9XSU5ET1csXG4gICAgICAgICAgICAgICAgcGFja2V0U2l6ZTogQ2hhbm5lbC5QQUNLRVRfU0laRSxcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ29wZW4nXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG91dGdvaW5nOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGluZm8uc2VuZGVyLFxuICAgICAgICAgICAgICAgIHdpbmRvdzogaW5mby53aW5kb3csXG4gICAgICAgICAgICAgICAgcGFja2V0U2l6ZTogaW5mby5wYWNrZXRTaXplLFxuICAgICAgICAgICAgICAgIHN0YXRlOiAnb3BlbidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGFubmVsKGNoYW5pbmZvLCBzZWxmKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc2VsZi5lbWl0KCdvcGVuc3NoLnN0cmVhbWxvY2FsJywgYWNjZXB0LCByZWplY3QsIGluZm8uZGF0YSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBhdXRvLXJlamVjdCB1bnN1cHBvcnRlZCBjaGFubmVsIHR5cGVzXG4gICAgICAgIHJlamVjdCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgc3RyZWFtLm9uKCdORVdLRVlTJywgZnVuY3Rpb24oKSB7XG4gICAgaWYgKCsrZXhjaGFuZ2VzID4gMSlcbiAgICAgIHNlbGYuZW1pdCgncmVrZXknKTtcbiAgfSk7XG5cbiAgaWYgKGthTWdyKSB7XG4gICAgdGhpcy5vbmNlKCdyZWFkeScsIGZ1bmN0aW9uKCkge1xuICAgICAga2FNZ3IuYWRkKHN0cmVhbSk7XG4gICAgfSk7XG4gIH1cbn1cbmluaGVyaXRzKENsaWVudCwgRXZlbnRFbWl0dGVyKTtcblxuQ2xpZW50LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3NzaHN0cmVhbS5kaXNjb25uZWN0KERJU0NPTk5FQ1RfUkVBU09OLkJZX0FQUExJQ0FUSU9OKTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUueDExID0gZnVuY3Rpb24ob3JpZ2luQWRkciwgb3JpZ2luUG9ydCwgY2IpIHtcbiAgdmFyIG9wdHMgPSB7XG4gICAgb3JpZ2luQWRkcjogb3JpZ2luQWRkcixcbiAgICBvcmlnaW5Qb3J0OiBvcmlnaW5Qb3J0XG4gIH07XG4gIHJldHVybiBvcGVuQ2hhbm5lbCh0aGlzLCAneDExJywgb3B0cywgY2IpO1xufTtcblxuQ2xpZW50LnByb3RvdHlwZS5mb3J3YXJkT3V0ID0gZnVuY3Rpb24oYm91bmRBZGRyLCBib3VuZFBvcnQsIHJlbW90ZUFkZHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVQb3J0LCBjYikge1xuICB2YXIgb3B0cyA9IHtcbiAgICBib3VuZEFkZHI6IGJvdW5kQWRkcixcbiAgICBib3VuZFBvcnQ6IGJvdW5kUG9ydCxcbiAgICByZW1vdGVBZGRyOiByZW1vdGVBZGRyLFxuICAgIHJlbW90ZVBvcnQ6IHJlbW90ZVBvcnRcbiAgfTtcbiAgcmV0dXJuIG9wZW5DaGFubmVsKHRoaXMsICdmb3J3YXJkZWQtdGNwaXAnLCBvcHRzLCBjYik7XG59O1xuXG5DbGllbnQucHJvdG90eXBlLm9wZW5zc2hfZm9yd2FyZE91dFN0cmVhbUxvY2FsID0gZnVuY3Rpb24oc29ja2V0UGF0aCwgY2IpIHtcbiAgdmFyIG9wdHMgPSB7XG4gICAgc29ja2V0UGF0aDogc29ja2V0UGF0aFxuICB9O1xuICByZXR1cm4gb3BlbkNoYW5uZWwodGhpcywgJ2ZvcndhcmRlZC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbScsIG9wdHMsIGNiKTtcbn07XG5cbkNsaWVudC5wcm90b3R5cGUucmVrZXkgPSBmdW5jdGlvbihjYikge1xuICB2YXIgc3RyZWFtID0gdGhpcy5fc3Noc3RyZWFtO1xuICB2YXIgcmV0ID0gdHJ1ZTtcbiAgdmFyIGVycm9yO1xuXG4gIHRyeSB7XG4gICAgcmV0ID0gc3RyZWFtLnJla2V5KCk7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgZXJyb3IgPSBleDtcbiAgfVxuXG4gIC8vIFRPRE86IHJlLXRocm93IGVycm9yIGlmIG5vIGNhbGxiYWNrP1xuXG4gIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIGNiKGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZVxuICAgICAgdGhpcy5vbmNlKCdyZWtleScsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBTZXNzaW9uKGNsaWVudCwgaW5mbywgbG9jYWxDaGFuKSB7XG4gIHRoaXMuc3VidHlwZSA9IHVuZGVmaW5lZDtcblxuICB2YXIgZW5kaW5nID0gZmFsc2U7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG91dGdvaW5nSWQgPSBpbmZvLnNlbmRlcjtcbiAgdmFyIGNoYW5uZWw7XG5cbiAgdmFyIGNoYW5pbmZvID0ge1xuICAgIHR5cGU6ICdzZXNzaW9uJyxcbiAgICBpbmNvbWluZzoge1xuICAgICAgaWQ6IGxvY2FsQ2hhbixcbiAgICAgIHdpbmRvdzogQ2hhbm5lbC5NQVhfV0lORE9XLFxuICAgICAgcGFja2V0U2l6ZTogQ2hhbm5lbC5QQUNLRVRfU0laRSxcbiAgICAgIHN0YXRlOiAnb3BlbidcbiAgICB9LFxuICAgIG91dGdvaW5nOiB7XG4gICAgICBpZDogaW5mby5zZW5kZXIsXG4gICAgICB3aW5kb3c6IGluZm8ud2luZG93LFxuICAgICAgcGFja2V0U2l6ZTogaW5mby5wYWNrZXRTaXplLFxuICAgICAgc3RhdGU6ICdvcGVuJ1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBvblJFUVVFU1QoaW5mbykge1xuICAgIHZhciByZXBsaWVkID0gZmFsc2U7XG4gICAgdmFyIGFjY2VwdDtcbiAgICB2YXIgcmVqZWN0O1xuXG4gICAgaWYgKGluZm8ud2FudFJlcGx5KSB7XG4gICAgICAvLyBcInJlYWwgc2Vzc2lvblwiIHJlcXVlc3RzIHdpbGwgaGF2ZSBjdXN0b20gYWNjZXB0IGJlaGF2aW9yc1xuICAgICAgaWYgKGluZm8ucmVxdWVzdCAhPT0gJ3NoZWxsJ1xuICAgICAgICAgICYmIGluZm8ucmVxdWVzdCAhPT0gJ2V4ZWMnXG4gICAgICAgICAgJiYgaW5mby5yZXF1ZXN0ICE9PSAnc3Vic3lzdGVtJykge1xuICAgICAgICBhY2NlcHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAocmVwbGllZCB8fCBlbmRpbmcgfHwgY2hhbm5lbClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgIHJlcGxpZWQgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIGNsaWVudC5fc3Noc3RyZWFtLmNoYW5uZWxTdWNjZXNzKG91dGdvaW5nSWQpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZWplY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHJlcGxpZWQgfHwgZW5kaW5nIHx8IGNoYW5uZWwpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHJlcGxpZWQgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBjbGllbnQuX3NzaHN0cmVhbS5jaGFubmVsRmFpbHVyZShvdXRnb2luZ0lkKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGVuZGluZykge1xuICAgICAgcmVqZWN0ICYmIHJlamVjdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoaW5mby5yZXF1ZXN0KSB7XG4gICAgICAvLyBcInByZS1yZWFsIHNlc3Npb24gc3RhcnRcIiByZXF1ZXN0c1xuICAgICAgY2FzZSAnZW52JzpcbiAgICAgICAgaWYgKGxpc3RlbmVyQ291bnQoc2VsZiwgJ2VudicpKSB7XG4gICAgICAgICAgc2VsZi5lbWl0KCdlbnYnLCBhY2NlcHQsIHJlamVjdCwge1xuICAgICAgICAgICAga2V5OiBpbmZvLmtleSxcbiAgICAgICAgICAgIHZhbDogaW5mby52YWxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmVqZWN0ICYmIHJlamVjdCgpO1xuICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwdHktcmVxJzpcbiAgICAgICAgaWYgKGxpc3RlbmVyQ291bnQoc2VsZiwgJ3B0eScpKSB7XG4gICAgICAgICAgc2VsZi5lbWl0KCdwdHknLCBhY2NlcHQsIHJlamVjdCwge1xuICAgICAgICAgICAgY29sczogaW5mby5jb2xzLFxuICAgICAgICAgICAgcm93czogaW5mby5yb3dzLFxuICAgICAgICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgICAgICAgdGVybTogaW5mby50ZXJtLFxuICAgICAgICAgICAgbW9kZXM6IGluZm8ubW9kZXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHJlamVjdCAmJiByZWplY3QoKTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2luZG93LWNoYW5nZSc6XG4gICAgICAgIGlmIChsaXN0ZW5lckNvdW50KHNlbGYsICd3aW5kb3ctY2hhbmdlJykpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoJ3dpbmRvdy1jaGFuZ2UnLCBhY2NlcHQsIHJlamVjdCwge1xuICAgICAgICAgICAgY29sczogaW5mby5jb2xzLFxuICAgICAgICAgICAgcm93czogaW5mby5yb3dzLFxuICAgICAgICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHJlamVjdCAmJiByZWplY3QoKTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAneDExLXJlcSc6XG4gICAgICAgIGlmIChsaXN0ZW5lckNvdW50KHNlbGYsICd4MTEnKSkge1xuICAgICAgICAgIHNlbGYuZW1pdCgneDExJywgYWNjZXB0LCByZWplY3QsIHtcbiAgICAgICAgICAgIHNpbmdsZTogaW5mby5zaW5nbGUsXG4gICAgICAgICAgICBwcm90b2NvbDogaW5mby5wcm90b2NvbCxcbiAgICAgICAgICAgIGNvb2tpZTogaW5mby5jb29raWUsXG4gICAgICAgICAgICBzY3JlZW46IGluZm8uc2NyZWVuXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHJlamVjdCAmJiByZWplY3QoKTtcbiAgICAgIGJyZWFrO1xuICAgICAgLy8gXCJwb3N0LXJlYWwgc2Vzc2lvbiBzdGFydFwiIHJlcXVlc3RzXG4gICAgICBjYXNlICdzaWduYWwnOlxuICAgICAgICBpZiAobGlzdGVuZXJDb3VudChzZWxmLCAnc2lnbmFsJykpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoJ3NpZ25hbCcsIGFjY2VwdCwgcmVqZWN0LCB7XG4gICAgICAgICAgICBuYW1lOiBpbmZvLnNpZ25hbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZWplY3QgJiYgcmVqZWN0KCk7XG4gICAgICBicmVhaztcbiAgICAgIC8vIFhYWDogaXMgYGF1dGgtYWdlbnQtcmVxQG9wZW5zc2guY29tYCByZWFsbHkgXCJwb3N0LXJlYWwgc2Vzc2lvbiBzdGFydFwiP1xuICAgICAgY2FzZSAnYXV0aC1hZ2VudC1yZXFAb3BlbnNzaC5jb20nOlxuICAgICAgICBpZiAobGlzdGVuZXJDb3VudChzZWxmLCAnYXV0aC1hZ2VudCcpKVxuICAgICAgICAgIHNlbGYuZW1pdCgnYXV0aC1hZ2VudCcsIGFjY2VwdCwgcmVqZWN0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJlamVjdCAmJiByZWplY3QoKTtcbiAgICAgIGJyZWFrO1xuICAgICAgLy8gXCJyZWFsIHNlc3Npb24gc3RhcnRcIiByZXF1ZXN0c1xuICAgICAgY2FzZSAnc2hlbGwnOlxuICAgICAgICBpZiAobGlzdGVuZXJDb3VudChzZWxmLCAnc2hlbGwnKSkge1xuICAgICAgICAgIGFjY2VwdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHJlcGxpZWQgfHwgZW5kaW5nIHx8IGNoYW5uZWwpXG4gICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgcmVwbGllZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpbmZvLndhbnRSZXBseSlcbiAgICAgICAgICAgICAgY2xpZW50Ll9zc2hzdHJlYW0uY2hhbm5lbFN1Y2Nlc3Mob3V0Z29pbmdJZCk7XG5cbiAgICAgICAgICAgIGNoYW5uZWwgPSBuZXcgQ2hhbm5lbChjaGFuaW5mbywgY2xpZW50LCB7IHNlcnZlcjogdHJ1ZSB9KTtcblxuICAgICAgICAgICAgY2hhbm5lbC5zdWJ0eXBlID0gc2VsZi5zdWJ0eXBlID0gaW5mby5yZXF1ZXN0O1xuXG4gICAgICAgICAgICByZXR1cm4gY2hhbm5lbDtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc2VsZi5lbWl0KCdzaGVsbCcsIGFjY2VwdCwgcmVqZWN0KTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmVqZWN0ICYmIHJlamVjdCgpO1xuICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdleGVjJzpcbiAgICAgICAgaWYgKGxpc3RlbmVyQ291bnQoc2VsZiwgJ2V4ZWMnKSkge1xuICAgICAgICAgIGFjY2VwdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHJlcGxpZWQgfHwgZW5kaW5nIHx8IGNoYW5uZWwpXG4gICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgcmVwbGllZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpbmZvLndhbnRSZXBseSlcbiAgICAgICAgICAgICAgY2xpZW50Ll9zc2hzdHJlYW0uY2hhbm5lbFN1Y2Nlc3Mob3V0Z29pbmdJZCk7XG5cbiAgICAgICAgICAgIGNoYW5uZWwgPSBuZXcgQ2hhbm5lbChjaGFuaW5mbywgY2xpZW50LCB7IHNlcnZlcjogdHJ1ZSB9KTtcblxuICAgICAgICAgICAgY2hhbm5lbC5zdWJ0eXBlID0gc2VsZi5zdWJ0eXBlID0gaW5mby5yZXF1ZXN0O1xuXG4gICAgICAgICAgICByZXR1cm4gY2hhbm5lbDtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc2VsZi5lbWl0KCdleGVjJywgYWNjZXB0LCByZWplY3QsIHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IGluZm8uY29tbWFuZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZWplY3QgJiYgcmVqZWN0KCk7XG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N1YnN5c3RlbSc6XG4gICAgICAgIGFjY2VwdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChyZXBsaWVkIHx8IGVuZGluZyB8fCBjaGFubmVsKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgcmVwbGllZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoaW5mby53YW50UmVwbHkpXG4gICAgICAgICAgICBjbGllbnQuX3NzaHN0cmVhbS5jaGFubmVsU3VjY2VzcyhvdXRnb2luZ0lkKTtcblxuICAgICAgICAgIGNoYW5uZWwgPSBuZXcgQ2hhbm5lbChjaGFuaW5mbywgY2xpZW50LCB7IHNlcnZlcjogdHJ1ZSB9KTtcblxuICAgICAgICAgIGNoYW5uZWwuc3VidHlwZSA9IHNlbGYuc3VidHlwZSA9IChpbmZvLnJlcXVlc3QgKyAnOicgKyBpbmZvLnN1YnN5c3RlbSk7XG5cbiAgICAgICAgICBpZiAoaW5mby5zdWJzeXN0ZW0gPT09ICdzZnRwJykge1xuICAgICAgICAgICAgdmFyIHNmdHAgPSBuZXcgU0ZUUFN0cmVhbSh7XG4gICAgICAgICAgICAgIHNlcnZlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVidWc6IGNsaWVudC5fc3Noc3RyZWFtLmRlYnVnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNoYW5uZWwucGlwZShzZnRwKS5waXBlKGNoYW5uZWwpO1xuXG4gICAgICAgICAgICByZXR1cm4gc2Z0cDtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHJldHVybiBjaGFubmVsO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpbmZvLnN1YnN5c3RlbSA9PT0gJ3NmdHAnICYmIGxpc3RlbmVyQ291bnQoc2VsZiwgJ3NmdHAnKSlcbiAgICAgICAgICBzZWxmLmVtaXQoJ3NmdHAnLCBhY2NlcHQsIHJlamVjdCk7XG4gICAgICAgIGVsc2UgaWYgKGluZm8uc3Vic3lzdGVtICE9PSAnc2Z0cCcgJiYgbGlzdGVuZXJDb3VudChzZWxmLCAnc3Vic3lzdGVtJykpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoJ3N1YnN5c3RlbScsIGFjY2VwdCwgcmVqZWN0LCB7XG4gICAgICAgICAgICBuYW1lOiBpbmZvLnN1YnN5c3RlbVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZWplY3QgJiYgcmVqZWN0KCk7XG4gICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlamVjdCAmJiByZWplY3QoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25FT0YoKSB7XG4gICAgZW5kaW5nID0gdHJ1ZTtcbiAgICBzZWxmLmVtaXQoJ2VvZicpO1xuICAgIHNlbGYuZW1pdCgnZW5kJyk7XG4gIH1cbiAgZnVuY3Rpb24gb25DTE9TRSgpIHtcbiAgICBlbmRpbmcgPSB0cnVlO1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnKTtcbiAgfVxuICBjbGllbnQuX3NzaHN0cmVhbVxuICAgICAgICAub24oJ0NIQU5ORUxfUkVRVUVTVDonICsgbG9jYWxDaGFuLCBvblJFUVVFU1QpXG4gICAgICAgIC5vbmNlKCdDSEFOTkVMX0VPRjonICsgbG9jYWxDaGFuLCBvbkVPRilcbiAgICAgICAgLm9uY2UoJ0NIQU5ORUxfQ0xPU0U6JyArIGxvY2FsQ2hhbiwgb25DTE9TRSk7XG59XG5pbmhlcml0cyhTZXNzaW9uLCBFdmVudEVtaXR0ZXIpO1xuXG5cbmZ1bmN0aW9uIEF1dGhDb250ZXh0KHN0cmVhbSwgdXNlcm5hbWUsIHNlcnZpY2UsIG1ldGhvZCwgY2IpIHtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMudXNlcm5hbWUgPSB0aGlzLnVzZXIgPSB1c2VybmFtZTtcbiAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gIHRoaXMuX2luaXRpYWxSZXNwb25zZSA9IGZhbHNlO1xuICB0aGlzLl9maW5hbFJlc3BvbnNlID0gZmFsc2U7XG4gIHRoaXMuX211bHRpc3RlcCA9IGZhbHNlO1xuICB0aGlzLl9jYmZpbmFsID0gZnVuY3Rpb24oYWxsb3dlZCwgbWV0aG9kc0xlZnQsIGlzUGFydGlhbCkge1xuICAgIGlmICghc2VsZi5fZmluYWxSZXNwb25zZSkge1xuICAgICAgc2VsZi5fZmluYWxSZXNwb25zZSA9IHRydWU7XG4gICAgICBjYihzZWxmLCBhbGxvd2VkLCBtZXRob2RzTGVmdCwgaXNQYXJ0aWFsKTtcbiAgICB9XG4gIH07XG4gIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbn1cbmluaGVyaXRzKEF1dGhDb250ZXh0LCBFdmVudEVtaXR0ZXIpO1xuQXV0aENvbnRleHQucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhbnVwICYmIHRoaXMuX2NsZWFudXAoKTtcbiAgdGhpcy5faW5pdGlhbFJlc3BvbnNlID0gdHJ1ZTtcbiAgdGhpcy5fY2JmaW5hbCh0cnVlKTtcbn07XG5BdXRoQ29udGV4dC5wcm90b3R5cGUucmVqZWN0ID0gZnVuY3Rpb24obWV0aG9kc0xlZnQsIGlzUGFydGlhbCkge1xuICB0aGlzLl9jbGVhbnVwICYmIHRoaXMuX2NsZWFudXAoKTtcbiAgdGhpcy5faW5pdGlhbFJlc3BvbnNlID0gdHJ1ZTtcbiAgdGhpcy5fY2JmaW5hbChmYWxzZSwgbWV0aG9kc0xlZnQsIGlzUGFydGlhbCk7XG59O1xuXG52YXIgUkVfS0JJTlRfU1VCTUVUSE9EUyA9IC9bIFxcdFxcclxcbl0qLFsgXFx0XFxyXFxuXSovZztcbmZ1bmN0aW9uIEtleWJvYXJkQXV0aENvbnRleHQoc3RyZWFtLCB1c2VybmFtZSwgc2VydmljZSwgbWV0aG9kLCBzdWJtZXRob2RzLCBjYikge1xuICBBdXRoQ29udGV4dC5jYWxsKHRoaXMsIHN0cmVhbSwgdXNlcm5hbWUsIHNlcnZpY2UsIG1ldGhvZCwgY2IpO1xuICB0aGlzLl9tdWx0aXN0ZXAgPSB0cnVlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fb25JbmZvUmVzcG9uc2UgPSBmdW5jdGlvbihyZXNwb25zZXMpIHtcbiAgICBpZiAoc2VsZi5fY2IpIHtcbiAgICAgIHZhciBjYWxsYmFjayA9IHNlbGYuX2NiO1xuICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWQ7XG4gICAgICBjYWxsYmFjayhyZXNwb25zZXMpO1xuICAgIH1cbiAgfTtcbiAgdGhpcy5zdWJtZXRob2RzID0gc3VibWV0aG9kcy5zcGxpdChSRV9LQklOVF9TVUJNRVRIT0RTKTtcbiAgdGhpcy5vbignYWJvcnQnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLl9jYiAmJiBzZWxmLl9jYihuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIHJlcXVlc3QgYWJvcnRlZCcpKTtcbiAgfSk7XG59XG5pbmhlcml0cyhLZXlib2FyZEF1dGhDb250ZXh0LCBBdXRoQ29udGV4dCk7XG5LZXlib2FyZEF1dGhDb250ZXh0LnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9zdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ1VTRVJBVVRIX0lORk9fUkVTUE9OU0UnLCB0aGlzLl9vbkluZm9SZXNwb25zZSk7XG59O1xuS2V5Ym9hcmRBdXRoQ29udGV4dC5wcm90b3R5cGUucHJvbXB0ID0gZnVuY3Rpb24ocHJvbXB0cywgdGl0bGUsIGluc3RydWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwcm9tcHRzKSlcbiAgICBwcm9tcHRzID0gWyBwcm9tcHRzIF07XG5cbiAgaWYgKHR5cGVvZiB0aXRsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gdGl0bGU7XG4gICAgdGl0bGUgPSBpbnN0cnVjdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGluc3RydWN0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gaW5zdHJ1Y3Rpb25zO1xuICAgIGluc3RydWN0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvbXB0cy5sZW5ndGg7ICsraSkge1xuICAgIGlmICh0eXBlb2YgcHJvbXB0c1tpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb21wdHNbaV0gPSB7XG4gICAgICAgIHByb21wdDogcHJvbXB0c1tpXSxcbiAgICAgICAgZWNobzogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB0aGlzLl9jYiA9IGNiO1xuICB0aGlzLl9pbml0aWFsUmVzcG9uc2UgPSB0cnVlO1xuICB0aGlzLl9zdHJlYW0ub25jZSgnVVNFUkFVVEhfSU5GT19SRVNQT05TRScsIHRoaXMuX29uSW5mb1Jlc3BvbnNlKTtcblxuICByZXR1cm4gdGhpcy5fc3RyZWFtLmF1dGhJbmZvUmVxKHRpdGxlLCBpbnN0cnVjdGlvbnMsIHByb21wdHMpO1xufTtcblxuZnVuY3Rpb24gUEtBdXRoQ29udGV4dChzdHJlYW0sIHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsIHBrSW5mbywgY2IpIHtcbiAgQXV0aENvbnRleHQuY2FsbCh0aGlzLCBzdHJlYW0sIHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsIGNiKTtcblxuICB0aGlzLmtleSA9IHsgYWxnbzogcGtJbmZvLmtleUFsZ28sIGRhdGE6IHBrSW5mby5rZXkgfTtcbiAgdGhpcy5zaWduYXR1cmUgPSBwa0luZm8uc2lnbmF0dXJlO1xuICB2YXIgc2lnQWxnbztcbiAgaWYgKHRoaXMuc2lnbmF0dXJlKSB7XG4gICAgLy8gVE9ETzogbW92ZSBrZXkgdHlwZSBjaGVja2luZyBsb2dpYyB0byBzc2gyLXN0cmVhbXNcbiAgICBzd2l0Y2ggKHBrSW5mby5rZXlBbGdvKSB7XG4gICAgICBjYXNlICdzc2gtcnNhJzpcbiAgICAgIGNhc2UgJ3NzaC1kc3MnOlxuICAgICAgICBzaWdBbGdvID0gJ3NoYTEnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NzaC1lZDI1NTE5JzpcbiAgICAgICAgc2lnQWxnbyA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDI1Nic6XG4gICAgICAgIHNpZ0FsZ28gPSAnc2hhMjU2JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlY2RzYS1zaGEyLW5pc3RwMzg0JzpcbiAgICAgICAgc2lnQWxnbyA9ICdzaGEzODQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHA1MjEnOlxuICAgICAgICBzaWdBbGdvID0gJ3NoYTUxMic7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB0aGlzLnNpZ0FsZ28gPSBzaWdBbGdvO1xuICB0aGlzLmJsb2IgPSBwa0luZm8uYmxvYjtcbn1cbmluaGVyaXRzKFBLQXV0aENvbnRleHQsIEF1dGhDb250ZXh0KTtcblBLQXV0aENvbnRleHQucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuc2lnbmF0dXJlKSB7XG4gICAgdGhpcy5faW5pdGlhbFJlc3BvbnNlID0gdHJ1ZTtcbiAgICB0aGlzLl9zdHJlYW0uYXV0aFBLT0sodGhpcy5rZXkuYWxnbywgdGhpcy5rZXkuZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgQXV0aENvbnRleHQucHJvdG90eXBlLmFjY2VwdC5jYWxsKHRoaXMpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBIb3N0YmFzZWRBdXRoQ29udGV4dChzdHJlYW0sIHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsIHBrSW5mbywgY2IpIHtcbiAgQXV0aENvbnRleHQuY2FsbCh0aGlzLCBzdHJlYW0sIHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsIGNiKTtcblxuICB0aGlzLmtleSA9IHsgYWxnbzogcGtJbmZvLmtleUFsZ28sIGRhdGE6IHBrSW5mby5rZXkgfTtcbiAgdGhpcy5zaWduYXR1cmUgPSBwa0luZm8uc2lnbmF0dXJlO1xuICB2YXIgc2lnQWxnbztcbiAgaWYgKHRoaXMuc2lnbmF0dXJlKSB7XG4gICAgLy8gVE9ETzogbW92ZSBrZXkgdHlwZSBjaGVja2luZyBsb2dpYyB0byBzc2gyLXN0cmVhbXNcbiAgICBzd2l0Y2ggKHBrSW5mby5rZXlBbGdvKSB7XG4gICAgICBjYXNlICdzc2gtcnNhJzpcbiAgICAgIGNhc2UgJ3NzaC1kc3MnOlxuICAgICAgICBzaWdBbGdvID0gJ3NoYTEnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NzaC1lZDI1NTE5JzpcbiAgICAgICAgc2lnQWxnbyA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWNkc2Etc2hhMi1uaXN0cDI1Nic6XG4gICAgICAgIHNpZ0FsZ28gPSAnc2hhMjU2JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlY2RzYS1zaGEyLW5pc3RwMzg0JzpcbiAgICAgICAgc2lnQWxnbyA9ICdzaGEzODQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VjZHNhLXNoYTItbmlzdHA1MjEnOlxuICAgICAgICBzaWdBbGdvID0gJ3NoYTUxMic7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB0aGlzLnNpZ0FsZ28gPSBzaWdBbGdvO1xuICB0aGlzLmJsb2IgPSBwa0luZm8uYmxvYjtcbiAgdGhpcy5sb2NhbEhvc3RuYW1lID0gcGtJbmZvLmxvY2FsSG9zdG5hbWU7XG4gIHRoaXMubG9jYWxVc2VybmFtZSA9IHBrSW5mby5sb2NhbFVzZXJuYW1lO1xufVxuaW5oZXJpdHMoSG9zdGJhc2VkQXV0aENvbnRleHQsIEF1dGhDb250ZXh0KTtcblxuZnVuY3Rpb24gUHdkQXV0aENvbnRleHQoc3RyZWFtLCB1c2VybmFtZSwgc2VydmljZSwgbWV0aG9kLCBwYXNzd29yZCwgY2IpIHtcbiAgQXV0aENvbnRleHQuY2FsbCh0aGlzLCBzdHJlYW0sIHVzZXJuYW1lLCBzZXJ2aWNlLCBtZXRob2QsIGNiKTtcblxuICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG59XG5pbmhlcml0cyhQd2RBdXRoQ29udGV4dCwgQXV0aENvbnRleHQpO1xuXG5cbmZ1bmN0aW9uIG9wZW5DaGFubmVsKHNlbGYsIHR5cGUsIG9wdHMsIGNiKSB7XG4gIC8vIGFzayB0aGUgY2xpZW50IHRvIG9wZW4gYSBjaGFubmVsIGZvciBzb21lIHB1cnBvc2VcbiAgLy8gKGUuZy4gYSBmb3J3YXJkZWQgVENQIGNvbm5lY3Rpb24pXG4gIHZhciBsb2NhbENoYW4gPSBuZXh0Q2hhbm5lbChzZWxmKTtcbiAgdmFyIGluaXRXaW5kb3cgPSBDaGFubmVsLk1BWF9XSU5ET1c7XG4gIHZhciBtYXhQYWNrZXQgPSBDaGFubmVsLlBBQ0tFVF9TSVpFO1xuICB2YXIgcmV0ID0gdHJ1ZTtcblxuICBpZiAobG9jYWxDaGFuID09PSBmYWxzZSlcbiAgICByZXR1cm4gY2IobmV3IEVycm9yKCdObyBmcmVlIGNoYW5uZWxzIGF2YWlsYWJsZScpKTtcblxuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgc2VsZi5fY2hhbm5lbHNbbG9jYWxDaGFuXSA9IHRydWU7XG5cbiAgdmFyIHNzaHN0cmVhbSA9IHNlbGYuX3NzaHN0cmVhbTtcbiAgc3Noc3RyZWFtLm9uY2UoJ0NIQU5ORUxfT1BFTl9DT05GSVJNQVRJT046JyArIGxvY2FsQ2hhbiwgZnVuY3Rpb24oaW5mbykge1xuICAgIHNzaHN0cmVhbS5yZW1vdmVBbGxMaXN0ZW5lcnMoJ0NIQU5ORUxfT1BFTl9GQUlMVVJFOicgKyBsb2NhbENoYW4pO1xuXG4gICAgdmFyIGNoYW5pbmZvID0ge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGluY29taW5nOiB7XG4gICAgICAgIGlkOiBsb2NhbENoYW4sXG4gICAgICAgIHdpbmRvdzogaW5pdFdpbmRvdyxcbiAgICAgICAgcGFja2V0U2l6ZTogbWF4UGFja2V0LFxuICAgICAgICBzdGF0ZTogJ29wZW4nXG4gICAgICB9LFxuICAgICAgb3V0Z29pbmc6IHtcbiAgICAgICAgaWQ6IGluZm8uc2VuZGVyLFxuICAgICAgICB3aW5kb3c6IGluZm8ud2luZG93LFxuICAgICAgICBwYWNrZXRTaXplOiBpbmZvLnBhY2tldFNpemUsXG4gICAgICAgIHN0YXRlOiAnb3BlbidcbiAgICAgIH1cbiAgICB9O1xuICAgIGNiKHVuZGVmaW5lZCwgbmV3IENoYW5uZWwoY2hhbmluZm8sIHNlbGYsIHsgc2VydmVyOiB0cnVlIH0pKTtcbiAgfSkub25jZSgnQ0hBTk5FTF9PUEVOX0ZBSUxVUkU6JyArIGxvY2FsQ2hhbiwgZnVuY3Rpb24oaW5mbykge1xuICAgIHNzaHN0cmVhbS5yZW1vdmVBbGxMaXN0ZW5lcnMoJ0NIQU5ORUxfT1BFTl9DT05GSVJNQVRJT046JyArIGxvY2FsQ2hhbik7XG5cbiAgICBkZWxldGUgc2VsZi5fY2hhbm5lbHNbbG9jYWxDaGFuXTtcblxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJyhTU0gpIENoYW5uZWwgb3BlbiBmYWlsdXJlOiAnICsgaW5mby5kZXNjcmlwdGlvbik7XG4gICAgZXJyLnJlYXNvbiA9IGluZm8ucmVhc29uO1xuICAgIGVyci5sYW5nID0gaW5mby5sYW5nO1xuICAgIGNiKGVycik7XG4gIH0pO1xuXG4gIGlmICh0eXBlID09PSAnZm9yd2FyZGVkLXRjcGlwJylcbiAgICByZXQgPSBzc2hzdHJlYW0uZm9yd2FyZGVkVGNwaXAobG9jYWxDaGFuLCBpbml0V2luZG93LCBtYXhQYWNrZXQsIG9wdHMpO1xuICBlbHNlIGlmICh0eXBlID09PSAneDExJylcbiAgICByZXQgPSBzc2hzdHJlYW0ueDExKGxvY2FsQ2hhbiwgaW5pdFdpbmRvdywgbWF4UGFja2V0LCBvcHRzKTtcbiAgZWxzZSBpZiAodHlwZSA9PT0gJ2ZvcndhcmRlZC1zdHJlYW1sb2NhbEBvcGVuc3NoLmNvbScpIHtcbiAgICByZXQgPSBzc2hzdHJlYW0ub3BlbnNzaF9mb3J3YXJkZWRTdHJlYW1Mb2NhbChsb2NhbENoYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFdpbmRvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQYWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cyk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBuZXh0Q2hhbm5lbChzZWxmKSB7XG4gIC8vIGdldCB0aGUgbmV4dCBhdmFpbGFibGUgY2hhbm5lbCBudW1iZXJcblxuICAvLyBmYXN0IHBhdGhcbiAgaWYgKHNlbGYuX2N1ckNoYW4gPCBNQVhfQ0hBTk5FTClcbiAgICByZXR1cm4gKytzZWxmLl9jdXJDaGFuO1xuXG4gIC8vIHNsb3dlciBsb29rdXAgcGF0aFxuICBmb3IgKHZhciBpID0gMCwgY2hhbm5lbHMgPSBzZWxmLl9jaGFubmVsczsgaSA8IE1BWF9DSEFOTkVMOyArK2kpXG4gICAgaWYgKCFjaGFubmVsc1tpXSlcbiAgICAgIHJldHVybiBpO1xuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuXG5TZXJ2ZXIuY3JlYXRlU2VydmVyID0gZnVuY3Rpb24oY2ZnLCBsaXN0ZW5lcikge1xuICByZXR1cm4gbmV3IFNlcnZlcihjZmcsIGxpc3RlbmVyKTtcbn07XG5TZXJ2ZXIuS0VFUEFMSVZFX0lOVEVSVkFMID0gMTAwMDtcblNlcnZlci5LRUVQQUxJVkVfQ0xJRU5UX0lOVEVSVkFMID0gMTUwMDA7XG5TZXJ2ZXIuS0VFUEFMSVZFX0NMSUVOVF9DT1VOVF9NQVggPSAzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlcnZlcjtcbm1vZHVsZS5leHBvcnRzLkluY29taW5nQ2xpZW50ID0gQ2xpZW50O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTEgTWFyayBDYXZhZ2UgPG1jYXZhZ2VAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIG5ld0ludmFsaWRBc24xRXJyb3I6IGZ1bmN0aW9uIChtc2cpIHtcbiAgICB2YXIgZSA9IG5ldyBFcnJvcigpO1xuICAgIGUubmFtZSA9ICdJbnZhbGlkQXNuMUVycm9yJztcbiAgICBlLm1lc3NhZ2UgPSBtc2cgfHwgJyc7XG4gICAgcmV0dXJuIGU7XG4gIH1cblxufTtcbiIsIi8vIENvcHlyaWdodCAyMDExIE1hcmsgQ2F2YWdlIDxtY2F2YWdlQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxudmFyIGVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG52YXIgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5cbnZhciBSZWFkZXIgPSByZXF1aXJlKCcuL3JlYWRlcicpO1xudmFyIFdyaXRlciA9IHJlcXVpcmUoJy4vd3JpdGVyJyk7XG5cblxuLy8gLS0tIEV4cG9ydHNcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgUmVhZGVyOiBSZWFkZXIsXG5cbiAgV3JpdGVyOiBXcml0ZXJcblxufTtcblxuZm9yICh2YXIgdCBpbiB0eXBlcykge1xuICBpZiAodHlwZXMuaGFzT3duUHJvcGVydHkodCkpXG4gICAgbW9kdWxlLmV4cG9ydHNbdF0gPSB0eXBlc1t0XTtcbn1cbmZvciAodmFyIGUgaW4gZXJyb3JzKSB7XG4gIGlmIChlcnJvcnMuaGFzT3duUHJvcGVydHkoZSkpXG4gICAgbW9kdWxlLmV4cG9ydHNbZV0gPSBlcnJvcnNbZV07XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAxMSBNYXJrIENhdmFnZSA8bWNhdmFnZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlci1idWZmZXInKS5CdWZmZXI7XG5cbnZhciBBU04xID0gcmVxdWlyZSgnLi90eXBlcycpO1xudmFyIGVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG5cblxuLy8gLS0tIEdsb2JhbHNcblxudmFyIG5ld0ludmFsaWRBc24xRXJyb3IgPSBlcnJvcnMubmV3SW52YWxpZEFzbjFFcnJvcjtcblxuXG5cbi8vIC0tLSBBUElcblxuZnVuY3Rpb24gUmVhZGVyKGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICFCdWZmZXIuaXNCdWZmZXIoZGF0YSkpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGEgbm9kZSBCdWZmZXInKTtcblxuICB0aGlzLl9idWYgPSBkYXRhO1xuICB0aGlzLl9zaXplID0gZGF0YS5sZW5ndGg7XG5cbiAgLy8gVGhlc2UgaG9sZCB0aGUgXCJjdXJyZW50XCIgc3RhdGVcbiAgdGhpcy5fbGVuID0gMDtcbiAgdGhpcy5fb2Zmc2V0ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRlci5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuX2xlbik7IH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5fb2Zmc2V0KTsgfVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkZXIucHJvdG90eXBlLCAncmVtYWluJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLl9zaXplIC0gdGhpcy5fb2Zmc2V0KTsgfVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkZXIucHJvdG90eXBlLCAnYnVmZmVyJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLl9idWYuc2xpY2UodGhpcy5fb2Zmc2V0KSk7IH1cbn0pO1xuXG5cbi8qKlxuICogUmVhZHMgYSBzaW5nbGUgYnl0ZSBhbmQgYWR2YW5jZXMgb2Zmc2V0OyB5b3UgY2FuIHBhc3MgaW4gYHRydWVgIHRvIG1ha2UgdGhpc1xuICogYSBcInBlZWtcIiBvcGVyYXRpb24gKGkuZS4sIGdldCB0aGUgYnl0ZSwgYnV0IGRvbid0IGFkdmFuY2UgdGhlIG9mZnNldCkuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBwZWVrIHRydWUgbWVhbnMgZG9uJ3QgbW92ZSBvZmZzZXQuXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBuZXh0IGJ5dGUsIG51bGwgaWYgbm90IGVub3VnaCBkYXRhLlxuICovXG5SZWFkZXIucHJvdG90eXBlLnJlYWRCeXRlID0gZnVuY3Rpb24gKHBlZWspIHtcbiAgaWYgKHRoaXMuX3NpemUgLSB0aGlzLl9vZmZzZXQgPCAxKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHZhciBiID0gdGhpcy5fYnVmW3RoaXMuX29mZnNldF0gJiAweGZmO1xuXG4gIGlmICghcGVlaylcbiAgICB0aGlzLl9vZmZzZXQgKz0gMTtcblxuICByZXR1cm4gYjtcbn07XG5cblxuUmVhZGVyLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWFkQnl0ZSh0cnVlKTtcbn07XG5cblxuLyoqXG4gKiBSZWFkcyBhIChwb3RlbnRpYWxseSkgdmFyaWFibGUgbGVuZ3RoIG9mZiB0aGUgQkVSIGJ1ZmZlci4gIFRoaXMgY2FsbCBpc1xuICogbm90IHJlYWxseSBtZWFudCB0byBiZSBjYWxsZWQgZGlyZWN0bHksIGFzIGNhbGxlcnMgaGF2ZSB0byBtYW5pcHVsYXRlXG4gKiB0aGUgaW50ZXJuYWwgYnVmZmVyIGFmdGVyd2FyZHMuXG4gKlxuICogQXMgYSByZXN1bHQgb2YgdGhpcyBjYWxsLCB5b3UgY2FuIGNhbGwgYFJlYWRlci5sZW5ndGhgLCB1bnRpbCB0aGVcbiAqIG5leHQgdGhpbmcgY2FsbGVkIHRoYXQgZG9lcyBhIHJlYWRMZW5ndGguXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSB0aGUgYW1vdW50IG9mIG9mZnNldCB0byBhZHZhbmNlIHRoZSBidWZmZXIuXG4gKiBAdGhyb3dzIHtJbnZhbGlkQXNuMUVycm9yfSBvbiBiYWQgQVNOLjFcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5yZWFkTGVuZ3RoID0gZnVuY3Rpb24gKG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpXG4gICAgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0O1xuXG4gIGlmIChvZmZzZXQgPj0gdGhpcy5fc2l6ZSlcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgbGVuQiA9IHRoaXMuX2J1ZltvZmZzZXQrK10gJiAweGZmO1xuICBpZiAobGVuQiA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAoKGxlbkIgJiAweDgwKSA9PT0gMHg4MCkge1xuICAgIGxlbkIgJj0gMHg3ZjtcblxuICAgIGlmIChsZW5CID09PSAwKVxuICAgICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignSW5kZWZpbml0ZSBsZW5ndGggbm90IHN1cHBvcnRlZCcpO1xuXG4gICAgaWYgKGxlbkIgPiA0KVxuICAgICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignZW5jb2RpbmcgdG9vIGxvbmcnKTtcblxuICAgIGlmICh0aGlzLl9zaXplIC0gb2Zmc2V0IDwgbGVuQilcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgdGhpcy5fbGVuID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbkI7IGkrKylcbiAgICAgIHRoaXMuX2xlbiA9ICh0aGlzLl9sZW4gPDwgOCkgKyAodGhpcy5fYnVmW29mZnNldCsrXSAmIDB4ZmYpO1xuXG4gIH0gZWxzZSB7XG4gICAgLy8gV2Fzbid0IGEgdmFyaWFibGUgbGVuZ3RoXG4gICAgdGhpcy5fbGVuID0gbGVuQjtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQ7XG59O1xuXG5cbi8qKlxuICogUGFyc2VzIHRoZSBuZXh0IHNlcXVlbmNlIGluIHRoaXMgQkVSIGJ1ZmZlci5cbiAqXG4gKiBUbyBnZXQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIGNhbGwgYFJlYWRlci5sZW5ndGhgLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gdGhlIHNlcXVlbmNlJ3MgdGFnLlxuICovXG5SZWFkZXIucHJvdG90eXBlLnJlYWRTZXF1ZW5jZSA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHNlcSA9IHRoaXMucGVlaygpO1xuICBpZiAoc2VxID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuICBpZiAodGFnICE9PSB1bmRlZmluZWQgJiYgdGFnICE9PSBzZXEpXG4gICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignRXhwZWN0ZWQgMHgnICsgdGFnLnRvU3RyaW5nKDE2KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBnb3QgMHgnICsgc2VxLnRvU3RyaW5nKDE2KSk7XG5cbiAgdmFyIG8gPSB0aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0ICsgMSk7IC8vIHN0b3JlZCBpbiBgbGVuZ3RoYFxuICBpZiAobyA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB0aGlzLl9vZmZzZXQgPSBvO1xuICByZXR1cm4gc2VxO1xufTtcblxuXG5SZWFkZXIucHJvdG90eXBlLnJlYWRJbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkVGFnKEFTTjEuSW50ZWdlcik7XG59O1xuXG5cblJlYWRlci5wcm90b3R5cGUucmVhZEJvb2xlYW4gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy5fcmVhZFRhZyhBU04xLkJvb2xlYW4pID09PSAwID8gZmFsc2UgOiB0cnVlKTtcbn07XG5cblxuUmVhZGVyLnByb3RvdHlwZS5yZWFkRW51bWVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkVGFnKEFTTjEuRW51bWVyYXRpb24pO1xufTtcblxuXG5SZWFkZXIucHJvdG90eXBlLnJlYWRTdHJpbmcgPSBmdW5jdGlvbiAodGFnLCByZXRidWYpIHtcbiAgaWYgKCF0YWcpXG4gICAgdGFnID0gQVNOMS5PY3RldFN0cmluZztcblxuICB2YXIgYiA9IHRoaXMucGVlaygpO1xuICBpZiAoYiA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAoYiAhPT0gdGFnKVxuICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ0V4cGVjdGVkIDB4JyArIHRhZy50b1N0cmluZygxNikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogZ290IDB4JyArIGIudG9TdHJpbmcoMTYpKTtcblxuICB2YXIgbyA9IHRoaXMucmVhZExlbmd0aCh0aGlzLl9vZmZzZXQgKyAxKTsgLy8gc3RvcmVkIGluIGBsZW5ndGhgXG5cbiAgaWYgKG8gPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgaWYgKHRoaXMubGVuZ3RoID4gdGhpcy5fc2l6ZSAtIG8pXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgdGhpcy5fb2Zmc2V0ID0gbztcblxuICBpZiAodGhpcy5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIHJldGJ1ZiA/IEJ1ZmZlci5hbGxvYygwKSA6ICcnO1xuXG4gIHZhciBzdHIgPSB0aGlzLl9idWYuc2xpY2UodGhpcy5fb2Zmc2V0LCB0aGlzLl9vZmZzZXQgKyB0aGlzLmxlbmd0aCk7XG4gIHRoaXMuX29mZnNldCArPSB0aGlzLmxlbmd0aDtcblxuICByZXR1cm4gcmV0YnVmID8gc3RyIDogc3RyLnRvU3RyaW5nKCd1dGY4Jyk7XG59O1xuXG5SZWFkZXIucHJvdG90eXBlLnJlYWRPSUQgPSBmdW5jdGlvbiAodGFnKSB7XG4gIGlmICghdGFnKVxuICAgIHRhZyA9IEFTTjEuT0lEO1xuXG4gIHZhciBiID0gdGhpcy5yZWFkU3RyaW5nKHRhZywgdHJ1ZSk7XG4gIGlmIChiID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgdmFyIHZhbHVlID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYnl0ZSA9IGJbaV0gJiAweGZmO1xuXG4gICAgdmFsdWUgPDw9IDc7XG4gICAgdmFsdWUgKz0gYnl0ZSAmIDB4N2Y7XG4gICAgaWYgKChieXRlICYgMHg4MCkgPT09IDApIHtcbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIHZhbHVlID0gMDtcbiAgICB9XG4gIH1cblxuICB2YWx1ZSA9IHZhbHVlcy5zaGlmdCgpO1xuICB2YWx1ZXMudW5zaGlmdCh2YWx1ZSAlIDQwKTtcbiAgdmFsdWVzLnVuc2hpZnQoKHZhbHVlIC8gNDApID4+IDApO1xuXG4gIHJldHVybiB2YWx1ZXMuam9pbignLicpO1xufTtcblxuXG5SZWFkZXIucHJvdG90eXBlLl9yZWFkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICBhc3NlcnQub2sodGFnICE9PSB1bmRlZmluZWQpO1xuXG4gIHZhciBiID0gdGhpcy5wZWVrKCk7XG5cbiAgaWYgKGIgPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgaWYgKGIgIT09IHRhZylcbiAgICB0aHJvdyBuZXdJbnZhbGlkQXNuMUVycm9yKCdFeHBlY3RlZCAweCcgKyB0YWcudG9TdHJpbmcoMTYpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IGdvdCAweCcgKyBiLnRvU3RyaW5nKDE2KSk7XG5cbiAgdmFyIG8gPSB0aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0ICsgMSk7IC8vIHN0b3JlZCBpbiBgbGVuZ3RoYFxuICBpZiAobyA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAodGhpcy5sZW5ndGggPiA0KVxuICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ0ludGVnZXIgdG9vIGxvbmc6ICcgKyB0aGlzLmxlbmd0aCk7XG5cbiAgaWYgKHRoaXMubGVuZ3RoID4gdGhpcy5fc2l6ZSAtIG8pXG4gICAgcmV0dXJuIG51bGw7XG4gIHRoaXMuX29mZnNldCA9IG87XG5cbiAgdmFyIGZiID0gdGhpcy5fYnVmW3RoaXMuX29mZnNldF07XG4gIHZhciB2YWx1ZSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPDw9IDg7XG4gICAgdmFsdWUgfD0gKHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gJiAweGZmKTtcbiAgfVxuXG4gIGlmICgoZmIgJiAweDgwKSA9PT0gMHg4MCAmJiBpICE9PSA0KVxuICAgIHZhbHVlIC09ICgxIDw8IChpICogOCkpO1xuXG4gIHJldHVybiB2YWx1ZSA+PiAwO1xufTtcblxuXG5cbi8vIC0tLSBFeHBvcnRlZCBBUElcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkZXI7XG4iLCIvLyBDb3B5cmlnaHQgMjAxMSBNYXJrIENhdmFnZSA8bWNhdmFnZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVPQzogMCxcbiAgQm9vbGVhbjogMSxcbiAgSW50ZWdlcjogMixcbiAgQml0U3RyaW5nOiAzLFxuICBPY3RldFN0cmluZzogNCxcbiAgTnVsbDogNSxcbiAgT0lEOiA2LFxuICBPYmplY3REZXNjcmlwdG9yOiA3LFxuICBFeHRlcm5hbDogOCxcbiAgUmVhbDogOSwgLy8gZmxvYXRcbiAgRW51bWVyYXRpb246IDEwLFxuICBQRFY6IDExLFxuICBVdGY4U3RyaW5nOiAxMixcbiAgUmVsYXRpdmVPSUQ6IDEzLFxuICBTZXF1ZW5jZTogMTYsXG4gIFNldDogMTcsXG4gIE51bWVyaWNTdHJpbmc6IDE4LFxuICBQcmludGFibGVTdHJpbmc6IDE5LFxuICBUNjFTdHJpbmc6IDIwLFxuICBWaWRlb3RleFN0cmluZzogMjEsXG4gIElBNVN0cmluZzogMjIsXG4gIFVUQ1RpbWU6IDIzLFxuICBHZW5lcmFsaXplZFRpbWU6IDI0LFxuICBHcmFwaGljU3RyaW5nOiAyNSxcbiAgVmlzaWJsZVN0cmluZzogMjYsXG4gIEdlbmVyYWxTdHJpbmc6IDI4LFxuICBVbml2ZXJzYWxTdHJpbmc6IDI5LFxuICBDaGFyYWN0ZXJTdHJpbmc6IDMwLFxuICBCTVBTdHJpbmc6IDMxLFxuICBDb25zdHJ1Y3RvcjogMzIsXG4gIENvbnRleHQ6IDEyOFxufTtcbiIsIi8vIENvcHlyaWdodCAyMDExIE1hcmsgQ2F2YWdlIDxtY2F2YWdlQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmVyLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciBBU04xID0gcmVxdWlyZSgnLi90eXBlcycpO1xudmFyIGVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG5cblxuLy8gLS0tIEdsb2JhbHNcblxudmFyIG5ld0ludmFsaWRBc24xRXJyb3IgPSBlcnJvcnMubmV3SW52YWxpZEFzbjFFcnJvcjtcblxudmFyIERFRkFVTFRfT1BUUyA9IHtcbiAgc2l6ZTogMTAyNCxcbiAgZ3Jvd3RoRmFjdG9yOiA4XG59O1xuXG5cbi8vIC0tLSBIZWxwZXJzXG5cbmZ1bmN0aW9uIG1lcmdlKGZyb20sIHRvKSB7XG4gIGFzc2VydC5vayhmcm9tKTtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiAoZnJvbSksICdvYmplY3QnKTtcbiAgYXNzZXJ0Lm9rKHRvKTtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiAodG8pLCAnb2JqZWN0Jyk7XG5cbiAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmcm9tKTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAodG9ba2V5XSlcbiAgICAgIHJldHVybjtcblxuICAgIHZhciB2YWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnJvbSwga2V5KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodG8sIGtleSwgdmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gdG87XG59XG5cblxuXG4vLyAtLS0gQVBJXG5cbmZ1bmN0aW9uIFdyaXRlcihvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBtZXJnZShERUZBVUxUX09QVFMsIG9wdGlvbnMgfHwge30pO1xuXG4gIHRoaXMuX2J1ZiA9IEJ1ZmZlci5hbGxvYyhvcHRpb25zLnNpemUgfHwgMTAyNCk7XG4gIHRoaXMuX3NpemUgPSB0aGlzLl9idWYubGVuZ3RoO1xuICB0aGlzLl9vZmZzZXQgPSAwO1xuICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcblxuICAvLyBBIGxpc3Qgb2Ygb2Zmc2V0cyBpbiB0aGUgYnVmZmVyIHdoZXJlIHdlIG5lZWQgdG8gaW5zZXJ0XG4gIC8vIHNlcXVlbmNlIHRhZy9sZW4gcGFpcnMuXG4gIHRoaXMuX3NlcSA9IFtdO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3NlcS5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXdJbnZhbGlkQXNuMUVycm9yKHRoaXMuX3NlcS5sZW5ndGggKyAnIHVuZW5kZWQgc2VxdWVuY2UocyknKTtcblxuICAgIHJldHVybiAodGhpcy5fYnVmLnNsaWNlKDAsIHRoaXMuX29mZnNldCkpO1xuICB9XG59KTtcblxuV3JpdGVyLnByb3RvdHlwZS53cml0ZUJ5dGUgPSBmdW5jdGlvbiAoYikge1xuICBpZiAodHlwZW9mIChiKSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlcicpO1xuXG4gIHRoaXMuX2Vuc3VyZSgxKTtcbiAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGI7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVJbnQgPSBmdW5jdGlvbiAoaSwgdGFnKSB7XG4gIGlmICh0eXBlb2YgKGkpICE9PSAnbnVtYmVyJylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gIGlmICh0eXBlb2YgKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuSW50ZWdlcjtcblxuICB2YXIgc3ogPSA0O1xuXG4gIHdoaWxlICgoKChpICYgMHhmZjgwMDAwMCkgPT09IDApIHx8ICgoaSAmIDB4ZmY4MDAwMDApID09PSAweGZmODAwMDAwID4+IDApKSAmJlxuICAgICAgICAoc3ogPiAxKSkge1xuICAgIHN6LS07XG4gICAgaSA8PD0gODtcbiAgfVxuXG4gIGlmIChzeiA+IDQpXG4gICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignQkVSIGludHMgY2Fubm90IGJlID4gMHhmZmZmZmZmZicpO1xuXG4gIHRoaXMuX2Vuc3VyZSgyICsgc3opO1xuICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gdGFnO1xuICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gc3o7XG5cbiAgd2hpbGUgKHN6LS0gPiAwKSB7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9ICgoaSAmIDB4ZmYwMDAwMDApID4+PiAyNCk7XG4gICAgaSA8PD0gODtcbiAgfVxuXG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVOdWxsID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLndyaXRlQnl0ZShBU04xLk51bGwpO1xuICB0aGlzLndyaXRlQnl0ZSgweDAwKTtcbn07XG5cblxuV3JpdGVyLnByb3RvdHlwZS53cml0ZUVudW1lcmF0aW9uID0gZnVuY3Rpb24gKGksIHRhZykge1xuICBpZiAodHlwZW9mIChpKSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICBpZiAodHlwZW9mICh0YWcpICE9PSAnbnVtYmVyJylcbiAgICB0YWcgPSBBU04xLkVudW1lcmF0aW9uO1xuXG4gIHJldHVybiB0aGlzLndyaXRlSW50KGksIHRhZyk7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVCb29sZWFuID0gZnVuY3Rpb24gKGIsIHRhZykge1xuICBpZiAodHlwZW9mIChiKSAhPT0gJ2Jvb2xlYW4nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYSBCb29sZWFuJyk7XG4gIGlmICh0eXBlb2YgKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuQm9vbGVhbjtcblxuICB0aGlzLl9lbnN1cmUoMyk7XG4gIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSB0YWc7XG4gIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSAweDAxO1xuICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gYiA/IDB4ZmYgOiAweDAwO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nID0gZnVuY3Rpb24gKHMsIHRhZykge1xuICBpZiAodHlwZW9mIChzKSAhPT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyAod2FzOiAnICsgdHlwZW9mIChzKSArICcpJyk7XG4gIGlmICh0eXBlb2YgKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuT2N0ZXRTdHJpbmc7XG5cbiAgdmFyIGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHMpO1xuICB0aGlzLndyaXRlQnl0ZSh0YWcpO1xuICB0aGlzLndyaXRlTGVuZ3RoKGxlbik7XG4gIGlmIChsZW4pIHtcbiAgICB0aGlzLl9lbnN1cmUobGVuKTtcbiAgICB0aGlzLl9idWYud3JpdGUocywgdGhpcy5fb2Zmc2V0KTtcbiAgICB0aGlzLl9vZmZzZXQgKz0gbGVuO1xuICB9XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVCdWZmZXIgPSBmdW5jdGlvbiAoYnVmLCB0YWcpIHtcbiAgaWYgKHR5cGVvZiAodGFnKSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFnIG11c3QgYmUgYSBudW1iZXInKTtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBtdXN0IGJlIGEgYnVmZmVyJyk7XG5cbiAgdGhpcy53cml0ZUJ5dGUodGFnKTtcbiAgdGhpcy53cml0ZUxlbmd0aChidWYubGVuZ3RoKTtcbiAgdGhpcy5fZW5zdXJlKGJ1Zi5sZW5ndGgpO1xuICBidWYuY29weSh0aGlzLl9idWYsIHRoaXMuX29mZnNldCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMuX29mZnNldCArPSBidWYubGVuZ3RoO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nQXJyYXkgPSBmdW5jdGlvbiAoc3RyaW5ncykge1xuICBpZiAoKCFzdHJpbmdzIGluc3RhbmNlb2YgQXJyYXkpKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXlbU3RyaW5nXScpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgc2VsZi53cml0ZVN0cmluZyhzKTtcbiAgfSk7XG59O1xuXG4vLyBUaGlzIGlzIHJlYWxseSB0byBzb2x2ZSBERVIgY2FzZXMsIGJ1dCB3aGF0ZXZlciBmb3Igbm93XG5Xcml0ZXIucHJvdG90eXBlLndyaXRlT0lEID0gZnVuY3Rpb24gKHMsIHRhZykge1xuICBpZiAodHlwZW9mIChzKSAhPT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO1xuICBpZiAodHlwZW9mICh0YWcpICE9PSAnbnVtYmVyJylcbiAgICB0YWcgPSBBU04xLk9JRDtcblxuICBpZiAoIS9eKFswLTldK1xcLil7Myx9WzAtOV0rJC8udGVzdChzKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIE9JRCBzdHJpbmcnKTtcblxuICBmdW5jdGlvbiBlbmNvZGVPY3RldChieXRlcywgb2N0ZXQpIHtcbiAgICBpZiAob2N0ZXQgPCAxMjgpIHtcbiAgICAgICAgYnl0ZXMucHVzaChvY3RldCk7XG4gICAgfSBlbHNlIGlmIChvY3RldCA8IDE2Mzg0KSB7XG4gICAgICAgIGJ5dGVzLnB1c2goKG9jdGV0ID4+PiA3KSB8IDB4ODApO1xuICAgICAgICBieXRlcy5wdXNoKG9jdGV0ICYgMHg3Rik7XG4gICAgfSBlbHNlIGlmIChvY3RldCA8IDIwOTcxNTIpIHtcbiAgICAgIGJ5dGVzLnB1c2goKG9jdGV0ID4+PiAxNCkgfCAweDgwKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gNykgfCAweDgwKSAmIDB4RkYpO1xuICAgICAgYnl0ZXMucHVzaChvY3RldCAmIDB4N0YpO1xuICAgIH0gZWxzZSBpZiAob2N0ZXQgPCAyNjg0MzU0NTYpIHtcbiAgICAgIGJ5dGVzLnB1c2goKG9jdGV0ID4+PiAyMSkgfCAweDgwKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gMTQpIHwgMHg4MCkgJiAweEZGKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gNykgfCAweDgwKSAmIDB4RkYpO1xuICAgICAgYnl0ZXMucHVzaChvY3RldCAmIDB4N0YpO1xuICAgIH0gZWxzZSB7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDI4KSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDIxKSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDE0KSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDcpIHwgMHg4MCkgJiAweEZGKTtcbiAgICAgIGJ5dGVzLnB1c2gob2N0ZXQgJiAweDdGKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdG1wID0gcy5zcGxpdCgnLicpO1xuICB2YXIgYnl0ZXMgPSBbXTtcbiAgYnl0ZXMucHVzaChwYXJzZUludCh0bXBbMF0sIDEwKSAqIDQwICsgcGFyc2VJbnQodG1wWzFdLCAxMCkpO1xuICB0bXAuc2xpY2UoMikuZm9yRWFjaChmdW5jdGlvbiAoYikge1xuICAgIGVuY29kZU9jdGV0KGJ5dGVzLCBwYXJzZUludChiLCAxMCkpO1xuICB9KTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX2Vuc3VyZSgyICsgYnl0ZXMubGVuZ3RoKTtcbiAgdGhpcy53cml0ZUJ5dGUodGFnKTtcbiAgdGhpcy53cml0ZUxlbmd0aChieXRlcy5sZW5ndGgpO1xuICBieXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7XG4gICAgc2VsZi53cml0ZUJ5dGUoYik7XG4gIH0pO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlTGVuZ3RoID0gZnVuY3Rpb24gKGxlbikge1xuICBpZiAodHlwZW9mIChsZW4pICE9PSAnbnVtYmVyJylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyJyk7XG5cbiAgdGhpcy5fZW5zdXJlKDQpO1xuXG4gIGlmIChsZW4gPD0gMHg3Zikge1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBsZW47XG4gIH0gZWxzZSBpZiAobGVuIDw9IDB4ZmYpIHtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gMHg4MTtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuO1xuICB9IGVsc2UgaWYgKGxlbiA8PSAweGZmZmYpIHtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gMHg4MjtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuID4+IDg7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZmZmZmYpIHtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gMHg4MztcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuID4+IDE2O1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBsZW4gPj4gODtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ0xlbmd0aCB0b28gbG9uZyAoPiA0IGJ5dGVzKScpO1xuICB9XG59O1xuXG5Xcml0ZXIucHJvdG90eXBlLnN0YXJ0U2VxdWVuY2UgPSBmdW5jdGlvbiAodGFnKSB7XG4gIGlmICh0eXBlb2YgKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuU2VxdWVuY2UgfCBBU04xLkNvbnN0cnVjdG9yO1xuXG4gIHRoaXMud3JpdGVCeXRlKHRhZyk7XG4gIHRoaXMuX3NlcS5wdXNoKHRoaXMuX29mZnNldCk7XG4gIHRoaXMuX2Vuc3VyZSgzKTtcbiAgdGhpcy5fb2Zmc2V0ICs9IDM7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUuZW5kU2VxdWVuY2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZXEgPSB0aGlzLl9zZXEucG9wKCk7XG4gIHZhciBzdGFydCA9IHNlcSArIDM7XG4gIHZhciBsZW4gPSB0aGlzLl9vZmZzZXQgLSBzdGFydDtcblxuICBpZiAobGVuIDw9IDB4N2YpIHtcbiAgICB0aGlzLl9zaGlmdChzdGFydCwgbGVuLCAtMik7XG4gICAgdGhpcy5fYnVmW3NlcV0gPSBsZW47XG4gIH0gZWxzZSBpZiAobGVuIDw9IDB4ZmYpIHtcbiAgICB0aGlzLl9zaGlmdChzdGFydCwgbGVuLCAtMSk7XG4gICAgdGhpcy5fYnVmW3NlcV0gPSAweDgxO1xuICAgIHRoaXMuX2J1ZltzZXEgKyAxXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZmZmKSB7XG4gICAgdGhpcy5fYnVmW3NlcV0gPSAweDgyO1xuICAgIHRoaXMuX2J1ZltzZXEgKyAxXSA9IGxlbiA+PiA4O1xuICAgIHRoaXMuX2J1ZltzZXEgKyAyXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZmZmZmYpIHtcbiAgICB0aGlzLl9zaGlmdChzdGFydCwgbGVuLCAxKTtcbiAgICB0aGlzLl9idWZbc2VxXSA9IDB4ODM7XG4gICAgdGhpcy5fYnVmW3NlcSArIDFdID0gbGVuID4+IDE2O1xuICAgIHRoaXMuX2J1ZltzZXEgKyAyXSA9IGxlbiA+PiA4O1xuICAgIHRoaXMuX2J1ZltzZXEgKyAzXSA9IGxlbjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXdJbnZhbGlkQXNuMUVycm9yKCdTZXF1ZW5jZSB0b28gbG9uZycpO1xuICB9XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUuX3NoaWZ0ID0gZnVuY3Rpb24gKHN0YXJ0LCBsZW4sIHNoaWZ0KSB7XG4gIGFzc2VydC5vayhzdGFydCAhPT0gdW5kZWZpbmVkKTtcbiAgYXNzZXJ0Lm9rKGxlbiAhPT0gdW5kZWZpbmVkKTtcbiAgYXNzZXJ0Lm9rKHNoaWZ0KTtcblxuICB0aGlzLl9idWYuY29weSh0aGlzLl9idWYsIHN0YXJ0ICsgc2hpZnQsIHN0YXJ0LCBzdGFydCArIGxlbik7XG4gIHRoaXMuX29mZnNldCArPSBzaGlmdDtcbn07XG5cbldyaXRlci5wcm90b3R5cGUuX2Vuc3VyZSA9IGZ1bmN0aW9uIChsZW4pIHtcbiAgYXNzZXJ0Lm9rKGxlbik7XG5cbiAgaWYgKHRoaXMuX3NpemUgLSB0aGlzLl9vZmZzZXQgPCBsZW4pIHtcbiAgICB2YXIgc3ogPSB0aGlzLl9zaXplICogdGhpcy5fb3B0aW9ucy5ncm93dGhGYWN0b3I7XG4gICAgaWYgKHN6IC0gdGhpcy5fb2Zmc2V0IDwgbGVuKVxuICAgICAgc3ogKz0gbGVuO1xuXG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYyhzeik7XG5cbiAgICB0aGlzLl9idWYuY29weShidWYsIDAsIDAsIHRoaXMuX29mZnNldCk7XG4gICAgdGhpcy5fYnVmID0gYnVmO1xuICAgIHRoaXMuX3NpemUgPSBzejtcbiAgfVxufTtcblxuXG5cbi8vIC0tLSBFeHBvcnRlZCBBUElcblxubW9kdWxlLmV4cG9ydHMgPSBXcml0ZXI7XG4iLCIvLyBDb3B5cmlnaHQgMjAxMSBNYXJrIENhdmFnZSA8bWNhdmFnZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbi8vIElmIHlvdSBoYXZlIG5vIGlkZWEgd2hhdCBBU04uMSBvciBCRVIgaXMsIHNlZSB0aGlzOlxuLy8gZnRwOi8vZnRwLnJzYS5jb20vcHViL3BrY3MvYXNjaWkvbGF5bWFuLmFzY1xuXG52YXIgQmVyID0gcmVxdWlyZSgnLi9iZXIvaW5kZXgnKTtcblxuXG5cbi8vIC0tLSBFeHBvcnRlZCBBUElcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgQmVyOiBCZXIsXG5cbiAgQmVyUmVhZGVyOiBCZXIuUmVhZGVyLFxuXG4gIEJlcldyaXRlcjogQmVyLldyaXRlclxuXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IHRsc18xID0gcmVxdWlyZShcInRsc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgRnRwQ29udGV4dF8xID0gcmVxdWlyZShcIi4vRnRwQ29udGV4dFwiKTtcbmNvbnN0IHBhcnNlTGlzdF8xID0gcmVxdWlyZShcIi4vcGFyc2VMaXN0XCIpO1xuY29uc3QgUHJvZ3Jlc3NUcmFja2VyXzEgPSByZXF1aXJlKFwiLi9Qcm9ncmVzc1RyYWNrZXJcIik7XG5jb25zdCBTdHJpbmdXcml0ZXJfMSA9IHJlcXVpcmUoXCIuL1N0cmluZ1dyaXRlclwiKTtcbmNvbnN0IHBhcnNlTGlzdE1MU0RfMSA9IHJlcXVpcmUoXCIuL3BhcnNlTGlzdE1MU0RcIik7XG5jb25zdCBuZXRVdGlsc18xID0gcmVxdWlyZShcIi4vbmV0VXRpbHNcIik7XG5jb25zdCB0cmFuc2Zlcl8xID0gcmVxdWlyZShcIi4vdHJhbnNmZXJcIik7XG5jb25zdCBwYXJzZUNvbnRyb2xSZXNwb25zZV8xID0gcmVxdWlyZShcIi4vcGFyc2VDb250cm9sUmVzcG9uc2VcIik7XG4vLyBVc2UgcHJvbWlzaWZ5IHRvIGtlZXAgdGhlIGxpYnJhcnkgY29tcGF0aWJsZSB3aXRoIE5vZGUgOC5cbmNvbnN0IGZzUmVhZERpciA9IHV0aWxfMS5wcm9taXNpZnkoZnNfMS5yZWFkZGlyKTtcbmNvbnN0IGZzTWtEaXIgPSB1dGlsXzEucHJvbWlzaWZ5KGZzXzEubWtkaXIpO1xuY29uc3QgZnNTdGF0ID0gdXRpbF8xLnByb21pc2lmeShmc18xLnN0YXQpO1xuY29uc3QgZnNPcGVuID0gdXRpbF8xLnByb21pc2lmeShmc18xLm9wZW4pO1xuY29uc3QgZnNDbG9zZSA9IHV0aWxfMS5wcm9taXNpZnkoZnNfMS5jbG9zZSk7XG5jb25zdCBmc1VubGluayA9IHV0aWxfMS5wcm9taXNpZnkoZnNfMS51bmxpbmspO1xuLyoqXG4gKiBIaWdoLWxldmVsIEFQSSB0byBpbnRlcmFjdCB3aXRoIGFuIEZUUCBzZXJ2ZXIuXG4gKi9cbmNsYXNzIENsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGUgYW4gRlRQIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aW1lb3V0ICBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcywgdXNlIDAgZm9yIG5vIHRpbWVvdXQuIE9wdGlvbmFsLCBkZWZhdWx0IGlzIDMwIHNlY29uZHMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodGltZW91dCA9IDMwMDAwKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNdWx0aXBsZSBjb21tYW5kcyB0byByZXRyaWV2ZSBhIGRpcmVjdG9yeSBsaXN0aW5nIGFyZSBwb3NzaWJsZS4gVGhpcyBpbnN0YW5jZVxuICAgICAgICAgKiB3aWxsIHRyeSBhbGwgb2YgdGhlbSBpbiB0aGUgb3JkZXIgcHJlc2VudGVkIHRoZSBmaXJzdCB0aW1lIGEgZGlyZWN0b3J5IGxpc3RpbmdcbiAgICAgICAgICogaXMgcmVxdWVzdGVkLiBBZnRlciB0aGF0LCBgYXZhaWxhYmxlTGlzdENvbW1hbmRzYCB3aWxsICBob2xkIG9ubHkgdGhlIGZpcnN0XG4gICAgICAgICAqIGVudHJ5IHRoYXQgd29ya2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdmFpbGFibGVMaXN0Q29tbWFuZHMgPSBbXCJNTFNEXCIsIFwiTElTVCAtYVwiLCBcIkxJU1RcIl07XG4gICAgICAgIHRoaXMuZnRwID0gbmV3IEZ0cENvbnRleHRfMS5GVFBDb250ZXh0KHRpbWVvdXQpO1xuICAgICAgICB0aGlzLnByZXBhcmVUcmFuc2ZlciA9IHRoaXMuX2VudGVyRmlyc3RDb21wYXRpYmxlTW9kZShbdHJhbnNmZXJfMS5lbnRlclBhc3NpdmVNb2RlSVB2NiwgdHJhbnNmZXJfMS5lbnRlclBhc3NpdmVNb2RlSVB2NF0pO1xuICAgICAgICB0aGlzLnBhcnNlTGlzdCA9IHBhcnNlTGlzdF8xLnBhcnNlTGlzdDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NUcmFja2VyID0gbmV3IFByb2dyZXNzVHJhY2tlcl8xLlByb2dyZXNzVHJhY2tlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGUgY2xpZW50IGFuZCBhbGwgb3BlbiBzb2NrZXQgY29ubmVjdGlvbnMuXG4gICAgICpcbiAgICAgKiBDbG9zZSB0aGUgY2xpZW50IGFuZCBhbGwgb3BlbiBzb2NrZXQgY29ubmVjdGlvbnMuIFRoZSBjbGllbnQgY2Fu4oCZdCBiZSB1c2VkIGFueW1vcmUgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCxcbiAgICAgKiB5b3UgaGF2ZSB0byBlaXRoZXIgcmVjb25uZWN0IHdpdGggYGFjY2Vzc2Agb3IgYGNvbm5lY3RgIG9yIGluc3RhbnRpYXRlIGEgbmV3IGluc3RhbmNlIHRvIGNvbnRpbnVlIGFueSB3b3JrLlxuICAgICAqIEEgY2xpZW50IGlzIGFsc28gY2xvc2VkIGF1dG9tYXRpY2FsbHkgaWYgYW55IHRpbWVvdXQgb3IgY29ubmVjdGlvbiBlcnJvciBvY2N1cnMuXG4gICAgICovXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuZnRwLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzVHJhY2tlci5zdG9wKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2xpZW50IGlzIGNsb3NlZCBhbmQgY2FuJ3QgYmUgdXNlZCBhbnltb3JlLlxuICAgICAqL1xuICAgIGdldCBjbG9zZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ0cC5jbG9zZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbm5lY3QgKG9yIHJlY29ubmVjdCkgdG8gYW4gRlRQIHNlcnZlci5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYW4gaW5zdGFuY2UgbWV0aG9kIGFuZCB0aHVzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgYSBgQ2xpZW50YFxuICAgICAqIGluc3RhbmNlLiBXaGVuZXZlciB5b3UgZG8sIHRoZSBjbGllbnQgaXMgcmVzZXQgd2l0aCBhIG5ldyBjb250cm9sIGNvbm5lY3Rpb24uIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXRcbiAgICAgKiB5b3UgY2FuIHJlb3BlbiBhIGBDbGllbnRgIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gY2xvc2VkIGR1ZSB0byBhbiBlcnJvciB3aGVuIHJlY29ubmVjdGluZyB3aXRoIHRoaXNcbiAgICAgKiBtZXRob2QuIEluIGZhY3QsIHJlY29ubmVjdGluZyBpcyB0aGUgb25seSB3YXkgdG8gY29udGludWUgdXNpbmcgYSBjbG9zZWQgYENsaWVudGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG9zdCAgSG9zdCB0aGUgY2xpZW50IHNob3VsZCBjb25uZWN0IHRvLiBPcHRpb25hbCwgZGVmYXVsdCBpcyBcImxvY2FsaG9zdFwiLlxuICAgICAqIEBwYXJhbSBwb3J0ICBQb3J0IHRoZSBjbGllbnQgc2hvdWxkIGNvbm5lY3QgdG8uIE9wdGlvbmFsLCBkZWZhdWx0IGlzIDIxLlxuICAgICAqL1xuICAgIGNvbm5lY3QoaG9zdCA9IFwibG9jYWxob3N0XCIsIHBvcnQgPSAyMSkge1xuICAgICAgICB0aGlzLmZ0cC5yZXNldCgpO1xuICAgICAgICB0aGlzLmZ0cC5zb2NrZXQuY29ubmVjdCh7XG4gICAgICAgICAgICBob3N0LFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIGZhbWlseTogdGhpcy5mdHAuaXBGYW1pbHlcbiAgICAgICAgfSwgKCkgPT4gdGhpcy5mdHAubG9nKGBDb25uZWN0ZWQgdG8gJHtuZXRVdGlsc18xLmRlc2NyaWJlQWRkcmVzcyh0aGlzLmZ0cC5zb2NrZXQpfSAoJHtuZXRVdGlsc18xLmRlc2NyaWJlVExTKHRoaXMuZnRwLnNvY2tldCl9KWApKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUNvbm5lY3RSZXNwb25zZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcyBgY29ubmVjdGAgYnV0IHVzaW5nIGltcGxpY2l0IFRMUy4gSW1wbGljaXQgVExTIGlzIG5vdCBhbiBGVFAgc3RhbmRhcmQgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIGJ5XG4gICAgICogZXhwbGljaXQgVExTLiBUaGVyZSBhcmUgc3RpbGwgRlRQIHNlcnZlcnMgdGhhdCBzdXBwb3J0IG9ubHkgaW1wbGljaXQgVExTLCB0aG91Z2guXG4gICAgICovXG4gICAgY29ubmVjdEltcGxpY2l0VExTKGhvc3QgPSBcImxvY2FsaG9zdFwiLCBwb3J0ID0gMjEsIHRsc09wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmZ0cC5yZXNldCgpO1xuICAgICAgICB0aGlzLmZ0cC5zb2NrZXQgPSB0bHNfMS5jb25uZWN0KHBvcnQsIGhvc3QsIHRsc09wdGlvbnMsICgpID0+IHRoaXMuZnRwLmxvZyhgQ29ubmVjdGVkIHRvICR7bmV0VXRpbHNfMS5kZXNjcmliZUFkZHJlc3ModGhpcy5mdHAuc29ja2V0KX0gKCR7bmV0VXRpbHNfMS5kZXNjcmliZVRMUyh0aGlzLmZ0cC5zb2NrZXQpfSlgKSk7XG4gICAgICAgIHRoaXMuZnRwLnRsc09wdGlvbnMgPSB0bHNPcHRpb25zO1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlQ29ubmVjdFJlc3BvbnNlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGZpcnN0IHJlcG9uc2UgYnkgYW4gRlRQIHNlcnZlciBhZnRlciB0aGUgc29ja2V0IGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQuXG4gICAgICovXG4gICAgX2hhbmRsZUNvbm5lY3RSZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnRwLmhhbmRsZSh1bmRlZmluZWQsIChyZXMsIHRhc2spID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGRlc3Ryb3llZCBieSB0aGUgRlRQQ29udGV4dCBhdCB0aGlzIHBvaW50LlxuICAgICAgICAgICAgICAgIHRhc2sucmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYXJzZUNvbnRyb2xSZXNwb25zZV8xLnBvc2l0aXZlQ29tcGxldGlvbihyZXMuY29kZSkpIHtcbiAgICAgICAgICAgICAgICB0YXNrLnJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlamVjdCBhbGwgb3RoZXIgY29kZXMsIGluY2x1ZGluZyAxMjAgXCJTZXJ2aWNlIHJlYWR5IGluIG5ubiBtaW51dGVzXCIuXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBzdGF5IGNvbm5lY3RlZCBidXQgZG9uJ3QgcmVwbGFjZSB0aGUgc29ja2V0IHlldCBieSB1c2luZyByZXNldCgpXG4gICAgICAgICAgICAgICAgLy8gc28gdGhlIHVzZXIgY2FuIGluc3BlY3QgcHJvcGVydGllcyBvZiB0aGlzIGluc3RhbmNlLlxuICAgICAgICAgICAgICAgIHRoaXMuZnRwLnNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgdGFzay5yZWplY3QobmV3IEZ0cENvbnRleHRfMS5GVFBFcnJvcihyZXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgYW4gRlRQIGNvbW1hbmQgYW5kIGhhbmRsZSB0aGUgZmlyc3QgcmVzcG9uc2UuXG4gICAgICovXG4gICAgc2VuZChjb21tYW5kLCBpZ25vcmVFcnJvckNvZGVzREVQUkVDQVRFRCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpZ25vcmVFcnJvckNvZGVzREVQUkVDQVRFRCkgeyAvLyBEZXByZWNhdGVkIHN0YXJ0aW5nIGZyb20gMy45LjBcbiAgICAgICAgICAgIHRoaXMuZnRwLmxvZyhcIkRlcHJlY2F0ZWQgY2FsbCB1c2luZyBzZW5kKGNvbW1hbmQsIGZsYWcpIHdpdGggYm9vbGVhbiBmbGFnIHRvIGlnbm9yZSBlcnJvcnMuIFVzZSBzZW5kSWdub3JpbmdFcnJvcihjb21tYW5kKS5cIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZW5kSWdub3JpbmdFcnJvcihjb21tYW5kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mdHAucmVxdWVzdChjb21tYW5kKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCBhbiBGVFAgY29tbWFuZCBhbmQgaWdub3JlIGFuIEZUUCBlcnJvciByZXNwb25zZS4gQW55IG90aGVyIGtpbmQgb2YgZXJyb3Igb3IgdGltZW91dCB3aWxsIHN0aWxsIHJlamVjdCB0aGUgUHJvbWlzZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21tYW5kXG4gICAgICovXG4gICAgc2VuZElnbm9yaW5nRXJyb3IoY29tbWFuZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mdHAuaGFuZGxlKGNvbW1hbmQsIChyZXMsIHRhc2spID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBGdHBDb250ZXh0XzEuRlRQRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0YXNrLnJlc29sdmUoeyBjb2RlOiByZXMuY29kZSwgbWVzc2FnZTogcmVzLm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHRhc2sucmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXNrLnJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZ3JhZGUgdGhlIGN1cnJlbnQgc29ja2V0IGNvbm5lY3Rpb24gdG8gVExTLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgIFRMUyBvcHRpb25zIGFzIGluIGB0bHMuY29ubmVjdChvcHRpb25zKWAsIG9wdGlvbmFsLlxuICAgICAqIEBwYXJhbSBjb21tYW5kICBTZXQgdGhlIGF1dGhlbnRpY2F0aW9uIGNvbW1hbmQuIE9wdGlvbmFsLCBkZWZhdWx0IGlzIFwiQVVUSCBUTFNcIi5cbiAgICAgKi9cbiAgICBhc3luYyB1c2VUTFMob3B0aW9ucyA9IHt9LCBjb21tYW5kID0gXCJBVVRIIFRMU1wiKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMuc2VuZChjb21tYW5kKTtcbiAgICAgICAgdGhpcy5mdHAuc29ja2V0ID0gYXdhaXQgbmV0VXRpbHNfMS51cGdyYWRlU29ja2V0KHRoaXMuZnRwLnNvY2tldCwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZnRwLnRsc09wdGlvbnMgPSBvcHRpb25zOyAvLyBLZWVwIHRoZSBUTFMgb3B0aW9ucyBmb3IgbGF0ZXIgZGF0YSBjb25uZWN0aW9ucyB0aGF0IHNob3VsZCB1c2UgdGhlIHNhbWUgb3B0aW9ucy5cbiAgICAgICAgdGhpcy5mdHAubG9nKGBDb250cm9sIHNvY2tldCBpcyB1c2luZzogJHtuZXRVdGlsc18xLmRlc2NyaWJlVExTKHRoaXMuZnRwLnNvY2tldCl9YCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvZ2luIGEgdXNlciB3aXRoIGEgcGFzc3dvcmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlciAgVXNlcm5hbWUgdG8gdXNlIGZvciBsb2dpbi4gT3B0aW9uYWwsIGRlZmF1bHQgaXMgXCJhbm9ueW1vdXNcIi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgIFBhc3N3b3JkIHRvIHVzZSBmb3IgbG9naW4uIE9wdGlvbmFsLCBkZWZhdWx0IGlzIFwiZ3Vlc3RcIi5cbiAgICAgKi9cbiAgICBsb2dpbih1c2VyID0gXCJhbm9ueW1vdXNcIiwgcGFzc3dvcmQgPSBcImd1ZXN0XCIpIHtcbiAgICAgICAgdGhpcy5mdHAubG9nKGBMb2dpbiBzZWN1cml0eTogJHtuZXRVdGlsc18xLmRlc2NyaWJlVExTKHRoaXMuZnRwLnNvY2tldCl9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZ0cC5oYW5kbGUoXCJVU0VSIFwiICsgdXNlciwgKHJlcywgdGFzaykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGFzay5yZWplY3QocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNlQ29udHJvbFJlc3BvbnNlXzEucG9zaXRpdmVDb21wbGV0aW9uKHJlcy5jb2RlKSkgeyAvLyBVc2VyIGxvZ2dlZCBpbiBwcm9jZWVkIE9SIENvbW1hbmQgc3VwZXJmbHVvdXNcbiAgICAgICAgICAgICAgICB0YXNrLnJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcy5jb2RlID09PSAzMzEpIHsgLy8gVXNlciBuYW1lIG9rYXksIG5lZWQgcGFzc3dvcmRcbiAgICAgICAgICAgICAgICB0aGlzLmZ0cC5zZW5kKFwiUEFTUyBcIiArIHBhc3N3b3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgeyAvLyBBbHNvIHJlcG9ydCBlcnJvciBvbiAzMzIgKE5lZWQgYWNjb3VudClcbiAgICAgICAgICAgICAgICB0YXNrLnJlamVjdChuZXcgRnRwQ29udGV4dF8xLkZUUEVycm9yKHJlcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB1c3VhbCBkZWZhdWx0IHNldHRpbmdzLlxuICAgICAqXG4gICAgICogU2V0dGluZ3MgdXNlZDpcbiAgICAgKiAqIEJpbmFyeSBtb2RlIChUWVBFIEkpXG4gICAgICogKiBGaWxlIHN0cnVjdHVyZSAoU1RSVSBGKVxuICAgICAqICogQWRkaXRpb25hbCBzZXR0aW5ncyBmb3IgRlRQUyAoUEJTWiAwLCBQUk9UIFApXG4gICAgICovXG4gICAgYXN5bmMgdXNlRGVmYXVsdFNldHRpbmdzKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNlbmQoXCJUWVBFIElcIik7IC8vIEJpbmFyeSBtb2RlXG4gICAgICAgIGF3YWl0IHRoaXMuc2VuZElnbm9yaW5nRXJyb3IoXCJTVFJVIEZcIik7IC8vIFVzZSBmaWxlIHN0cnVjdHVyZVxuICAgICAgICBhd2FpdCB0aGlzLnNlbmRJZ25vcmluZ0Vycm9yKFwiT1BUUyBVVEY4IE9OXCIpOyAvLyBTb21lIHNlcnZlcnMgZXhwZWN0IFVURi04IHRvIGJlIGVuYWJsZWQgZXhwbGljaXRseVxuICAgICAgICBhd2FpdCB0aGlzLnNlbmRJZ25vcmluZ0Vycm9yKFwiT1BUUyBNTFNUIHR5cGU7c2l6ZTttb2RpZnk7dW5pcXVlO3VuaXgubW9kZTt1bml4Lm93bmVyO3VuaXguZ3JvdXA7dW5peC5vd25lcm5hbWU7dW5peC5ncm91cG5hbWU7XCIpOyAvLyBNYWtlIHN1cmUgTUxTRCBsaXN0aW5ncyBpbmNsdWRlIGFsbCB3ZSBjYW4gcGFyc2VcbiAgICAgICAgaWYgKHRoaXMuZnRwLmhhc1RMUykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kSWdub3JpbmdFcnJvcihcIlBCU1ogMFwiKTsgLy8gU2V0IHRvIDAgZm9yIFRMU1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kSWdub3JpbmdFcnJvcihcIlBST1QgUFwiKTsgLy8gUHJvdGVjdCBjaGFubmVsIChhbHNvIGZvciBkYXRhIGNvbm5lY3Rpb25zKVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNhbGxzIGBjb25uZWN0YCwgYHVzZVRMU2AsIGBsb2dpbmAgYW5kIGB1c2VEZWZhdWx0U2V0dGluZ3NgLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhbiBpbnN0YW5jZSBtZXRob2QgYW5kIHRodXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGhlIGxpZmVjeWNsZSBvZiBhIGBDbGllbnRgXG4gICAgICogaW5zdGFuY2UuIFdoZW5ldmVyIHlvdSBkbywgdGhlIGNsaWVudCBpcyByZXNldCB3aXRoIGEgbmV3IGNvbnRyb2wgY29ubmVjdGlvbi4gVGhpcyBhbHNvIGltcGxpZXMgdGhhdFxuICAgICAqIHlvdSBjYW4gcmVvcGVuIGEgYENsaWVudGAgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBjbG9zZWQgZHVlIHRvIGFuIGVycm9yIHdoZW4gcmVjb25uZWN0aW5nIHdpdGggdGhpc1xuICAgICAqIG1ldGhvZC4gSW4gZmFjdCwgcmVjb25uZWN0aW5nIGlzIHRoZSBvbmx5IHdheSB0byBjb250aW51ZSB1c2luZyBhIGNsb3NlZCBgQ2xpZW50YC5cbiAgICAgKi9cbiAgICBhc3luYyBhY2Nlc3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHVzZUV4cGxpY2l0VExTID0gb3B0aW9ucy5zZWN1cmUgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IHVzZUltcGxpY2l0VExTID0gb3B0aW9ucy5zZWN1cmUgPT09IFwiaW1wbGljaXRcIjtcbiAgICAgICAgbGV0IHdlbGNvbWU7XG4gICAgICAgIGlmICh1c2VJbXBsaWNpdFRMUykge1xuICAgICAgICAgICAgd2VsY29tZSA9IGF3YWl0IHRoaXMuY29ubmVjdEltcGxpY2l0VExTKG9wdGlvbnMuaG9zdCwgb3B0aW9ucy5wb3J0LCBvcHRpb25zLnNlY3VyZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2VsY29tZSA9IGF3YWl0IHRoaXMuY29ubmVjdChvcHRpb25zLmhvc3QsIG9wdGlvbnMucG9ydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZUV4cGxpY2l0VExTKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVzZVRMUyhvcHRpb25zLnNlY3VyZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4ob3B0aW9ucy51c2VyLCBvcHRpb25zLnBhc3N3b3JkKTtcbiAgICAgICAgYXdhaXQgdGhpcy51c2VEZWZhdWx0U2V0dGluZ3MoKTtcbiAgICAgICAgcmV0dXJuIHdlbGNvbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICAgKi9cbiAgICBhc3luYyBwd2QoKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VuZChcIlBXRFwiKTtcbiAgICAgICAgLy8gVGhlIGRpcmVjdG9yeSBpcyBwYXJ0IG9mIHRoZSByZXR1cm4gbWVzc2FnZSwgZm9yIGV4YW1wbGU6XG4gICAgICAgIC8vIDI1NyBcIi90aGlzL3RoYXRcIiBpcyBjdXJyZW50IGRpcmVjdG9yeS5cbiAgICAgICAgY29uc3QgcGFyc2VkID0gcmVzLm1lc3NhZ2UubWF0Y2goL1wiKC4rKVwiLyk7XG4gICAgICAgIGlmIChwYXJzZWQgPT09IG51bGwgfHwgcGFyc2VkWzFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgcGFyc2UgcmVzcG9uc2UgdG8gY29tbWFuZCAnUFdEJzogJHtyZXMubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkWzFdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBkZXNjcmlwdGlvbiBvZiBzdXBwb3J0ZWQgZmVhdHVyZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIHNlbmRzIHRoZSBGRUFUIGNvbW1hbmQgYW5kIHBhcnNlcyB0aGUgcmVzdWx0IGludG8gYSBNYXAgd2hlcmUga2V5cyBjb3JyZXNwb25kIHRvIGF2YWlsYWJsZSBjb21tYW5kc1xuICAgICAqIGFuZCB2YWx1ZXMgaG9sZCBmdXJ0aGVyIGluZm9ybWF0aW9uLiBCZSBhd2FyZSB0aGF0IHlvdXIgRlRQIHNlcnZlcnMgbWlnaHQgbm90IHN1cHBvcnQgdGhpc1xuICAgICAqIGNvbW1hbmQgaW4gd2hpY2ggY2FzZSB0aGlzIG1ldGhvZCB3aWxsIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gYnV0IGp1c3QgcmV0dXJuIGFuIGVtcHR5IE1hcC5cbiAgICAgKi9cbiAgICBhc3luYyBmZWF0dXJlcygpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kSWdub3JpbmdFcnJvcihcIkZFQVRcIik7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gbmV3IE1hcCgpO1xuICAgICAgICAvLyBOb3Qgc3VwcG9ydGluZyBhbnkgc3BlY2lhbCBmZWF0dXJlcyB3aWxsIGJlIHJlcG9ydGVkIHdpdGggYSBzaW5nbGUgbGluZS5cbiAgICAgICAgaWYgKHJlcy5jb2RlIDwgNDAwICYmIHBhcnNlQ29udHJvbFJlc3BvbnNlXzEuaXNNdWx0aWxpbmUocmVzLm1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAvLyBUaGUgZmlyc3QgYW5kIGxhc3QgbGluZSB3cmFwIHRoZSBtdWx0aWxpbmUgcmVzcG9uc2UsIGlnbm9yZSB0aGVtLlxuICAgICAgICAgICAgcmVzLm1lc3NhZ2Uuc3BsaXQoXCJcXG5cIikuc2xpY2UoMSwgLTEpLmZvckVhY2gobGluZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQSB0eXBpY2FsIGxpbmVzIGxvb2tzIGxpa2U6IFwiIFJFU1QgU1RSRUFNXCIgb3IgXCIgTURUTVwiLlxuICAgICAgICAgICAgICAgIC8vIFNlcnZlcnMgbWlnaHQgbm90IHVzZSBhbiBpbmRlbnRhdGlvbiB0aG91Z2guXG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBsaW5lLnRyaW0oKS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICAgICAgZmVhdHVyZXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSB8fCBcIlwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmZWF0dXJlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICAgKi9cbiAgICBhc3luYyBjZChwYXRoKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkUGF0aCA9IGF3YWl0IHRoaXMucHJvdGVjdFdoaXRlc3BhY2UocGF0aCk7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbmQoXCJDV0QgXCIgKyB2YWxpZFBhdGgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTd2l0Y2ggdG8gdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgICAqL1xuICAgIGFzeW5jIGNkdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbmQoXCJDRFVQXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGxhc3QgbW9kaWZpZWQgdGltZSBvZiBhIGZpbGUuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSBldmVyeSBGVFAgc2VydmVyLCBpbiB3aGljaCBjYXNlXG4gICAgICogY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsYXN0TW9kKHBhdGgpIHtcbiAgICAgICAgY29uc3QgdmFsaWRQYXRoID0gYXdhaXQgdGhpcy5wcm90ZWN0V2hpdGVzcGFjZShwYXRoKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kKGBNRFRNICR7dmFsaWRQYXRofWApO1xuICAgICAgICBjb25zdCBkYXRlID0gcmVzLm1lc3NhZ2Uuc2xpY2UoNCk7XG4gICAgICAgIHJldHVybiBwYXJzZUxpc3RNTFNEXzEucGFyc2VNTFN4RGF0ZShkYXRlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzaXplIG9mIGEgZmlsZS5cbiAgICAgKi9cbiAgICBhc3luYyBzaXplKHBhdGgpIHtcbiAgICAgICAgY29uc3QgdmFsaWRQYXRoID0gYXdhaXQgdGhpcy5wcm90ZWN0V2hpdGVzcGFjZShwYXRoKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IGBTSVpFICR7dmFsaWRQYXRofWA7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VuZChjb21tYW5kKTtcbiAgICAgICAgLy8gVGhlIHNpemUgaXMgcGFydCBvZiB0aGUgcmVzcG9uc2UgbWVzc2FnZSwgZm9yIGV4YW1wbGU6IFwiMjEzIDU1NTU1NVwiLiBJdCdzXG4gICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYSBjb21tbWVudGFyeSBhcHBlbmRlZCBsaWtlIFwiMjEzIDU1NTUsIHNvbWUgY29tbWVudGFyeVwiLlxuICAgICAgICBjb25zdCBzaXplID0gcGFyc2VJbnQocmVzLm1lc3NhZ2Uuc2xpY2UoNCksIDEwKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihzaXplKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBwYXJzZSByZXNwb25zZSB0byBjb21tYW5kICcke2NvbW1hbmR9JyBhcyBhIG51bWVyaWNhbCB2YWx1ZTogJHtyZXMubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVuYW1lIGEgZmlsZS5cbiAgICAgKlxuICAgICAqIERlcGVuZGluZyBvbiB0aGUgRlRQIHNlcnZlciB0aGlzIG1pZ2h0IGFsc28gYmUgdXNlZCB0byBtb3ZlIGEgZmlsZSBmcm9tIG9uZVxuICAgICAqIGRpcmVjdG9yeSB0byBhbm90aGVyIGJ5IHByb3ZpZGluZyBmdWxsIHBhdGhzLlxuICAgICAqL1xuICAgIGFzeW5jIHJlbmFtZShzcmNQYXRoLCBkZXN0UGF0aCkge1xuICAgICAgICBjb25zdCB2YWxpZFNyYyA9IGF3YWl0IHRoaXMucHJvdGVjdFdoaXRlc3BhY2Uoc3JjUGF0aCk7XG4gICAgICAgIGNvbnN0IHZhbGlkRGVzdCA9IGF3YWl0IHRoaXMucHJvdGVjdFdoaXRlc3BhY2UoZGVzdFBhdGgpO1xuICAgICAgICBhd2FpdCB0aGlzLnNlbmQoXCJSTkZSIFwiICsgdmFsaWRTcmMpO1xuICAgICAgICByZXR1cm4gdGhpcy5zZW5kKFwiUk5UTyBcIiArIHZhbGlkRGVzdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIGZpbGUgZnJvbSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gaWdub3JlIEZUUCBlcnJvciByZXR1cm4gY29kZXMgd2hpY2ggd29uJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGUuZy5cbiAgICAgKiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGFzeW5jIHJlbW92ZShwYXRoLCBpZ25vcmVFcnJvckNvZGVzID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgdmFsaWRQYXRoID0gYXdhaXQgdGhpcy5wcm90ZWN0V2hpdGVzcGFjZShwYXRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZChgREVMRSAke3ZhbGlkUGF0aH1gLCBpZ25vcmVFcnJvckNvZGVzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVwb3J0IHRyYW5zZmVyIHByb2dyZXNzIGZvciBhbnkgdXBsb2FkIG9yIGRvd25sb2FkIHRvIGEgZ2l2ZW4gaGFuZGxlci5cbiAgICAgKlxuICAgICAqIFRoaXMgd2lsbCBhbHNvIHJlc2V0IHRoZSBvdmVyYWxsIHRyYW5zZmVyIGNvdW50ZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3IgbXVsdGlwbGUgdHJhbnNmZXJzLiBZb3UgY2FuXG4gICAgICogYWxzbyBjYWxsIHRoZSBmdW5jdGlvbiB3aXRob3V0IGEgaGFuZGxlciB0byBzdG9wIHJlcG9ydGluZyB0byBhbiBlYXJsaWVyIG9uZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyICBIYW5kbGVyIGZ1bmN0aW9uIHRvIGNhbGwgb24gdHJhbnNmZXIgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgdHJhY2tQcm9ncmVzcyhoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzVHJhY2tlci5ieXRlc092ZXJhbGwgPSAwO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1RyYWNrZXIucmVwb3J0VG8oaGFuZGxlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwbG9hZCBkYXRhIGZyb20gYSByZWFkYWJsZSBzdHJlYW0gb3IgYSBsb2NhbCBmaWxlIHRvIGEgcmVtb3RlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlICBSZWFkYWJsZSBzdHJlYW0gb3IgcGF0aCB0byBhIGxvY2FsIGZpbGUuXG4gICAgICogQHBhcmFtIHRvUmVtb3RlUGF0aCAgUGF0aCB0byBhIHJlbW90ZSBmaWxlIHRvIHdyaXRlIHRvLlxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZEZyb20oc291cmNlLCB0b1JlbW90ZVBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBsb2FkV2l0aENvbW1hbmQoc291cmNlLCB0b1JlbW90ZVBhdGgsIFwiU1RPUlwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBsb2FkIGRhdGEgZnJvbSBhIHJlYWRhYmxlIHN0cmVhbSBvciBhIGxvY2FsIGZpbGUgYnkgYXBwZW5kaW5nIGl0IHRvIGFuIGV4aXN0aW5nIGZpbGUuIElmIHRoZSBmaWxlIGRvZXNuJ3RcbiAgICAgKiBleGlzdCB0aGUgRlRQIHNlcnZlciBzaG91bGQgY3JlYXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZSAgUmVhZGFibGUgc3RyZWFtIG9yIHBhdGggdG8gYSBsb2NhbCBmaWxlLlxuICAgICAqIEBwYXJhbSB0b1JlbW90ZVBhdGggIFBhdGggdG8gYSByZW1vdGUgZmlsZSB0byB3cml0ZSB0by5cbiAgICAgKi9cbiAgICBhc3luYyBhcHBlbmRGcm9tKHNvdXJjZSwgdG9SZW1vdGVQYXRoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZFdpdGhDb21tYW5kKHNvdXJjZSwgdG9SZW1vdGVQYXRoLCBcIkFQUEVcIiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBhc3luYyBfdXBsb2FkV2l0aENvbW1hbmQoc291cmNlLCByZW1vdGVQYXRoLCBjb21tYW5kLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXBsb2FkTG9jYWxGaWxlKHNvdXJjZSwgcmVtb3RlUGF0aCwgY29tbWFuZCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZEZyb21TdHJlYW0oc291cmNlLCByZW1vdGVQYXRoLCBjb21tYW5kKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIF91cGxvYWRMb2NhbEZpbGUobG9jYWxQYXRoLCByZW1vdGVQYXRoLCBjb21tYW5kLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGZkID0gYXdhaXQgZnNPcGVuKGxvY2FsUGF0aCwgXCJyXCIpO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBmc18xLmNyZWF0ZVJlYWRTdHJlYW0oXCJcIiwge1xuICAgICAgICAgICAgZmQsXG4gICAgICAgICAgICBzdGFydDogb3B0aW9ucy5sb2NhbFN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBvcHRpb25zLmxvY2FsRW5kSW5jbHVzaXZlLFxuICAgICAgICAgICAgYXV0b0Nsb3NlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91cGxvYWRGcm9tU3RyZWFtKHNvdXJjZSwgcmVtb3RlUGF0aCwgY29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBpZ25vcmVFcnJvcigoKSA9PiBmc0Nsb3NlKGZkKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIF91cGxvYWRGcm9tU3RyZWFtKHNvdXJjZSwgcmVtb3RlUGF0aCwgY29tbWFuZCkge1xuICAgICAgICBjb25zdCBvbkVycm9yID0gKGVycikgPT4gdGhpcy5mdHAuY2xvc2VXaXRoRXJyb3IoZXJyKTtcbiAgICAgICAgc291cmNlLm9uY2UoXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkUGF0aCA9IGF3YWl0IHRoaXMucHJvdGVjdFdoaXRlc3BhY2UocmVtb3RlUGF0aCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVUcmFuc2Zlcih0aGlzLmZ0cCk7XG4gICAgICAgICAgICAvLyBLZWVwIHRoZSBrZXl3b3JkIGBhd2FpdGAgb3IgdGhlIGBmaW5hbGx5YCBjbGF1c2UgYmVsb3cgcnVucyB0b28gZWFybHlcbiAgICAgICAgICAgIC8vIGFuZCByZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lciBmb3IgdGhlIHNvdXJjZSBzdHJlYW0gdG9vIGVhcmx5LlxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRyYW5zZmVyXzEudXBsb2FkRnJvbShzb3VyY2UsIHtcbiAgICAgICAgICAgICAgICBmdHA6IHRoaXMuZnRwLFxuICAgICAgICAgICAgICAgIHRyYWNrZXI6IHRoaXMuX3Byb2dyZXNzVHJhY2tlcixcbiAgICAgICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgICAgIHJlbW90ZVBhdGg6IHZhbGlkUGF0aCxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInVwbG9hZFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIG9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERvd25sb2FkIGEgcmVtb3RlIGZpbGUgYW5kIHBpcGUgaXRzIGRhdGEgdG8gYSB3cml0YWJsZSBzdHJlYW0gb3IgdG8gYSBsb2NhbCBmaWxlLlxuICAgICAqXG4gICAgICogWW91IGNhbiBvcHRpb25hbGx5IGRlZmluZSBhdCB3aGljaCBwb3NpdGlvbiBvZiB0aGUgcmVtb3RlIGZpbGUgeW91J2QgbGlrZSB0byBzdGFydFxuICAgICAqIGRvd25sb2FkaW5nLiBJZiB0aGUgZGVzdGluYXRpb24geW91IHByb3ZpZGUgaXMgYSBmaWxlLCB0aGUgb2Zmc2V0IHdpbGwgYmUgYXBwbGllZFxuICAgICAqIHRvIGl0IGFzIHdlbGwuIEZvciBleGFtcGxlOiBUbyByZXN1bWUgYSBmYWlsZWQgZG93bmxvYWQsIHlvdSdkIHJlcXVlc3QgdGhlIHNpemUgb2ZcbiAgICAgKiB0aGUgbG9jYWwsIHBhcnRpYWxseSBkb3dubG9hZGVkIGZpbGUgYW5kIHVzZSB0aGF0IGFzIHRoZSBvZmZzZXQuIEFzc3VtaW5nIHRoZSBzaXplXG4gICAgICogaXMgMjMsIHlvdSdkIGRvd25sb2FkIHRoZSByZXN0IHVzaW5nIGBkb3dubG9hZFRvKFwibG9jYWwudHh0XCIsIFwicmVtb3RlLnR4dFwiLCAyMylgLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uICBTdHJlYW0gb3IgcGF0aCBmb3IgYSBsb2NhbCBmaWxlIHRvIHdyaXRlIHRvLlxuICAgICAqIEBwYXJhbSBmcm9tUmVtb3RlUGF0aCAgUGF0aCBvZiB0aGUgcmVtb3RlIGZpbGUgdG8gcmVhZCBmcm9tLlxuICAgICAqIEBwYXJhbSBzdGFydEF0ICBQb3NpdGlvbiB3aXRoaW4gdGhlIHJlbW90ZSBmaWxlIHRvIHN0YXJ0IGRvd25sb2FkaW5nIGF0LiBJZiB0aGUgZGVzdGluYXRpb24gaXMgYSBmaWxlLCB0aGlzIG9mZnNldCBpcyBhbHNvIGFwcGxpZWQgdG8gaXQuXG4gICAgICovXG4gICAgYXN5bmMgZG93bmxvYWRUbyhkZXN0aW5hdGlvbiwgZnJvbVJlbW90ZVBhdGgsIHN0YXJ0QXQgPSAwKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVzdGluYXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kb3dubG9hZFRvRmlsZShkZXN0aW5hdGlvbiwgZnJvbVJlbW90ZVBhdGgsIHN0YXJ0QXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kb3dubG9hZFRvU3RyZWFtKGRlc3RpbmF0aW9uLCBmcm9tUmVtb3RlUGF0aCwgc3RhcnRBdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBhc3luYyBfZG93bmxvYWRUb0ZpbGUobG9jYWxQYXRoLCByZW1vdGVQYXRoLCBzdGFydEF0KSB7XG4gICAgICAgIGNvbnN0IGFwcGVuZGluZ1RvTG9jYWxGaWxlID0gc3RhcnRBdCA+IDA7XG4gICAgICAgIGNvbnN0IGZpbGVTeXN0ZW1GbGFncyA9IGFwcGVuZGluZ1RvTG9jYWxGaWxlID8gXCJyK1wiIDogXCJ3XCI7XG4gICAgICAgIGNvbnN0IGZkID0gYXdhaXQgZnNPcGVuKGxvY2FsUGF0aCwgZmlsZVN5c3RlbUZsYWdzKTtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBmc18xLmNyZWF0ZVdyaXRlU3RyZWFtKFwiXCIsIHtcbiAgICAgICAgICAgIGZkLFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0QXQsXG4gICAgICAgICAgICBhdXRvQ2xvc2U6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Rvd25sb2FkVG9TdHJlYW0oZGVzdGluYXRpb24sIHJlbW90ZVBhdGgsIHN0YXJ0QXQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsRmlsZVN0YXRzID0gYXdhaXQgaWdub3JlRXJyb3IoKCkgPT4gZnNTdGF0KGxvY2FsUGF0aCkpO1xuICAgICAgICAgICAgY29uc3QgaGFzRG93bmxvYWRlZERhdGEgPSBsb2NhbEZpbGVTdGF0cyAmJiBsb2NhbEZpbGVTdGF0cy5zaXplID4gMDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFJlbW92ZUxvY2FsRmlsZSA9ICFhcHBlbmRpbmdUb0xvY2FsRmlsZSAmJiAhaGFzRG93bmxvYWRlZERhdGE7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlTG9jYWxGaWxlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaWdub3JlRXJyb3IoKCkgPT4gZnNVbmxpbmsobG9jYWxQYXRoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBpZ25vcmVFcnJvcigoKSA9PiBmc0Nsb3NlKGZkKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIF9kb3dubG9hZFRvU3RyZWFtKGRlc3RpbmF0aW9uLCByZW1vdGVQYXRoLCBzdGFydEF0KSB7XG4gICAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyKSA9PiB0aGlzLmZ0cC5jbG9zZVdpdGhFcnJvcihlcnIpO1xuICAgICAgICBkZXN0aW5hdGlvbi5vbmNlKFwiZXJyb3JcIiwgb25FcnJvcik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZFBhdGggPSBhd2FpdCB0aGlzLnByb3RlY3RXaGl0ZXNwYWNlKHJlbW90ZVBhdGgpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlVHJhbnNmZXIodGhpcy5mdHApO1xuICAgICAgICAgICAgLy8gS2VlcCB0aGUga2V5d29yZCBgYXdhaXRgIG9yIHRoZSBgZmluYWxseWAgY2xhdXNlIGJlbG93IHJ1bnMgdG9vIGVhcmx5XG4gICAgICAgICAgICAvLyBhbmQgcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXIgZm9yIHRoZSBzb3VyY2Ugc3RyZWFtIHRvbyBlYXJseS5cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0cmFuc2Zlcl8xLmRvd25sb2FkVG8oZGVzdGluYXRpb24sIHtcbiAgICAgICAgICAgICAgICBmdHA6IHRoaXMuZnRwLFxuICAgICAgICAgICAgICAgIHRyYWNrZXI6IHRoaXMuX3Byb2dyZXNzVHJhY2tlcixcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBzdGFydEF0ID4gMCA/IGBSRVNUICR7c3RhcnRBdH1gIDogYFJFVFIgJHt2YWxpZFBhdGh9YCxcbiAgICAgICAgICAgICAgICByZW1vdGVQYXRoOiB2YWxpZFBhdGgsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJkb3dubG9hZFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvcik7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5lbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMaXN0IGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgb3IgZnJvbSBgcGF0aGAgaWYgc3BlY2lmaWVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIFtwYXRoXSAgUGF0aCB0byByZW1vdGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gICAgICovXG4gICAgYXN5bmMgbGlzdChwYXRoID0gXCJcIikge1xuICAgICAgICBjb25zdCB2YWxpZFBhdGggPSBhd2FpdCB0aGlzLnByb3RlY3RXaGl0ZXNwYWNlKHBhdGgpO1xuICAgICAgICBsZXQgbGFzdEVycm9yO1xuICAgICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiB0aGlzLmF2YWlsYWJsZUxpc3RDb21tYW5kcykge1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IGAke2NhbmRpZGF0ZX0gJHt2YWxpZFBhdGh9YC50cmltKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVUcmFuc2Zlcih0aGlzLmZ0cCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZExpc3QgPSBhd2FpdCB0aGlzLl9yZXF1ZXN0TGlzdFdpdGhDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgICAgICAgICAgIC8vIFVzZSBzdWNjZXNzZnVsIGNhbmRpZGF0ZSBmb3IgYWxsIHN1YnNlcXVlbnQgcmVxdWVzdHMuXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVMaXN0Q29tbWFuZHMgPSBbY2FuZGlkYXRlXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkTGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRUcnlOZXh0ID0gZXJyIGluc3RhbmNlb2YgRnRwQ29udGV4dF8xLkZUUEVycm9yO1xuICAgICAgICAgICAgICAgIGlmICghc2hvdWxkVHJ5TmV4dCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBsYXN0RXJyb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBhc3luYyBfcmVxdWVzdExpc3RXaXRoQ29tbWFuZChjb21tYW5kKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBTdHJpbmdXcml0ZXJfMS5TdHJpbmdXcml0ZXIoKTtcbiAgICAgICAgYXdhaXQgdHJhbnNmZXJfMS5kb3dubG9hZFRvKGJ1ZmZlciwge1xuICAgICAgICAgICAgZnRwOiB0aGlzLmZ0cCxcbiAgICAgICAgICAgIHRyYWNrZXI6IHRoaXMuX3Byb2dyZXNzVHJhY2tlcixcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICByZW1vdGVQYXRoOiBcIlwiLFxuICAgICAgICAgICAgdHlwZTogXCJsaXN0XCJcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBidWZmZXIuZ2V0VGV4dCh0aGlzLmZ0cC5lbmNvZGluZyk7XG4gICAgICAgIHRoaXMuZnRwLmxvZyh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VMaXN0KHRleHQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSBkaXJlY3RvcnkgYW5kIGFsbCBvZiBpdHMgY29udGVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZW1vdGVEaXJQYXRoICBUaGUgcGF0aCBvZiB0aGUgcmVtb3RlIGRpcmVjdG9yeSB0byBkZWxldGUuXG4gICAgICogQGV4YW1wbGUgY2xpZW50LnJlbW92ZURpcihcImZvb1wiKSAvLyBSZW1vdmUgZGlyZWN0b3J5ICdmb28nIHVzaW5nIGEgcmVsYXRpdmUgcGF0aC5cbiAgICAgKiBAZXhhbXBsZSBjbGllbnQucmVtb3ZlRGlyKFwiZm9vL2JhclwiKSAvLyBSZW1vdmUgZGlyZWN0b3J5ICdiYXInIHVzaW5nIGEgcmVsYXRpdmUgcGF0aC5cbiAgICAgKiBAZXhhbXBsZSBjbGllbnQucmVtb3ZlRGlyKFwiL2Zvby9iYXJcIikgLy8gUmVtb3ZlIGRpcmVjdG9yeSAnYmFyJyB1c2luZyBhbiBhYnNvbHV0ZSBwYXRoLlxuICAgICAqIEBleGFtcGxlIGNsaWVudC5yZW1vdmVEaXIoXCIvXCIpIC8vIFJlbW92ZSBldmVyeXRoaW5nLlxuICAgICAqL1xuICAgIGFzeW5jIHJlbW92ZURpcihyZW1vdGVEaXJQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leGl0QXRDdXJyZW50RGlyZWN0b3J5KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2QocmVtb3RlRGlyUGF0aCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFyV29ya2luZ0RpcigpO1xuICAgICAgICAgICAgaWYgKHJlbW90ZURpclBhdGggIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jZHVwKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVFbXB0eURpcihyZW1vdGVEaXJQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbGwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aXRob3V0IHJlbW92aW5nXG4gICAgICogdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGl0c2VsZi5cbiAgICAgKi9cbiAgICBhc3luYyBjbGVhcldvcmtpbmdEaXIoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCB0aGlzLmxpc3QoKSkge1xuICAgICAgICAgICAgaWYgKGZpbGUuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNkKGZpbGUubmFtZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhcldvcmtpbmdEaXIoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNkdXAoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUVtcHR5RGlyKGZpbGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZShmaWxlLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwbG9hZCB0aGUgY29udGVudHMgb2YgYSBsb2NhbCBkaXJlY3RvcnkgdG8gdGhlIHJlbW90ZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICAgKlxuICAgICAqIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lcyBhbmQgcmV1c2UgZXhpc3RpbmcgZGlyZWN0b3JpZXMuXG4gICAgICogVW5yZWxhdGVkIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aWxsIHJlbWFpbiB1bnRvdWNoZWQuIFlvdSBjYW4gb3B0aW9uYWxseSBwcm92aWRlIGEgYHJlbW90ZURpclBhdGhgXG4gICAgICogdG8gcHV0IHRoZSBjb250ZW50cyBpbnNpZGUgYSBkaXJlY3Rvcnkgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGlmIG5lY2Vzc2FyeSBpbmNsdWRpbmcgYWxsXG4gICAgICogaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzLiBJZiB5b3UgZGlkIHByb3ZpZGUgYSByZW1vdGVEaXJQYXRoIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIHN0YXlcbiAgICAgKiB0aGUgc2FtZSBhcyBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb2NhbERpclBhdGggIExvY2FsIHBhdGgsIGUuZy4gXCJmb28vYmFyXCIgb3IgXCIuLi90ZXN0XCJcbiAgICAgKiBAcGFyYW0gW3JlbW90ZURpclBhdGhdICBSZW1vdGUgcGF0aCBvZiBhIGRpcmVjdG9yeSB0byB1cGxvYWQgdG8uIFdvcmtpbmcgZGlyZWN0b3J5IGlmIHVuZGVmaW5lZC5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRGcm9tRGlyKGxvY2FsRGlyUGF0aCwgcmVtb3RlRGlyUGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhpdEF0Q3VycmVudERpcmVjdG9yeShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVtb3RlRGlyUGF0aCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlRGlyKHJlbW90ZURpclBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VwbG9hZFRvV29ya2luZ0Rpcihsb2NhbERpclBhdGgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIF91cGxvYWRUb1dvcmtpbmdEaXIobG9jYWxEaXJQYXRoKSB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnNSZWFkRGlyKGxvY2FsRGlyUGF0aCk7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoXzEuam9pbihsb2NhbERpclBhdGgsIGZpbGUpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmc1N0YXQoZnVsbFBhdGgpO1xuICAgICAgICAgICAgaWYgKHN0YXRzLmlzRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRGcm9tKGZ1bGxQYXRoLCBmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9vcGVuRGlyKGZpbGUpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3VwbG9hZFRvV29ya2luZ0RpcihmdWxsUGF0aCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jZHVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRG93bmxvYWQgYWxsIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gYSBsb2NhbCBkaXJlY3RvcnkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9jYWxEaXJQYXRoICBUaGUgbG9jYWwgZGlyZWN0b3J5IHRvIGRvd25sb2FkIHRvLlxuICAgICAqIEBwYXJhbSByZW1vdGVEaXJQYXRoICBSZW1vdGUgZGlyZWN0b3J5IHRvIGRvd25sb2FkLiBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlmIG5vdCBzcGVjaWZpZWQuXG4gICAgICovXG4gICAgYXN5bmMgZG93bmxvYWRUb0Rpcihsb2NhbERpclBhdGgsIHJlbW90ZURpclBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4aXRBdEN1cnJlbnREaXJlY3RvcnkoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlbW90ZURpclBhdGgpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNkKHJlbW90ZURpclBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Rvd25sb2FkRnJvbVdvcmtpbmdEaXIobG9jYWxEaXJQYXRoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBhc3luYyBfZG93bmxvYWRGcm9tV29ya2luZ0Rpcihsb2NhbERpclBhdGgpIHtcbiAgICAgICAgYXdhaXQgZW5zdXJlTG9jYWxEaXJlY3RvcnkobG9jYWxEaXJQYXRoKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHRoaXMubGlzdCgpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFBhdGggPSBwYXRoXzEuam9pbihsb2NhbERpclBhdGgsIGZpbGUubmFtZSk7XG4gICAgICAgICAgICBpZiAoZmlsZS5pc0RpcmVjdG9yeSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2QoZmlsZS5uYW1lKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kb3dubG9hZEZyb21Xb3JraW5nRGlyKGxvY2FsUGF0aCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jZHVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWxlLmlzRmlsZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZG93bmxvYWRUbyhsb2NhbFBhdGgsIGZpbGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZSBzdXJlIGEgZ2l2ZW4gcmVtb3RlIHBhdGggZXhpc3RzLCBjcmVhdGluZyBhbGwgZGlyZWN0b3JpZXMgYXMgbmVjZXNzYXJ5LlxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxzbyBjaGFuZ2VzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBnaXZlbiBwYXRoLlxuICAgICAqL1xuICAgIGFzeW5jIGVuc3VyZURpcihyZW1vdGVEaXJQYXRoKSB7XG4gICAgICAgIC8vIElmIHRoZSByZW1vdGVEaXJQYXRoIHdhcyBhYnNvbHV0ZSBnbyB0byByb290IGRpcmVjdG9yeS5cbiAgICAgICAgaWYgKHJlbW90ZURpclBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2QoXCIvXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWVzID0gcmVtb3RlRGlyUGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKG5hbWUgPT4gbmFtZSAhPT0gXCJcIik7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fb3BlbkRpcihuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcnkgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IGFuZCBlbnRlciBpdC4gVGhpcyB3aWxsIG5vdCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGRpcmVjdG9yeVxuICAgICAqIGNvdWxkbid0IGJlIGNyZWF0ZWQgaWYgZm9yIGV4YW1wbGUgaXQgYWxyZWFkeSBleGlzdHMuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIF9vcGVuRGlyKGRpck5hbWUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZW5kSWdub3JpbmdFcnJvcihcIk1LRCBcIiArIGRpck5hbWUpO1xuICAgICAgICBhd2FpdCB0aGlzLmNkKGRpck5hbWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZW1wdHkgZGlyZWN0b3J5LCB3aWxsIGZhaWwgaWYgbm90IGVtcHR5LlxuICAgICAqL1xuICAgIGFzeW5jIHJlbW92ZUVtcHR5RGlyKHBhdGgpIHtcbiAgICAgICAgY29uc3QgdmFsaWRQYXRoID0gYXdhaXQgdGhpcy5wcm90ZWN0V2hpdGVzcGFjZShwYXRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZChgUk1EICR7dmFsaWRQYXRofWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGVFAgc2VydmVycyBjYW4ndCBoYW5kbGUgZmlsZW5hbWVzIHRoYXQgaGF2ZSBsZWFkaW5nIHdoaXRlc3BhY2UuIFRoaXMgbWV0aG9kIHRyYW5zZm9ybXNcbiAgICAgKiBhIGdpdmVuIHBhdGggdG8gZml4IHRoYXQgaXNzdWUgZm9yIG1vc3QgY2FzZXMuXG4gICAgICovXG4gICAgYXN5bmMgcHJvdGVjdFdoaXRlc3BhY2UocGF0aCkge1xuICAgICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChcIiBcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBsZWFkaW5nIHdoaXRlc3BhY2UgYnkgcHJlcGVuZGluZyB0aGUgYWJzb2x1dGUgcGF0aDpcbiAgICAgICAgLy8gXCIgdGVzdC50eHRcIiB3aGlsZSBiZWluZyBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgYmVjb21lcyBcIi8gdGVzdC50eHRcIi5cbiAgICAgICAgY29uc3QgcHdkID0gYXdhaXQgdGhpcy5wd2QoKTtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVQYXRoUHJlZml4ID0gcHdkLmVuZHNXaXRoKFwiL1wiKSA/IHB3ZCA6IHB3ZCArIFwiL1wiO1xuICAgICAgICByZXR1cm4gYWJzb2x1dGVQYXRoUHJlZml4ICsgcGF0aDtcbiAgICB9XG4gICAgYXN5bmMgX2V4aXRBdEN1cnJlbnREaXJlY3RvcnkoZnVuYykge1xuICAgICAgICBjb25zdCB1c2VyRGlyID0gYXdhaXQgdGhpcy5wd2QoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmdW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaWdub3JlRXJyb3IoKCkgPT4gdGhpcy5jZCh1c2VyRGlyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ5IGFsbCBhdmFpbGFibGUgdHJhbnNmZXIgc3RyYXRlZ2llcyBhbmQgcGljayB0aGUgZmlyc3Qgb25lIHRoYXQgd29ya3MuIFVwZGF0ZSBgY2xpZW50YCB0b1xuICAgICAqIHVzZSB0aGUgd29ya2luZyBzdHJhdGVneSBmb3IgYWxsIHN1Y2Nlc3NpdmUgdHJhbnNmZXIgcmVxdWVzdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyYXRlZ2llc1xuICAgICAqIEByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHRyeSB0aGUgcHJvdmlkZWQgc3RyYXRlZ2llcy5cbiAgICAgKi9cbiAgICBfZW50ZXJGaXJzdENvbXBhdGlibGVNb2RlKHN0cmF0ZWdpZXMpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIChmdHApID0+IHtcbiAgICAgICAgICAgIGZ0cC5sb2coXCJUcnlpbmcgdG8gZmluZCBvcHRpbWFsIHRyYW5zZmVyIHN0cmF0ZWd5Li4uXCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdHJhdGVneSBvZiBzdHJhdGVnaWVzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3RyYXRlZ3koZnRwKTtcbiAgICAgICAgICAgICAgICAgICAgZnRwLmxvZyhcIk9wdGltYWwgdHJhbnNmZXIgc3RyYXRlZ3kgZm91bmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVUcmFuc2ZlciA9IHN0cmF0ZWd5OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZWNlaXZpbmcgYW4gRlRQRXJyb3IgbWVhbnMgdGhhdCB0aGUgbGFzdCB0cmFuc2ZlciBzdHJhdGVneSBmYWlsZWQgYW5kIHdlIHNob3VsZFxuICAgICAgICAgICAgICAgICAgICAvLyB0cnkgdGhlIG5leHQgb25lLiBBbnkgb3RoZXIgZXhjZXB0aW9uIHNob3VsZCBzdG9wIHRoZSBldmFsdWF0aW9uIG9mIHN0cmF0ZWdpZXMgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgZWxzZSB3ZW50IHdyb25nLlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBGdHBDb250ZXh0XzEuRlRQRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb25lIG9mIHRoZSBhdmFpbGFibGUgdHJhbnNmZXIgc3RyYXRlZ2llcyB3b3JrLlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogREVQUkVDQVRFRCwgdXNlIGB1cGxvYWRGcm9tYC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZChzb3VyY2UsIHRvUmVtb3RlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZnRwLmxvZyhcIldhcm5pbmc6IHVwbG9hZCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHVzZSB1cGxvYWRGcm9tKCkuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRGcm9tKHNvdXJjZSwgdG9SZW1vdGVQYXRoLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogREVQUkVDQVRFRCwgdXNlIGBhcHBlbmRGcm9tYC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGFzeW5jIGFwcGVuZChzb3VyY2UsIHRvUmVtb3RlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZnRwLmxvZyhcIldhcm5pbmc6IGFwcGVuZCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHVzZSBhcHBlbmRGcm9tKCkuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRGcm9tKHNvdXJjZSwgdG9SZW1vdGVQYXRoLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogREVQUkVDQVRFRCwgdXNlIGBkb3dubG9hZFRvYC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGFzeW5jIGRvd25sb2FkKGRlc3RpbmF0aW9uLCBmcm9tUmVtb3RlUGF0aCwgc3RhcnRBdCA9IDApIHtcbiAgICAgICAgdGhpcy5mdHAubG9nKFwiV2FybmluZzogZG93bmxvYWQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCB1c2UgZG93bmxvYWRUbygpLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG93bmxvYWRUbyhkZXN0aW5hdGlvbiwgZnJvbVJlbW90ZVBhdGgsIHN0YXJ0QXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBERVBSRUNBVEVELCB1c2UgYHVwbG9hZEZyb21EaXJgLlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkRGlyKGxvY2FsRGlyUGF0aCwgcmVtb3RlRGlyUGF0aCkge1xuICAgICAgICB0aGlzLmZ0cC5sb2coXCJXYXJuaW5nOiB1cGxvYWREaXIoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCB1c2UgdXBsb2FkRnJvbURpcigpLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkRnJvbURpcihsb2NhbERpclBhdGgsIHJlbW90ZURpclBhdGgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBERVBSRUNBVEVELCB1c2UgYGRvd25sb2FkVG9EaXJgLlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgYXN5bmMgZG93bmxvYWREaXIobG9jYWxEaXJQYXRoKSB7XG4gICAgICAgIHRoaXMuZnRwLmxvZyhcIldhcm5pbmc6IGRvd25sb2FkRGlyKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgdXNlIGRvd25sb2FkVG9EaXIoKS5cIik7XG4gICAgICAgIHJldHVybiB0aGlzLmRvd25sb2FkVG9EaXIobG9jYWxEaXJQYXRoKTtcbiAgICB9XG59XG5leHBvcnRzLkNsaWVudCA9IENsaWVudDtcbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUxvY2FsRGlyZWN0b3J5KHBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBmc1N0YXQocGF0aCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgYXdhaXQgZnNNa0RpcihwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBpZ25vcmVFcnJvcihmdW5jKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZ1bmMoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBJZ25vcmVcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmlsZUluZm8gPSBleHBvcnRzLkZpbGVUeXBlID0gdm9pZCAwO1xudmFyIEZpbGVUeXBlO1xuKGZ1bmN0aW9uIChGaWxlVHlwZSkge1xuICAgIEZpbGVUeXBlW0ZpbGVUeXBlW1wiVW5rbm93blwiXSA9IDBdID0gXCJVbmtub3duXCI7XG4gICAgRmlsZVR5cGVbRmlsZVR5cGVbXCJGaWxlXCJdID0gMV0gPSBcIkZpbGVcIjtcbiAgICBGaWxlVHlwZVtGaWxlVHlwZVtcIkRpcmVjdG9yeVwiXSA9IDJdID0gXCJEaXJlY3RvcnlcIjtcbiAgICBGaWxlVHlwZVtGaWxlVHlwZVtcIlN5bWJvbGljTGlua1wiXSA9IDNdID0gXCJTeW1ib2xpY0xpbmtcIjtcbn0pKEZpbGVUeXBlID0gZXhwb3J0cy5GaWxlVHlwZSB8fCAoZXhwb3J0cy5GaWxlVHlwZSA9IHt9KSk7XG4vKipcbiAqIERlc2NyaWJlcyBhIGZpbGUsIGRpcmVjdG9yeSBvciBzeW1ib2xpYyBsaW5rLlxuICovXG5jbGFzcyBGaWxlSW5mbyB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnR5cGUgPSBGaWxlVHlwZS5Vbmtub3duO1xuICAgICAgICB0aGlzLnNpemUgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogVW5wYXJzZWQsIHJhdyBtb2RpZmljYXRpb24gZGF0ZSBhcyBhIHN0cmluZy5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgYG1vZGlmaWVkQXRgIGlzIHVuZGVmaW5lZCwgdGhlIEZUUCBzZXJ2ZXIgeW91J3JlIGNvbm5lY3RlZCB0byBkb2Vzbid0IHN1cHBvcnQgdGhlIG1vcmUgbW9kZXJuXG4gICAgICAgICAqIE1MU0QgY29tbWFuZCBmb3IgbWFjaGluZS1yZWFkYWJsZSBkaXJlY3RvcnkgbGlzdGluZ3MuIFRoZSBvbGRlciBjb21tYW5kIExJU1QgaXMgdGhlbiB1c2VkIHJldHVybmluZ1xuICAgICAgICAgKiByZXN1bHRzIHRoYXQgdmFyeSBhIGxvdCBiZXR3ZWVuIHNlcnZlcnMgYXMgdGhlIGZvcm1hdCBoYXNuJ3QgYmVlbiBzdGFuZGFyZGl6ZWQuIEhlcmUsIGRpcmVjdG9yeSBsaXN0aW5nc1xuICAgICAgICAgKiBhbmQgZXNwZWNpYWxseSBtb2RpZmljYXRpb24gZGF0ZXMgd2VyZSBtZWFudCB0byBiZSBodW1hbi1yZWFkYWJsZSBmaXJzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQmUgY2FyZWZ1bCB3aGVuIHN0aWxsIHRyeWluZyB0byBwYXJzZSB0aGlzIGJ5IHlvdXJzZWxmLiBQYXJzaW5nIGRhdGVzIGZyb20gbGlzdGluZ3MgdXNpbmcgTElTVCBpc1xuICAgICAgICAgKiB1bnJlbGlhYmxlLiBUaGlzIGxpYnJhcnkgZGVjaWRlcyB0byBvZmZlciBwYXJzZWQgZGF0ZXMgb25seSB3aGVuIHRoZXkncmUgYWJzb2x1dGVseSByZWxpYWJsZSBhbmQgc2FmZSB0b1xuICAgICAgICAgKiB1c2UgZS5nLiBmb3IgY29tcGFyaXNvbnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJhd01vZGlmaWVkQXQgPSBcIlwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGFyc2VkIG1vZGlmaWNhdGlvbiBkYXRlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBdmFpbGFibGUgaWYgdGhlIEZUUCBzZXJ2ZXIgc3VwcG9ydHMgdGhlIE1MU0QgY29tbWFuZC4gT25seSBNTFNEIGd1YXJhbnRlZXMgZGF0ZXMgdGhhbiBjYW4gYmUgcmVsaWFibHlcbiAgICAgICAgICogcGFyc2VkIHdpdGggdGhlIGNvcnJlY3QgdGltZXpvbmUgYW5kIGEgcmVzb2x1dGlvbiBkb3duIHRvIHNlY29uZHMuIFNlZSBgcmF3TW9kaWZpZWRBdGAgcHJvcGVydHkgZm9yIHRoZSB1bnBhcnNlZFxuICAgICAgICAgKiBkYXRlIHRoYXQgaXMgYWx3YXlzIGF2YWlsYWJsZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubW9kaWZpZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVuaXggcGVybWlzc2lvbnMgaWYgcHJlc2VudC4gSWYgdGhlIHVuZGVybHlpbmcgRlRQIHNlcnZlciBpcyBub3QgcnVubmluZyBvbiBVbml4IHRoaXMgd2lsbCBiZSB1bmRlZmluZWQuXG4gICAgICAgICAqIElmIHNldCwgeW91IG1pZ2h0IGJlIGFibGUgdG8gZWRpdCBwZXJtaXNzaW9ucyB3aXRoIHRoZSBGVFAgY29tbWFuZCBgU0lURSBDSE1PRGAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gdW5kZWZpbmVkO1xuICAgICAgICAvKipcbiAgICAgICAgICogSGFyZCBsaW5rIGNvdW50IGlmIGF2YWlsYWJsZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFyZExpbmtDb3VudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExpbmsgbmFtZSBmb3Igc3ltYm9saWMgbGlua3MgaWYgYXZhaWxhYmxlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5saW5rID0gdW5kZWZpbmVkO1xuICAgICAgICAvKipcbiAgICAgICAgICogVW5peCBncm91cCBpZiBhdmFpbGFibGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdyb3VwID0gdW5kZWZpbmVkO1xuICAgICAgICAvKipcbiAgICAgICAgICogVW5peCB1c2VyIGlmIGF2YWlsYWJsZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudXNlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVuaXF1ZSBJRCBpZiBhdmFpbGFibGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVuaXF1ZUlEID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIH1cbiAgICBnZXQgaXNEaXJlY3RvcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IEZpbGVUeXBlLkRpcmVjdG9yeTtcbiAgICB9XG4gICAgZ2V0IGlzU3ltYm9saWNMaW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBGaWxlVHlwZS5TeW1ib2xpY0xpbms7XG4gICAgfVxuICAgIGdldCBpc0ZpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IEZpbGVUeXBlLkZpbGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlcHJlY2F0ZWQsIGxlZ2FjeSBBUEkuIFVzZSBgcmF3TW9kaWZpZWRBdGAgaW5zdGVhZC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYXdNb2RpZmllZEF0O1xuICAgIH1cbiAgICBzZXQgZGF0ZShyYXdNb2RpZmllZEF0KSB7XG4gICAgICAgIHRoaXMucmF3TW9kaWZpZWRBdCA9IHJhd01vZGlmaWVkQXQ7XG4gICAgfVxufVxuZXhwb3J0cy5GaWxlSW5mbyA9IEZpbGVJbmZvO1xuRmlsZUluZm8uVW5peFBlcm1pc3Npb24gPSB7XG4gICAgUmVhZDogNCxcbiAgICBXcml0ZTogMixcbiAgICBFeGVjdXRlOiAxXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZUUENvbnRleHQgPSBleHBvcnRzLkZUUEVycm9yID0gdm9pZCAwO1xuY29uc3QgbmV0XzEgPSByZXF1aXJlKFwibmV0XCIpO1xuY29uc3QgcGFyc2VDb250cm9sUmVzcG9uc2VfMSA9IHJlcXVpcmUoXCIuL3BhcnNlQ29udHJvbFJlc3BvbnNlXCIpO1xuLyoqXG4gKiBEZXNjcmliZXMgYW4gRlRQIHNlcnZlciBlcnJvciByZXNwb25zZSBpbmNsdWRpbmcgdGhlIEZUUCByZXNwb25zZSBjb2RlLlxuICovXG5jbGFzcyBGVFBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihyZXMpIHtcbiAgICAgICAgc3VwZXIocmVzLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIHRoaXMuY29kZSA9IHJlcy5jb2RlO1xuICAgIH1cbn1cbmV4cG9ydHMuRlRQRXJyb3IgPSBGVFBFcnJvcjtcbi8qKlxuICogRlRQQ29udGV4dCBob2xkcyB0aGUgY29udHJvbCBhbmQgZGF0YSBzb2NrZXRzIG9mIGFuIEZUUCBjb25uZWN0aW9uIGFuZCBwcm92aWRlcyBhXG4gKiBzaW1wbGlmaWVkIHdheSB0byBpbnRlcmFjdCB3aXRoIGFuIEZUUCBzZXJ2ZXIsIGhhbmRsZSByZXNwb25zZXMsIGVycm9ycyBhbmQgdGltZW91dHMuXG4gKlxuICogSXQgZG9lc24ndCBpbXBsZW1lbnQgb3IgdXNlIGFueSBGVFAgY29tbWFuZHMuIEl0J3Mgb25seSBhIGZvdW5kYXRpb24gdG8gbWFrZSB3cml0aW5nIGFuIEZUUFxuICogY2xpZW50IGFzIGVhc3kgYXMgcG9zc2libGUuIFlvdSB3b24ndCB1c3VhbGx5IGluc3RhbnRpYXRlIHRoaXMsIGJ1dCB1c2UgYENsaWVudGAuXG4gKi9cbmNsYXNzIEZUUENvbnRleHQge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlIGFuIEZUUCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpbWVvdXQgLSBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhcHBseSB0byBjb250cm9sIGFuZCBkYXRhIGNvbm5lY3Rpb25zLiBVc2UgMCBmb3Igbm8gdGltZW91dC5cbiAgICAgKiBAcGFyYW0gZW5jb2RpbmcgLSBFbmNvZGluZyB0byB1c2UgZm9yIGNvbnRyb2wgY29ubmVjdGlvbi4gVVRGLTggYnkgZGVmYXVsdC4gVXNlIFwibGF0aW4xXCIgZm9yIG9sZGVyIHNlcnZlcnMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodGltZW91dCA9IDAsIGVuY29kaW5nID0gXCJ1dGY4XCIpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgICAgICAgLyoqIERlYnVnLWxldmVsIGxvZ2dpbmcgb2YgYWxsIHNvY2tldCBjb21tdW5pY2F0aW9uLiAqL1xuICAgICAgICB0aGlzLnZlcmJvc2UgPSBmYWxzZTtcbiAgICAgICAgLyoqIElQIHZlcnNpb24gdG8gcHJlZmVyICg0OiBJUHY0LCA2OiBJUHY2LCB1bmRlZmluZWQ6IGF1dG9tYXRpYykuICovXG4gICAgICAgIHRoaXMuaXBGYW1pbHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8qKiBPcHRpb25zIGZvciBUTFMgY29ubmVjdGlvbnMuICovXG4gICAgICAgIHRoaXMudGxzT3B0aW9ucyA9IHt9O1xuICAgICAgICAvKiogQSBtdWx0aWxpbmUgcmVzcG9uc2UgbWlnaHQgYmUgcmVjZWl2ZWQgYXMgbXVsdGlwbGUgY2h1bmtzLiAqL1xuICAgICAgICB0aGlzLl9wYXJ0aWFsUmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICB0aGlzLl9lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAvLyBIZWxwIFR5cGVzY3JpcHQgdW5kZXJzdGFuZCB0aGF0IHdlIGRvIGluZGVlZCBzZXQgX3NvY2tldCBpbiB0aGUgY29uc3RydWN0b3IgYnV0IHVzZSB0aGUgc2V0dGVyIG1ldGhvZCB0byBkbyBzby5cbiAgICAgICAgdGhpcy5fc29ja2V0ID0gdGhpcy5zb2NrZXQgPSB0aGlzLl9uZXdTb2NrZXQoKTtcbiAgICAgICAgdGhpcy5fZGF0YVNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIGNvbnRleHQuXG4gICAgICovXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIC8vIEludGVybmFsbHksIGNsb3NpbmcgYSBjb250ZXh0IGlzIGFsd2F5cyBkZXNjcmliZWQgd2l0aCBhbiBlcnJvci4gSWYgdGhlcmUgaXMgc3RpbGwgYSB0YXNrIHJ1bm5pbmcsIGl0IHdpbGxcbiAgICAgICAgLy8gYWJvcnQgd2l0aCBhbiBleGNlcHRpb24gdGhhdCB0aGUgdXNlciBjbG9zZWQgdGhlIGNsaWVudCBkdXJpbmcgYSB0YXNrLiBJZiBubyB0YXNrIGlzIHJ1bm5pbmcsIG5vIGV4Y2VwdGlvbiBpc1xuICAgICAgICAvLyB0aHJvd24gYnV0IGFsbCBuZXdseSBzdWJtaXR0ZWQgdGFza3MgYWZ0ZXIgdGhhdCB3aWxsIGFib3J0IHRoZSBleGNlcHRpb24gdGhhdCB0aGUgY2xpZW50IGhhcyBiZWVuIGNsb3NlZC5cbiAgICAgICAgLy8gSW4gYWRkaXRpb24gdGhlIHVzZXIgd2lsbCBnZXQgYSBzdGFjayB0cmFjZSBwb2ludGluZyB0byB3aGVyZSBleGFjdGx5IHRoZSBjbGllbnQgaGFzIGJlZW4gY2xvc2VkLiBTbyBpbiBhbnlcbiAgICAgICAgLy8gY2FzZSB1c2UgX2Nsb3NpbmdFcnJvciB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbnRleHQgaXMgY2xvc2VkLiBUaGlzIGFsc28gYWxsb3dzIHVzIHRvIGhhdmUgYSBzaW5nbGUgY29kZS1wYXRoXG4gICAgICAgIC8vIGZvciBjbG9zaW5nIGEgY29udGV4dCBtYWtpbmcgdGhlIGltcGxlbWVudGF0aW9uIGVhc2llci5cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuX3Rhc2sgPyBcIlVzZXIgY2xvc2VkIGNsaWVudCBkdXJpbmcgdGFza1wiIDogXCJVc2VyIGNsb3NlZCBjbGllbnRcIjtcbiAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKGVycik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlIHRoZSBjb250ZXh0IHdpdGggYW4gZXJyb3IuXG4gICAgICovXG4gICAgY2xvc2VXaXRoRXJyb3IoZXJyKSB7XG4gICAgICAgIC8vIElmIHRoaXMgY29udGV4dCBhbHJlYWR5IGhhcyBiZWVuIGNsb3NlZCwgZG9uJ3Qgb3ZlcndyaXRlIHRoZSByZWFzb24uXG4gICAgICAgIGlmICh0aGlzLl9jbG9zaW5nRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jbG9zaW5nRXJyb3IgPSBlcnI7XG4gICAgICAgIC8vIEJlZm9yZSBnaXZpbmcgdGhlIHVzZXIncyB0YXNrIGEgY2hhbmNlIHRvIHJlYWN0LCBtYWtlIHN1cmUgd2Ugd29uJ3QgYmUgYm90aGVyZWQgd2l0aCBhbnkgaW5wdXRzLlxuICAgICAgICB0aGlzLl9jbG9zZVNvY2tldCh0aGlzLl9zb2NrZXQpO1xuICAgICAgICB0aGlzLl9jbG9zZVNvY2tldCh0aGlzLl9kYXRhU29ja2V0KTtcbiAgICAgICAgLy8gR2l2ZSB0aGUgdXNlcidzIHRhc2sgYSBjaGFuY2UgdG8gcmVhY3QsIG1heWJlIGNsZWFudXAgcmVzb3VyY2VzLlxuICAgICAgICB0aGlzLl9wYXNzVG9IYW5kbGVyKGVycik7XG4gICAgICAgIC8vIFRoZSB0YXNrIG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVqZWN0ZWQgYnkgdGhlIHVzZXIgYWZ0ZXIgcmVjZWl2aW5nIHRoZSBlcnJvci5cbiAgICAgICAgdGhpcy5fc3RvcFRyYWNraW5nVGFzaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjb250ZXh0IGhhcyBiZWVuIGNsb3NlZCBvciBoYXNuJ3QgYmVlbiBjb25uZWN0ZWQgeWV0LiBZb3UgY2FuIHJlb3BlbiBpdCB3aXRoIGBhY2Nlc3NgLlxuICAgICAqL1xuICAgIGdldCBjbG9zZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5yZW1vdGVBZGRyZXNzID09PSB1bmRlZmluZWQgfHwgdGhpcy5fY2xvc2luZ0Vycm9yICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2V0IHRoaXMgY29udGV4IGFuZCBhbGwgb2YgaXRzIHN0YXRlLlxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnNvY2tldCA9IHRoaXMuX25ld1NvY2tldCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEZUUCBjb250cm9sIHNvY2tldC5cbiAgICAgKi9cbiAgICBnZXQgc29ja2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc29ja2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHNvY2tldCBmb3IgdGhlIGNvbnRyb2wgY29ubmVjdGlvbi4gVGhpcyB3aWxsIG9ubHkgY2xvc2UgdGhlIGN1cnJlbnQgY29udHJvbCBzb2NrZXRcbiAgICAgKiBpZiB0aGUgbmV3IG9uZSBpcyBub3QgYW4gdXBncmFkZSB0byB0aGUgY3VycmVudCBvbmUuXG4gICAgICovXG4gICAgc2V0IHNvY2tldChzb2NrZXQpIHtcbiAgICAgICAgLy8gTm8gZGF0YSBzb2NrZXQgc2hvdWxkIGJlIG9wZW4gaW4gYW55IGNhc2Ugd2hlcmUgdGhlIGNvbnRyb2wgc29ja2V0IGlzIHNldCBvciB1cGdyYWRlZC5cbiAgICAgICAgdGhpcy5kYXRhU29ja2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRsc09wdGlvbnMgPSB7fTtcbiAgICAgICAgLy8gVGhpcyBiZWluZyBhIHNvZnQgcmVzZXQsIHJlbW92ZSBhbnkgcmVtYWluaW5nIHBhcnRpYWwgcmVzcG9uc2UuXG4gICAgICAgIHRoaXMuX3BhcnRpYWxSZXNwb25zZSA9IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLl9zb2NrZXQpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgY2xvc2UgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBpZiB0aGUgbmV3IGlzIG5vdCBhbiB1cGdyYWRlLlxuICAgICAgICAgICAgY29uc3QgaXNVcGdyYWRlID0gc29ja2V0LmxvY2FsUG9ydCA9PT0gdGhpcy5fc29ja2V0LmxvY2FsUG9ydDtcbiAgICAgICAgICAgIGlmICghaXNVcGdyYWRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVNvY2tldExpc3RlbmVycyh0aGlzLl9zb2NrZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb2NrZXQpIHtcbiAgICAgICAgICAgIC8vIFNldHRpbmcgYSBjb21wbGV0ZWx5IG5ldyBjb250cm9sIHNvY2tldCBpcyBpbiBlc3NlbmNlIHNvbWV0aGluZyBsaWtlIGEgcmVzZXQuIFRoYXQnc1xuICAgICAgICAgICAgLy8gd2h5IHdlIGFsc28gY2xvc2UgYW55IG9wZW4gZGF0YSBjb25uZWN0aW9uIGFib3ZlLiBXZSBjYW4gZ28gb25lIHN0ZXAgZnVydGhlciBhbmQgcmVzZXRcbiAgICAgICAgICAgIC8vIGEgcG9zc2libGUgY2xvc2luZyBlcnJvci4gVGhhdCBtZWFucyB0aGF0IGEgY2xvc2VkIEZUUENvbnRleHQgY2FuIGJlIFwicmVvcGVuZWRcIiBieVxuICAgICAgICAgICAgLy8gc2V0dGluZyBhIG5ldyBjb250cm9sIHNvY2tldC5cbiAgICAgICAgICAgIHRoaXMuX2Nsb3NpbmdFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIC8vIERvbid0IHNldCBhIHRpbWVvdXQgeWV0LiBUaW1lb3V0IGZvciBjb250cm9sIHNvY2tldHMgaXMgb25seSBhY3RpdmUgZHVyaW5nIGEgdGFzaywgc2VlIGhhbmRsZSgpIGJlbG93LlxuICAgICAgICAgICAgc29ja2V0LnNldFRpbWVvdXQoMCk7XG4gICAgICAgICAgICBzb2NrZXQuc2V0RW5jb2RpbmcodGhpcy5fZW5jb2RpbmcpO1xuICAgICAgICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlKTtcbiAgICAgICAgICAgIHNvY2tldC5vbihcImRhdGFcIiwgZGF0YSA9PiB0aGlzLl9vbkNvbnRyb2xTb2NrZXREYXRhKGRhdGEpKTtcbiAgICAgICAgICAgIC8vIFNlcnZlciBzZW5kaW5nIGEgRklOIHBhY2tldCBpcyB0cmVhdGVkIGFzIGFuIGVycm9yLlxuICAgICAgICAgICAgc29ja2V0Lm9uKFwiZW5kXCIsICgpID0+IHRoaXMuY2xvc2VXaXRoRXJyb3IobmV3IEVycm9yKFwiU2VydmVyIHNlbnQgRklOIHBhY2tldCB1bmV4cGVjdGVkbHksIGNsb3NpbmcgY29ubmVjdGlvbi5cIikpKTtcbiAgICAgICAgICAgIC8vIENvbnRyb2wgYmVpbmcgY2xvc2VkIHdpdGhvdXQgZXJyb3IgYnkgc2VydmVyIGlzIHRyZWF0ZWQgYXMgYW4gZXJyb3IuXG4gICAgICAgICAgICBzb2NrZXQub24oXCJjbG9zZVwiLCBoYWRFcnJvciA9PiB7IGlmICghaGFkRXJyb3IpXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihuZXcgRXJyb3IoXCJTZXJ2ZXIgY2xvc2VkIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LlwiKSk7IH0pO1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBEZWZhdWx0RXJyb3JIYW5kbGVycyhzb2NrZXQsIFwiY29udHJvbCBzb2NrZXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc29ja2V0ID0gc29ja2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgRlRQIGRhdGEgY29ubmVjdGlvbiBpZiBwcmVzZW50LlxuICAgICAqL1xuICAgIGdldCBkYXRhU29ja2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvY2tldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzb2NrZXQgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24uIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZSBmb3JtZXIgZGF0YSBzb2NrZXQuXG4gICAgICovXG4gICAgc2V0IGRhdGFTb2NrZXQoc29ja2V0KSB7XG4gICAgICAgIHRoaXMuX2Nsb3NlU29ja2V0KHRoaXMuX2RhdGFTb2NrZXQpO1xuICAgICAgICBpZiAoc29ja2V0KSB7XG4gICAgICAgICAgICAvLyBEb24ndCBzZXQgYSB0aW1lb3V0IHlldC4gVGltZW91dCBkYXRhIHNvY2tldCBzaG91bGQgYmUgYWN0aXZhdGVkIHdoZW4gZGF0YSB0cmFuc21pc3Npb24gc3RhcnRzXG4gICAgICAgICAgICAvLyBhbmQgdGltZW91dCBvbiBjb250cm9sIHNvY2tldCBpcyBkZWFjdGl2YXRlZC5cbiAgICAgICAgICAgIHNvY2tldC5zZXRUaW1lb3V0KDApO1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBEZWZhdWx0RXJyb3JIYW5kbGVycyhzb2NrZXQsIFwiZGF0YSBzb2NrZXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YVNvY2tldCA9IHNvY2tldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjdXJyZW50bHkgdXNlZCBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBnZXQgZW5jb2RpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmNvZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBlbmNvZGluZyB1c2VkIGZvciB0aGUgY29udHJvbCBzb2NrZXQuXG4gICAgICpcbiAgICAgKiBTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9idWZmZXIuaHRtbCNidWZmZXJfYnVmZmVyc19hbmRfY2hhcmFjdGVyX2VuY29kaW5ncyBmb3Igd2hhdCBlbmNvZGluZ3NcbiAgICAgKiBhcmUgc3VwcG9ydGVkIGJ5IE5vZGUuXG4gICAgICovXG4gICAgc2V0IGVuY29kaW5nKGVuY29kaW5nKSB7XG4gICAgICAgIHRoaXMuX2VuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgICAgIGlmICh0aGlzLnNvY2tldCkge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2V0RW5jb2RpbmcoZW5jb2RpbmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgYW4gRlRQIGNvbW1hbmQgd2l0aG91dCB3YWl0aW5nIGZvciBvciBoYW5kbGluZyB0aGUgcmVzdWx0LlxuICAgICAqL1xuICAgIHNlbmQoY29tbWFuZCkge1xuICAgICAgICBjb25zdCBjb250YWluc1Bhc3N3b3JkID0gY29tbWFuZC5zdGFydHNXaXRoKFwiUEFTU1wiKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGNvbnRhaW5zUGFzc3dvcmQgPyBcIj4gUEFTUyAjIyNcIiA6IGA+ICR7Y29tbWFuZH1gO1xuICAgICAgICB0aGlzLmxvZyhtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5fc29ja2V0LndyaXRlKGNvbW1hbmQgKyBcIlxcclxcblwiLCB0aGlzLmVuY29kaW5nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCBhbiBGVFAgY29tbWFuZCBhbmQgaGFuZGxlIHRoZSBmaXJzdCByZXNwb25zZS4gVXNlIHRoaXMgaWYgeW91IGhhdmUgYSBzaW1wbGVcbiAgICAgKiByZXF1ZXN0LXJlc3BvbnNlIHNpdHVhdGlvbi5cbiAgICAgKi9cbiAgICByZXF1ZXN0KGNvbW1hbmQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlKGNvbW1hbmQsIChyZXMsIHRhc2spID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHRhc2sucmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXNrLnJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgYW4gRlRQIGNvbW1hbmQgYW5kIGhhbmRsZSBhbnkgcmVzcG9uc2UgdW50aWwgeW91IHJlc29sdmUvcmVqZWN0LiBVc2UgdGhpcyBpZiB5b3UgZXhwZWN0IG11bHRpcGxlIHJlc3BvbnNlc1xuICAgICAqIHRvIGEgcmVxdWVzdC4gVGhpcyByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHdpbGwgaG9sZCB3aGF0ZXZlciB0aGUgcmVzcG9uc2UgaGFuZGxlciBwYXNzZWQgb24gd2hlbiByZXNvbHZpbmcvcmVqZWN0aW5nIGl0cyB0YXNrLlxuICAgICAqL1xuICAgIGhhbmRsZShjb21tYW5kLCByZXNwb25zZUhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Rhc2spIHtcbiAgICAgICAgICAgIC8vIFRoZSB1c2VyIG9yIGNsaWVudCBpbnN0YW5jZSBjYWxsZWQgYGhhbmRsZSgpYCB3aGlsZSBhIHRhc2sgaXMgc3RpbGwgcnVubmluZy5cbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihcIlVzZXIgbGF1bmNoZWQgYSB0YXNrIHdoaWxlIGFub3RoZXIgb25lIGlzIHN0aWxsIHJ1bm5pbmcuIEZvcmdvdCB0byB1c2UgJ2F3YWl0JyBvciAnLnRoZW4oKSc/XCIpO1xuICAgICAgICAgICAgZXJyLnN0YWNrICs9IGBcXG5SdW5uaW5nIHRhc2sgbGF1bmNoZWQgYXQ6ICR7dGhpcy5fdGFzay5zdGFja31gO1xuICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhFcnJvcihlcnIpO1xuICAgICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIGhlcmUsIGNvbnRpbnVlIHdpdGggcmV0dXJuaW5nIHRoZSBQcm9taXNlIHRoYXQgd2lsbCB0aGVuIGJlIHJlamVjdGVkXG4gICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBjb250ZXh0IGNsb3NlZCBhbHJlYWR5LiBUaGF0IHdheSwgdXNlcnMgd2lsbCByZWNlaXZlIGFuIGV4Y2VwdGlvbiB3aGVyZVxuICAgICAgICAgICAgLy8gdGhleSBjYWxsZWQgdGhpcyBtZXRob2QgYnkgbWlzdGFrZS5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmVQcm9taXNlLCByZWplY3RQcm9taXNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrIHx8IFwiVW5rbm93biBjYWxsIHN0YWNrXCI7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlciA9IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlOiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9wVHJhY2tpbmdUYXNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVQcm9taXNlKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0OiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9wVHJhY2tpbmdUYXNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFByb21pc2UoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fdGFzayA9IHtcbiAgICAgICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICAgICAgICByZXNvbHZlcixcbiAgICAgICAgICAgICAgICByZXNwb25zZUhhbmRsZXJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5fY2xvc2luZ0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBjbGllbnQgaGFzIGJlZW4gY2xvc2VkLiBQcm92aWRlIGFuIGVycm9yIHRoYXQgZGVzY3JpYmVzIHRoaXMgb25lIGFzIGJlaW5nIGNhdXNlZFxuICAgICAgICAgICAgICAgIC8vIGJ5IGBfY2xvc2luZ0Vycm9yYCwgaW5jbHVkZSBzdGFjayB0cmFjZXMgZm9yIGJvdGguXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKFwiQ2xpZW50IGlzIGNsb3NlZFwiKTsgLy8gVHlwZSAnRXJyb3InIGlzIG5vdCBjb3JyZWN0bHkgZGVmaW5lZCwgZG9lc24ndCBoYXZlICdjb2RlJy5cbiAgICAgICAgICAgICAgICBlcnIuc3RhY2sgKz0gYFxcbkNsb3NpbmcgcmVhc29uOiAke3RoaXMuX2Nsb3NpbmdFcnJvci5zdGFja31gO1xuICAgICAgICAgICAgICAgIGVyci5jb2RlID0gdGhpcy5fY2xvc2luZ0Vycm9yLmNvZGUgIT09IHVuZGVmaW5lZCA/IHRoaXMuX2Nsb3NpbmdFcnJvci5jb2RlIDogXCIwXCI7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFzc1RvSGFuZGxlcihlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE9ubHkgdHJhY2sgY29udHJvbCBzb2NrZXQgdGltZW91dCBkdXJpbmcgdGhlIGxpZmVjeWNsZSBvZiBhIHRhc2suIFRoaXMgYXZvaWRzIHRpbWVvdXRzIG9uIGlkbGUgc29ja2V0cyxcbiAgICAgICAgICAgIC8vIHRoZSBkZWZhdWx0IHNvY2tldCBiZWhhdmlvdXIgd2hpY2ggaXMgbm90IGV4cGVjdGVkIGJ5IG1vc3QgdXNlcnMuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5zZXRUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZChjb21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvZyBtZXNzYWdlIGlmIHNldCB0byBiZSB2ZXJib3NlLlxuICAgICAqL1xuICAgIGxvZyhtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY29udHJvbCBzb2NrZXQgaXMgdXNpbmcgVExTLiBUaGlzIGRvZXMgbm90IG1lYW4gdGhhdCBhIHNlc3Npb25cbiAgICAgKiBoYXMgYWxyZWFkeSBiZWVuIG5lZ290aWF0ZWQuXG4gICAgICovXG4gICAgZ2V0IGhhc1RMUygpIHtcbiAgICAgICAgcmV0dXJuIFwiZW5jcnlwdGVkXCIgaW4gdGhpcy5fc29ja2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHJlZmVyZW5jZSB0byBjdXJyZW50IHRhc2sgYW5kIGhhbmRsZXIuIFRoaXMgd29uJ3QgcmVzb2x2ZSBvciByZWplY3QgdGhlIHRhc2suXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIF9zdG9wVHJhY2tpbmdUYXNrKCkge1xuICAgICAgICAvLyBEaXNhYmxlIHRpbWVvdXQgb24gY29udHJvbCBzb2NrZXQgaWYgdGhlcmUgaXMgbm8gdGFzayBhY3RpdmUuXG4gICAgICAgIHRoaXMuc29ja2V0LnNldFRpbWVvdXQoMCk7XG4gICAgICAgIHRoaXMuX3Rhc2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBpbmNvbWluZyBkYXRhIG9uIHRoZSBjb250cm9sIHNvY2tldC4gVGhlIGNodW5rIGlzIGdvaW5nIHRvIGJlIG9mIHR5cGUgYHN0cmluZ2BcbiAgICAgKiBiZWNhdXNlIHdlIGxldCBgc29ja2V0YCBoYW5kbGUgZW5jb2Rpbmcgd2l0aCBgc2V0RW5jb2RpbmdgLlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBfb25Db250cm9sU29ja2V0RGF0YShjaHVuaykge1xuICAgICAgICBjb25zdCB0cmltbWVkQ2h1bmsgPSBjaHVuay50cmltKCk7XG4gICAgICAgIHRoaXMubG9nKGA8ICR7dHJpbW1lZENodW5rfWApO1xuICAgICAgICAvLyBUaGlzIGNodW5rIG1pZ2h0IGNvbXBsZXRlIGFuIGVhcmxpZXIgcGFydGlhbCByZXNwb25zZS5cbiAgICAgICAgY29uc3QgY29tcGxldGVSZXNwb25zZSA9IHRoaXMuX3BhcnRpYWxSZXNwb25zZSArIHRyaW1tZWRDaHVuaztcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDb250cm9sUmVzcG9uc2VfMS5wYXJzZUNvbnRyb2xSZXNwb25zZShjb21wbGV0ZVJlc3BvbnNlKTtcbiAgICAgICAgLy8gUmVtZW1iZXIgYW55IGluY29tcGxldGUgcmVtYWluZGVyLlxuICAgICAgICB0aGlzLl9wYXJ0aWFsUmVzcG9uc2UgPSBwYXJzZWQucmVzdDtcbiAgICAgICAgLy8gRWFjaCByZXNwb25zZSBncm91cCBpcyBwYXNzZWQgYWxvbmcgaW5kaXZpZHVhbGx5LlxuICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgcGFyc2VkLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gcGFyc2VJbnQobWVzc2FnZS5zdWJzdHIoMCwgMyksIDEwKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0geyBjb2RlLCBtZXNzYWdlIH07XG4gICAgICAgICAgICBjb25zdCBlcnIgPSBjb2RlID49IDQwMCA/IG5ldyBGVFBFcnJvcihyZXNwb25zZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLl9wYXNzVG9IYW5kbGVyKGVyciA/IGVyciA6IHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIHRoZSBjdXJyZW50IGhhbmRsZXIgYSByZXNwb25zZS4gVGhpcyBpcyB1c3VhbGx5IGEgY29udHJvbCBzb2NrZXQgcmVzcG9uc2VcbiAgICAgKiBvciBhIHNvY2tldCBldmVudCwgbGlrZSBhbiBlcnJvciBvciB0aW1lb3V0LlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBfcGFzc1RvSGFuZGxlcihyZXNwb25zZSkge1xuICAgICAgICBpZiAodGhpcy5fdGFzaykge1xuICAgICAgICAgICAgdGhpcy5fdGFzay5yZXNwb25zZUhhbmRsZXIocmVzcG9uc2UsIHRoaXMuX3Rhc2sucmVzb2x2ZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVycm9ycyBvdGhlciB0aGFuIEZUUEVycm9yIGFsd2F5cyBjbG9zZSB0aGUgY2xpZW50LiBJZiB0aGVyZSBpc24ndCBhbiBhY3RpdmUgdGFzayB0byBoYW5kbGUgdGhlIGVycm9yLFxuICAgICAgICAvLyB0aGUgbmV4dCBvbmUgc3VibWl0dGVkIHdpbGwgcmVjZWl2ZSBpdCB1c2luZyBgX2Nsb3NpbmdFcnJvcmAuXG4gICAgICAgIC8vIFRoZXJlIGlzIG9ubHkgb25lIGVkZ2UtY2FzZTogSWYgdGhlcmUgaXMgYW4gRlRQRXJyb3Igd2hpbGUgbm8gdGFzayBpcyBhY3RpdmUsIHRoZSBlcnJvciB3aWxsIGJlIGRyb3BwZWQuXG4gICAgICAgIC8vIEJ1dCB0aGF0IG1lYW5zIHRoYXQgdGhlIHVzZXIgc2VudCBhbiBGVFAgY29tbWFuZCB3aXRoIG5vIGludGVudGlvbiBvZiBoYW5kbGluZyB0aGUgcmVzdWx0LiBTbyB3aHkgc2hvdWxkIHRoZVxuICAgICAgICAvLyBlcnJvciBiZSBoYW5kbGVkPyBNYXliZSBsb2cgaXQgYXQgbGVhc3Q/IERlYnVnIGxvZ2dpbmcgd2lsbCBhbHJlYWR5IGRvIHRoYXQgYW5kIHRoZSBjbGllbnQgc3RheXMgdXNlYWJsZSBhZnRlclxuICAgICAgICAvLyBGVFBFcnJvci4gU28gbWF5YmUgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXR1cCBhbGwgZXJyb3IgaGFuZGxlcnMgZm9yIGEgc29ja2V0LlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBfc2V0dXBEZWZhdWx0RXJyb3JIYW5kbGVycyhzb2NrZXQsIGlkZW50aWZpZXIpIHtcbiAgICAgICAgc29ja2V0Lm9uY2UoXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlICs9IGAgKCR7aWRlbnRpZmllcn0pYDtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VXaXRoRXJyb3IoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgc29ja2V0Lm9uY2UoXCJjbG9zZVwiLCBoYWRFcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoaGFkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlV2l0aEVycm9yKG5ldyBFcnJvcihgU29ja2V0IGNsb3NlZCBkdWUgdG8gdHJhbnNtaXNzaW9uIGVycm9yICgke2lkZW50aWZpZXJ9KWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNvY2tldC5vbmNlKFwidGltZW91dFwiLCAoKSA9PiB0aGlzLmNsb3NlV2l0aEVycm9yKG5ldyBFcnJvcihgVGltZW91dCAoJHtpZGVudGlmaWVyfSlgKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZSBhIHNvY2tldC5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgX2Nsb3NlU29ja2V0KHNvY2tldCkge1xuICAgICAgICBpZiAoc29ja2V0KSB7XG4gICAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU29ja2V0TGlzdGVuZXJzKHNvY2tldCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCBkZWZhdWx0IGxpc3RlbmVycyBmb3Igc29ja2V0LlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBfcmVtb3ZlU29ja2V0TGlzdGVuZXJzKHNvY2tldCkge1xuICAgICAgICBzb2NrZXQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIC8vIEJlZm9yZSBOb2RlLmpzIDEwLjMuMCwgdXNpbmcgYHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKWAgd2l0aG91dCBhbnkgbmFtZSBkaWQgbm90IHdvcms6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMjA5MjMuXG4gICAgICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJ0aW1lb3V0XCIpO1xuICAgICAgICBzb2NrZXQucmVtb3ZlQWxsTGlzdGVuZXJzKFwiZGF0YVwiKTtcbiAgICAgICAgc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycyhcImVuZFwiKTtcbiAgICAgICAgc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycyhcImVycm9yXCIpO1xuICAgICAgICBzb2NrZXQucmVtb3ZlQWxsTGlzdGVuZXJzKFwiY2xvc2VcIik7XG4gICAgICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJjb25uZWN0XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIGEgbmV3IHNvY2tldCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEludGVybmFsIHVzZSBvbmx5LCByZXBsYWNlZCBmb3IgdW5pdCB0ZXN0cy5cbiAgICAgKi9cbiAgICBfbmV3U29ja2V0KCkge1xuICAgICAgICByZXR1cm4gbmV3IG5ldF8xLlNvY2tldCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuRlRQQ29udGV4dCA9IEZUUENvbnRleHQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvZ3Jlc3NUcmFja2VyID0gdm9pZCAwO1xuLyoqXG4gKiBUcmFja3MgcHJvZ3Jlc3Mgb2Ygb25lIHNvY2tldCBkYXRhIHRyYW5zZmVyIGF0IGEgdGltZS5cbiAqL1xuY2xhc3MgUHJvZ3Jlc3NUcmFja2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5ieXRlc092ZXJhbGwgPSAwO1xuICAgICAgICB0aGlzLmludGVydmFsTXMgPSA1MDA7XG4gICAgICAgIHRoaXMub25TdG9wID0gbm9vcDtcbiAgICAgICAgdGhpcy5vbkhhbmRsZSA9IG5vb3A7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGEgbmV3IGhhbmRsZXIgZm9yIHByb2dyZXNzIGluZm8uIFVzZSBgdW5kZWZpbmVkYCB0byBkaXNhYmxlIHJlcG9ydGluZy5cbiAgICAgKi9cbiAgICByZXBvcnRUbyhvbkhhbmRsZSA9IG5vb3ApIHtcbiAgICAgICAgdGhpcy5vbkhhbmRsZSA9IG9uSGFuZGxlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydCB0cmFja2luZyB0cmFuc2ZlciBwcm9ncmVzcyBvZiBhIHNvY2tldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb2NrZXQgIFRoZSBzb2NrZXQgdG8gb2JzZXJ2ZS5cbiAgICAgKiBAcGFyYW0gbmFtZSAgQSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2dyZXNzIHRyYWNraW5nLCBlLmcuIGEgZmlsZW5hbWUuXG4gICAgICogQHBhcmFtIHR5cGUgIFRoZSB0eXBlIG9mIHRoZSB0cmFuc2ZlciwgdHlwaWNhbGx5IFwidXBsb2FkXCIgb3IgXCJkb3dubG9hZFwiLlxuICAgICAqL1xuICAgIHN0YXJ0KHNvY2tldCwgbmFtZSwgdHlwZSkge1xuICAgICAgICBsZXQgbGFzdEJ5dGVzID0gMDtcbiAgICAgICAgdGhpcy5vblN0b3AgPSBwb2xsKHRoaXMuaW50ZXJ2YWxNcywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSBzb2NrZXQuYnl0ZXNSZWFkICsgc29ja2V0LmJ5dGVzV3JpdHRlbjtcbiAgICAgICAgICAgIHRoaXMuYnl0ZXNPdmVyYWxsICs9IGJ5dGVzIC0gbGFzdEJ5dGVzO1xuICAgICAgICAgICAgbGFzdEJ5dGVzID0gYnl0ZXM7XG4gICAgICAgICAgICB0aGlzLm9uSGFuZGxlKHtcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgYnl0ZXMsXG4gICAgICAgICAgICAgICAgYnl0ZXNPdmVyYWxsOiB0aGlzLmJ5dGVzT3ZlcmFsbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdG9wIHRyYWNraW5nIHRyYW5zZmVyIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMub25TdG9wKGZhbHNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCB0aGUgcHJvZ3Jlc3MgaGFuZGxlciBvbmUgbW9yZSB0aW1lLCB0aGVuIHN0b3AgdHJhY2tpbmcuXG4gICAgICovXG4gICAgdXBkYXRlQW5kU3RvcCgpIHtcbiAgICAgICAgdGhpcy5vblN0b3AodHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy5Qcm9ncmVzc1RyYWNrZXIgPSBQcm9ncmVzc1RyYWNrZXI7XG4vKipcbiAqIFN0YXJ0cyBjYWxsaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24gYXQgYSByZWd1bGFyIGludGVydmFsLiBUaGUgZmlyc3QgY2FsbCB3aWxsIGdvIG91dFxuICogaW1tZWRpYXRlbHkuIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZnVuY3Rpb24gdG8gc3RvcCB0aGUgcG9sbGluZy5cbiAqL1xuZnVuY3Rpb24gcG9sbChpbnRlcnZhbE1zLCB1cGRhdGVGdW5jKSB7XG4gICAgY29uc3QgaWQgPSBzZXRJbnRlcnZhbCh1cGRhdGVGdW5jLCBpbnRlcnZhbE1zKTtcbiAgICBjb25zdCBzdG9wRnVuYyA9IChzdG9wV2l0aFVwZGF0ZSkgPT4ge1xuICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgaWYgKHN0b3BXaXRoVXBkYXRlKSB7XG4gICAgICAgICAgICB1cGRhdGVGdW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJldmVudCByZXBlYXRlZCBjYWxscyB0byBzdG9wIGNhbGxpbmcgaGFuZGxlci5cbiAgICAgICAgdXBkYXRlRnVuYyA9IG5vb3A7XG4gICAgfTtcbiAgICB1cGRhdGVGdW5jKCk7XG4gICAgcmV0dXJuIHN0b3BGdW5jO1xufVxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3RyaW5nV3JpdGVyID0gdm9pZCAwO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY2xhc3MgU3RyaW5nV3JpdGVyIGV4dGVuZHMgc3RyZWFtXzEuV3JpdGFibGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmJ1ZiA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICB9XG4gICAgX3dyaXRlKGNodW5rLCBfLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2h1bmsgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWYsIGNodW5rXSk7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIlN0cmluZ1dyaXRlciBleHBlY3RzIGNodW5rcyBvZiB0eXBlICdCdWZmZXInLlwiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0VGV4dChlbmNvZGluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5idWYudG9TdHJpbmcoZW5jb2RpbmcpO1xuICAgIH1cbn1cbmV4cG9ydHMuU3RyaW5nV3JpdGVyID0gU3RyaW5nV3JpdGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKipcbiAqIFB1YmxpYyBBUElcbiAqL1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0NsaWVudFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRnRwQ29udGV4dFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vRmlsZUluZm9cIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3BhcnNlTGlzdFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU3RyaW5nRW5jb2RpbmdcIiksIGV4cG9ydHMpO1xudmFyIHRyYW5zZmVyXzEgPSByZXF1aXJlKFwiLi90cmFuc2ZlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVudGVyUGFzc2l2ZU1vZGVJUHY0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFuc2Zlcl8xLmVudGVyUGFzc2l2ZU1vZGVJUHY0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW50ZXJQYXNzaXZlTW9kZUlQdjZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyYW5zZmVyXzEuZW50ZXJQYXNzaXZlTW9kZUlQdjY7IH0gfSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXBJc1ByaXZhdGVWNEFkZHJlc3MgPSBleHBvcnRzLnVwZ3JhZGVTb2NrZXQgPSBleHBvcnRzLmRlc2NyaWJlQWRkcmVzcyA9IGV4cG9ydHMuZGVzY3JpYmVUTFMgPSB2b2lkIDA7XG5jb25zdCB0bHNfMSA9IHJlcXVpcmUoXCJ0bHNcIik7XG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZW5jcnlwdGlvbiBvbiBhIGdpdmVuIHNvY2tldCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gZGVzY3JpYmVUTFMoc29ja2V0KSB7XG4gICAgaWYgKHNvY2tldCBpbnN0YW5jZW9mIHRsc18xLlRMU1NvY2tldCkge1xuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHNvY2tldC5nZXRQcm90b2NvbCgpO1xuICAgICAgICByZXR1cm4gcHJvdG9jb2wgPyBwcm90b2NvbCA6IFwiU2VydmVyIHNvY2tldCBvciBkaXNjb25uZWN0ZWQgY2xpZW50IHNvY2tldFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJObyBlbmNyeXB0aW9uXCI7XG59XG5leHBvcnRzLmRlc2NyaWJlVExTID0gZGVzY3JpYmVUTFM7XG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcmVtb3RlIGFkZHJlc3Mgb2YgYSBzb2NrZXQuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlQWRkcmVzcyhzb2NrZXQpIHtcbiAgICBpZiAoc29ja2V0LnJlbW90ZUZhbWlseSA9PT0gXCJJUHY2XCIpIHtcbiAgICAgICAgcmV0dXJuIGBbJHtzb2NrZXQucmVtb3RlQWRkcmVzc31dOiR7c29ja2V0LnJlbW90ZVBvcnR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3NvY2tldC5yZW1vdGVBZGRyZXNzfToke3NvY2tldC5yZW1vdGVQb3J0fWA7XG59XG5leHBvcnRzLmRlc2NyaWJlQWRkcmVzcyA9IGRlc2NyaWJlQWRkcmVzcztcbi8qKlxuICogVXBncmFkZSBhIHNvY2tldCBjb25uZWN0aW9uIHdpdGggVExTLlxuICovXG5mdW5jdGlvbiB1cGdyYWRlU29ja2V0KHNvY2tldCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHRsc09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBzb2NrZXRcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRsc1NvY2tldCA9IHRsc18xLmNvbm5lY3QodGxzT3B0aW9ucywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0Q2VydGlmaWNhdGUgPSB0bHNPcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZCAhPT0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZXhwZWN0Q2VydGlmaWNhdGUgJiYgIXRsc1NvY2tldC5hdXRob3JpemVkKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHRsc1NvY2tldC5hdXRob3JpemF0aW9uRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGVycm9yIGxpc3RlbmVyIGFkZGVkIGJlbG93LlxuICAgICAgICAgICAgICAgIHRsc1NvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJlcnJvclwiKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRsc1NvY2tldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLm9uY2UoXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudXBncmFkZVNvY2tldCA9IHVwZ3JhZGVTb2NrZXQ7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhbiBJUCBpcyBhIHByaXZhdGUgYWRkcmVzcyBhY2NvcmRpbmcgdG8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5MTgjc2VjdGlvbi0zLlxuICogVGhpcyB3aWxsIGhhbmRsZSBJUHY0LW1hcHBlZCBJUHY2IGFkZHJlc3NlcyBjb3JyZWN0bHkgYnV0IHJldHVybiBmYWxzZSBmb3IgYWxsIG90aGVyIElQdjYgYWRkcmVzc2VzLlxuICpcbiAqIEBwYXJhbSBpcCAgVGhlIElQIGFzIGEgc3RyaW5nLCBlLmcuIFwiMTkyLjE2OC4wLjFcIlxuICovXG5mdW5jdGlvbiBpcElzUHJpdmF0ZVY0QWRkcmVzcyhpcCA9IFwiXCIpIHtcbiAgICAvLyBIYW5kbGUgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzZXMgbGlrZSA6OmZmZmY6MTkyLjE2OC4wLjFcbiAgICBpZiAoaXAuc3RhcnRzV2l0aChcIjo6ZmZmZjpcIikpIHtcbiAgICAgICAgaXAgPSBpcC5zdWJzdHIoNyk7IC8vIFN0cmlwIDo6ZmZmZjogcHJlZml4XG4gICAgfVxuICAgIGNvbnN0IG9jdGV0cyA9IGlwLnNwbGl0KFwiLlwiKS5tYXAobyA9PiBwYXJzZUludChvLCAxMCkpO1xuICAgIHJldHVybiBvY3RldHNbMF0gPT09IDEwIC8vIDEwLjAuMC4wIC0gMTAuMjU1LjI1NS4yNTVcbiAgICAgICAgfHwgKG9jdGV0c1swXSA9PT0gMTcyICYmIG9jdGV0c1sxXSA+PSAxNiAmJiBvY3RldHNbMV0gPD0gMzEpIC8vIDE3Mi4xNi4wLjAgLSAxNzIuMzEuMjU1LjI1NVxuICAgICAgICB8fCAob2N0ZXRzWzBdID09PSAxOTIgJiYgb2N0ZXRzWzFdID09PSAxNjgpOyAvLyAxOTIuMTY4LjAuMCAtIDE5Mi4xNjguMjU1LjI1NVxufVxuZXhwb3J0cy5pcElzUHJpdmF0ZVY0QWRkcmVzcyA9IGlwSXNQcml2YXRlVjRBZGRyZXNzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBvc2l0aXZlSW50ZXJtZWRpYXRlID0gZXhwb3J0cy5wb3NpdGl2ZUNvbXBsZXRpb24gPSBleHBvcnRzLmlzTXVsdGlsaW5lID0gZXhwb3J0cy5pc1NpbmdsZUxpbmUgPSBleHBvcnRzLnBhcnNlQ29udHJvbFJlc3BvbnNlID0gdm9pZCAwO1xuY29uc3QgTEYgPSBcIlxcblwiO1xuLyoqXG4gKiBQYXJzZSBhbiBGVFAgY29udHJvbCByZXNwb25zZSBhcyBhIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuIEEgbWVzc2FnZSBpcyBhIGNvbXBsZXRlXG4gKiBzaW5nbGUtIG9yIG11bHRpbGluZSByZXNwb25zZS4gQSByZXNwb25zZSBjYW4gYWxzbyBjb250YWluIG11bHRpcGxlIG11bHRpbGluZSByZXNwb25zZXNcbiAqIHRoYXQgd2lsbCBlYWNoIGJlIHJlcHJlc2VudGVkIGJ5IGEgbWVzc2FnZS4gQSByZXNwb25zZSBjYW4gYWxzbyBiZSBpbmNvbXBsZXRlXG4gKiBhbmQgYmUgY29tcGxldGVkIG9uIHRoZSBuZXh0IGluY29taW5nIGRhdGEgY2h1bmsgZm9yIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbiBhbHNvXG4gKiBkZXNjcmliZXMgYSBgcmVzdGAuIFRoaXMgZnVuY3Rpb24gY29udmVydHMgYWxsIENSTEYgdG8gTEYuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29udHJvbFJlc3BvbnNlKHRleHQpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IFtdO1xuICAgIGxldCBzdGFydEF0ID0gMDtcbiAgICBsZXQgdG9rZW5SZWdleDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXTtcbiAgICAgICAgLy8gTm8gZ3JvdXAgaGFzIGJlZW4gb3BlbmVkLlxuICAgICAgICBpZiAoIXRva2VuUmVnZXgpIHtcbiAgICAgICAgICAgIGlmIChpc011bHRpbGluZShsaW5lKSkge1xuICAgICAgICAgICAgICAgIC8vIE9wZW4gYSBncm91cCBieSBzZXR0aW5nIGFuIGV4cGVjdGVkIHRva2VuLlxuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gbGluZS5zdWJzdHIoMCwgMyk7XG4gICAgICAgICAgICAgICAgdG9rZW5SZWdleCA9IG5ldyBSZWdFeHAoYF4ke3Rva2VufSg/OiR8IClgKTtcbiAgICAgICAgICAgICAgICBzdGFydEF0ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzU2luZ2xlTGluZShsaW5lKSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbmdsZSBsaW5lcyBjYW4gYmUgZ3JvdXBlZCBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEdyb3VwIGhhcyBiZWVuIG9wZW5lZCwgZXhwZWN0IGNsb3NpbmcgdG9rZW4uXG4gICAgICAgIGVsc2UgaWYgKHRva2VuUmVnZXgudGVzdChsaW5lKSkge1xuICAgICAgICAgICAgdG9rZW5SZWdleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2gobGluZXMuc2xpY2Uoc3RhcnRBdCwgaSArIDEpLmpvaW4oTEYpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUaGUgbGFzdCBncm91cCBtaWdodCBub3QgaGF2ZSBiZWVuIGNsb3NlZCwgcmVwb3J0IGl0IGFzIGEgcmVzdC5cbiAgICBjb25zdCByZXN0ID0gdG9rZW5SZWdleCA/IGxpbmVzLnNsaWNlKHN0YXJ0QXQpLmpvaW4oTEYpICsgTEYgOiBcIlwiO1xuICAgIHJldHVybiB7IG1lc3NhZ2VzLCByZXN0IH07XG59XG5leHBvcnRzLnBhcnNlQ29udHJvbFJlc3BvbnNlID0gcGFyc2VDb250cm9sUmVzcG9uc2U7XG5mdW5jdGlvbiBpc1NpbmdsZUxpbmUobGluZSkge1xuICAgIHJldHVybiAvXlxcZFxcZFxcZCg/OiR8ICkvLnRlc3QobGluZSk7XG59XG5leHBvcnRzLmlzU2luZ2xlTGluZSA9IGlzU2luZ2xlTGluZTtcbmZ1bmN0aW9uIGlzTXVsdGlsaW5lKGxpbmUpIHtcbiAgICByZXR1cm4gL15cXGRcXGRcXGQtLy50ZXN0KGxpbmUpO1xufVxuZXhwb3J0cy5pc011bHRpbGluZSA9IGlzTXVsdGlsaW5lO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiBhbiBGVFAgcmV0dXJuIGNvZGUgZGVzY3JpYmVzIGEgcG9zaXRpdmUgY29tcGxldGlvbi5cbiAqL1xuZnVuY3Rpb24gcG9zaXRpdmVDb21wbGV0aW9uKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZSA+PSAyMDAgJiYgY29kZSA8IDMwMDtcbn1cbmV4cG9ydHMucG9zaXRpdmVDb21wbGV0aW9uID0gcG9zaXRpdmVDb21wbGV0aW9uO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiBhbiBGVFAgcmV0dXJuIGNvZGUgZGVzY3JpYmVzIGEgcG9zaXRpdmUgaW50ZXJtZWRpYXRlIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBwb3NpdGl2ZUludGVybWVkaWF0ZShjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgPj0gMzAwICYmIGNvZGUgPCA0MDA7XG59XG5leHBvcnRzLnBvc2l0aXZlSW50ZXJtZWRpYXRlID0gcG9zaXRpdmVJbnRlcm1lZGlhdGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlTGlzdCA9IHZvaWQgMDtcbmNvbnN0IGRvc1BhcnNlciA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9wYXJzZUxpc3RET1NcIikpO1xuY29uc3QgdW5peFBhcnNlciA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9wYXJzZUxpc3RVbml4XCIpKTtcbmNvbnN0IG1sc2RQYXJzZXIgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vcGFyc2VMaXN0TUxTRFwiKSk7XG4vKipcbiAqIEF2YWlsYWJsZSBkaXJlY3RvcnkgbGlzdGluZyBwYXJzZXJzLiBUaGVzZSBhcmUgY2FuZGlkYXRlcyB0aGF0IHdpbGwgYmUgdGVzdGVkXG4gKiBpbiB0aGUgb3JkZXIgcHJlc2VudGVkLiBUaGUgZmlyc3QgY2FuZGlkYXRlIHdpbGwgYmUgdXNlZCB0byBwYXJzZSB0aGUgd2hvbGUgbGlzdC5cbiAqL1xuY29uc3QgYXZhaWxhYmxlUGFyc2VycyA9IFtcbiAgICBkb3NQYXJzZXIsXG4gICAgdW5peFBhcnNlcixcbiAgICBtbHNkUGFyc2VyIC8vIEtlZXAgTUxTRCBsYXN0LCBtYXkgYWNjZXB0IGZpbGVuYW1lIG9ubHlcbl07XG5mdW5jdGlvbiBmaXJzdENvbXBhdGlibGVQYXJzZXIobGluZSwgcGFyc2Vycykge1xuICAgIHJldHVybiBwYXJzZXJzLmZpbmQocGFyc2VyID0+IHBhcnNlci50ZXN0TGluZShsaW5lKSA9PT0gdHJ1ZSk7XG59XG5mdW5jdGlvbiBzdHJpbmdJc05vdEJsYW5rKHN0cikge1xuICAgIHJldHVybiBzdHIudHJpbSgpICE9PSBcIlwiO1xufVxuY29uc3QgUkVHRVhfTkVXTElORSA9IC9cXHI/XFxuLztcbi8qKlxuICogUGFyc2UgcmF3IGRpcmVjdG9yeSBsaXN0aW5nLlxuICovXG5mdW5jdGlvbiBwYXJzZUxpc3QocmF3TGlzdCkge1xuICAgIGNvbnN0IGxpbmVzID0gcmF3TGlzdFxuICAgICAgICAuc3BsaXQoUkVHRVhfTkVXTElORSlcbiAgICAgICAgLmZpbHRlcihzdHJpbmdJc05vdEJsYW5rKTtcbiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgdGVzdExpbmUgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBwYXJzZXIgPSBmaXJzdENvbXBhdGlibGVQYXJzZXIodGVzdExpbmUsIGF2YWlsYWJsZVBhcnNlcnMpO1xuICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgbGlicmFyeSBvbmx5IHN1cHBvcnRzIE1MU0QsIFVuaXgtIG9yIERPUy1zdHlsZSBkaXJlY3RvcnkgbGlzdGluZy4gWW91ciBGVFAgc2VydmVyIHNlZW1zIHRvIGJlIHVzaW5nIGFub3RoZXIgZm9ybWF0LiBZb3UgY2FuIHNlZSB0aGUgdHJhbnNtaXR0ZWQgbGlzdGluZyB3aGVuIHNldHRpbmcgYGNsaWVudC5mdHAudmVyYm9zZSA9IHRydWVgLiBZb3UgY2FuIHRoZW4gcHJvdmlkZSBhIGN1c3RvbSBwYXJzZXIgdG8gYGNsaWVudC5wYXJzZUxpc3RgLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuXCIpO1xuICAgIH1cbiAgICBjb25zdCBmaWxlcyA9IGxpbmVzXG4gICAgICAgIC5tYXAocGFyc2VyLnBhcnNlTGluZSlcbiAgICAgICAgLmZpbHRlcigoaW5mbykgPT4gaW5mbyAhPT0gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gcGFyc2VyLnRyYW5zZm9ybUxpc3QoZmlsZXMpO1xufVxuZXhwb3J0cy5wYXJzZUxpc3QgPSBwYXJzZUxpc3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtTGlzdCA9IGV4cG9ydHMucGFyc2VMaW5lID0gZXhwb3J0cy50ZXN0TGluZSA9IHZvaWQgMDtcbmNvbnN0IEZpbGVJbmZvXzEgPSByZXF1aXJlKFwiLi9GaWxlSW5mb1wiKTtcbi8qKlxuICogVGhpcyBwYXJzZXIgaXMgYmFzZWQgb24gdGhlIEZUUCBjbGllbnQgbGlicmFyeSBzb3VyY2UgY29kZSBpbiBBcGFjaGUgQ29tbW9ucyBOZXQgcHJvdmlkZWRcbiAqIHVuZGVyIHRoZSBBcGFjaGUgMi4wIGxpY2Vuc2UuIEl0IGhhcyBiZWVuIHNpbXBsaWZpZWQgYW5kIHJld3JpdHRlbiB0byBiZXR0ZXIgZml0IHRoZSBKYXZhc2NyaXB0IGxhbmd1YWdlLlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvY29tbW9ucy1uZXQvYmxvYi9tYXN0ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvbmV0L2Z0cC9wYXJzZXIvTlRGVFBFbnRyeVBhcnNlci5qYXZhXG4gKi9cbmNvbnN0IFJFX0xJTkUgPSBuZXcgUmVnRXhwKFwiKFxcXFxTKylcXFxccysoXFxcXFMrKVxcXFxzK1wiIC8vIE1NLWRkLXl5IHdoaXRlc3BhY2UgaGg6bW1hfGtrOm1tIHN3YWxsb3cgdHJhaWxpbmcgc3BhY2VzXG4gICAgKyBcIig/Oig8RElSPil8KFswLTldKykpXFxcXHMrXCIgLy8gPERJUj4gb3IgZGRkZGQgc3dhbGxvdyB0cmFpbGluZyBzcGFjZXNcbiAgICArIFwiKFxcXFxTLiopXCIgLy8gRmlyc3Qgbm9uLXNwYWNlIGZvbGxvd2VkIGJ5IHJlc3Qgb2YgbGluZSAobmFtZSlcbik7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhIGdpdmVuIGxpbmUgbWlnaHQgYmUgYSBET1Mtc3R5bGUgbGlzdGluZy5cbiAqXG4gKiAtIEV4YW1wbGU6IGAxMi0wNS05NiAgMDU6MDNQTSAgICAgICA8RElSPiAgICAgICAgICBteURpcmBcbiAqL1xuZnVuY3Rpb24gdGVzdExpbmUobGluZSkge1xuICAgIHJldHVybiAvXlxcZHsyfS8udGVzdChsaW5lKSAmJiBSRV9MSU5FLnRlc3QobGluZSk7XG59XG5leHBvcnRzLnRlc3RMaW5lID0gdGVzdExpbmU7XG4vKipcbiAqIFBhcnNlIGEgc2luZ2xlIGxpbmUgb2YgYSBET1Mtc3R5bGUgZGlyZWN0b3J5IGxpc3RpbmcuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTGluZShsaW5lKSB7XG4gICAgY29uc3QgZ3JvdXBzID0gbGluZS5tYXRjaChSRV9MSU5FKTtcbiAgICBpZiAoZ3JvdXBzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBncm91cHNbNV07XG4gICAgaWYgKG5hbWUgPT09IFwiLlwiIHx8IG5hbWUgPT09IFwiLi5cIikgeyAvLyBJZ25vcmUgcGFyZW50IGRpcmVjdG9yeSBsaW5rc1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmaWxlID0gbmV3IEZpbGVJbmZvXzEuRmlsZUluZm8obmFtZSk7XG4gICAgY29uc3QgZmlsZVR5cGUgPSBncm91cHNbM107XG4gICAgaWYgKGZpbGVUeXBlID09PSBcIjxESVI+XCIpIHtcbiAgICAgICAgZmlsZS50eXBlID0gRmlsZUluZm9fMS5GaWxlVHlwZS5EaXJlY3Rvcnk7XG4gICAgICAgIGZpbGUuc2l6ZSA9IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaWxlLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLkZpbGU7XG4gICAgICAgIGZpbGUuc2l6ZSA9IHBhcnNlSW50KGdyb3Vwc1s0XSwgMTApO1xuICAgIH1cbiAgICBmaWxlLnJhd01vZGlmaWVkQXQgPSBncm91cHNbMV0gKyBcIiBcIiArIGdyb3Vwc1syXTtcbiAgICByZXR1cm4gZmlsZTtcbn1cbmV4cG9ydHMucGFyc2VMaW5lID0gcGFyc2VMaW5lO1xuZnVuY3Rpb24gdHJhbnNmb3JtTGlzdChmaWxlcykge1xuICAgIHJldHVybiBmaWxlcztcbn1cbmV4cG9ydHMudHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybUxpc3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VNTFN4RGF0ZSA9IGV4cG9ydHMudHJhbnNmb3JtTGlzdCA9IGV4cG9ydHMucGFyc2VMaW5lID0gZXhwb3J0cy50ZXN0TGluZSA9IHZvaWQgMDtcbmNvbnN0IEZpbGVJbmZvXzEgPSByZXF1aXJlKFwiLi9GaWxlSW5mb1wiKTtcbmZ1bmN0aW9uIHBhcnNlU2l6ZSh2YWx1ZSwgaW5mbykge1xuICAgIGluZm8uc2l6ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG4vKipcbiAqIFBhcnNlcnMgZm9yIE1MU0QgZmFjdHMuXG4gKi9cbmNvbnN0IGZhY3RIYW5kbGVyc0J5TmFtZSA9IHtcbiAgICBcInNpemVcIjogcGFyc2VTaXplLFxuICAgIFwic2l6ZFwiOiBwYXJzZVNpemUsXG4gICAgXCJ1bmlxdWVcIjogKHZhbHVlLCBpbmZvKSA9PiB7XG4gICAgICAgIGluZm8udW5pcXVlSUQgPSB2YWx1ZTtcbiAgICB9LFxuICAgIFwibW9kaWZ5XCI6ICh2YWx1ZSwgaW5mbykgPT4ge1xuICAgICAgICBpbmZvLm1vZGlmaWVkQXQgPSBwYXJzZU1MU3hEYXRlKHZhbHVlKTtcbiAgICAgICAgaW5mby5yYXdNb2RpZmllZEF0ID0gaW5mby5tb2RpZmllZEF0LnRvSVNPU3RyaW5nKCk7XG4gICAgfSxcbiAgICBcInR5cGVcIjogKHZhbHVlLCBpbmZvKSA9PiB7XG4gICAgICAgIC8vIFRoZXJlIHNlZW1zIHRvIGJlIGNvbmZ1c2lvbiBvbiBob3cgdG8gaGFuZGxlIHN5bWJvbGljIGxpbmtzIGZvciBVbml4LiBSRkMgMzY1OSBkb2Vzbid0IGRlc2NyaWJlXG4gICAgICAgIC8vIHRoaXMgYnV0IG1lbnRpb25zIHNvbWUgZXhhbXBsZXMgdXNpbmcgdGhlIHN5bnRheCBgdHlwZT1PUy51bml4PXNsaW5rOjx0YXJnZXQ+YC4gQnV0IGFjY29yZGluZyB0b1xuICAgICAgICAvLyBhbiBlbnRyeSBpbiB0aGUgRXJyYXRhIChodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9lcnJhdGEvZWlkMTUwMCkgdGhpcyBzeW50YXggY2FuJ3QgYmUgdmFsaWQuXG4gICAgICAgIC8vIEluc3RlYWQgaXQgcHJvcG9zZXMgdG8gdXNlIGB0eXBlPU9TLnVuaXg9c3ltbGlua2AgYW5kIHRvIHRoZW4gbGlzdCB0aGUgYWN0dWFsIHRhcmdldCBvZiB0aGVcbiAgICAgICAgLy8gc3ltYm9saWMgbGluayBhcyBhbm90aGVyIGVudHJ5IGluIHRoZSBkaXJlY3RvcnkgbGlzdGluZy4gVGhlIHVuaXF1ZSBpZGVudGlmaWVycyBjYW4gdGhlbiBiZSB1c2VkXG4gICAgICAgIC8vIHRvIGRlcml2ZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGxpbmsocykgYW5kIHRhcmdldC4gV2UnbGwgaGF2ZSB0byBoYW5kbGUgYm90aCBjYXNlcyBhcyB0aGVyZVxuICAgICAgICAvLyBhcmUgZGlmZmVyaW5nIG9waW5pb25zIG9uIGhvdyB0byBkZWFsIHdpdGggdGhpcy4gSGVyZSBhcmUgc29tZSBsaW5rcyBvbiB0aGlzIHRvcGljOlxuICAgICAgICAvLyAtIFByb0ZUUEQgc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vcHJvZnRwZC9wcm9mdHBkL2Jsb2IvNTZlNmRmYTU5OGNiZDRlZjVjNmNiYTQzOWJjYmNkNTNhNjNlM2IyMS9tb2R1bGVzL21vZF9mYWN0cy5jI0w1MzFcbiAgICAgICAgLy8gLSBQcm9GVFBEIGJ1ZzogaHR0cDovL2J1Z3MucHJvZnRwZC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMThcbiAgICAgICAgLy8gLSBQcm9GVFBEIHN0YXRlbWVudDogaHR0cDovL3d3dy5wcm9mdHBkLm9yZy9kb2NzL21vZHVsZXMvbW9kX2ZhY3RzLmh0bWxcbiAgICAgICAgLy8g4oCTIEZpbGVaaWxsYSBidWc6IGh0dHBzOi8vdHJhYy5maWxlemlsbGEtcHJvamVjdC5vcmcvdGlja2V0LzkzMTBcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJPUy51bml4PXNsaW5rXCIpKSB7XG4gICAgICAgICAgICBpbmZvLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLlN5bWJvbGljTGluaztcbiAgICAgICAgICAgIGluZm8ubGluayA9IHZhbHVlLnN1YnN0cih2YWx1ZS5pbmRleE9mKFwiOlwiKSArIDEpO1xuICAgICAgICAgICAgcmV0dXJuIDEgLyogQ29udGludWUgKi87XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcImZpbGVcIjpcbiAgICAgICAgICAgICAgICBpbmZvLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLkZpbGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZGlyXCI6XG4gICAgICAgICAgICAgICAgaW5mby50eXBlID0gRmlsZUluZm9fMS5GaWxlVHlwZS5EaXJlY3Rvcnk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiT1MudW5peD1zeW1saW5rXCI6XG4gICAgICAgICAgICAgICAgaW5mby50eXBlID0gRmlsZUluZm9fMS5GaWxlVHlwZS5TeW1ib2xpY0xpbms7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHRhcmdldCBvZiB0aGUgc3ltYm9saWMgbGluayBtaWdodCBiZSBkZWZpbmVkIGluIGFub3RoZXIgbGluZSBpbiB0aGUgZGlyZWN0b3J5IGxpc3RpbmcuXG4gICAgICAgICAgICAgICAgLy8gV2UnbGwgaGFuZGxlIHRoaXMgaW4gYHRyYW5zZm9ybUxpc3QoKWAgYmVsb3cuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiY2RpclwiOiAvLyBDdXJyZW50IGRpcmVjdG9yeSBiZWluZyBsaXN0ZWRcbiAgICAgICAgICAgIGNhc2UgXCJwZGlyXCI6IC8vIFBhcmVudCBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICByZXR1cm4gMiAvKiBJZ25vcmVGaWxlICovOyAvLyBEb24ndCBpbmNsdWRlIHRoZXNlIGVudHJpZXMgaW4gdGhlIGxpc3RpbmdcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaW5mby50eXBlID0gRmlsZUluZm9fMS5GaWxlVHlwZS5Vbmtub3duO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAxIC8qIENvbnRpbnVlICovO1xuICAgIH0sXG4gICAgXCJ1bml4Lm1vZGVcIjogKHZhbHVlLCBpbmZvKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpZ2l0cyA9IHZhbHVlLnN1YnN0cigtMyk7XG4gICAgICAgIGluZm8ucGVybWlzc2lvbnMgPSB7XG4gICAgICAgICAgICB1c2VyOiBwYXJzZUludChkaWdpdHNbMF0sIDEwKSxcbiAgICAgICAgICAgIGdyb3VwOiBwYXJzZUludChkaWdpdHNbMV0sIDEwKSxcbiAgICAgICAgICAgIHdvcmxkOiBwYXJzZUludChkaWdpdHNbMl0sIDEwKVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgXCJ1bml4Lm93bmVybmFtZVwiOiAodmFsdWUsIGluZm8pID0+IHtcbiAgICAgICAgaW5mby51c2VyID0gdmFsdWU7XG4gICAgfSxcbiAgICBcInVuaXgub3duZXJcIjogKHZhbHVlLCBpbmZvKSA9PiB7XG4gICAgICAgIGlmIChpbmZvLnVzZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGluZm8udXNlciA9IHZhbHVlO1xuICAgIH0sXG4gICAgZ2V0IFwidW5peC51aWRcIigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbXCJ1bml4Lm93bmVyXCJdO1xuICAgIH0sXG4gICAgXCJ1bml4Lmdyb3VwbmFtZVwiOiAodmFsdWUsIGluZm8pID0+IHtcbiAgICAgICAgaW5mby5ncm91cCA9IHZhbHVlO1xuICAgIH0sXG4gICAgXCJ1bml4Lmdyb3VwXCI6ICh2YWx1ZSwgaW5mbykgPT4ge1xuICAgICAgICBpZiAoaW5mby5ncm91cCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgaW5mby5ncm91cCA9IHZhbHVlO1xuICAgIH0sXG4gICAgZ2V0IFwidW5peC5naWRcIigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbXCJ1bml4Lmdyb3VwXCJdO1xuICAgIH1cbiAgICAvLyBSZWdhcmRpbmcgdGhlIGZhY3QgXCJwZXJtXCI6XG4gICAgLy8gV2UgZG9uJ3QgaGFuZGxlIHBlcm1pc3Npb24gaW5mb3JtYXRpb24gc3RvcmVkIGluIFwicGVybVwiIGJlY2F1c2UgaXRzIGluZm9ybWF0aW9uIGlzIGNvbmNlcHR1YWxseVxuICAgIC8vIGRpZmZlcmVudCBmcm9tIHdoYXQgdXNlcnMgb2YgRlRQIGNsaWVudHMgdXN1YWxseSBhc3NvY2lhdGUgd2l0aCBcInBlcm1pc3Npb25zXCIuIFRob3NlIHRoYXQgaGF2ZVxuICAgIC8vIHNvbWUgZXhwZWN0YXRpb25zIChhbmQgcHJvYmFibHkgd2FudCB0byBlZGl0IHRoZW0gd2l0aCBhIFNJVEUgY29tbWFuZCkgb2Z0ZW4gdW5rbm93aW5nbHkgZXhwZWN0XG4gICAgLy8gdGhlIFVuaXggcGVybWlzc2lvbiBzeXN0ZW0uIFRoZSBpbmZvcm1hdGlvbiBwYXNzZWQgYnkgXCJwZXJtXCIgZGVzY3JpYmVzIHdoYXQgRlRQIGNvbW1hbmRzIGNhbiBiZVxuICAgIC8vIGV4ZWN1dGVkIHdpdGggYSBmaWxlL2RpcmVjdG9yeS4gQnV0IGV2ZW4gdGhpcyBjYW4gYmUgZWl0aGVyIGluY29tcGxldGUgb3IganVzdCBtZWFudCBhcyBhIFwiZ3VpZGVcIlxuICAgIC8vIGFzIHRoZSBzcGVjIG1lbnRpb25zLiBGcm9tIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNjU5I3NlY3Rpb24tNy41LjU6IFwiVGhlIHBlcm1pc3Npb25zIGFyZVxuICAgIC8vIGRlc2NyaWJlZCBoZXJlIGFzIHRoZXkgYXBwbHkgdG8gRlRQIGNvbW1hbmRzLiBUaGV5IG1heSBub3QgbWFwIGVhc2lseSBpbnRvIHBhcnRpY3VsYXIgcGVybWlzc2lvbnNcbiAgICAvLyBhdmFpbGFibGUgb24gdGhlIHNlcnZlcidzIG9wZXJhdGluZyBzeXN0ZW0uXCIgVGhlIHBhcnNlciBieSBBcGFjaGUgQ29tbW9ucyB0cmllcyB0byB0cmFuc2xhdGUgdGhlc2VcbiAgICAvLyB0byBVbml4IHBlcm1pc3Npb25zIOKAkyB0aGlzIGlzIG1pc2xlYWRpbmcgdXNlcnMgYW5kIG1pZ2h0IG5vdCBldmVuIGJlIGNvcnJlY3QuXG59O1xuLyoqXG4gKiBTcGxpdCBhIHN0cmluZyBvbmNlIGF0IHRoZSBmaXJzdCBwb3NpdGlvbiBvZiBhIGRlbGltaXRlci4gRm9yIGV4YW1wbGVcbiAqIGBzcGxpdFN0cmluZ09uY2UoXCJhIGIgYyBkXCIsIFwiIFwiKWAgcmV0dXJucyBgW1wiYVwiLCBcImIgYyBkXCJdYC5cbiAqL1xuZnVuY3Rpb24gc3BsaXRTdHJpbmdPbmNlKHN0ciwgZGVsaW1pdGVyKSB7XG4gICAgY29uc3QgcG9zID0gc3RyLmluZGV4T2YoZGVsaW1pdGVyKTtcbiAgICBjb25zdCBhID0gc3RyLnN1YnN0cigwLCBwb3MpO1xuICAgIGNvbnN0IGIgPSBzdHIuc3Vic3RyKHBvcyArIGRlbGltaXRlci5sZW5ndGgpO1xuICAgIHJldHVybiBbYSwgYl07XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhIGdpdmVuIGxpbmUgbWlnaHQgYmUgcGFydCBvZiBhbiBNTFNEIGxpc3RpbmcuXG4gKlxuICogLSBFeGFtcGxlIDE6IGBzaXplPTE1MjI3O3R5cGU9ZGlyO3Blcm09ZWw7bW9kaWZ5PTIwMTkwNDE5MDY1NzMwOyB0ZXN0IG9uZWBcbiAqIC0gRXhhbXBsZSAyOiBgIGZpbGUgbmFtZWAgKGxlYWRpbmcgc3BhY2UpXG4gKi9cbmZ1bmN0aW9uIHRlc3RMaW5lKGxpbmUpIHtcbiAgICByZXR1cm4gL15cXFMrPVxcUys7Ly50ZXN0KGxpbmUpIHx8IGxpbmUuc3RhcnRzV2l0aChcIiBcIik7XG59XG5leHBvcnRzLnRlc3RMaW5lID0gdGVzdExpbmU7XG4vKipcbiAqIFBhcnNlIHNpbmdsZSBsaW5lIGFzIE1MU0QgbGlzdGluZywgc2VlIHNwZWNpZmljYXRpb24gYXQgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM2NTkjc2VjdGlvbi03LlxuICovXG5mdW5jdGlvbiBwYXJzZUxpbmUobGluZSkge1xuICAgIGNvbnN0IFtwYWNrZWRGYWN0cywgbmFtZV0gPSBzcGxpdFN0cmluZ09uY2UobGluZSwgXCIgXCIpO1xuICAgIGlmIChuYW1lID09PSBcIlwiIHx8IG5hbWUgPT09IFwiLlwiIHx8IG5hbWUgPT09IFwiLi5cIikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBpbmZvID0gbmV3IEZpbGVJbmZvXzEuRmlsZUluZm8obmFtZSk7XG4gICAgY29uc3QgZmFjdHMgPSBwYWNrZWRGYWN0cy5zcGxpdChcIjtcIik7XG4gICAgZm9yIChjb25zdCBmYWN0IG9mIGZhY3RzKSB7XG4gICAgICAgIGNvbnN0IFtmYWN0TmFtZSwgZmFjdFZhbHVlXSA9IHNwbGl0U3RyaW5nT25jZShmYWN0LCBcIj1cIik7XG4gICAgICAgIGlmICghZmFjdFZhbHVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmYWN0SGFuZGxlciA9IGZhY3RIYW5kbGVyc0J5TmFtZVtmYWN0TmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKCFmYWN0SGFuZGxlcikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmFjdEhhbmRsZXIoZmFjdFZhbHVlLCBpbmZvKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gMiAvKiBJZ25vcmVGaWxlICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbmZvO1xufVxuZXhwb3J0cy5wYXJzZUxpbmUgPSBwYXJzZUxpbmU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1MaXN0KGZpbGVzKSB7XG4gICAgLy8gQ3JlYXRlIGEgbWFwIG9mIGFsbCBmaWxlcyB0aGF0IGFyZSBub3Qgc3ltYm9saWMgbGlua3MgYnkgdGhlaXIgdW5pcXVlIElEXG4gICAgY29uc3Qgbm9uTGlua3NCeUlEID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBpZiAoIWZpbGUuaXNTeW1ib2xpY0xpbmsgJiYgZmlsZS51bmlxdWVJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBub25MaW5rc0J5SUQuc2V0KGZpbGUudW5pcXVlSUQsIGZpbGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlc29sdmVkRmlsZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgLy8gVHJ5IHRvIGFzc29jaWF0ZSB1bnJlc29sdmVkIHN5bWJvbGljIGxpbmtzIHdpdGggYSB0YXJnZXQgZmlsZS9kaXJlY3RvcnkuXG4gICAgICAgIGlmIChmaWxlLmlzU3ltYm9saWNMaW5rICYmIGZpbGUudW5pcXVlSUQgIT09IHVuZGVmaW5lZCAmJiBmaWxlLmxpbmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gbm9uTGlua3NCeUlELmdldChmaWxlLnVuaXF1ZUlEKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZpbGUubGluayA9IHRhcmdldC5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSB0YXJnZXQgb2YgYSBzeW1ib2xpYyBsaW5rIGlzIGxpc3RlZCBhcyBhbiBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5IGxpc3RpbmcgYnV0IG1pZ2h0XG4gICAgICAgIC8vIGhhdmUgYSBwYXRoIHBvaW50aW5nIG91dHNpZGUgb2YgdGhpcyBkaXJlY3RvcnkuIEluIHRoYXQgY2FzZSB3ZSBkb24ndCB3YW50IHRoaXMgZW50cnlcbiAgICAgICAgLy8gdG8gYmUgcGFydCBvZiB0aGUgbGlzdGluZy4gV2UgZ2VuZXJhbGx5IGRvbid0IHdhbnQgdGhlc2Uga2luZCBvZiBlbnRyaWVzIGF0IGFsbC5cbiAgICAgICAgY29uc3QgaXNQYXJ0T2ZEaXJlY3RvcnkgPSAhZmlsZS5uYW1lLmluY2x1ZGVzKFwiL1wiKTtcbiAgICAgICAgaWYgKGlzUGFydE9mRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICByZXNvbHZlZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVkRmlsZXM7XG59XG5leHBvcnRzLnRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm1MaXN0O1xuLyoqXG4gKiBQYXJzZSBkYXRlIGFzIHNwZWNpZmllZCBpbiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzY1OSNzZWN0aW9uLTIuMy5cbiAqXG4gKiBNZXNzYWdlIGNvbnRhaW5zIHJlc3BvbnNlIGNvZGUgYW5kIG1vZGlmaWVkIHRpbWUgaW4gdGhlIGZvcm1hdDogWVlZWU1NRERISE1NU1NbLnNzc11cbiAqIEZvciBleGFtcGxlIGAxOTk5MTAwNTIxMzEwMmAgb3IgYDE5OTgwNjE1MTAwMDQ1LjAxNGAuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTUxTeERhdGUoZmFjdCkge1xuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrZmFjdC5zbGljZSgwLCA0KSwgLy8gWWVhclxuICAgICtmYWN0LnNsaWNlKDQsIDYpIC0gMSwgLy8gTW9udGhcbiAgICArZmFjdC5zbGljZSg2LCA4KSwgLy8gRGF0ZVxuICAgICtmYWN0LnNsaWNlKDgsIDEwKSwgLy8gSG91cnNcbiAgICArZmFjdC5zbGljZSgxMCwgMTIpLCAvLyBNaW51dGVzXG4gICAgK2ZhY3Quc2xpY2UoMTIsIDE0KSwgLy8gU2Vjb25kc1xuICAgICtmYWN0LnNsaWNlKDE1LCAxOCkgLy8gTWlsbGlzZWNvbmRzXG4gICAgKSk7XG59XG5leHBvcnRzLnBhcnNlTUxTeERhdGUgPSBwYXJzZU1MU3hEYXRlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUxpc3QgPSBleHBvcnRzLnBhcnNlTGluZSA9IGV4cG9ydHMudGVzdExpbmUgPSB2b2lkIDA7XG5jb25zdCBGaWxlSW5mb18xID0gcmVxdWlyZShcIi4vRmlsZUluZm9cIik7XG5jb25zdCBKQV9NT05USCA9IFwiXFx1NjcwOFwiO1xuY29uc3QgSkFfREFZID0gXCJcXHU2NWU1XCI7XG5jb25zdCBKQV9ZRUFSID0gXCJcXHU1ZTc0XCI7XG4vKipcbiAqIFRoaXMgcGFyc2VyIGlzIGJhc2VkIG9uIHRoZSBGVFAgY2xpZW50IGxpYnJhcnkgc291cmNlIGNvZGUgaW4gQXBhY2hlIENvbW1vbnMgTmV0IHByb3ZpZGVkXG4gKiB1bmRlciB0aGUgQXBhY2hlIDIuMCBsaWNlbnNlLiBJdCBoYXMgYmVlbiBzaW1wbGlmaWVkIGFuZCByZXdyaXR0ZW4gdG8gYmV0dGVyIGZpdCB0aGUgSmF2YXNjcmlwdCBsYW5ndWFnZS5cbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL2NvbW1vbnMtbmV0L2Jsb2IvbWFzdGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9jb21tb25zL25ldC9mdHAvcGFyc2VyL1VuaXhGVFBFbnRyeVBhcnNlci5qYXZhXG4gKlxuICogQmVsb3cgaXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGJ5IHRoaXMgcGFyc2VyLlxuICpcbiAqIFBlcm1pc3Npb25zOlxuICogICAgciAgIHRoZSBmaWxlIGlzIHJlYWRhYmxlXG4gKiAgICB3ICAgdGhlIGZpbGUgaXMgd3JpdGFibGVcbiAqICAgIHggICB0aGUgZmlsZSBpcyBleGVjdXRhYmxlXG4gKiAgICAtICAgdGhlIGluZGljYXRlZCBwZXJtaXNzaW9uIGlzIG5vdCBncmFudGVkXG4gKiAgICBMICAgbWFuZGF0b3J5IGxvY2tpbmcgb2NjdXJzIGR1cmluZyBhY2Nlc3MgKHRoZSBzZXQtZ3JvdXAtSUQgYml0IGlzXG4gKiAgICAgICAgb24gYW5kIHRoZSBncm91cCBleGVjdXRpb24gYml0IGlzIG9mZilcbiAqICAgIHMgICB0aGUgc2V0LXVzZXItSUQgb3Igc2V0LWdyb3VwLUlEIGJpdCBpcyBvbiwgYW5kIHRoZSBjb3JyZXNwb25kaW5nXG4gKiAgICAgICAgdXNlciBvciBncm91cCBleGVjdXRpb24gYml0IGlzIGFsc28gb25cbiAqICAgIFMgICB1bmRlZmluZWQgYml0LXN0YXRlICh0aGUgc2V0LXVzZXItSUQgYml0IGlzIG9uIGFuZCB0aGUgdXNlclxuICogICAgICAgIGV4ZWN1dGlvbiBiaXQgaXMgb2ZmKVxuICogICAgdCAgIHRoZSAxMDAwIChvY3RhbCkgYml0LCBvciBzdGlja3kgYml0LCBpcyBvbiBbc2VlIGNobW9kKDEpXSwgYW5kXG4gKiAgICAgICAgZXhlY3V0aW9uIGlzIG9uXG4gKiAgICBUICAgdGhlIDEwMDAgYml0IGlzIHR1cm5lZCBvbiwgYW5kIGV4ZWN1dGlvbiBpcyBvZmYgKHVuZGVmaW5lZCBiaXQtXG4gKiAgICAgICAgc3RhdGUpXG4gKiAgICBlICAgei9PUyBleHRlcm5hbCBsaW5rIGJpdFxuICogICAgRmluYWwgbGV0dGVyIG1heSBiZSBhcHBlbmRlZDpcbiAqICAgICsgICBmaWxlIGhhcyBleHRlbmRlZCBzZWN1cml0eSBhdHRyaWJ1dGVzIChlLmcuIEFDTClcbiAqICAgIE5vdGU6IGxvY2FsIGxpc3RpbmdzIG9uIE1hY09TWCBhbHNvIHVzZSAnQCdcbiAqICAgIHRoaXMgaXMgbm90IGFsbG93ZWQgZm9yIGhlcmUgYXMgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHNob3duIGJ5IEZUUCBzZXJ2ZXJzXG4gKiAgICB7QGNvZGUgQH0gICBmaWxlIGhhcyBleHRlbmRlZCBhdHRyaWJ1dGVzXG4gKi9cbmNvbnN0IFJFX0xJTkUgPSBuZXcgUmVnRXhwKFwiKFtiY2RlbGZtcFNzLV0pXCIgLy8gZmlsZSB0eXBlXG4gICAgKyBcIigoKHJ8LSkod3wtKShbeHNTdFRMLV0pKSgocnwtKSh3fC0pKFt4c1N0VEwtXSkpKChyfC0pKHd8LSkoW3hzU3RUTC1dKSkpXFxcXCs/XCIgLy8gcGVybWlzc2lvbnNcbiAgICArIFwiXFxcXHMqXCIgLy8gc2VwYXJhdG9yIFRPRE8gd2h5IGFsbG93IGl0IHRvIGJlIG9taXR0ZWQ/P1xuICAgICsgXCIoXFxcXGQrKVwiIC8vIGxpbmsgY291bnRcbiAgICArIFwiXFxcXHMrXCIgLy8gc2VwYXJhdG9yXG4gICAgKyBcIig/OihcXFxcUysoPzpcXFxcc1xcXFxTKykqPylcXFxccyspP1wiIC8vIG93bmVyIG5hbWUgKG9wdGlvbmFsIHNwYWNlcylcbiAgICArIFwiKD86KFxcXFxTKyg/OlxcXFxzXFxcXFMrKSopXFxcXHMrKT9cIiAvLyBncm91cCBuYW1lIChvcHRpb25hbCBzcGFjZXMpXG4gICAgKyBcIihcXFxcZCsoPzosXFxcXHMqXFxcXGQrKT8pXCIgLy8gc2l6ZSBvciBuLG1cbiAgICArIFwiXFxcXHMrXCIgLy8gc2VwYXJhdG9yXG4gICAgLyoqXG4gICAgICogbnVtZXJpYyBvciBzdGFuZGFyZCBmb3JtYXQgZGF0ZTpcbiAgICAgKiAgIHl5eXktbW0tZGQgKGV4cGVjdGluZyBoaDptbSB0byBmb2xsb3cpXG4gICAgICogICBNTU0gW2RdZFxuICAgICAqICAgW2RdZCBNTU1cbiAgICAgKiAgIE4uQi4gdXNlIG5vbi1zcGFjZSBmb3IgTU1NIHRvIGFsbG93IGZvciBsYW5ndWFnZXMgc3VjaCBhcyBHZXJtYW4gd2hpY2ggdXNlXG4gICAgICogICBkaWFjcml0aWNzIChlLmcuIHVtbGF1dCkgaW4gc29tZSBhYmJyZXZpYXRpb25zLlxuICAgICAqICAgSmFwYW5lc2UgdXNlcyBudW1lcmljIGRheSBhbmQgbW9udGggd2l0aCBzdWZmaXhlcyB0byBkaXN0aW5ndWlzaCB0aGVtXG4gICAgICogICBbZF1kWFggW2RdZFpaXG4gICAgICovXG4gICAgKyBcIihcIiArXG4gICAgXCIoPzpcXFxcZCtbLS9dXFxcXGQrWy0vXVxcXFxkKylcIiArIC8vIHl5eXktbW0tZGRcbiAgICBcInwoPzpcXFxcU3szfVxcXFxzK1xcXFxkezEsMn0pXCIgKyAvLyBNTU0gW2RdZFxuICAgIFwifCg/OlxcXFxkezEsMn1cXFxccytcXFxcU3szfSlcIiArIC8vIFtkXWQgTU1NXG4gICAgXCJ8KD86XFxcXGR7MSwyfVwiICsgSkFfTU9OVEggKyBcIlxcXFxzK1xcXFxkezEsMn1cIiArIEpBX0RBWSArIFwiKVwiICtcbiAgICBcIilcIlxuICAgICsgXCJcXFxccytcIiAvLyBzZXBhcmF0b3JcbiAgICAvKipcbiAgICAgKiB5ZWFyIChmb3Igbm9uLXJlY2VudCBzdGFuZGFyZCBmb3JtYXQpIC0geXl5eVxuICAgICAqIG9yIHRpbWUgKGZvciBudW1lcmljIG9yIHJlY2VudCBzdGFuZGFyZCBmb3JtYXQpIFtoXWg6bW1cbiAgICAgKiBvciBKYXBhbmVzZSB5ZWFyIC0geXl5eVhYXG4gICAgICovXG4gICAgKyBcIigoPzpcXFxcZCsoPzo6XFxcXGQrKT8pfCg/OlxcXFxkezR9XCIgKyBKQV9ZRUFSICsgXCIpKVwiIC8vICgyMClcbiAgICArIFwiXFxcXHNcIiAvLyBzZXBhcmF0b3JcbiAgICArIFwiKC4qKVwiKTsgLy8gdGhlIHJlc3QgKDIxKVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBnaXZlbiBsaW5lIG1pZ2h0IGJlIGEgVW5peC1zdHlsZSBsaXN0aW5nLlxuICpcbiAqIC0gRXhhbXBsZTogYC1ydy1yLS1yLS0rICAgMSBwYXRyaWNrICBzdGFmZiAgIDEwNTcgRGVjIDExIDE0OjM1IHRlc3QudHh0YFxuICovXG5mdW5jdGlvbiB0ZXN0TGluZShsaW5lKSB7XG4gICAgcmV0dXJuIFJFX0xJTkUudGVzdChsaW5lKTtcbn1cbmV4cG9ydHMudGVzdExpbmUgPSB0ZXN0TGluZTtcbi8qKlxuICogUGFyc2UgYSBzaW5nbGUgbGluZSBvZiBhIFVuaXgtc3R5bGUgZGlyZWN0b3J5IGxpc3RpbmcuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTGluZShsaW5lKSB7XG4gICAgY29uc3QgZ3JvdXBzID0gbGluZS5tYXRjaChSRV9MSU5FKTtcbiAgICBpZiAoZ3JvdXBzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBncm91cHNbMjFdO1xuICAgIGlmIChuYW1lID09PSBcIi5cIiB8fCBuYW1lID09PSBcIi4uXCIpIHsgLy8gSWdub3JlIHBhcmVudCBkaXJlY3RvcnkgbGlua3NcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlSW5mb18xLkZpbGVJbmZvKG5hbWUpO1xuICAgIGZpbGUuc2l6ZSA9IHBhcnNlSW50KGdyb3Vwc1sxOF0sIDEwKTtcbiAgICBmaWxlLnVzZXIgPSBncm91cHNbMTZdO1xuICAgIGZpbGUuZ3JvdXAgPSBncm91cHNbMTddO1xuICAgIGZpbGUuaGFyZExpbmtDb3VudCA9IHBhcnNlSW50KGdyb3Vwc1sxNV0sIDEwKTtcbiAgICBmaWxlLnJhd01vZGlmaWVkQXQgPSBncm91cHNbMTldICsgXCIgXCIgKyBncm91cHNbMjBdO1xuICAgIGZpbGUucGVybWlzc2lvbnMgPSB7XG4gICAgICAgIHVzZXI6IHBhcnNlTW9kZShncm91cHNbNF0sIGdyb3Vwc1s1XSwgZ3JvdXBzWzZdKSxcbiAgICAgICAgZ3JvdXA6IHBhcnNlTW9kZShncm91cHNbOF0sIGdyb3Vwc1s5XSwgZ3JvdXBzWzEwXSksXG4gICAgICAgIHdvcmxkOiBwYXJzZU1vZGUoZ3JvdXBzWzEyXSwgZ3JvdXBzWzEzXSwgZ3JvdXBzWzE0XSksXG4gICAgfTtcbiAgICAvLyBTZXQgZmlsZSB0eXBlXG4gICAgc3dpdGNoIChncm91cHNbMV0uY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICBmaWxlLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLkRpcmVjdG9yeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZVwiOiAvLyBORVQtMzkgPT4gei9PUyBleHRlcm5hbCBsaW5rXG4gICAgICAgICAgICBmaWxlLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLlN5bWJvbGljTGluaztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibFwiOlxuICAgICAgICAgICAgZmlsZS50eXBlID0gRmlsZUluZm9fMS5GaWxlVHlwZS5TeW1ib2xpY0xpbms7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImJcIjpcbiAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgIGZpbGUudHlwZSA9IEZpbGVJbmZvXzEuRmlsZVR5cGUuRmlsZTsgLy8gVE9ETyBjaGFuZ2UgdGhpcyBpZiBERVZJQ0VfVFlQRSBpbXBsZW1lbnRlZFxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICBmaWxlLnR5cGUgPSBGaWxlSW5mb18xLkZpbGVUeXBlLkZpbGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEEgJ3doaXRlb3V0JyBmaWxlIGlzIGFuIEFSVElGSUNJQUwgZW50cnkgaW4gYW55IG9mIHNldmVyYWwgdHlwZXMgb2ZcbiAgICAgICAgICAgIC8vICd0cmFuc2x1Y2VudCcgZmlsZXN5c3RlbXMsIG9mIHdoaWNoIGEgJ3VuaW9uJyBmaWxlc3lzdGVtIGlzIG9uZS5cbiAgICAgICAgICAgIGZpbGUudHlwZSA9IEZpbGVJbmZvXzEuRmlsZVR5cGUuVW5rbm93bjtcbiAgICB9XG4gICAgLy8gU2VwYXJhdGUgb3V0IHRoZSBsaW5rIG5hbWUgZm9yIHN5bWJvbGljIGxpbmtzXG4gICAgaWYgKGZpbGUuaXNTeW1ib2xpY0xpbmspIHtcbiAgICAgICAgY29uc3QgZW5kID0gbmFtZS5pbmRleE9mKFwiIC0+IFwiKTtcbiAgICAgICAgaWYgKGVuZCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGZpbGUubmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIGVuZCk7XG4gICAgICAgICAgICBmaWxlLmxpbmsgPSBuYW1lLnN1YnN0cmluZyhlbmQgKyA0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsZTtcbn1cbmV4cG9ydHMucGFyc2VMaW5lID0gcGFyc2VMaW5lO1xuZnVuY3Rpb24gdHJhbnNmb3JtTGlzdChmaWxlcykge1xuICAgIHJldHVybiBmaWxlcztcbn1cbmV4cG9ydHMudHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybUxpc3Q7XG5mdW5jdGlvbiBwYXJzZU1vZGUociwgdywgeCkge1xuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgaWYgKHIgIT09IFwiLVwiKSB7XG4gICAgICAgIHZhbHVlICs9IEZpbGVJbmZvXzEuRmlsZUluZm8uVW5peFBlcm1pc3Npb24uUmVhZDtcbiAgICB9XG4gICAgaWYgKHcgIT09IFwiLVwiKSB7XG4gICAgICAgIHZhbHVlICs9IEZpbGVJbmZvXzEuRmlsZUluZm8uVW5peFBlcm1pc3Npb24uV3JpdGU7XG4gICAgfVxuICAgIGNvbnN0IGV4ZWNUb2tlbiA9IHguY2hhckF0KDApO1xuICAgIGlmIChleGVjVG9rZW4gIT09IFwiLVwiICYmIGV4ZWNUb2tlbi50b1VwcGVyQ2FzZSgpICE9PSBleGVjVG9rZW4pIHtcbiAgICAgICAgdmFsdWUgKz0gRmlsZUluZm9fMS5GaWxlSW5mby5Vbml4UGVybWlzc2lvbi5FeGVjdXRlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZG93bmxvYWRUbyA9IGV4cG9ydHMudXBsb2FkRnJvbSA9IGV4cG9ydHMuY29ubmVjdEZvclBhc3NpdmVUcmFuc2ZlciA9IGV4cG9ydHMucGFyc2VQYXN2UmVzcG9uc2UgPSBleHBvcnRzLmVudGVyUGFzc2l2ZU1vZGVJUHY0ID0gZXhwb3J0cy5wYXJzZUVwc3ZSZXNwb25zZSA9IGV4cG9ydHMuZW50ZXJQYXNzaXZlTW9kZUlQdjYgPSB2b2lkIDA7XG5jb25zdCBuZXRVdGlsc18xID0gcmVxdWlyZShcIi4vbmV0VXRpbHNcIik7XG5jb25zdCB0bHNfMSA9IHJlcXVpcmUoXCJ0bHNcIik7XG5jb25zdCBwYXJzZUNvbnRyb2xSZXNwb25zZV8xID0gcmVxdWlyZShcIi4vcGFyc2VDb250cm9sUmVzcG9uc2VcIik7XG4vKipcbiAqIFByZXBhcmUgYSBkYXRhIHNvY2tldCB1c2luZyBwYXNzaXZlIG1vZGUgb3ZlciBJUHY2LlxuICovXG5hc3luYyBmdW5jdGlvbiBlbnRlclBhc3NpdmVNb2RlSVB2NihmdHApIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmdHAucmVxdWVzdChcIkVQU1ZcIik7XG4gICAgY29uc3QgcG9ydCA9IHBhcnNlRXBzdlJlc3BvbnNlKHJlcy5tZXNzYWdlKTtcbiAgICBpZiAoIXBvcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcGFyc2UgRVBTViByZXNwb25zZTogXCIgKyByZXMubWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRyb2xIb3N0ID0gZnRwLnNvY2tldC5yZW1vdGVBZGRyZXNzO1xuICAgIGlmIChjb250cm9sSG9zdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnRyb2wgc29ja2V0IGlzIGRpc2Nvbm5lY3RlZCwgY2FuJ3QgZ2V0IHJlbW90ZSBhZGRyZXNzLlwiKTtcbiAgICB9XG4gICAgYXdhaXQgY29ubmVjdEZvclBhc3NpdmVUcmFuc2Zlcihjb250cm9sSG9zdCwgcG9ydCwgZnRwKTtcbiAgICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5lbnRlclBhc3NpdmVNb2RlSVB2NiA9IGVudGVyUGFzc2l2ZU1vZGVJUHY2O1xuLyoqXG4gKiBQYXJzZSBhbiBFUFNWIHJlc3BvbnNlLiBSZXR1cm5zIG9ubHkgdGhlIHBvcnQgYXMgaW4gRVBTViB0aGUgaG9zdCBvZiB0aGUgY29udHJvbCBjb25uZWN0aW9uIGlzIHVzZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRXBzdlJlc3BvbnNlKG1lc3NhZ2UpIHtcbiAgICAvLyBHZXQgcG9ydCBmcm9tIEVQU1YgcmVzcG9uc2UsIGUuZy4gXCIyMjkgRW50ZXJpbmcgRXh0ZW5kZWQgUGFzc2l2ZSBNb2RlICh8fHw2NDQ2fClcIlxuICAgIC8vIFNvbWUgRlRQIFNlcnZlcnMgc3VjaCBhcyB0aGUgb25lIG9uIElCTSBpIChPUy80MDApIHVzZSAhIGluc3RlYWQgb2YgfCBpbiB0aGVpciBFUFNWIHJlc3BvbnNlLlxuICAgIGNvbnN0IGdyb3VwcyA9IG1lc3NhZ2UubWF0Y2goL1t8IV17M30oLispW3whXS8pO1xuICAgIGlmIChncm91cHMgPT09IG51bGwgfHwgZ3JvdXBzWzFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBwYXJzZSByZXNwb25zZSB0byAnRVBTVic6ICR7bWVzc2FnZX1gKTtcbiAgICB9XG4gICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGdyb3Vwc1sxXSwgMTApO1xuICAgIGlmIChOdW1iZXIuaXNOYU4ocG9ydCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBwYXJzZSByZXNwb25zZSB0byAnRVBTVicsIHBvcnQgaXMgbm90IGEgbnVtYmVyOiAke21lc3NhZ2V9YCk7XG4gICAgfVxuICAgIHJldHVybiBwb3J0O1xufVxuZXhwb3J0cy5wYXJzZUVwc3ZSZXNwb25zZSA9IHBhcnNlRXBzdlJlc3BvbnNlO1xuLyoqXG4gKiBQcmVwYXJlIGEgZGF0YSBzb2NrZXQgdXNpbmcgcGFzc2l2ZSBtb2RlIG92ZXIgSVB2NC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW50ZXJQYXNzaXZlTW9kZUlQdjQoZnRwKSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZnRwLnJlcXVlc3QoXCJQQVNWXCIpO1xuICAgIGNvbnN0IHRhcmdldCA9IHBhcnNlUGFzdlJlc3BvbnNlKHJlcy5tZXNzYWdlKTtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBwYXJzZSBQQVNWIHJlc3BvbnNlOiBcIiArIHJlcy5tZXNzYWdlKTtcbiAgICB9XG4gICAgLy8gSWYgdGhlIGhvc3QgaW4gdGhlIFBBU1YgcmVzcG9uc2UgaGFzIGEgbG9jYWwgYWRkcmVzcyB3aGlsZSB0aGUgY29udHJvbCBjb25uZWN0aW9uIGhhc24ndCxcbiAgICAvLyB3ZSBhc3N1bWUgYSBOQVQgaXNzdWUgYW5kIHVzZSB0aGUgSVAgb2YgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBhcyB0aGUgdGFyZ2V0IGZvciB0aGUgZGF0YSBjb25uZWN0aW9uLlxuICAgIC8vIFdlIGNhbid0IGFsd2F5cyBwZXJmb3JtIHRoaXMgcmVwbGFjZW1lbnQgYmVjYXVzZSBpdCdzIHBvc3NpYmxlIChhbHRob3VnaCB1bmxpa2VseSkgdGhhdCB0aGUgRlRQIHNlcnZlclxuICAgIC8vIGluZGVlZCB1c2VzIGEgZGlmZmVyZW50IGhvc3QgZm9yIGRhdGEgY29ubmVjdGlvbnMuXG4gICAgY29uc3QgY29udHJvbEhvc3QgPSBmdHAuc29ja2V0LnJlbW90ZUFkZHJlc3M7XG4gICAgaWYgKG5ldFV0aWxzXzEuaXBJc1ByaXZhdGVWNEFkZHJlc3ModGFyZ2V0Lmhvc3QpICYmIGNvbnRyb2xIb3N0ICYmICFuZXRVdGlsc18xLmlwSXNQcml2YXRlVjRBZGRyZXNzKGNvbnRyb2xIb3N0KSkge1xuICAgICAgICB0YXJnZXQuaG9zdCA9IGNvbnRyb2xIb3N0O1xuICAgIH1cbiAgICBhd2FpdCBjb25uZWN0Rm9yUGFzc2l2ZVRyYW5zZmVyKHRhcmdldC5ob3N0LCB0YXJnZXQucG9ydCwgZnRwKTtcbiAgICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5lbnRlclBhc3NpdmVNb2RlSVB2NCA9IGVudGVyUGFzc2l2ZU1vZGVJUHY0O1xuLyoqXG4gKiBQYXJzZSBhIFBBU1YgcmVzcG9uc2UuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFzdlJlc3BvbnNlKG1lc3NhZ2UpIHtcbiAgICAvLyBHZXQgaG9zdCBhbmQgcG9ydCBmcm9tIFBBU1YgcmVzcG9uc2UsIGUuZy4gXCIyMjcgRW50ZXJpbmcgUGFzc2l2ZSBNb2RlICgxOTIsMTY4LDEsMTAwLDEwLDIyOSlcIlxuICAgIGNvbnN0IGdyb3VwcyA9IG1lc3NhZ2UubWF0Y2goLyhbLVxcZF0rLFstXFxkXSssWy1cXGRdKyxbLVxcZF0rKSwoWy1cXGRdKyksKFstXFxkXSspLyk7XG4gICAgaWYgKGdyb3VwcyA9PT0gbnVsbCB8fCBncm91cHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgcGFyc2UgcmVzcG9uc2UgdG8gJ1BBU1YnOiAke21lc3NhZ2V9YCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGhvc3Q6IGdyb3Vwc1sxXS5yZXBsYWNlKC8sL2csIFwiLlwiKSxcbiAgICAgICAgcG9ydDogKHBhcnNlSW50KGdyb3Vwc1syXSwgMTApICYgMjU1KSAqIDI1NiArIChwYXJzZUludChncm91cHNbM10sIDEwKSAmIDI1NSlcbiAgICB9O1xufVxuZXhwb3J0cy5wYXJzZVBhc3ZSZXNwb25zZSA9IHBhcnNlUGFzdlJlc3BvbnNlO1xuZnVuY3Rpb24gY29ubmVjdEZvclBhc3NpdmVUcmFuc2Zlcihob3N0LCBwb3J0LCBmdHApIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVDb25uRXJyID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBcIkNhbid0IG9wZW4gZGF0YSBjb25uZWN0aW9uIGluIHBhc3NpdmUgbW9kZTogXCIgKyBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgc29ja2V0ID0gZnRwLl9uZXdTb2NrZXQoKTtcbiAgICAgICAgc29ja2V0Lm9uKFwiZXJyb3JcIiwgaGFuZGxlQ29ubkVycik7XG4gICAgICAgIHNvY2tldC5jb25uZWN0KHsgcG9ydCwgaG9zdCwgZmFtaWx5OiBmdHAuaXBGYW1pbHkgfSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZ0cC5zb2NrZXQgaW5zdGFuY2VvZiB0bHNfMS5UTFNTb2NrZXQpIHtcbiAgICAgICAgICAgICAgICBzb2NrZXQgPSB0bHNfMS5jb25uZWN0KE9iamVjdC5hc3NpZ24oe30sIGZ0cC50bHNPcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgIHNvY2tldCxcbiAgICAgICAgICAgICAgICAgICAgLy8gUmV1c2UgdGhlIFRMUyBzZXNzaW9uIG5lZ290aWF0ZWQgZWFybGllciB3aGVuIHRoZSBjb250cm9sIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgLy8gd2FzIHVwZ3JhZGVkLiBTZXJ2ZXJzIGV4cGVjdCB0aGlzIGJlY2F1c2UgaXQgcHJvdmlkZXMgYWRkaXRpb25hbFxuICAgICAgICAgICAgICAgICAgICAvLyBzZWN1cml0eTogSWYgYSBjb21wbGV0ZWx5IG5ldyBzZXNzaW9uIHdvdWxkIGJlIG5lZ290aWF0ZWQsIGEgaGFja2VyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvdWxkIGd1ZXNzIHRoZSBwb3J0IGFuZCBjb25uZWN0IHRvIHRoZSBuZXcgZGF0YSBjb25uZWN0aW9uIGJlZm9yZSB3ZSBkb1xuICAgICAgICAgICAgICAgICAgICAvLyBieSBqdXN0IHN0YXJ0aW5nIGhpcy9oZXIgb3duIFRMUyBzZXNzaW9uLlxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uOiBmdHAuc29ja2V0LmdldFNlc3Npb24oKVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAvLyBJdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdHJhbnNmZXIgdGFzayB0byB3YWl0IHVudGlsIHRoZVxuICAgICAgICAgICAgICAgIC8vIFRMUyBzb2NrZXQgaXNzdWVkIHRoZSBldmVudCAnc2VjdXJlQ29ubmVjdCcuIFdlIGNhbid0IGRvIHRoaXNcbiAgICAgICAgICAgICAgICAvLyBoZXJlIGJlY2F1c2Ugc29tZSBzZXJ2ZXJzIHdpbGwgc3RhcnQgdXBncmFkaW5nIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIHRyYW5zZmVyIHJlcXVlc3QgaGFzIGJlZW4gbWFkZS4gTGlzdCBhbmQgZG93bmxvYWQgZG9uJ3RcbiAgICAgICAgICAgICAgICAvLyBoYXZlIHRvIHdhaXQgZm9yIHRoaXMgZXZlbnQgYmVjYXVzZSB0aGUgc2VydmVyIHNlbmRzIHdoZW5ldmVyIGl0XG4gICAgICAgICAgICAgICAgLy8gaXMgcmVhZHkuIEJ1dCBmb3IgdXBsb2FkIHRoaXMgaGFzIHRvIGJlIHRha2VuIGludG8gYWNjb3VudCxcbiAgICAgICAgICAgICAgICAvLyBzZWUgdGhlIGRldGFpbHMgaW4gdGhlIHVwbG9hZCgpIGZ1bmN0aW9uIGJlbG93LlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTGV0IHRoZSBGVFBDb250ZXh0IGxpc3RlbiB0byBlcnJvcnMgZnJvbSBub3cgb24sIHJlbW92ZSBsb2NhbCBoYW5kbGVyLlxuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgaGFuZGxlQ29ubkVycik7XG4gICAgICAgICAgICBmdHAuZGF0YVNvY2tldCA9IHNvY2tldDtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmNvbm5lY3RGb3JQYXNzaXZlVHJhbnNmZXIgPSBjb25uZWN0Rm9yUGFzc2l2ZVRyYW5zZmVyO1xuLyoqXG4gKiBIZWxwcyByZXNvbHZpbmcvcmVqZWN0aW5nIHRyYW5zZmVycy5cbiAqXG4gKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYWxsIEZUUCB0cmFuc2ZlcnMuIEZvciBleGFtcGxlIHdoZW4gZG93bmxvYWRpbmcsIHRoZSBzZXJ2ZXIgbWlnaHQgY29uZmlybVxuICogd2l0aCBcIjIyNiBUcmFuc2ZlciBjb21wbGV0ZVwiIHdoZW4gaW4gZmFjdCB0aGUgZG93bmxvYWQgb24gdGhlIGRhdGEgY29ubmVjdGlvbiBoYXMgbm90IGZpbmlzaGVkXG4gKiB5ZXQuIFdpdGggYWxsIHRyYW5zZmVycyB3ZSBtYWtlIHN1cmUgdGhhdCBhKSB0aGUgcmVzdWx0IGFycml2ZWQgYW5kIGIpIGhhcyBiZWVuIGNvbmZpcm1lZCBieVxuICogZS5nLiB0aGUgY29udHJvbCBjb25uZWN0aW9uLiBXZSBqdXN0IGRvbid0IGtub3cgaW4gd2hpY2ggb3JkZXIgdGhpcyB3aWxsIGhhcHBlbi5cbiAqL1xuY2xhc3MgVHJhbnNmZXJSZXNvbHZlciB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGUgYSBUcmFuc2ZlclJlc29sdmVyXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZnRwLCBwcm9ncmVzcykge1xuICAgICAgICB0aGlzLmZ0cCA9IGZ0cDtcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmRhdGFUcmFuc2ZlckRvbmUgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFyayB0aGUgYmVnaW5uaW5nIG9mIGEgdHJhbnNmZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIHRyYW5zZmVyLCB1c3VhbGx5IHRoZSBmaWxlbmFtZS5cbiAgICAgKiBAcGFyYW0gdHlwZSAtIFR5cGUgb2YgdHJhbnNmZXIsIHVzdWFsbHkgXCJ1cGxvYWRcIiBvciBcImRvd25sb2FkXCIuXG4gICAgICovXG4gICAgb25EYXRhU3RhcnQobmFtZSwgdHlwZSkge1xuICAgICAgICAvLyBMZXQgdGhlIGRhdGEgc29ja2V0IGJlIGluIGNoYXJnZSBvZiB0cmFja2luZyB0aW1lb3V0cyBkdXJpbmcgdHJhbnNmZXIuXG4gICAgICAgIC8vIFRoZSBjb250cm9sIHNvY2tldCBzaXRzIGlkbGUgZHVyaW5nIHRoaXMgdGltZSBhbnl3YXkgYW5kIG1pZ2h0IHByb3Zva2VcbiAgICAgICAgLy8gYSB0aW1lb3V0IHVubmVjZXNzYXJpbHkuIFRoZSBjb250cm9sIGNvbm5lY3Rpb24gd2lsbCB0YWtlIGNhcmVcbiAgICAgICAgLy8gb2YgdGltZW91dHMgYWdhaW4gb25jZSBkYXRhIHRyYW5zZmVyIGlzIGNvbXBsZXRlIG9yIGZhaWxlZC5cbiAgICAgICAgaWYgKHRoaXMuZnRwLmRhdGFTb2NrZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSB0cmFuc2ZlciBzaG91bGQgc3RhcnQgYnV0IHRoZXJlIGlzIG5vIGRhdGEgY29ubmVjdGlvbi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mdHAuc29ja2V0LnNldFRpbWVvdXQoMCk7XG4gICAgICAgIHRoaXMuZnRwLmRhdGFTb2NrZXQuc2V0VGltZW91dCh0aGlzLmZ0cC50aW1lb3V0KTtcbiAgICAgICAgdGhpcy5wcm9ncmVzcy5zdGFydCh0aGlzLmZ0cC5kYXRhU29ja2V0LCBuYW1lLCB0eXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgY29ubmVjdGlvbiBoYXMgZmluaXNoZWQgdGhlIHRyYW5zZmVyLlxuICAgICAqL1xuICAgIG9uRGF0YURvbmUodGFzaykge1xuICAgICAgICB0aGlzLnByb2dyZXNzLnVwZGF0ZUFuZFN0b3AoKTtcbiAgICAgICAgLy8gSGFuZC1vdmVyIHRpbWVvdXQgdHJhY2tpbmcgYmFjayB0byB0aGUgY29udHJvbCBjb25uZWN0aW9uLiBJdCdzIHBvc3NpYmxlIHRoYXRcbiAgICAgICAgLy8gd2UgZG9uJ3QgcmVjZWl2ZSB0aGUgcmVzcG9uc2Ugb3ZlciB0aGUgY29udHJvbCBjb25uZWN0aW9uIHRoYXQgdGhlIHRyYW5zZmVyIGlzXG4gICAgICAgIC8vIGRvbmUuIEluIHRoaXMgY2FzZSwgd2Ugd2FudCB0byBjb3JyZWN0bHkgYXNzb2NpYXRlIHRoZSByZXN1bHRpbmcgdGltZW91dCB3aXRoXG4gICAgICAgIC8vIHRoZSBjb250cm9sIGNvbm5lY3Rpb24uXG4gICAgICAgIHRoaXMuZnRwLnNvY2tldC5zZXRUaW1lb3V0KHRoaXMuZnRwLnRpbWVvdXQpO1xuICAgICAgICBpZiAodGhpcy5mdHAuZGF0YVNvY2tldCkge1xuICAgICAgICAgICAgdGhpcy5mdHAuZGF0YVNvY2tldC5zZXRUaW1lb3V0KDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVRyYW5zZmVyRG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMudHJ5UmVzb2x2ZSh0YXNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRyb2wgY29ubmVjdGlvbiByZXBvcnRzIHRoZSB0cmFuc2ZlciBhcyBmaW5pc2hlZC5cbiAgICAgKi9cbiAgICBvbkNvbnRyb2xEb25lKHRhc2ssIHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy50cnlSZXNvbHZlKHRhc2spO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBlcnJvciBoYXMgYmVlbiByZXBvcnRlZCBhbmQgdGhlIHRhc2sgc2hvdWxkIGJlIHJlamVjdGVkLlxuICAgICAqL1xuICAgIG9uRXJyb3IodGFzaywgZXJyKSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3MudXBkYXRlQW5kU3RvcCgpO1xuICAgICAgICB0aGlzLmZ0cC5zb2NrZXQuc2V0VGltZW91dCh0aGlzLmZ0cC50aW1lb3V0KTtcbiAgICAgICAgdGhpcy5mdHAuZGF0YVNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGFzay5yZWplY3QoZXJyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udHJvbCBjb25uZWN0aW9uIHNlbnQgYW4gdW5leHBlY3RlZCByZXF1ZXN0IHJlcXVpcmluZyBhIHJlc3BvbnNlIGZyb20gb3VyIHBhcnQuIFdlXG4gICAgICogY2FuJ3QgcHJvdmlkZSB0aGF0IChiZWNhdXNlIHVua25vd24pIGFuZCBoYXZlIHRvIGNsb3NlIHRoZSBjb250cmV4dCB3aXRoIGFuIGVycm9yIGJlY2F1c2VcbiAgICAgKiB0aGUgRlRQIHNlcnZlciBpcyBub3cgY2F1Z2h0IHVwIGluIGEgc3RhdGUgd2UgY2FuJ3QgcmVzb2x2ZS5cbiAgICAgKi9cbiAgICBvblVuZXhwZWN0ZWRSZXF1ZXN0KHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5leHBlY3RlZCBGVFAgcmVzcG9uc2UgaXMgcmVxdWVzdGluZyBhbiBhbnN3ZXI6ICR7cmVzcG9uc2UubWVzc2FnZX1gKTtcbiAgICAgICAgdGhpcy5mdHAuY2xvc2VXaXRoRXJyb3IoZXJyKTtcbiAgICB9XG4gICAgdHJ5UmVzb2x2ZSh0YXNrKSB7XG4gICAgICAgIC8vIFRvIHJlc29sdmUsIHdlIG5lZWQgYm90aCBjb250cm9sIGFuZCBkYXRhIGNvbm5lY3Rpb24gdG8gcmVwb3J0IHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUuXG4gICAgICAgIGNvbnN0IGNhblJlc29sdmUgPSB0aGlzLmRhdGFUcmFuc2ZlckRvbmUgJiYgdGhpcy5yZXNwb25zZSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoY2FuUmVzb2x2ZSkge1xuICAgICAgICAgICAgdGhpcy5mdHAuZGF0YVNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZSh0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHVwbG9hZEZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICBjb25zdCByZXNvbHZlciA9IG5ldyBUcmFuc2ZlclJlc29sdmVyKGNvbmZpZy5mdHAsIGNvbmZpZy50cmFja2VyKTtcbiAgICBjb25zdCBmdWxsQ29tbWFuZCA9IGAke2NvbmZpZy5jb21tYW5kfSAke2NvbmZpZy5yZW1vdGVQYXRofWA7XG4gICAgcmV0dXJuIGNvbmZpZy5mdHAuaGFuZGxlKGZ1bGxDb21tYW5kLCAocmVzLCB0YXNrKSA9PiB7XG4gICAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmVzb2x2ZXIub25FcnJvcih0YXNrLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJlcy5jb2RlID09PSAxNTAgfHwgcmVzLmNvZGUgPT09IDEyNSkgeyAvLyBSZWFkeSB0byB1cGxvYWRcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTb2NrZXQgPSBjb25maWcuZnRwLmRhdGFTb2NrZXQ7XG4gICAgICAgICAgICBpZiAoIWRhdGFTb2NrZXQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlci5vbkVycm9yKHRhc2ssIG5ldyBFcnJvcihcIlVwbG9hZCBzaG91bGQgYmVnaW4gYnV0IG5vIGRhdGEgY29ubmVjdGlvbiBpcyBhdmFpbGFibGUuXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgdXNpbmcgVExTLCB3ZSBoYXZlIHRvIHdhaXQgdW50aWwgdGhlIGRhdGFTb2NrZXQgaXNzdWVkXG4gICAgICAgICAgICAvLyAnc2VjdXJlQ29ubmVjdCcuIElmIHRoaXMgaGFzbid0IGhhcHBlbmVkIHlldCwgZ2V0Q2lwaGVyKCkgcmV0dXJucyB1bmRlZmluZWQuXG4gICAgICAgICAgICBjb25zdCBjYW5VcGxvYWQgPSBcImdldENpcGhlclwiIGluIGRhdGFTb2NrZXQgPyBkYXRhU29ja2V0LmdldENpcGhlcigpICE9PSB1bmRlZmluZWQgOiB0cnVlO1xuICAgICAgICAgICAgb25Db25kaXRpb25PckV2ZW50KGNhblVwbG9hZCwgZGF0YVNvY2tldCwgXCJzZWN1cmVDb25uZWN0XCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25maWcuZnRwLmxvZyhgVXBsb2FkaW5nIHRvICR7bmV0VXRpbHNfMS5kZXNjcmliZUFkZHJlc3MoZGF0YVNvY2tldCl9ICgke25ldFV0aWxzXzEuZGVzY3JpYmVUTFMoZGF0YVNvY2tldCl9KWApO1xuICAgICAgICAgICAgICAgIHJlc29sdmVyLm9uRGF0YVN0YXJ0KGNvbmZpZy5yZW1vdGVQYXRoLCBjb25maWcudHlwZSk7XG4gICAgICAgICAgICAgICAgc291cmNlLnBpcGUoZGF0YVNvY2tldCkub25jZShcImZpbmlzaFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb2NrZXQuZGVzdHJveSgpOyAvLyBFeHBsaWNpdGx5IGNsb3NlL2Rlc3Ryb3kgdGhlIHNvY2tldCB0byBzaWduYWwgdGhlIGVuZC5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIub25EYXRhRG9uZSh0YXNrKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhcnNlQ29udHJvbFJlc3BvbnNlXzEucG9zaXRpdmVDb21wbGV0aW9uKHJlcy5jb2RlKSkgeyAvLyBUcmFuc2ZlciBjb21wbGV0ZVxuICAgICAgICAgICAgcmVzb2x2ZXIub25Db250cm9sRG9uZSh0YXNrLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhcnNlQ29udHJvbFJlc3BvbnNlXzEucG9zaXRpdmVJbnRlcm1lZGlhdGUocmVzLmNvZGUpKSB7XG4gICAgICAgICAgICByZXNvbHZlci5vblVuZXhwZWN0ZWRSZXF1ZXN0KHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWdub3JlIGFsbCBvdGhlciBwb3NpdGl2ZSBwcmVsaW1pbmFyeSByZXNwb25zZSBjb2RlcyAoPCAyMDApXG4gICAgfSk7XG59XG5leHBvcnRzLnVwbG9hZEZyb20gPSB1cGxvYWRGcm9tO1xuZnVuY3Rpb24gZG93bmxvYWRUbyhkZXN0aW5hdGlvbiwgY29uZmlnKSB7XG4gICAgaWYgKCFjb25maWcuZnRwLmRhdGFTb2NrZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRG93bmxvYWQgd2lsbCBiZSBpbml0aWF0ZWQgYnV0IG5vIGRhdGEgY29ubmVjdGlvbiBpcyBhdmFpbGFibGUuXCIpO1xuICAgIH1cbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgZGF0YSB0cmFuc21pc3Npb24gYmVnaW5zIGJlZm9yZSB0aGUgY29udHJvbCBzb2NrZXRcbiAgICAvLyByZWNlaXZlcyB0aGUgYW5ub3VuY2VtZW50LiBTdGFydCBsaXN0ZW5pbmcgZm9yIGRhdGEgaW1tZWRpYXRlbHkuXG4gICAgY29uZmlnLmZ0cC5kYXRhU29ja2V0LnBpcGUoZGVzdGluYXRpb24pO1xuICAgIGNvbnN0IHJlc29sdmVyID0gbmV3IFRyYW5zZmVyUmVzb2x2ZXIoY29uZmlnLmZ0cCwgY29uZmlnLnRyYWNrZXIpO1xuICAgIHJldHVybiBjb25maWcuZnRwLmhhbmRsZShjb25maWcuY29tbWFuZCwgKHJlcywgdGFzaykgPT4ge1xuICAgICAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJlc29sdmVyLm9uRXJyb3IodGFzaywgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyZXMuY29kZSA9PT0gMTUwIHx8IHJlcy5jb2RlID09PSAxMjUpIHsgLy8gUmVhZHkgdG8gZG93bmxvYWRcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTb2NrZXQgPSBjb25maWcuZnRwLmRhdGFTb2NrZXQ7XG4gICAgICAgICAgICBpZiAoIWRhdGFTb2NrZXQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlci5vbkVycm9yKHRhc2ssIG5ldyBFcnJvcihcIkRvd25sb2FkIHNob3VsZCBiZWdpbiBidXQgbm8gZGF0YSBjb25uZWN0aW9uIGlzIGF2YWlsYWJsZS5cIikpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5mdHAubG9nKGBEb3dubG9hZGluZyBmcm9tICR7bmV0VXRpbHNfMS5kZXNjcmliZUFkZHJlc3MoZGF0YVNvY2tldCl9ICgke25ldFV0aWxzXzEuZGVzY3JpYmVUTFMoZGF0YVNvY2tldCl9KWApO1xuICAgICAgICAgICAgcmVzb2x2ZXIub25EYXRhU3RhcnQoY29uZmlnLnJlbW90ZVBhdGgsIGNvbmZpZy50eXBlKTtcbiAgICAgICAgICAgIG9uQ29uZGl0aW9uT3JFdmVudChpc1dyaXRhYmxlRmluaXNoZWQoZGVzdGluYXRpb24pLCBkZXN0aW5hdGlvbiwgXCJmaW5pc2hcIiwgKCkgPT4gcmVzb2x2ZXIub25EYXRhRG9uZSh0YXNrKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocmVzLmNvZGUgPT09IDM1MCkgeyAvLyBSZXN0YXJ0aW5nIGF0IHN0YXJ0QXQuXG4gICAgICAgICAgICBjb25maWcuZnRwLnNlbmQoXCJSRVRSIFwiICsgY29uZmlnLnJlbW90ZVBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhcnNlQ29udHJvbFJlc3BvbnNlXzEucG9zaXRpdmVDb21wbGV0aW9uKHJlcy5jb2RlKSkgeyAvLyBUcmFuc2ZlciBjb21wbGV0ZVxuICAgICAgICAgICAgcmVzb2x2ZXIub25Db250cm9sRG9uZSh0YXNrLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhcnNlQ29udHJvbFJlc3BvbnNlXzEucG9zaXRpdmVJbnRlcm1lZGlhdGUocmVzLmNvZGUpKSB7XG4gICAgICAgICAgICByZXNvbHZlci5vblVuZXhwZWN0ZWRSZXF1ZXN0KHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWdub3JlIGFsbCBvdGhlciBwb3NpdGl2ZSBwcmVsaW1pbmFyeSByZXNwb25zZSBjb2RlcyAoPCAyMDApXG4gICAgfSk7XG59XG5leHBvcnRzLmRvd25sb2FkVG8gPSBkb3dubG9hZFRvO1xuLyoqXG4gKiBDYWxscyBhIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGlmIGEgY29uZGl0aW9uIGlzIG1ldCBvciBzdWJzY3JpYmVzIHRvIGFuIGV2ZW50IGFuZCBjYWxsc1xuICogaXQgb25jZSB0aGUgZXZlbnQgaXMgZW1pdHRlZC5cbiAqXG4gKiBAcGFyYW0gY29uZGl0aW9uICBUaGUgY29uZGl0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gZW1pdHRlciAgVGhlIGVtaXR0ZXIgdG8gdXNlIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIEBwYXJhbSBldmVudE5hbWUgIFRoZSBldmVudCB0byBzdWJzY3JpYmUgdG8gaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogQHBhcmFtIGFjdGlvbiAgVGhlIGZ1bmN0aW9uIHRvIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIG9uQ29uZGl0aW9uT3JFdmVudChjb25kaXRpb24sIGVtaXR0ZXIsIGV2ZW50TmFtZSwgYWN0aW9uKSB7XG4gICAgaWYgKGNvbmRpdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICBhY3Rpb24oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVtaXR0ZXIub25jZShldmVudE5hbWUsICgpID0+IGFjdGlvbigpKTtcbiAgICB9XG59XG4vKipcbiAqIERldGVjdCB3aGV0aGVyIGEgd3JpdGFibGUgc3RyZWFtIGlzIGZpbmlzaGVkLCBzdXBwb3J0aW5nIE5vZGUgOC5cbiAqIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvM2UyYTMwMDcxMDdiN2ExMDA3OTRmNGU0YWRiZGUxOTI2M2ZjNzQ2NC9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzI0wyOC1MMzNcbiAqL1xuZnVuY3Rpb24gaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0ud3JpdGFibGVGaW5pc2hlZClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICAgIGlmICghd1N0YXRlIHx8IHdTdGF0ZS5lcnJvcmVkKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHdTdGF0ZS5maW5pc2hlZCB8fCAod1N0YXRlLmVuZGVkICYmIHdTdGF0ZS5sZW5ndGggPT09IDApO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3J5cHRvX2hhc2hfc2hhNTEyID0gcmVxdWlyZSgndHdlZXRuYWNsJykubG93bGV2ZWwuY3J5cHRvX2hhc2g7XG5cbi8qXG4gKiBUaGlzIGZpbGUgaXMgYSAxOjEgcG9ydCBmcm9tIHRoZSBPcGVuQlNEIGJsb3dmaXNoLmMgYW5kIGJjcnlwdF9wYmtkZi5jLiBBcyBhXG4gKiByZXN1bHQsIGl0IHJldGFpbnMgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBhbmQgbGljZW5zZS4gVGhlIHR3byBmaWxlcyBhcmVcbiAqIHVuZGVyIHNsaWdodGx5IGRpZmZlcmVudCAoYnV0IGNvbXBhdGlibGUpIGxpY2Vuc2VzLCBhbmQgYXJlIGhlcmUgY29tYmluZWQgaW5cbiAqIG9uZSBmaWxlLlxuICpcbiAqIENyZWRpdCBmb3IgdGhlIGFjdHVhbCBwb3J0aW5nIHdvcmsgZ29lcyB0bzpcbiAqICBEZXZpIE1hbmRpcmkgPG1lQGRldmkud2ViLmlkPlxuICovXG5cbi8qXG4gKiBUaGUgQmxvd2Zpc2ggcG9ydGlvbnMgYXJlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZTpcbiAqXG4gKiBCbG93ZmlzaCBibG9jayBjaXBoZXIgZm9yIE9wZW5CU0RcbiAqIENvcHlyaWdodCAxOTk3IE5pZWxzIFByb3ZvcyA8cHJvdm9zQHBoeXNuZXQudW5pLWhhbWJ1cmcuZGU+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEltcGxlbWVudGF0aW9uIGFkdmljZSBieSBEYXZpZCBNYXppZXJlcyA8ZG1AbGNzLm1pdC5lZHU+LlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zXG4gKiBhcmUgbWV0OlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzXG4gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUlxuICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFU1xuICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC5cbiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCxcbiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVFxuICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuLypcbiAqIFRoZSBiY3J5cHRfcGJrZGYgcG9ydGlvbnMgYXJlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZTpcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMgVGVkIFVuYW5nc3QgPHRlZHVAb3BlbmJzZC5vcmc+XG4gKlxuICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG4gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlXG4gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXG4gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxuICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xuICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXG4gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRlxuICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbiAqL1xuXG4vKlxuICogUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIChKYXZhc2NyaXB0LXNwZWNpZmljKTpcbiAqXG4gKiBDb3B5cmlnaHQgMjAxNiwgSm95ZW50IEluY1xuICogQXV0aG9yOiBBbGV4IFdpbHNvbiA8YWxleC53aWxzb25Aam95ZW50LmNvbT5cbiAqXG4gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbiAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmVcbiAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVNcbiAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0ZcbiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SXG4gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTXG4gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU5cbiAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GXG4gKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuICovXG5cbi8vIFBvcnRlZCBmcm9tIE9wZW5CU0QgYmNyeXB0X3Bia2RmLmMgdjEuOVxuXG52YXIgQkxGX0ogPSAwO1xuXG52YXIgQmxvd2Zpc2ggPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5TID0gW1xuICAgIG5ldyBVaW50MzJBcnJheShbXG4gICAgICAweGQxMzEwYmE2LCAweDk4ZGZiNWFjLCAweDJmZmQ3MmRiLCAweGQwMWFkZmI3LFxuICAgICAgMHhiOGUxYWZlZCwgMHg2YTI2N2U5NiwgMHhiYTdjOTA0NSwgMHhmMTJjN2Y5OSxcbiAgICAgIDB4MjRhMTk5NDcsIDB4YjM5MTZjZjcsIDB4MDgwMWYyZTIsIDB4ODU4ZWZjMTYsXG4gICAgICAweDYzNjkyMGQ4LCAweDcxNTc0ZTY5LCAweGE0NThmZWEzLCAweGY0OTMzZDdlLFxuICAgICAgMHgwZDk1NzQ4ZiwgMHg3MjhlYjY1OCwgMHg3MThiY2Q1OCwgMHg4MjE1NGFlZSxcbiAgICAgIDB4N2I1NGE0MWQsIDB4YzI1YTU5YjUsIDB4OWMzMGQ1MzksIDB4MmFmMjYwMTMsXG4gICAgICAweGM1ZDFiMDIzLCAweDI4NjA4NWYwLCAweGNhNDE3OTE4LCAweGI4ZGIzOGVmLFxuICAgICAgMHg4ZTc5ZGNiMCwgMHg2MDNhMTgwZSwgMHg2YzllMGU4YiwgMHhiMDFlOGEzZSxcbiAgICAgIDB4ZDcxNTc3YzEsIDB4YmQzMTRiMjcsIDB4NzhhZjJmZGEsIDB4NTU2MDVjNjAsXG4gICAgICAweGU2NTUyNWYzLCAweGFhNTVhYjk0LCAweDU3NDg5ODYyLCAweDYzZTgxNDQwLFxuICAgICAgMHg1NWNhMzk2YSwgMHgyYWFiMTBiNiwgMHhiNGNjNWMzNCwgMHgxMTQxZThjZSxcbiAgICAgIDB4YTE1NDg2YWYsIDB4N2M3MmU5OTMsIDB4YjNlZTE0MTEsIDB4NjM2ZmJjMmEsXG4gICAgICAweDJiYTljNTVkLCAweDc0MTgzMWY2LCAweGNlNWMzZTE2LCAweDliODc5MzFlLFxuICAgICAgMHhhZmQ2YmEzMywgMHg2YzI0Y2Y1YywgMHg3YTMyNTM4MSwgMHgyODk1ODY3NyxcbiAgICAgIDB4M2I4ZjQ4OTgsIDB4NmI0YmI5YWYsIDB4YzRiZmU4MWIsIDB4NjYyODIxOTMsXG4gICAgICAweDYxZDgwOWNjLCAweGZiMjFhOTkxLCAweDQ4N2NhYzYwLCAweDVkZWM4MDMyLFxuICAgICAgMHhlZjg0NWQ1ZCwgMHhlOTg1NzViMSwgMHhkYzI2MjMwMiwgMHhlYjY1MWI4OCxcbiAgICAgIDB4MjM4OTNlODEsIDB4ZDM5NmFjYzUsIDB4MGY2ZDZmZjMsIDB4ODNmNDQyMzksXG4gICAgICAweDJlMGI0NDgyLCAweGE0ODQyMDA0LCAweDY5YzhmMDRhLCAweDllMWY5YjVlLFxuICAgICAgMHgyMWM2Njg0MiwgMHhmNmU5NmM5YSwgMHg2NzBjOWM2MSwgMHhhYmQzODhmMCxcbiAgICAgIDB4NmE1MWEwZDIsIDB4ZDg1NDJmNjgsIDB4OTYwZmE3MjgsIDB4YWI1MTMzYTMsXG4gICAgICAweDZlZWYwYjZjLCAweDEzN2EzYmU0LCAweGJhM2JmMDUwLCAweDdlZmIyYTk4LFxuICAgICAgMHhhMWYxNjUxZCwgMHgzOWFmMDE3NiwgMHg2NmNhNTkzZSwgMHg4MjQzMGU4OCxcbiAgICAgIDB4OGNlZTg2MTksIDB4NDU2ZjlmYjQsIDB4N2Q4NGE1YzMsIDB4M2I4YjVlYmUsXG4gICAgICAweGUwNmY3NWQ4LCAweDg1YzEyMDczLCAweDQwMWE0NDlmLCAweDU2YzE2YWE2LFxuICAgICAgMHg0ZWQzYWE2MiwgMHgzNjNmNzcwNiwgMHgxYmZlZGY3MiwgMHg0MjliMDIzZCxcbiAgICAgIDB4MzdkMGQ3MjQsIDB4ZDAwYTEyNDgsIDB4ZGIwZmVhZDMsIDB4NDlmMWMwOWIsXG4gICAgICAweDA3NTM3MmM5LCAweDgwOTkxYjdiLCAweDI1ZDQ3OWQ4LCAweGY2ZThkZWY3LFxuICAgICAgMHhlM2ZlNTAxYSwgMHhiNjc5NGMzYiwgMHg5NzZjZTBiZCwgMHgwNGMwMDZiYSxcbiAgICAgIDB4YzFhOTRmYjYsIDB4NDA5ZjYwYzQsIDB4NWU1YzllYzIsIDB4MTk2YTI0NjMsXG4gICAgICAweDY4ZmI2ZmFmLCAweDNlNmM1M2I1LCAweDEzMzliMmViLCAweDNiNTJlYzZmLFxuICAgICAgMHg2ZGZjNTExZiwgMHg5YjMwOTUyYywgMHhjYzgxNDU0NCwgMHhhZjVlYmQwOSxcbiAgICAgIDB4YmVlM2QwMDQsIDB4ZGUzMzRhZmQsIDB4NjYwZjI4MDcsIDB4MTkyZTRiYjMsXG4gICAgICAweGMwY2JhODU3LCAweDQ1Yzg3NDBmLCAweGQyMGI1ZjM5LCAweGI5ZDNmYmRiLFxuICAgICAgMHg1NTc5YzBiZCwgMHgxYTYwMzIwYSwgMHhkNmExMDBjNiwgMHg0MDJjNzI3OSxcbiAgICAgIDB4Njc5ZjI1ZmUsIDB4ZmIxZmEzY2MsIDB4OGVhNWU5ZjgsIDB4ZGIzMjIyZjgsXG4gICAgICAweDNjNzUxNmRmLCAweGZkNjE2YjE1LCAweDJmNTAxZWM4LCAweGFkMDU1MmFiLFxuICAgICAgMHgzMjNkYjVmYSwgMHhmZDIzODc2MCwgMHg1MzMxN2I0OCwgMHgzZTAwZGY4MixcbiAgICAgIDB4OWU1YzU3YmIsIDB4Y2E2ZjhjYTAsIDB4MWE4NzU2MmUsIDB4ZGYxNzY5ZGIsXG4gICAgICAweGQ1NDJhOGY2LCAweDI4N2VmZmMzLCAweGFjNjczMmM2LCAweDhjNGY1NTczLFxuICAgICAgMHg2OTViMjdiMCwgMHhiYmNhNThjOCwgMHhlMWZmYTM1ZCwgMHhiOGYwMTFhMCxcbiAgICAgIDB4MTBmYTNkOTgsIDB4ZmQyMTgzYjgsIDB4NGFmY2I1NmMsIDB4MmRkMWQzNWIsXG4gICAgICAweDlhNTNlNDc5LCAweGI2Zjg0NTY1LCAweGQyOGU0OWJjLCAweDRiZmI5NzkwLFxuICAgICAgMHhlMWRkZjJkYSwgMHhhNGNiN2UzMywgMHg2MmZiMTM0MSwgMHhjZWU0YzZlOCxcbiAgICAgIDB4ZWYyMGNhZGEsIDB4MzY3NzRjMDEsIDB4ZDA3ZTllZmUsIDB4MmJmMTFmYjQsXG4gICAgICAweDk1ZGJkYTRkLCAweGFlOTA5MTk4LCAweGVhYWQ4ZTcxLCAweDZiOTNkNWEwLFxuICAgICAgMHhkMDhlZDFkMCwgMHhhZmM3MjVlMCwgMHg4ZTNjNWIyZiwgMHg4ZTc1OTRiNyxcbiAgICAgIDB4OGZmNmUyZmIsIDB4ZjIxMjJiNjQsIDB4ODg4OGI4MTIsIDB4OTAwZGYwMWMsXG4gICAgICAweDRmYWQ1ZWEwLCAweDY4OGZjMzFjLCAweGQxY2ZmMTkxLCAweGIzYThjMWFkLFxuICAgICAgMHgyZjJmMjIxOCwgMHhiZTBlMTc3NywgMHhlYTc1MmRmZSwgMHg4YjAyMWZhMSxcbiAgICAgIDB4ZTVhMGNjMGYsIDB4YjU2Zjc0ZTgsIDB4MThhY2YzZDYsIDB4Y2U4OWUyOTksXG4gICAgICAweGI0YTg0ZmUwLCAweGZkMTNlMGI3LCAweDdjYzQzYjgxLCAweGQyYWRhOGQ5LFxuICAgICAgMHgxNjVmYTI2NiwgMHg4MDk1NzcwNSwgMHg5M2NjNzMxNCwgMHgyMTFhMTQ3NyxcbiAgICAgIDB4ZTZhZDIwNjUsIDB4NzdiNWZhODYsIDB4Yzc1NDQyZjUsIDB4ZmI5ZDM1Y2YsXG4gICAgICAweGViY2RhZjBjLCAweDdiM2U4OWEwLCAweGQ2NDExYmQzLCAweGFlMWU3ZTQ5LFxuICAgICAgMHgwMDI1MGUyZCwgMHgyMDcxYjM1ZSwgMHgyMjY4MDBiYiwgMHg1N2I4ZTBhZixcbiAgICAgIDB4MjQ2NDM2OWIsIDB4ZjAwOWI5MWUsIDB4NTU2MzkxMWQsIDB4NTlkZmE2YWEsXG4gICAgICAweDc4YzE0Mzg5LCAweGQ5NWE1MzdmLCAweDIwN2Q1YmEyLCAweDAyZTViOWM1LFxuICAgICAgMHg4MzI2MDM3NiwgMHg2Mjk1Y2ZhOSwgMHgxMWM4MTk2OCwgMHg0ZTczNGE0MSxcbiAgICAgIDB4YjM0NzJkY2EsIDB4N2IxNGE5NGEsIDB4MWI1MTAwNTIsIDB4OWE1MzI5MTUsXG4gICAgICAweGQ2MGY1NzNmLCAweGJjOWJjNmU0LCAweDJiNjBhNDc2LCAweDgxZTY3NDAwLFxuICAgICAgMHgwOGJhNmZiNSwgMHg1NzFiZTkxZiwgMHhmMjk2ZWM2YiwgMHgyYTBkZDkxNSxcbiAgICAgIDB4YjY2MzY1MjEsIDB4ZTdiOWY5YjYsIDB4ZmYzNDA1MmUsIDB4YzU4NTU2NjQsXG4gICAgICAweDUzYjAyZDVkLCAweGE5OWY4ZmExLCAweDA4YmE0Nzk5LCAweDZlODUwNzZhXSksXG4gICAgbmV3IFVpbnQzMkFycmF5KFtcbiAgICAgIDB4NGI3YTcwZTksIDB4YjViMzI5NDQsIDB4ZGI3NTA5MmUsIDB4YzQxOTI2MjMsXG4gICAgICAweGFkNmVhNmIwLCAweDQ5YTdkZjdkLCAweDljZWU2MGI4LCAweDhmZWRiMjY2LFxuICAgICAgMHhlY2FhOGM3MSwgMHg2OTlhMTdmZiwgMHg1NjY0NTI2YywgMHhjMmIxOWVlMSxcbiAgICAgIDB4MTkzNjAyYTUsIDB4NzUwOTRjMjksIDB4YTA1OTEzNDAsIDB4ZTQxODNhM2UsXG4gICAgICAweDNmNTQ5ODlhLCAweDViNDI5ZDY1LCAweDZiOGZlNGQ2LCAweDk5ZjczZmQ2LFxuICAgICAgMHhhMWQyOWMwNywgMHhlZmU4MzBmNSwgMHg0ZDJkMzhlNiwgMHhmMDI1NWRjMSxcbiAgICAgIDB4NGNkZDIwODYsIDB4ODQ3MGViMjYsIDB4NjM4MmU5YzYsIDB4MDIxZWNjNWUsXG4gICAgICAweDA5Njg2YjNmLCAweDNlYmFlZmM5LCAweDNjOTcxODE0LCAweDZiNmE3MGExLFxuICAgICAgMHg2ODdmMzU4NCwgMHg1MmEwZTI4NiwgMHhiNzljNTMwNSwgMHhhYTUwMDczNyxcbiAgICAgIDB4M2UwNzg0MWMsIDB4N2ZkZWFlNWMsIDB4OGU3ZDQ0ZWMsIDB4NTcxNmYyYjgsXG4gICAgICAweGIwM2FkYTM3LCAweGYwNTAwYzBkLCAweGYwMWMxZjA0LCAweDAyMDBiM2ZmLFxuICAgICAgMHhhZTBjZjUxYSwgMHgzY2I1NzRiMiwgMHgyNTgzN2E1OCwgMHhkYzA5MjFiZCxcbiAgICAgIDB4ZDE5MTEzZjksIDB4N2NhOTJmZjYsIDB4OTQzMjQ3NzMsIDB4MjJmNTQ3MDEsXG4gICAgICAweDNhZTVlNTgxLCAweDM3YzJkYWRjLCAweGM4YjU3NjM0LCAweDlhZjNkZGE3LFxuICAgICAgMHhhOTQ0NjE0NiwgMHgwZmQwMDMwZSwgMHhlY2M4YzczZSwgMHhhNDc1MWU0MSxcbiAgICAgIDB4ZTIzOGNkOTksIDB4M2JlYTBlMmYsIDB4MzI4MGJiYTEsIDB4MTgzZWIzMzEsXG4gICAgICAweDRlNTQ4YjM4LCAweDRmNmRiOTA4LCAweDZmNDIwZDAzLCAweGY2MGEwNGJmLFxuICAgICAgMHgyY2I4MTI5MCwgMHgyNDk3N2M3OSwgMHg1Njc5YjA3MiwgMHhiY2FmODlhZixcbiAgICAgIDB4ZGU5YTc3MWYsIDB4ZDk5MzA4MTAsIDB4YjM4YmFlMTIsIDB4ZGNjZjNmMmUsXG4gICAgICAweDU1MTI3MjFmLCAweDJlNmI3MTI0LCAweDUwMWFkZGU2LCAweDlmODRjZDg3LFxuICAgICAgMHg3YTU4NDcxOCwgMHg3NDA4ZGExNywgMHhiYzlmOWFiYywgMHhlOTRiN2Q4YyxcbiAgICAgIDB4ZWM3YWVjM2EsIDB4ZGI4NTFkZmEsIDB4NjMwOTQzNjYsIDB4YzQ2NGMzZDIsXG4gICAgICAweGVmMWMxODQ3LCAweDMyMTVkOTA4LCAweGRkNDMzYjM3LCAweDI0YzJiYTE2LFxuICAgICAgMHgxMmExNGQ0MywgMHgyYTY1YzQ1MSwgMHg1MDk0MDAwMiwgMHgxMzNhZTRkZCxcbiAgICAgIDB4NzFkZmY4OWUsIDB4MTAzMTRlNTUsIDB4ODFhYzc3ZDYsIDB4NWYxMTE5OWIsXG4gICAgICAweDA0MzU1NmYxLCAweGQ3YTNjNzZiLCAweDNjMTExODNiLCAweDU5MjRhNTA5LFxuICAgICAgMHhmMjhmZTZlZCwgMHg5N2YxZmJmYSwgMHg5ZWJhYmYyYywgMHgxZTE1M2M2ZSxcbiAgICAgIDB4ODZlMzQ1NzAsIDB4ZWFlOTZmYjEsIDB4ODYwZTVlMGEsIDB4NWEzZTJhYjMsXG4gICAgICAweDc3MWZlNzFjLCAweDRlM2QwNmZhLCAweDI5NjVkY2I5LCAweDk5ZTcxZDBmLFxuICAgICAgMHg4MDNlODlkNiwgMHg1MjY2YzgyNSwgMHgyZTRjYzk3OCwgMHg5YzEwYjM2YSxcbiAgICAgIDB4YzYxNTBlYmEsIDB4OTRlMmVhNzgsIDB4YTVmYzNjNTMsIDB4MWUwYTJkZjQsXG4gICAgICAweGYyZjc0ZWE3LCAweDM2MWQyYjNkLCAweDE5MzkyNjBmLCAweDE5YzI3OTYwLFxuICAgICAgMHg1MjIzYTcwOCwgMHhmNzEzMTJiNiwgMHhlYmFkZmU2ZSwgMHhlYWMzMWY2NixcbiAgICAgIDB4ZTNiYzQ1OTUsIDB4YTY3YmM4ODMsIDB4YjE3ZjM3ZDEsIDB4MDE4Y2ZmMjgsXG4gICAgICAweGMzMzJkZGVmLCAweGJlNmM1YWE1LCAweDY1NTgyMTg1LCAweDY4YWI5ODAyLFxuICAgICAgMHhlZWNlYTUwZiwgMHhkYjJmOTUzYiwgMHgyYWVmN2RhZCwgMHg1YjZlMmY4NCxcbiAgICAgIDB4MTUyMWI2MjgsIDB4MjkwNzYxNzAsIDB4ZWNkZDQ3NzUsIDB4NjE5ZjE1MTAsXG4gICAgICAweDEzY2NhODMwLCAweGViNjFiZDk2LCAweDAzMzRmZTFlLCAweGFhMDM2M2NmLFxuICAgICAgMHhiNTczNWM5MCwgMHg0YzcwYTIzOSwgMHhkNTllOWUwYiwgMHhjYmFhZGUxNCxcbiAgICAgIDB4ZWVjYzg2YmMsIDB4NjA2MjJjYTcsIDB4OWNhYjVjYWIsIDB4YjJmMzg0NmUsXG4gICAgICAweDY0OGIxZWFmLCAweDE5YmRmMGNhLCAweGEwMjM2OWI5LCAweDY1NWFiYjUwLFxuICAgICAgMHg0MDY4NWEzMiwgMHgzYzJhYjRiMywgMHgzMTllZTlkNSwgMHhjMDIxYjhmNyxcbiAgICAgIDB4OWI1NDBiMTksIDB4ODc1ZmEwOTksIDB4OTVmNzk5N2UsIDB4NjIzZDdkYTgsXG4gICAgICAweGY4Mzc4ODlhLCAweDk3ZTMyZDc3LCAweDExZWQ5MzVmLCAweDE2NjgxMjgxLFxuICAgICAgMHgwZTM1ODgyOSwgMHhjN2U2MWZkNiwgMHg5NmRlZGZhMSwgMHg3ODU4YmE5OSxcbiAgICAgIDB4NTdmNTg0YTUsIDB4MWIyMjcyNjMsIDB4OWI4M2MzZmYsIDB4MWFjMjQ2OTYsXG4gICAgICAweGNkYjMwYWViLCAweDUzMmUzMDU0LCAweDhmZDk0OGU0LCAweDZkYmMzMTI4LFxuICAgICAgMHg1OGViZjJlZiwgMHgzNGM2ZmZlYSwgMHhmZTI4ZWQ2MSwgMHhlZTdjM2M3MyxcbiAgICAgIDB4NWQ0YTE0ZDksIDB4ZTg2NGI3ZTMsIDB4NDIxMDVkMTQsIDB4MjAzZTEzZTAsXG4gICAgICAweDQ1ZWVlMmI2LCAweGEzYWFhYmVhLCAweGRiNmM0ZjE1LCAweGZhY2I0ZmQwLFxuICAgICAgMHhjNzQyZjQ0MiwgMHhlZjZhYmJiNSwgMHg2NTRmM2IxZCwgMHg0MWNkMjEwNSxcbiAgICAgIDB4ZDgxZTc5OWUsIDB4ODY4NTRkYzcsIDB4ZTQ0YjQ3NmEsIDB4M2Q4MTYyNTAsXG4gICAgICAweGNmNjJhMWYyLCAweDViOGQyNjQ2LCAweGZjODg4M2EwLCAweGMxYzdiNmEzLFxuICAgICAgMHg3ZjE1MjRjMywgMHg2OWNiNzQ5MiwgMHg0Nzg0OGEwYiwgMHg1NjkyYjI4NSxcbiAgICAgIDB4MDk1YmJmMDAsIDB4YWQxOTQ4OWQsIDB4MTQ2MmIxNzQsIDB4MjM4MjBlMDAsXG4gICAgICAweDU4NDI4ZDJhLCAweDBjNTVmNWVhLCAweDFkYWRmNDNlLCAweDIzM2Y3MDYxLFxuICAgICAgMHgzMzcyZjA5MiwgMHg4ZDkzN2U0MSwgMHhkNjVmZWNmMSwgMHg2YzIyM2JkYixcbiAgICAgIDB4N2NkZTM3NTksIDB4Y2JlZTc0NjAsIDB4NDA4NWYyYTcsIDB4Y2U3NzMyNmUsXG4gICAgICAweGE2MDc4MDg0LCAweDE5Zjg1MDllLCAweGU4ZWZkODU1LCAweDYxZDk5NzM1LFxuICAgICAgMHhhOTY5YTdhYSwgMHhjNTBjMDZjMiwgMHg1YTA0YWJmYywgMHg4MDBiY2FkYyxcbiAgICAgIDB4OWU0NDdhMmUsIDB4YzM0NTM0ODQsIDB4ZmRkNTY3MDUsIDB4MGUxZTllYzksXG4gICAgICAweGRiNzNkYmQzLCAweDEwNTU4OGNkLCAweDY3NWZkYTc5LCAweGUzNjc0MzQwLFxuICAgICAgMHhjNWM0MzQ2NSwgMHg3MTNlMzhkOCwgMHgzZDI4Zjg5ZSwgMHhmMTZkZmYyMCxcbiAgICAgIDB4MTUzZTIxZTcsIDB4OGZiMDNkNGEsIDB4ZTZlMzlmMmIsIDB4ZGI4M2FkZjddKSxcbiAgICBuZXcgVWludDMyQXJyYXkoW1xuICAgICAgMHhlOTNkNWE2OCwgMHg5NDgxNDBmNywgMHhmNjRjMjYxYywgMHg5NDY5MjkzNCxcbiAgICAgIDB4NDExNTIwZjcsIDB4NzYwMmQ0ZjcsIDB4YmNmNDZiMmUsIDB4ZDRhMjAwNjgsXG4gICAgICAweGQ0MDgyNDcxLCAweDMzMjBmNDZhLCAweDQzYjdkNGI3LCAweDUwMDA2MWFmLFxuICAgICAgMHgxZTM5ZjYyZSwgMHg5NzI0NDU0NiwgMHgxNDIxNGY3NCwgMHhiZjhiODg0MCxcbiAgICAgIDB4NGQ5NWZjMWQsIDB4OTZiNTkxYWYsIDB4NzBmNGRkZDMsIDB4NjZhMDJmNDUsXG4gICAgICAweGJmYmMwOWVjLCAweDAzYmQ5Nzg1LCAweDdmYWM2ZGQwLCAweDMxY2I4NTA0LFxuICAgICAgMHg5NmViMjdiMywgMHg1NWZkMzk0MSwgMHhkYTI1NDdlNiwgMHhhYmNhMGE5YSxcbiAgICAgIDB4Mjg1MDc4MjUsIDB4NTMwNDI5ZjQsIDB4MGEyYzg2ZGEsIDB4ZTliNjZkZmIsXG4gICAgICAweDY4ZGMxNDYyLCAweGQ3NDg2OTAwLCAweDY4MGVjMGE0LCAweDI3YTE4ZGVlLFxuICAgICAgMHg0ZjNmZmVhMiwgMHhlODg3YWQ4YywgMHhiNThjZTAwNiwgMHg3YWY0ZDZiNixcbiAgICAgIDB4YWFjZTFlN2MsIDB4ZDMzNzVmZWMsIDB4Y2U3OGEzOTksIDB4NDA2YjJhNDIsXG4gICAgICAweDIwZmU5ZTM1LCAweGQ5ZjM4NWI5LCAweGVlMzlkN2FiLCAweDNiMTI0ZThiLFxuICAgICAgMHgxZGM5ZmFmNywgMHg0YjZkMTg1NiwgMHgyNmEzNjYzMSwgMHhlYWUzOTdiMixcbiAgICAgIDB4M2E2ZWZhNzQsIDB4ZGQ1YjQzMzIsIDB4Njg0MWU3ZjcsIDB4Y2E3ODIwZmIsXG4gICAgICAweGZiMGFmNTRlLCAweGQ4ZmViMzk3LCAweDQ1NDA1NmFjLCAweGJhNDg5NTI3LFxuICAgICAgMHg1NTUzM2EzYSwgMHgyMDgzOGQ4NywgMHhmZTZiYTliNywgMHhkMDk2OTU0YixcbiAgICAgIDB4NTVhODY3YmMsIDB4YTExNTlhNTgsIDB4Y2NhOTI5NjMsIDB4OTllMWRiMzMsXG4gICAgICAweGE2MmE0YTU2LCAweDNmMzEyNWY5LCAweDVlZjQ3ZTFjLCAweDkwMjkzMTdjLFxuICAgICAgMHhmZGY4ZTgwMiwgMHgwNDI3MmY3MCwgMHg4MGJiMTU1YywgMHgwNTI4MmNlMyxcbiAgICAgIDB4OTVjMTE1NDgsIDB4ZTRjNjZkMjIsIDB4NDhjMTEzM2YsIDB4YzcwZjg2ZGMsXG4gICAgICAweDA3ZjljOWVlLCAweDQxMDQxZjBmLCAweDQwNDc3OWE0LCAweDVkODg2ZTE3LFxuICAgICAgMHgzMjVmNTFlYiwgMHhkNTliYzBkMSwgMHhmMmJjYzE4ZiwgMHg0MTExMzU2NCxcbiAgICAgIDB4MjU3Yjc4MzQsIDB4NjAyYTljNjAsIDB4ZGZmOGU4YTMsIDB4MWY2MzZjMWIsXG4gICAgICAweDBlMTJiNGMyLCAweDAyZTEzMjllLCAweGFmNjY0ZmQxLCAweGNhZDE4MTE1LFxuICAgICAgMHg2YjIzOTVlMCwgMHgzMzNlOTJlMSwgMHgzYjI0MGI2MiwgMHhlZWJlYjkyMixcbiAgICAgIDB4ODViMmEyMGUsIDB4ZTZiYTBkOTksIDB4ZGU3MjBjOGMsIDB4MmRhMmY3MjgsXG4gICAgICAweGQwMTI3ODQ1LCAweDk1Yjc5NGZkLCAweDY0N2QwODYyLCAweGU3Y2NmNWYwLFxuICAgICAgMHg1NDQ5YTM2ZiwgMHg4NzdkNDhmYSwgMHhjMzlkZmQyNywgMHhmMzNlOGQxZSxcbiAgICAgIDB4MGE0NzYzNDEsIDB4OTkyZWZmNzQsIDB4M2E2ZjZlYWIsIDB4ZjRmOGZkMzcsXG4gICAgICAweGE4MTJkYzYwLCAweGExZWJkZGY4LCAweDk5MWJlMTRjLCAweGRiNmU2YjBkLFxuICAgICAgMHhjNjdiNTUxMCwgMHg2ZDY3MmMzNywgMHgyNzY1ZDQzYiwgMHhkY2QwZTgwNCxcbiAgICAgIDB4ZjEyOTBkYzcsIDB4Y2MwMGZmYTMsIDB4YjUzOTBmOTIsIDB4NjkwZmVkMGIsXG4gICAgICAweDY2N2I5ZmZiLCAweGNlZGI3ZDljLCAweGEwOTFjZjBiLCAweGQ5MTU1ZWEzLFxuICAgICAgMHhiYjEzMmY4OCwgMHg1MTViYWQyNCwgMHg3Yjk0NzliZiwgMHg3NjNiZDZlYixcbiAgICAgIDB4MzczOTJlYjMsIDB4Y2MxMTU5NzksIDB4ODAyNmUyOTcsIDB4ZjQyZTMxMmQsXG4gICAgICAweDY4NDJhZGE3LCAweGM2NmEyYjNiLCAweDEyNzU0Y2NjLCAweDc4MmVmMTFjLFxuICAgICAgMHg2YTEyNDIzNywgMHhiNzkyNTFlNywgMHgwNmExYmJlNiwgMHg0YmZiNjM1MCxcbiAgICAgIDB4MWE2YjEwMTgsIDB4MTFjYWVkZmEsIDB4M2QyNWJkZDgsIDB4ZTJlMWMzYzksXG4gICAgICAweDQ0NDIxNjU5LCAweDBhMTIxMzg2LCAweGQ5MGNlYzZlLCAweGQ1YWJlYTJhLFxuICAgICAgMHg2NGFmNjc0ZSwgMHhkYTg2YTg1ZiwgMHhiZWJmZTk4OCwgMHg2NGU0YzNmZSxcbiAgICAgIDB4OWRiYzgwNTcsIDB4ZjBmN2MwODYsIDB4NjA3ODdiZjgsIDB4NjAwMzYwNGQsXG4gICAgICAweGQxZmQ4MzQ2LCAweGY2MzgxZmIwLCAweDc3NDVhZTA0LCAweGQ3MzZmY2NjLFxuICAgICAgMHg4MzQyNmIzMywgMHhmMDFlYWI3MSwgMHhiMDgwNDE4NywgMHgzYzAwNWU1ZixcbiAgICAgIDB4NzdhMDU3YmUsIDB4YmRlOGFlMjQsIDB4NTU0NjQyOTksIDB4YmY1ODJlNjEsXG4gICAgICAweDRlNThmNDhmLCAweGYyZGRmZGEyLCAweGY0NzRlZjM4LCAweDg3ODliZGMyLFxuICAgICAgMHg1MzY2ZjljMywgMHhjOGIzOGU3NCwgMHhiNDc1ZjI1NSwgMHg0NmZjZDliOSxcbiAgICAgIDB4N2FlYjI2NjEsIDB4OGIxZGRmODQsIDB4ODQ2YTBlNzksIDB4OTE1Zjk1ZTIsXG4gICAgICAweDQ2NmU1OThlLCAweDIwYjQ1NzcwLCAweDhjZDU1NTkxLCAweGM5MDJkZTRjLFxuICAgICAgMHhiOTBiYWNlMSwgMHhiYjgyMDVkMCwgMHgxMWE4NjI0OCwgMHg3NTc0YTk5ZSxcbiAgICAgIDB4Yjc3ZjE5YjYsIDB4ZTBhOWRjMDksIDB4NjYyZDA5YTEsIDB4YzQzMjQ2MzMsXG4gICAgICAweGU4NWExZjAyLCAweDA5ZjBiZThjLCAweDRhOTlhMDI1LCAweDFkNmVmZTEwLFxuICAgICAgMHgxYWI5M2QxZCwgMHgwYmE1YTRkZiwgMHhhMTg2ZjIwZiwgMHgyODY4ZjE2OSxcbiAgICAgIDB4ZGNiN2RhODMsIDB4NTczOTA2ZmUsIDB4YTFlMmNlOWIsIDB4NGZjZDdmNTIsXG4gICAgICAweDUwMTE1ZTAxLCAweGE3MDY4M2ZhLCAweGEwMDJiNWM0LCAweDBkZTZkMDI3LFxuICAgICAgMHg5YWY4OGMyNywgMHg3NzNmODY0MSwgMHhjMzYwNGMwNiwgMHg2MWE4MDZiNSxcbiAgICAgIDB4ZjAxNzdhMjgsIDB4YzBmNTg2ZTAsIDB4MDA2MDU4YWEsIDB4MzBkYzdkNjIsXG4gICAgICAweDExZTY5ZWQ3LCAweDIzMzhlYTYzLCAweDUzYzJkZDk0LCAweGMyYzIxNjM0LFxuICAgICAgMHhiYmNiZWU1NiwgMHg5MGJjYjZkZSwgMHhlYmZjN2RhMSwgMHhjZTU5MWQ3NixcbiAgICAgIDB4NmYwNWU0MDksIDB4NGI3YzAxODgsIDB4Mzk3MjBhM2QsIDB4N2M5MjdjMjQsXG4gICAgICAweDg2ZTM3MjVmLCAweDcyNGQ5ZGI5LCAweDFhYzE1YmI0LCAweGQzOWViOGZjLFxuICAgICAgMHhlZDU0NTU3OCwgMHgwOGZjYTViNSwgMHhkODNkN2NkMywgMHg0ZGFkMGZjNCxcbiAgICAgIDB4MWU1MGVmNWUsIDB4YjE2MWU2ZjgsIDB4YTI4NTE0ZDksIDB4NmM1MTEzM2MsXG4gICAgICAweDZmZDVjN2U3LCAweDU2ZTE0ZWM0LCAweDM2MmFiZmNlLCAweGRkYzZjODM3LFxuICAgICAgMHhkNzlhMzIzNCwgMHg5MjYzODIxMiwgMHg2NzBlZmE4ZSwgMHg0MDYwMDBlMF0pLFxuICAgIG5ldyBVaW50MzJBcnJheShbXG4gICAgICAweDNhMzljZTM3LCAweGQzZmFmNWNmLCAweGFiYzI3NzM3LCAweDVhYzUyZDFiLFxuICAgICAgMHg1Y2IwNjc5ZSwgMHg0ZmEzMzc0MiwgMHhkMzgyMjc0MCwgMHg5OWJjOWJiZSxcbiAgICAgIDB4ZDUxMThlOWQsIDB4YmYwZjczMTUsIDB4ZDYyZDFjN2UsIDB4YzcwMGM0N2IsXG4gICAgICAweGI3OGMxYjZiLCAweDIxYTE5MDQ1LCAweGIyNmViMWJlLCAweDZhMzY2ZWI0LFxuICAgICAgMHg1NzQ4YWIyZiwgMHhiYzk0NmU3OSwgMHhjNmEzNzZkMiwgMHg2NTQ5YzJjOCxcbiAgICAgIDB4NTMwZmY4ZWUsIDB4NDY4ZGRlN2QsIDB4ZDU3MzBhMWQsIDB4NGNkMDRkYzYsXG4gICAgICAweDI5MzliYmRiLCAweGE5YmE0NjUwLCAweGFjOTUyNmU4LCAweGJlNWVlMzA0LFxuICAgICAgMHhhMWZhZDVmMCwgMHg2YTJkNTE5YSwgMHg2M2VmOGNlMiwgMHg5YTg2ZWUyMixcbiAgICAgIDB4YzA4OWMyYjgsIDB4NDMyNDJlZjYsIDB4YTUxZTAzYWEsIDB4OWNmMmQwYTQsXG4gICAgICAweDgzYzA2MWJhLCAweDliZTk2YTRkLCAweDhmZTUxNTUwLCAweGJhNjQ1YmQ2LFxuICAgICAgMHgyODI2YTJmOSwgMHhhNzNhM2FlMSwgMHg0YmE5OTU4NiwgMHhlZjU1NjJlOSxcbiAgICAgIDB4YzcyZmVmZDMsIDB4Zjc1MmY3ZGEsIDB4M2YwNDZmNjksIDB4NzdmYTBhNTksXG4gICAgICAweDgwZTRhOTE1LCAweDg3YjA4NjAxLCAweDliMDllNmFkLCAweDNiM2VlNTkzLFxuICAgICAgMHhlOTkwZmQ1YSwgMHg5ZTM0ZDc5NywgMHgyY2YwYjdkOSwgMHgwMjJiOGI1MSxcbiAgICAgIDB4OTZkNWFjM2EsIDB4MDE3ZGE2N2QsIDB4ZDFjZjNlZDYsIDB4N2M3ZDJkMjgsXG4gICAgICAweDFmOWYyNWNmLCAweGFkZjJiODliLCAweDVhZDZiNDcyLCAweDVhODhmNTRjLFxuICAgICAgMHhlMDI5YWM3MSwgMHhlMDE5YTVlNiwgMHg0N2IwYWNmZCwgMHhlZDkzZmE5YixcbiAgICAgIDB4ZThkM2M0OGQsIDB4MjgzYjU3Y2MsIDB4ZjhkNTY2MjksIDB4NzkxMzJlMjgsXG4gICAgICAweDc4NWYwMTkxLCAweGVkNzU2MDU1LCAweGY3OTYwZTQ0LCAweGUzZDM1ZThjLFxuICAgICAgMHgxNTA1NmRkNCwgMHg4OGY0NmRiYSwgMHgwM2ExNjEyNSwgMHgwNTY0ZjBiZCxcbiAgICAgIDB4YzNlYjllMTUsIDB4M2M5MDU3YTIsIDB4OTcyNzFhZWMsIDB4YTkzYTA3MmEsXG4gICAgICAweDFiM2Y2ZDliLCAweDFlNjMyMWY1LCAweGY1OWM2NmZiLCAweDI2ZGNmMzE5LFxuICAgICAgMHg3NTMzZDkyOCwgMHhiMTU1ZmRmNSwgMHgwMzU2MzQ4MiwgMHg4YWJhM2NiYixcbiAgICAgIDB4Mjg1MTc3MTEsIDB4YzIwYWQ5ZjgsIDB4YWJjYzUxNjcsIDB4Y2NhZDkyNWYsXG4gICAgICAweDRkZTgxNzUxLCAweDM4MzBkYzhlLCAweDM3OWQ1ODYyLCAweDkzMjBmOTkxLFxuICAgICAgMHhlYTdhOTBjMiwgMHhmYjNlN2JjZSwgMHg1MTIxY2U2NCwgMHg3NzRmYmUzMixcbiAgICAgIDB4YThiNmUzN2UsIDB4YzMyOTNkNDYsIDB4NDhkZTUzNjksIDB4NjQxM2U2ODAsXG4gICAgICAweGEyYWUwODEwLCAweGRkNmRiMjI0LCAweDY5ODUyZGZkLCAweDA5MDcyMTY2LFxuICAgICAgMHhiMzlhNDYwYSwgMHg2NDQ1YzBkZCwgMHg1ODZjZGVjZiwgMHgxYzIwYzhhZSxcbiAgICAgIDB4NWJiZWY3ZGQsIDB4MWI1ODhkNDAsIDB4Y2NkMjAxN2YsIDB4NmJiNGUzYmIsXG4gICAgICAweGRkYTI2YTdlLCAweDNhNTlmZjQ1LCAweDNlMzUwYTQ0LCAweGJjYjRjZGQ1LFxuICAgICAgMHg3MmVhY2VhOCwgMHhmYTY0ODRiYiwgMHg4ZDY2MTJhZSwgMHhiZjNjNmY0NyxcbiAgICAgIDB4ZDI5YmU0NjMsIDB4NTQyZjVkOWUsIDB4YWVjMjc3MWIsIDB4ZjY0ZTYzNzAsXG4gICAgICAweDc0MGUwZDhkLCAweGU3NWIxMzU3LCAweGY4NzIxNjcxLCAweGFmNTM3ZDVkLFxuICAgICAgMHg0MDQwY2IwOCwgMHg0ZWI0ZTJjYywgMHgzNGQyNDY2YSwgMHgwMTE1YWY4NCxcbiAgICAgIDB4ZTFiMDA0MjgsIDB4OTU5ODNhMWQsIDB4MDZiODlmYjQsIDB4Y2U2ZWEwNDgsXG4gICAgICAweDZmM2YzYjgyLCAweDM1MjBhYjgyLCAweDAxMWExZDRiLCAweDI3NzIyN2Y4LFxuICAgICAgMHg2MTE1NjBiMSwgMHhlNzkzM2ZkYywgMHhiYjNhNzkyYiwgMHgzNDQ1MjViZCxcbiAgICAgIDB4YTA4ODM5ZTEsIDB4NTFjZTc5NGIsIDB4MmYzMmM5YjcsIDB4YTAxZmJhYzksXG4gICAgICAweGUwMWNjODdlLCAweGJjYzdkMWY2LCAweGNmMDExMWMzLCAweGExZThhYWM3LFxuICAgICAgMHgxYTkwODc0OSwgMHhkNDRmYmQ5YSwgMHhkMGRhZGVjYiwgMHhkNTBhZGEzOCxcbiAgICAgIDB4MDMzOWMzMmEsIDB4YzY5MTM2NjcsIDB4OGRmOTMxN2MsIDB4ZTBiMTJiNGYsXG4gICAgICAweGY3OWU1OWI3LCAweDQzZjViYjNhLCAweGYyZDUxOWZmLCAweDI3ZDk0NTljLFxuICAgICAgMHhiZjk3MjIyYywgMHgxNWU2ZmMyYSwgMHgwZjkxZmM3MSwgMHg5Yjk0MTUyNSxcbiAgICAgIDB4ZmFlNTkzNjEsIDB4Y2ViNjljZWIsIDB4YzJhODY0NTksIDB4MTJiYWE4ZDEsXG4gICAgICAweGI2YzEwNzVlLCAweGUzMDU2YTBjLCAweDEwZDI1MDY1LCAweGNiMDNhNDQyLFxuICAgICAgMHhlMGVjNmUwZSwgMHgxNjk4ZGIzYiwgMHg0Yzk4YTBiZSwgMHgzMjc4ZTk2NCxcbiAgICAgIDB4OWYxZjk1MzIsIDB4ZTBkMzkyZGYsIDB4ZDNhMDM0MmIsIDB4ODk3MWYyMWUsXG4gICAgICAweDFiMGE3NDQxLCAweDRiYTMzNDhjLCAweGM1YmU3MTIwLCAweGMzNzYzMmQ4LFxuICAgICAgMHhkZjM1OWY4ZCwgMHg5Yjk5MmYyZSwgMHhlNjBiNmY0NywgMHgwZmUzZjExZCxcbiAgICAgIDB4ZTU0Y2RhNTQsIDB4MWVkYWQ4OTEsIDB4Y2U2Mjc5Y2YsIDB4Y2QzZTdlNmYsXG4gICAgICAweDE2MThiMTY2LCAweGZkMmMxZDA1LCAweDg0OGZkMmM1LCAweGY2ZmIyMjk5LFxuICAgICAgMHhmNTIzZjM1NywgMHhhNjMyNzYyMywgMHg5M2E4MzUzMSwgMHg1NmNjY2QwMixcbiAgICAgIDB4YWNmMDgxNjIsIDB4NWE3NWViYjUsIDB4NmUxNjM2OTcsIDB4ODhkMjczY2MsXG4gICAgICAweGRlOTY2MjkyLCAweDgxYjk0OWQwLCAweDRjNTA5MDFiLCAweDcxYzY1NjE0LFxuICAgICAgMHhlNmM2YzdiZCwgMHgzMjdhMTQwYSwgMHg0NWUxZDAwNiwgMHhjM2YyN2I5YSxcbiAgICAgIDB4YzlhYTUzZmQsIDB4NjJhODBmMDAsIDB4YmIyNWJmZTIsIDB4MzViZGQyZjYsXG4gICAgICAweDcxMTI2OTA1LCAweGIyMDQwMjIyLCAweGI2Y2JjZjdjLCAweGNkNzY5YzJiLFxuICAgICAgMHg1MzExM2VjMCwgMHgxNjQwZTNkMywgMHgzOGFiYmQ2MCwgMHgyNTQ3YWRmMCxcbiAgICAgIDB4YmEzODIwOWMsIDB4Zjc0NmNlNzYsIDB4NzdhZmExYzUsIDB4MjA3NTYwNjAsXG4gICAgICAweDg1Y2JmZTRlLCAweDhhZTg4ZGQ4LCAweDdhYWFmOWIwLCAweDRjZjlhYTdlLFxuICAgICAgMHgxOTQ4YzI1YywgMHgwMmZiOGE4YywgMHgwMWMzNmFlNCwgMHhkNmViZTFmOSxcbiAgICAgIDB4OTBkNGY4NjksIDB4YTY1Y2RlYTAsIDB4M2YwOTI1MmQsIDB4YzIwOGU2OWYsXG4gICAgICAweGI3NGU2MTMyLCAweGNlNzdlMjViLCAweDU3OGZkZmUzLCAweDNhYzM3MmU2XSlcbiAgICBdO1xuICB0aGlzLlAgPSBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4MjQzZjZhODgsIDB4ODVhMzA4ZDMsIDB4MTMxOThhMmUsIDB4MDM3MDczNDQsXG4gICAgMHhhNDA5MzgyMiwgMHgyOTlmMzFkMCwgMHgwODJlZmE5OCwgMHhlYzRlNmM4OSxcbiAgICAweDQ1MjgyMWU2LCAweDM4ZDAxMzc3LCAweGJlNTQ2NmNmLCAweDM0ZTkwYzZjLFxuICAgIDB4YzBhYzI5YjcsIDB4Yzk3YzUwZGQsIDB4M2Y4NGQ1YjUsIDB4YjU0NzA5MTcsXG4gICAgMHg5MjE2ZDVkOSwgMHg4OTc5ZmIxYl0pO1xufTtcblxuZnVuY3Rpb24gRihTLCB4OCwgaSkge1xuICByZXR1cm4gKCgoU1swXVt4OFtpKzNdXSArXG4gICAgICAgICAgICBTWzFdW3g4W2krMl1dKSBeXG4gICAgICAgICAgICBTWzJdW3g4W2krMV1dKSArXG4gICAgICAgICAgICBTWzNdW3g4W2ldXSk7XG59O1xuXG5CbG93ZmlzaC5wcm90b3R5cGUuZW5jaXBoZXIgPSBmdW5jdGlvbih4LCB4OCkge1xuICBpZiAoeDggPT09IHVuZGVmaW5lZCkge1xuICAgIHg4ID0gbmV3IFVpbnQ4QXJyYXkoeC5idWZmZXIpO1xuICAgIGlmICh4LmJ5dGVPZmZzZXQgIT09IDApXG4gICAgICB4OCA9IHg4LnN1YmFycmF5KHguYnl0ZU9mZnNldCk7XG4gIH1cbiAgeFswXSBePSB0aGlzLlBbMF07XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgMTY7IGkgKz0gMikge1xuICAgIHhbMV0gXj0gRih0aGlzLlMsIHg4LCAwKSBeIHRoaXMuUFtpXTtcbiAgICB4WzBdIF49IEYodGhpcy5TLCB4OCwgNCkgXiB0aGlzLlBbaSsxXTtcbiAgfVxuICB2YXIgdCA9IHhbMF07XG4gIHhbMF0gPSB4WzFdIF4gdGhpcy5QWzE3XTtcbiAgeFsxXSA9IHQ7XG59O1xuXG5CbG93ZmlzaC5wcm90b3R5cGUuZGVjaXBoZXIgPSBmdW5jdGlvbih4KSB7XG4gIHZhciB4OCA9IG5ldyBVaW50OEFycmF5KHguYnVmZmVyKTtcbiAgaWYgKHguYnl0ZU9mZnNldCAhPT0gMClcbiAgICB4OCA9IHg4LnN1YmFycmF5KHguYnl0ZU9mZnNldCk7XG4gIHhbMF0gXj0gdGhpcy5QWzE3XTtcbiAgZm9yICh2YXIgaSA9IDE2OyBpID4gMDsgaSAtPSAyKSB7XG4gICAgeFsxXSBePSBGKHRoaXMuUywgeDgsIDApIF4gdGhpcy5QW2ldO1xuICAgIHhbMF0gXj0gRih0aGlzLlMsIHg4LCA0KSBeIHRoaXMuUFtpLTFdO1xuICB9XG4gIHZhciB0ID0geFswXTtcbiAgeFswXSA9IHhbMV0gXiB0aGlzLlBbMF07XG4gIHhbMV0gPSB0O1xufTtcblxuZnVuY3Rpb24gc3RyZWFtMndvcmQoZGF0YSwgZGF0YWJ5dGVzKXtcbiAgdmFyIGksIHRlbXAgPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrLCBCTEZfSisrKSB7XG4gICAgaWYgKEJMRl9KID49IGRhdGFieXRlcykgQkxGX0ogPSAwO1xuICAgIHRlbXAgPSAodGVtcCA8PCA4KSB8IGRhdGFbQkxGX0pdO1xuICB9XG4gIHJldHVybiB0ZW1wO1xufTtcblxuQmxvd2Zpc2gucHJvdG90eXBlLmV4cGFuZDBzdGF0ZSA9IGZ1bmN0aW9uKGtleSwga2V5Ynl0ZXMpIHtcbiAgdmFyIGQgPSBuZXcgVWludDMyQXJyYXkoMiksIGksIGs7XG4gIHZhciBkOCA9IG5ldyBVaW50OEFycmF5KGQuYnVmZmVyKTtcblxuICBmb3IgKGkgPSAwLCBCTEZfSiA9IDA7IGkgPCAxODsgaSsrKSB7XG4gICAgdGhpcy5QW2ldIF49IHN0cmVhbTJ3b3JkKGtleSwga2V5Ynl0ZXMpO1xuICB9XG4gIEJMRl9KID0gMDtcblxuICBmb3IgKGkgPSAwOyBpIDwgMTg7IGkgKz0gMikge1xuICAgIHRoaXMuZW5jaXBoZXIoZCwgZDgpO1xuICAgIHRoaXMuUFtpXSAgID0gZFswXTtcbiAgICB0aGlzLlBbaSsxXSA9IGRbMV07XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgZm9yIChrID0gMDsgayA8IDI1NjsgayArPSAyKSB7XG4gICAgICB0aGlzLmVuY2lwaGVyKGQsIGQ4KTtcbiAgICAgIHRoaXMuU1tpXVtrXSAgID0gZFswXTtcbiAgICAgIHRoaXMuU1tpXVtrKzFdID0gZFsxXTtcbiAgICB9XG4gIH1cbn07XG5cbkJsb3dmaXNoLnByb3RvdHlwZS5leHBhbmRzdGF0ZSA9IGZ1bmN0aW9uKGRhdGEsIGRhdGFieXRlcywga2V5LCBrZXlieXRlcykge1xuICB2YXIgZCA9IG5ldyBVaW50MzJBcnJheSgyKSwgaSwgaztcblxuICBmb3IgKGkgPSAwLCBCTEZfSiA9IDA7IGkgPCAxODsgaSsrKSB7XG4gICAgdGhpcy5QW2ldIF49IHN0cmVhbTJ3b3JkKGtleSwga2V5Ynl0ZXMpO1xuICB9XG5cbiAgZm9yIChpID0gMCwgQkxGX0ogPSAwOyBpIDwgMTg7IGkgKz0gMikge1xuICAgIGRbMF0gXj0gc3RyZWFtMndvcmQoZGF0YSwgZGF0YWJ5dGVzKTtcbiAgICBkWzFdIF49IHN0cmVhbTJ3b3JkKGRhdGEsIGRhdGFieXRlcyk7XG4gICAgdGhpcy5lbmNpcGhlcihkKTtcbiAgICB0aGlzLlBbaV0gICA9IGRbMF07XG4gICAgdGhpcy5QW2krMV0gPSBkWzFdO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIGZvciAoayA9IDA7IGsgPCAyNTY7IGsgKz0gMikge1xuICAgICAgZFswXSBePSBzdHJlYW0yd29yZChkYXRhLCBkYXRhYnl0ZXMpO1xuICAgICAgZFsxXSBePSBzdHJlYW0yd29yZChkYXRhLCBkYXRhYnl0ZXMpO1xuICAgICAgdGhpcy5lbmNpcGhlcihkKTtcbiAgICAgIHRoaXMuU1tpXVtrXSAgID0gZFswXTtcbiAgICAgIHRoaXMuU1tpXVtrKzFdID0gZFsxXTtcbiAgICB9XG4gIH1cbiAgQkxGX0ogPSAwO1xufTtcblxuQmxvd2Zpc2gucHJvdG90eXBlLmVuYyA9IGZ1bmN0aW9uKGRhdGEsIGJsb2Nrcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrczsgaSsrKSB7XG4gICAgdGhpcy5lbmNpcGhlcihkYXRhLnN1YmFycmF5KGkqMikpO1xuICB9XG59O1xuXG5CbG93ZmlzaC5wcm90b3R5cGUuZGVjID0gZnVuY3Rpb24oZGF0YSwgYmxvY2tzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tzOyBpKyspIHtcbiAgICB0aGlzLmRlY2lwaGVyKGRhdGEuc3ViYXJyYXkoaSoyKSk7XG4gIH1cbn07XG5cbnZhciBCQ1JZUFRfQkxPQ0tTID0gOCxcbiAgICBCQ1JZUFRfSEFTSFNJWkUgPSAzMjtcblxuZnVuY3Rpb24gYmNyeXB0X2hhc2goc2hhMnBhc3MsIHNoYTJzYWx0LCBvdXQpIHtcbiAgdmFyIHN0YXRlID0gbmV3IEJsb3dmaXNoKCksXG4gICAgICBjZGF0YSA9IG5ldyBVaW50MzJBcnJheShCQ1JZUFRfQkxPQ0tTKSwgaSxcbiAgICAgIGNpcGhlcnRleHQgPSBuZXcgVWludDhBcnJheShbNzksMTIwLDEyMSw5OSwxMDQsMTE0LDExMSwxMDksOTcsMTE2LDEwNSxcbiAgICAgICAgICAgIDk5LDY2LDEwOCwxMTEsMTE5LDEwMiwxMDUsMTE1LDEwNCw4MywxMTksOTcsMTE2LDY4LDEyMSwxMTAsOTcsMTA5LFxuICAgICAgICAgICAgMTA1LDExNiwxMDFdKTsgLy9cIk94eWNocm9tYXRpY0Jsb3dmaXNoU3dhdER5bmFtaXRlXCJcblxuICBzdGF0ZS5leHBhbmRzdGF0ZShzaGEyc2FsdCwgNjQsIHNoYTJwYXNzLCA2NCk7XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG4gICAgc3RhdGUuZXhwYW5kMHN0YXRlKHNoYTJzYWx0LCA2NCk7XG4gICAgc3RhdGUuZXhwYW5kMHN0YXRlKHNoYTJwYXNzLCA2NCk7XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgQkNSWVBUX0JMT0NLUzsgaSsrKVxuICAgIGNkYXRhW2ldID0gc3RyZWFtMndvcmQoY2lwaGVydGV4dCwgY2lwaGVydGV4dC5ieXRlTGVuZ3RoKTtcbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspXG4gICAgc3RhdGUuZW5jKGNkYXRhLCBjZGF0YS5ieXRlTGVuZ3RoIC8gOCk7XG5cbiAgZm9yIChpID0gMDsgaSA8IEJDUllQVF9CTE9DS1M7IGkrKykge1xuICAgIG91dFs0KmkrM10gPSBjZGF0YVtpXSA+Pj4gMjQ7XG4gICAgb3V0WzQqaSsyXSA9IGNkYXRhW2ldID4+PiAxNjtcbiAgICBvdXRbNCppKzFdID0gY2RhdGFbaV0gPj4+IDg7XG4gICAgb3V0WzQqaSswXSA9IGNkYXRhW2ldO1xuICB9XG59O1xuXG5mdW5jdGlvbiBiY3J5cHRfcGJrZGYocGFzcywgcGFzc2xlbiwgc2FsdCwgc2FsdGxlbiwga2V5LCBrZXlsZW4sIHJvdW5kcykge1xuICB2YXIgc2hhMnBhc3MgPSBuZXcgVWludDhBcnJheSg2NCksXG4gICAgICBzaGEyc2FsdCA9IG5ldyBVaW50OEFycmF5KDY0KSxcbiAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KEJDUllQVF9IQVNIU0laRSksXG4gICAgICB0bXBvdXQgPSBuZXcgVWludDhBcnJheShCQ1JZUFRfSEFTSFNJWkUpLFxuICAgICAgY291bnRzYWx0ID0gbmV3IFVpbnQ4QXJyYXkoc2FsdGxlbis0KSxcbiAgICAgIGksIGosIGFtdCwgc3RyaWRlLCBkZXN0LCBjb3VudCxcbiAgICAgIG9yaWdrZXlsZW4gPSBrZXlsZW47XG5cbiAgaWYgKHJvdW5kcyA8IDEpXG4gICAgcmV0dXJuIC0xO1xuICBpZiAocGFzc2xlbiA9PT0gMCB8fCBzYWx0bGVuID09PSAwIHx8IGtleWxlbiA9PT0gMCB8fFxuICAgICAga2V5bGVuID4gKG91dC5ieXRlTGVuZ3RoICogb3V0LmJ5dGVMZW5ndGgpIHx8IHNhbHRsZW4gPiAoMTw8MjApKVxuICAgIHJldHVybiAtMTtcblxuICBzdHJpZGUgPSBNYXRoLmZsb29yKChrZXlsZW4gKyBvdXQuYnl0ZUxlbmd0aCAtIDEpIC8gb3V0LmJ5dGVMZW5ndGgpO1xuICBhbXQgPSBNYXRoLmZsb29yKChrZXlsZW4gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZSk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNhbHRsZW47IGkrKylcbiAgICBjb3VudHNhbHRbaV0gPSBzYWx0W2ldO1xuXG4gIGNyeXB0b19oYXNoX3NoYTUxMihzaGEycGFzcywgcGFzcywgcGFzc2xlbik7XG5cbiAgZm9yIChjb3VudCA9IDE7IGtleWxlbiA+IDA7IGNvdW50KyspIHtcbiAgICBjb3VudHNhbHRbc2FsdGxlbiswXSA9IGNvdW50ID4+PiAyNDtcbiAgICBjb3VudHNhbHRbc2FsdGxlbisxXSA9IGNvdW50ID4+PiAxNjtcbiAgICBjb3VudHNhbHRbc2FsdGxlbisyXSA9IGNvdW50ID4+PiAgODtcbiAgICBjb3VudHNhbHRbc2FsdGxlbiszXSA9IGNvdW50O1xuXG4gICAgY3J5cHRvX2hhc2hfc2hhNTEyKHNoYTJzYWx0LCBjb3VudHNhbHQsIHNhbHRsZW4gKyA0KTtcbiAgICBiY3J5cHRfaGFzaChzaGEycGFzcywgc2hhMnNhbHQsIHRtcG91dCk7XG4gICAgZm9yIChpID0gb3V0LmJ5dGVMZW5ndGg7IGktLTspXG4gICAgICBvdXRbaV0gPSB0bXBvdXRbaV07XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgcm91bmRzOyBpKyspIHtcbiAgICAgIGNyeXB0b19oYXNoX3NoYTUxMihzaGEyc2FsdCwgdG1wb3V0LCB0bXBvdXQuYnl0ZUxlbmd0aCk7XG4gICAgICBiY3J5cHRfaGFzaChzaGEycGFzcywgc2hhMnNhbHQsIHRtcG91dCk7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgb3V0LmJ5dGVMZW5ndGg7IGorKylcbiAgICAgICAgb3V0W2pdIF49IHRtcG91dFtqXTtcbiAgICB9XG5cbiAgICBhbXQgPSBNYXRoLm1pbihhbXQsIGtleWxlbik7XG4gICAgZm9yIChpID0gMDsgaSA8IGFtdDsgaSsrKSB7XG4gICAgICBkZXN0ID0gaSAqIHN0cmlkZSArIChjb3VudCAtIDEpO1xuICAgICAgaWYgKGRlc3QgPj0gb3JpZ2tleWxlbilcbiAgICAgICAgYnJlYWs7XG4gICAgICBrZXlbZGVzdF0gPSBvdXRbaV07XG4gICAgfVxuICAgIGtleWxlbiAtPSBpO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgIEJMT0NLUzogQkNSWVBUX0JMT0NLUyxcbiAgICAgIEhBU0hTSVpFOiBCQ1JZUFRfSEFTSFNJWkUsXG4gICAgICBoYXNoOiBiY3J5cHRfaGFzaCxcbiAgICAgIHBia2RmOiBiY3J5cHRfcGJrZGZcbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbnZhciBzYWZlciA9IHt9XG5cbnZhciBrZXlcblxuZm9yIChrZXkgaW4gYnVmZmVyKSB7XG4gIGlmICghYnVmZmVyLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlXG4gIGlmIChrZXkgPT09ICdTbG93QnVmZmVyJyB8fCBrZXkgPT09ICdCdWZmZXInKSBjb250aW51ZVxuICBzYWZlcltrZXldID0gYnVmZmVyW2tleV1cbn1cblxudmFyIFNhZmVyID0gc2FmZXIuQnVmZmVyID0ge31cbmZvciAoa2V5IGluIEJ1ZmZlcikge1xuICBpZiAoIUJ1ZmZlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSBjb250aW51ZVxuICBpZiAoa2V5ID09PSAnYWxsb2NVbnNhZmUnIHx8IGtleSA9PT0gJ2FsbG9jVW5zYWZlU2xvdycpIGNvbnRpbnVlXG4gIFNhZmVyW2tleV0gPSBCdWZmZXJba2V5XVxufVxuXG5zYWZlci5CdWZmZXIucHJvdG90eXBlID0gQnVmZmVyLnByb3RvdHlwZVxuXG5pZiAoIVNhZmVyLmZyb20gfHwgU2FmZXIuZnJvbSA9PT0gVWludDhBcnJheS5mcm9tKSB7XG4gIFNhZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgdmFsdWUpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiB2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG59XG5cbmlmICghU2FmZXIuYWxsb2MpIHtcbiAgU2FmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHNpemUpXG4gICAgfVxuICAgIGlmIChzaXplIDwgMCB8fCBzaXplID49IDIgKiAoMSA8PCAzMCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICAgIH1cbiAgICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gICAgaWYgKCFmaWxsIHx8IGZpbGwubGVuZ3RoID09PSAwKSB7XG4gICAgICBidWYuZmlsbCgwKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICAgIHJldHVybiBidWZcbiAgfVxufVxuXG5pZiAoIXNhZmVyLmtTdHJpbmdNYXhMZW5ndGgpIHtcbiAgdHJ5IHtcbiAgICBzYWZlci5rU3RyaW5nTWF4TGVuZ3RoID0gcHJvY2Vzcy5iaW5kaW5nKCdidWZmZXInKS5rU3RyaW5nTWF4TGVuZ3RoXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyB3ZSBjYW4ndCBkZXRlcm1pbmUga1N0cmluZ01heExlbmd0aCBpbiBlbnZpcm9ubWVudHMgd2hlcmUgcHJvY2Vzcy5iaW5kaW5nXG4gICAgLy8gaXMgdW5zdXBwb3J0ZWQsIHNvIGxldCdzIG5vdCBzZXQgaXRcbiAgfVxufVxuXG5pZiAoIXNhZmVyLmNvbnN0YW50cykge1xuICBzYWZlci5jb25zdGFudHMgPSB7XG4gICAgTUFYX0xFTkdUSDogc2FmZXIua01heExlbmd0aFxuICB9XG4gIGlmIChzYWZlci5rU3RyaW5nTWF4TGVuZ3RoKSB7XG4gICAgc2FmZXIuY29uc3RhbnRzLk1BWF9TVFJJTkdfTEVOR1RIID0gc2FmZXIua1N0cmluZ01heExlbmd0aFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2FmZXJcbiIsIi8qXG4gIEJhc2VkIGhlYXZpbHkgb24gdGhlIFN0cmVhbWluZyBCb3llci1Nb29yZS1Ib3JzcG9vbCBDKysgaW1wbGVtZW50YXRpb25cbiAgYnkgSG9uZ2xpIExhaSBhdDogaHR0cHM6Ly9naXRodWIuY29tL0Zvb0JhcldpZGdldC9ib3llci1tb29yZS1ob3JzcG9vbFxuKi9cbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIsXG4gICAgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG5cbmZ1bmN0aW9uIGpzbWVtY21wKGJ1ZjEsIHBvczEsIGJ1ZjIsIHBvczIsIG51bSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG51bTsgKytpLCArK3BvczEsICsrcG9zMilcbiAgICBpZiAoYnVmMVtwb3MxXSAhPT0gYnVmMltwb3MyXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIFNCTUgobmVlZGxlKSB7XG4gIGlmICh0eXBlb2YgbmVlZGxlID09PSAnc3RyaW5nJylcbiAgICBuZWVkbGUgPSBuZXcgQnVmZmVyKG5lZWRsZSk7XG4gIHZhciBpLCBqLCBuZWVkbGVfbGVuID0gbmVlZGxlLmxlbmd0aDtcblxuICB0aGlzLm1heE1hdGNoZXMgPSBJbmZpbml0eTtcbiAgdGhpcy5tYXRjaGVzID0gMDtcblxuICB0aGlzLl9vY2MgPSBuZXcgQXJyYXkoMjU2KTtcbiAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMDtcbiAgdGhpcy5fbmVlZGxlID0gbmVlZGxlO1xuICB0aGlzLl9idWZwb3MgPSAwO1xuXG4gIHRoaXMuX2xvb2tiZWhpbmQgPSBuZXcgQnVmZmVyKG5lZWRsZV9sZW4pO1xuXG4gIC8vIEluaXRpYWxpemUgb2NjdXJyZW5jZSB0YWJsZS5cbiAgZm9yIChqID0gMDsgaiA8IDI1NjsgKytqKVxuICAgIHRoaXMuX29jY1tqXSA9IG5lZWRsZV9sZW47XG5cbiAgLy8gUG9wdWxhdGUgb2NjdXJyZW5jZSB0YWJsZSB3aXRoIGFuYWx5c2lzIG9mIHRoZSBuZWVkbGUsXG4gIC8vIGlnbm9yaW5nIGxhc3QgbGV0dGVyLlxuICBpZiAobmVlZGxlX2xlbiA+PSAxKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG5lZWRsZV9sZW4gLSAxOyArK2kpXG4gICAgICB0aGlzLl9vY2NbbmVlZGxlW2ldXSA9IG5lZWRsZV9sZW4gLSAxIC0gaTtcbiAgfVxufVxuaW5oZXJpdHMoU0JNSCwgRXZlbnRFbWl0dGVyKTtcblxuU0JNSC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMDtcbiAgdGhpcy5tYXRjaGVzID0gMDtcbiAgdGhpcy5fYnVmcG9zID0gMDtcbn07XG5cblNCTUgucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihjaHVuaywgcG9zKSB7XG4gIHZhciByLCBjaGxlbjtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKVxuICAgIGNodW5rID0gbmV3IEJ1ZmZlcihjaHVuaywgJ2JpbmFyeScpO1xuICBjaGxlbiA9IGNodW5rLmxlbmd0aDtcbiAgdGhpcy5fYnVmcG9zID0gcG9zIHx8IDA7XG4gIHdoaWxlIChyICE9PSBjaGxlbiAmJiB0aGlzLm1hdGNoZXMgPCB0aGlzLm1heE1hdGNoZXMpXG4gICAgciA9IHRoaXMuX3NibWhfZmVlZChjaHVuayk7XG4gIHJldHVybiByO1xufTtcblxuU0JNSC5wcm90b3R5cGUuX3NibWhfZmVlZCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdmFyIGxlbiA9IGRhdGEubGVuZ3RoLCBuZWVkbGUgPSB0aGlzLl9uZWVkbGUsIG5lZWRsZV9sZW4gPSBuZWVkbGUubGVuZ3RoO1xuXG4gIC8vIFBvc2l0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiBgZGF0YWBcbiAgLy8gICAgICAgICAgIHBvcyA9PSAzIHBvaW50cyB0byBkYXRhWzNdXG4gIC8vIE5lZ2F0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiB0aGUgbG9va2JlaGluZCBidWZmZXJcbiAgLy8gICAgICAgICAgIHBvcyA9PSAtMiBwb2ludHMgdG8gbG9va2JlaGluZFtsb29rYmVoaW5kX3NpemUgLSAyXVxuICB2YXIgcG9zID0gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZSxcbiAgICAgIGxhc3RfbmVlZGxlX2NoYXIgPSBuZWVkbGVbbmVlZGxlX2xlbiAtIDFdLFxuICAgICAgb2NjID0gdGhpcy5fb2NjLFxuICAgICAgbG9va2JlaGluZCA9IHRoaXMuX2xvb2tiZWhpbmQ7XG5cbiAgaWYgKHBvcyA8IDApIHtcbiAgICAvLyBMb29rYmVoaW5kIGJ1ZmZlciBpcyBub3QgZW1wdHkuIFBlcmZvcm0gQm95ZXItTW9vcmUtSG9yc3Bvb2xcbiAgICAvLyBzZWFyY2ggd2l0aCBjaGFyYWN0ZXIgbG9va3VwIGNvZGUgdGhhdCBjb25zaWRlcnMgYm90aCB0aGVcbiAgICAvLyBsb29rYmVoaW5kIGJ1ZmZlciBhbmQgdGhlIGN1cnJlbnQgcm91bmQncyBoYXlzdGFjayBkYXRhLlxuICAgIC8vXG4gICAgLy8gTG9vcCB1bnRpbFxuICAgIC8vICAgdGhlcmUgaXMgYSBtYXRjaC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgd2UndmUgbW92ZWQgcGFzdCB0aGUgcG9zaXRpb24gdGhhdCByZXF1aXJlcyB0aGVcbiAgICAvLyAgIGxvb2tiZWhpbmQgYnVmZmVyLiBJbiB0aGlzIGNhc2Ugd2Ugc3dpdGNoIHRvIHRoZVxuICAgIC8vICAgb3B0aW1pemVkIGxvb3AuXG4gICAgLy8gb3IgdW50aWxcbiAgICAvLyAgIHRoZSBjaGFyYWN0ZXIgdG8gbG9vayBhdCBsaWVzIG91dHNpZGUgdGhlIGhheXN0YWNrLlxuICAgIHdoaWxlIChwb3MgPCAwICYmIHBvcyA8PSBsZW4gLSBuZWVkbGVfbGVuKSB7XG4gICAgICAgdmFyIGNoID0gdGhpcy5fc2JtaF9sb29rdXBfY2hhcihkYXRhLCBwb3MgKyBuZWVkbGVfbGVuIC0gMSk7XG5cbiAgICAgIGlmIChjaCA9PT0gbGFzdF9uZWVkbGVfY2hhclxuICAgICAgICAgICYmIHRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlX2xlbiAtIDEpKSB7XG4gICAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDA7XG4gICAgICAgICsrdGhpcy5tYXRjaGVzO1xuICAgICAgICBpZiAocG9zID4gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZSlcbiAgICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlLCBsb29rYmVoaW5kLCAwLCB0aGlzLl9sb29rYmVoaW5kX3NpemUgKyBwb3MpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5fYnVmcG9zID0gcG9zICsgbmVlZGxlX2xlbjtcbiAgICAgICAgcmV0dXJuIHBvcyArIG5lZWRsZV9sZW47XG4gICAgICB9IGVsc2VcbiAgICAgICAgcG9zICs9IG9jY1tjaF07XG4gICAgfVxuXG4gICAgLy8gTm8gbWF0Y2guXG5cbiAgICBpZiAocG9zIDwgMCkge1xuICAgICAgLy8gVGhlcmUncyB0b28gZmV3IGRhdGEgZm9yIEJveWVyLU1vb3JlLUhvcnNwb29sIHRvIHJ1bixcbiAgICAgIC8vIHNvIGxldCdzIHVzZSBhIGRpZmZlcmVudCBhbGdvcml0aG0gdG8gc2tpcCBhcyBtdWNoIGFzXG4gICAgICAvLyB3ZSBjYW4uXG4gICAgICAvLyBGb3J3YXJkIHBvcyB1bnRpbFxuICAgICAgLy8gICB0aGUgdHJhaWxpbmcgcGFydCBvZiBsb29rYmVoaW5kICsgZGF0YVxuICAgICAgLy8gICBsb29rcyBsaWtlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5lZWRsZVxuICAgICAgLy8gb3IgdW50aWxcbiAgICAgIC8vICAgcG9zID09IDBcbiAgICAgIHdoaWxlIChwb3MgPCAwICYmICF0aGlzLl9zYm1oX21lbWNtcChkYXRhLCBwb3MsIGxlbiAtIHBvcykpXG4gICAgICAgIHBvcysrO1xuICAgIH1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgLy8gRGlzY2FyZCBsb29rYmVoaW5kIGJ1ZmZlci5cbiAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCBsb29rYmVoaW5kLCAwLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpO1xuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3V0IG9mZiBwYXJ0IG9mIHRoZSBsb29rYmVoaW5kIGJ1ZmZlciB0aGF0IGhhc1xuICAgICAgLy8gYmVlbiBwcm9jZXNzZWQgYW5kIGFwcGVuZCB0aGUgZW50aXJlIGhheXN0YWNrXG4gICAgICAvLyBpbnRvIGl0LlxuICAgICAgdmFyIGJ5dGVzVG9DdXRPZmYgPSB0aGlzLl9sb29rYmVoaW5kX3NpemUgKyBwb3M7XG5cbiAgICAgIGlmIChieXRlc1RvQ3V0T2ZmID4gMCkge1xuICAgICAgICAvLyBUaGUgY3V0IG9mZiBkYXRhIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIGxvb2tiZWhpbmQsIDAsIGJ5dGVzVG9DdXRPZmYpO1xuICAgICAgfVxuXG4gICAgICBsb29rYmVoaW5kLmNvcHkobG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZixcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgLSBieXRlc1RvQ3V0T2ZmKTtcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtPSBieXRlc1RvQ3V0T2ZmO1xuXG4gICAgICBkYXRhLmNvcHkobG9va2JlaGluZCwgdGhpcy5fbG9va2JlaGluZF9zaXplKTtcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSArPSBsZW47XG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IGxlbjtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICB9XG5cbiAgaWYgKHBvcyA+PSAwKVxuICAgIHBvcyArPSB0aGlzLl9idWZwb3M7XG5cbiAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm93IGVtcHR5LiBQZXJmb3JtIEJveWVyLU1vb3JlLUhvcnNwb29sXG4gIC8vIHNlYXJjaCB3aXRoIG9wdGltaXplZCBjaGFyYWN0ZXIgbG9va3VwIGNvZGUgdGhhdCBvbmx5IGNvbnNpZGVyc1xuICAvLyB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gIHdoaWxlIChwb3MgPD0gbGVuIC0gbmVlZGxlX2xlbikge1xuICAgIHZhciBjaCA9IGRhdGFbcG9zICsgbmVlZGxlX2xlbiAtIDFdO1xuXG4gICAgaWYgKGNoID09PSBsYXN0X25lZWRsZV9jaGFyXG4gICAgICAgICYmIGRhdGFbcG9zXSA9PT0gbmVlZGxlWzBdXG4gICAgICAgICYmIGpzbWVtY21wKG5lZWRsZSwgMCwgZGF0YSwgcG9zLCBuZWVkbGVfbGVuIC0gMSkpIHtcbiAgICAgICsrdGhpcy5tYXRjaGVzO1xuICAgICAgaWYgKHBvcyA+IDApXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSk7XG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZV9sZW47XG4gICAgICByZXR1cm4gcG9zICsgbmVlZGxlX2xlbjtcbiAgICB9IGVsc2VcbiAgICAgIHBvcyArPSBvY2NbY2hdO1xuICB9XG5cbiAgLy8gVGhlcmUgd2FzIG5vIG1hdGNoLiBJZiB0aGVyZSdzIHRyYWlsaW5nIGhheXN0YWNrIGRhdGEgdGhhdCB3ZSBjYW5ub3RcbiAgLy8gbWF0Y2ggeWV0IHVzaW5nIHRoZSBCb3llci1Nb29yZS1Ib3JzcG9vbCBhbGdvcml0aG0gKGJlY2F1c2UgdGhlIHRyYWlsaW5nXG4gIC8vIGRhdGEgaXMgbGVzcyB0aGFuIHRoZSBuZWVkbGUgc2l6ZSkgdGhlbiBtYXRjaCB1c2luZyBhIG1vZGlmaWVkXG4gIC8vIGFsZ29yaXRobSB0aGF0IHN0YXJ0cyBtYXRjaGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgaW5zdGVhZCBvZiB0aGUgZW5kLlxuICAvLyBXaGF0ZXZlciB0cmFpbGluZyBkYXRhIGlzIGxlZnQgYWZ0ZXIgcnVubmluZyB0aGlzIGFsZ29yaXRobSBpcyBhZGRlZCB0b1xuICAvLyB0aGUgbG9va2JlaGluZCBidWZmZXIuXG4gIGlmIChwb3MgPCBsZW4pIHtcbiAgICB3aGlsZSAocG9zIDwgbGVuICYmIChkYXRhW3Bvc10gIT09IG5lZWRsZVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFqc21lbWNtcChkYXRhLCBwb3MsIG5lZWRsZSwgMCwgbGVuIC0gcG9zKSkpIHtcbiAgICAgICsrcG9zO1xuICAgIH1cbiAgICBpZiAocG9zIDwgbGVuKSB7XG4gICAgICBkYXRhLmNvcHkobG9va2JlaGluZCwgMCwgcG9zLCBwb3MgKyAobGVuIC0gcG9zKSk7XG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSBsZW4gLSBwb3M7XG4gICAgfVxuICB9XG5cbiAgLy8gRXZlcnl0aGluZyB1bnRpbCBwb3MgaXMgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiBuZWVkbGUgZGF0YS5cbiAgaWYgKHBvcyA+IDApXG4gICAgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zIDwgbGVuID8gcG9zIDogbGVuKTtcblxuICB0aGlzLl9idWZwb3MgPSBsZW47XG4gIHJldHVybiBsZW47XG59O1xuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9sb29rdXBfY2hhciA9IGZ1bmN0aW9uKGRhdGEsIHBvcykge1xuICBpZiAocG9zIDwgMClcbiAgICByZXR1cm4gdGhpcy5fbG9va2JlaGluZFt0aGlzLl9sb29rYmVoaW5kX3NpemUgKyBwb3NdO1xuICBlbHNlXG4gICAgcmV0dXJuIGRhdGFbcG9zXTtcbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfbWVtY21wID0gZnVuY3Rpb24oZGF0YSwgcG9zLCBsZW4pIHtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3NibWhfbG9va3VwX2NoYXIoZGF0YSwgcG9zICsgaSkgPT09IHRoaXMuX25lZWRsZVtpXSlcbiAgICAgICsraTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU0JNSDtcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBXcml0YWJsZSwgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0sIGNyZWF0ZVJlYWRTdHJlYW0gfSBmcm9tICdmcyc7XG5cbmltcG9ydCB7XG4gIElDb25maWcsXG4gIElDbGllbnRPcHRpb25zLFxuICBJU3RyYXRlZ2llc01hcCxcbiAgSUZpbGUsXG4gIElDbGllbnRXb3JrZXJHcm91cCxcbiAgSVRyYW5zZmVyUHJvZ3Jlc3NMaXN0ZW5lcixcbiAgSVRyYW5zZmVyLFxuICBJVGFza0hhbmRsZXIsXG4gIElPcHRpb25zLFxuICBJRnRwQ29uZmlnLFxuICBJRnRwT3B0aW9ucyxcbiAgSVNGdHBPcHRpb25zLFxuICBJU0Z0cENvbmZpZyxcbiAgSVRyYW5zZmVyRGlyZWN0aW9uLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU3RyYXRlZ3kgfSBmcm9tICcuL3N0cmF0ZWdpZXMvc3RyYXRlZ3knO1xuaW1wb3J0IHsgVGFza3NNYW5hZ2VyIH0gZnJvbSAnLi90YXNrcyc7XG5pbXBvcnQgeyBGdHBTdHJhdGVneSB9IGZyb20gJy4vc3RyYXRlZ2llcy9mdHAnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBnZXRQYXRoRnJvbVN0cmVhbSwgZ2V0RmlsZVNpemUgfSBmcm9tICcuL3V0aWxzL2ZpbGUnO1xuaW1wb3J0IHsgU2Z0cFN0cmF0ZWd5IH0gZnJvbSAnLi9zdHJhdGVnaWVzL3NmdHAnO1xuXG50eXBlIElDbGllbnRFdmVudHMgPVxuICB8ICdjb25uZWN0J1xuICB8ICdkaXNjb25uZWN0J1xuICB8ICd0cmFuc2Zlci1uZXcnXG4gIHwgJ3RyYW5zZmVyLWFib3J0J1xuICB8ICd0cmFuc2Zlci1maW5pc2gnXG4gIHwgJ3RyYW5zZmVyLXByb2dyZXNzJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENsaWVudCB7XG4gIG9uKGV2ZW50OiAnY29ubmVjdCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpcztcbiAgb24oZXZlbnQ6ICdkaXNjb25uZWN0JywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzO1xuICBvbihldmVudDogJ3RyYW5zZmVyLW5ldycsIGxpc3RlbmVyOiAoZTogSVRyYW5zZmVyKSA9PiB2b2lkKTogdGhpcztcbiAgb24oZXZlbnQ6ICd0cmFuc2Zlci1hYm9ydCcsIGxpc3RlbmVyOiAoLi4uaWRzOiBudW1iZXJbXSkgPT4gdm9pZCk6IHRoaXM7XG4gIG9uKGV2ZW50OiAndHJhbnNmZXItZmluaXNoJywgbGlzdGVuZXI6IChlOiBJVHJhbnNmZXIpID0+IHZvaWQpOiB0aGlzO1xuICBvbihldmVudDogJ3RyYW5zZmVyLXByb2dyZXNzJywgbGlzdGVuZXI6IElUcmFuc2ZlclByb2dyZXNzTGlzdGVuZXIpOiB0aGlzO1xuXG4gIG9uY2UoZXZlbnQ6ICdjb25uZWN0JywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzO1xuICBvbmNlKGV2ZW50OiAnZGlzY29ubmVjdCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpcztcbiAgb25jZShldmVudDogJ3RyYW5zZmVyLW5ldycsIGxpc3RlbmVyOiAoZTogSVRyYW5zZmVyKSA9PiB2b2lkKTogdGhpcztcbiAgb25jZShldmVudDogJ3RyYW5zZmVyLWFib3J0JywgbGlzdGVuZXI6ICguLi5pZHM6IG51bWJlcltdKSA9PiB2b2lkKTogdGhpcztcbiAgb25jZShldmVudDogJ3RyYW5zZmVyLWZpbmlzaCcsIGxpc3RlbmVyOiAoZTogSVRyYW5zZmVyKSA9PiB2b2lkKTogdGhpcztcbiAgb25jZShldmVudDogJ3RyYW5zZmVyLXByb2dyZXNzJywgbGlzdGVuZXI6IElUcmFuc2ZlclByb2dyZXNzTGlzdGVuZXIpOiB0aGlzO1xuXG4gIGFkZExpc3RlbmVyKGV2ZW50OiBJQ2xpZW50RXZlbnRzLCBsaXN0ZW5lcjogRnVuY3Rpb24pOiB0aGlzO1xuICByZW1vdmVMaXN0ZW5lcihldmVudDogSUNsaWVudEV2ZW50cywgbGlzdGVuZXI6IEZ1bmN0aW9uKTogdGhpcztcbn1cblxuLyoqXG4gKiBIaWdoLWxldmVsIEFQSSwgd2hpY2ggaGFuZGxlcyBzdHJhdGVnaWVzLlxuICpcbiAqIEl0IGFsbG93cyB0byBjYWxsIG1ldGhvZHMgYXN5bmNocm9ub3VzbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGllbnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBwcm90ZWN0ZWQgX2NvbmZpZz86IElDb25maWc7XG5cbiAgcHJvdGVjdGVkIF9jb25uZWN0aW9uT3B0aW9ucz86IElPcHRpb25zO1xuXG4gIHByb3RlY3RlZCBvcHRpb25zOiBJQ2xpZW50T3B0aW9ucztcblxuICBwcm90ZWN0ZWQgd29ya2VyczogU3RyYXRlZ3lbXSA9IFtdO1xuXG4gIHByb3RlY3RlZCB0YXNrcyA9IG5ldyBUYXNrc01hbmFnZXI8U3RyYXRlZ3k+KCk7XG5cbiAgcHJvdGVjdGVkIHRyYW5zZmVycyA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7IC8vIHRhc2sgaWQgPT4gd29ya2VyIGluZGV4O1xuXG4gIHByb3RlY3RlZCBzdHJhdGVneTogdHlwZW9mIFN0cmF0ZWd5O1xuXG4gIHByb3RlY3RlZCBzdHJhdGVnaWVzOiBJU3RyYXRlZ2llc01hcCA9IHtcbiAgICBmdHA6IEZ0cFN0cmF0ZWd5LFxuICAgIGZ0cHM6IEZ0cFN0cmF0ZWd5LFxuICAgIHNmdHA6IFNmdHBTdHJhdGVneSxcbiAgfTtcblxuICAvKipcbiAgICogUHJldmlvdXNseSBzZXQgY29uZmlnLlxuICAgKi9cbiAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHNldCBhIHBvb2wgb2YgY2xpZW50cywgd2hpY2ggd2lsbCBjcmVhdGUgbXVsdGlwbGUgY2hhbm5lbHMgZm9yIGZhc3RlciBjb21tdW5pY2F0aW9uLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IElDbGllbnRPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHsgcG9vbDogMSwgLi4ub3B0aW9ucyB9O1xuXG4gICAgdGhpcy50YXNrcy5nZXRXb3JrZXJJbnN0YW5jZSA9IHRoaXMuZ2V0V29ya2VySW5zdGFuY2U7XG4gICAgdGhpcy50YXNrcy53b3JrZXJGaWx0ZXIgPSB0aGlzLndvcmtlckZpbHRlcjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlclByb3RvY29sKHByb3RvY29sOiBzdHJpbmcsIHN0cmF0ZWd5OiB0eXBlb2YgU3RyYXRlZ3kpIHtcbiAgICB0aGlzLnN0cmF0ZWdpZXNbcHJvdG9jb2xdID0gc3RyYXRlZ3k7XG4gIH1cblxuICBwdWJsaWMgdW5yZWdpc3RlclByb3RvY29sKHByb3RvY29sOiBzdHJpbmcpIHtcbiAgICBkZWxldGUgdGhpcy5zdHJhdGVnaWVzW3Byb3RvY29sXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVXb3JrZXIoKSB7XG4gICAgY29uc3QgeyBwcm90b2NvbCB9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLnN0cmF0ZWdpZXNbcHJvdG9jb2xdO1xuXG4gICAgaWYgKCFzdHJhdGVneSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdHJhdGVneSBmb3IgcHJvdG9jb2wgJHtwcm90b2NvbH0gbm90IGZvdW5kLmApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgc3RyYXRlZ3kodGhpcy5jb25maWcsIHRoaXMuX2Nvbm5lY3Rpb25PcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRXb3JrZXJzKCkge1xuICAgIHRoaXMud29ya2Vycy5mb3JFYWNoKHRoaXMuY2xlYXJXb3JrZXJFdmVudHMpO1xuICAgIHRoaXMud29ya2VycyA9IFtdO1xuXG4gICAgY29uc3QgeyBwb29sIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvb2w7IGkrKykge1xuICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy5jcmVhdGVXb3JrZXIoKTtcblxuICAgICAgdGhpcy5oYW5kbGVXb3JrZXJFdmVudHMod29ya2VyKTtcblxuICAgICAgdGhpcy53b3JrZXJzLnB1c2god29ya2VyKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFdvcmtlckdyb3VwcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVdvcmtlckV2ZW50cyA9IChpbnN0YW5jZTogU3RyYXRlZ3kpID0+IHtcbiAgICBpbnN0YW5jZS5vbignY29ubmVjdCcsIHRoaXMub25Db25uZWN0KTtcbiAgICBpbnN0YW5jZS5vbignZGlzY29ubmVjdCcsIHRoaXMub25EaXNjb25uZWN0KTtcbiAgICBpbnN0YW5jZS5vbigncHJvZ3Jlc3MnLCB0aGlzLm9uUHJvZ3Jlc3MpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBjbGVhcldvcmtlckV2ZW50cyA9IChpbnN0YW5jZTogU3RyYXRlZ3kpID0+IHtcbiAgICBpbnN0YW5jZS5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIHRoaXMub25Db25uZWN0KTtcbiAgICBpbnN0YW5jZS5yZW1vdmVMaXN0ZW5lcignZGlzY29ubmVjdCcsIHRoaXMub25EaXNjb25uZWN0KTtcbiAgICBpbnN0YW5jZS5yZW1vdmVMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLm9uUHJvZ3Jlc3MpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBzZXRXb3JrZXJHcm91cHMoKSB7XG4gICAgY29uc3QgeyBwb29sLCB0cmFuc2ZlclBvb2wgfSA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCBncm91cHM6IElDbGllbnRXb3JrZXJHcm91cFtdID0gW107XG5cbiAgICBpZiAoIXRyYW5zZmVyUG9vbCB8fCBwb29sID09PSAxKSB7XG4gICAgICBncm91cHMucHVzaCguLi5yZXBlYXQ8SUNsaWVudFdvcmtlckdyb3VwPignYWxsJywgcG9vbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHMucHVzaCgnbWlzYycsIC4uLnJlcGVhdDxJQ2xpZW50V29ya2VyR3JvdXA+KCd0cmFuc2ZlcicsIHBvb2wgLSAxKSk7XG4gICAgfVxuXG4gICAgdGhpcy50YXNrcy5zZXRXb3JrZXJzKC4uLmdyb3Vwcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0V29ya2VySW5zdGFuY2UgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiB0aGlzLndvcmtlcnNbaW5kZXhdO1xuICB9O1xuXG4gIHByb3RlY3RlZCB3b3JrZXJGaWx0ZXIgPSAod29ya2VyLCBncm91cDogSUNsaWVudFdvcmtlckdyb3VwKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHdvcmtlci5ncm91cCA9PT0gJ2FsbCcgfHxcbiAgICAgICghZ3JvdXAgJiYgd29ya2VyLmdyb3VwID09PSAnbWlzYycpIHx8XG4gICAgICB3b3JrZXIuZ3JvdXAgPT09IGdyb3VwXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogQ29ubmVjdHMgdG8gYSBzZXJ2ZXIuIElmIHlvdSdyZSBhbHJlYWR5IGNvbm5lY3RlZCwgaXQgZGlzY29ubmVjdHMuXG4gICAqXG4gICAqIEl0IHNhdmVzIGBjb25maWdgIGFuZCBgb3B0aW9uc2AsIHNvIHlvdSBjYW4gY2FsbCBpdCB3aXRob3V0IHByb3ZpZGluZyB0aGVzZSBhcmd1bWVudHMgbGF0ZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29ubmVjdChjb25maWc/OiBJRnRwQ29uZmlnLCBvcHRpb25zPzogSUZ0cE9wdGlvbnMpO1xuICBwdWJsaWMgYXN5bmMgY29ubmVjdChjb25maWc/OiBJU0Z0cENvbmZpZywgb3B0aW9ucz86IElTRnRwT3B0aW9ucyk7XG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KGNvbmZpZz86IElDb25maWcsIG9wdGlvbnM/OiBJT3B0aW9ucykge1xuICAgIGlmICghdGhpcy5fY29uZmlnICYmICFjb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uZmlnIG11c3QgYmUgcHJvdmlkZWQhJyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0KCk7XG5cbiAgICBpZiAoY29uZmlnKSB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgaWYgKG9wdGlvbnMpIHRoaXMuX2Nvbm5lY3Rpb25PcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMuc2V0V29ya2VycygpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy53b3JrZXJzLm1hcCgocikgPT4gci5jb25uZWN0KCkpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaXNjb25uZWN0KCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMud29ya2Vycy5tYXAoKHIpID0+IHIuZGlzY29ubmVjdCgpKSk7XG4gIH1cblxuICAvKipcbiAgICogQWJvcnRzIGV2ZXJ5IHByb2NjZXNlZCBhbmQgd2FpdGluZyB0YXNrLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFib3J0KCkge1xuICAgIHRoaXMuZW1pdCgndHJhbnNmZXItYWJvcnQnLCAuLi50aGlzLnRyYW5zZmVycy5rZXlzKCkpO1xuXG4gICAgdGhpcy50YXNrcy5kZWxldGVBbGxUYXNrcygpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy53b3JrZXJzLm1hcCgocikgPT4gci5hYm9ydCgpKSk7XG4gIH1cblxuICAvKipcbiAgICogQWJvcnRzIHNwZWNpZmllZCBmaWxlIHRyYW5zZmVycy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBhYm9ydFRyYW5zZmVyKC4uLnRyYW5zZmVySWRzOiBudW1iZXJbXSkge1xuICAgIGNvbnN0IHdvcmtlckluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgaW5zdGFuY2VzOiBTdHJhdGVneVtdID0gW107XG5cbiAgICB0cmFuc2Zlcklkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgY29uc3Qgd29ya2VySW5kZXggPSB0aGlzLnRyYW5zZmVycy5nZXQoaWQpO1xuXG4gICAgICBpZiAod29ya2VySW5kZXggIT0gbnVsbCkge1xuICAgICAgICBpbnN0YW5jZXMucHVzaCh0aGlzLndvcmtlcnNbd29ya2VySW5kZXhdKTtcbiAgICAgIH1cblxuICAgICAgd29ya2VySW5kZXhlcy5wdXNoKHdvcmtlckluZGV4KTtcblxuICAgICAgdGhpcy5lbWl0KCd0cmFuc2Zlci1hYm9ydCcsIGlkKTtcbiAgICB9KTtcblxuICAgIHRoaXMudGFza3MuZGVsZXRlVGFza3MoLi4udHJhbnNmZXJJZHMpO1xuICAgIHRoaXMudGFza3MucGF1c2VXb3JrZXJzKC4uLndvcmtlckluZGV4ZXMpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoaW5zdGFuY2VzLm1hcCgocikgPT4gci5hYm9ydCgpKSk7XG5cbiAgICB0aGlzLnRhc2tzLnJlc3VtZVdvcmtlcnMoLi4ud29ya2VySW5kZXhlcyk7XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWRzIGEgcmVtb3RlIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBkZXN0IGNhbiBiZSBlaXRoZXIgYFdyaXRhYmxlYCBzdHJlYW0gb3IgcGF0aCBvZiBhIGxvY2FsIGZpbGUuXG4gICAqIEBwYXJhbSBzdGFydEF0IGNhbiBiZSBzZXQgdG8gcmVzdW1lIGRvd25sb2FkLlxuICAgKi9cbiAgcHVibGljIGRvd25sb2FkKFxuICAgIGRlc3Q6IFdyaXRhYmxlIHwgc3RyaW5nLFxuICAgIHJlbW90ZVBhdGg6IHN0cmluZyxcbiAgICBzdGFydEF0PzogbnVtYmVyLFxuICApIHtcbiAgICBsZXQgc3RyZWFtOiBXcml0YWJsZTtcbiAgICBsZXQgbG9jYWxQYXRoOiBzdHJpbmc7XG5cbiAgICBpZiAodHlwZW9mIGRlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShkZXN0LCB7XG4gICAgICAgIGZsYWdzOiBzdGFydEF0ID8gJ2EnIDogJ3cnLFxuICAgICAgICBzdGFydDogc3RhcnRBdCxcbiAgICAgIH0pO1xuXG4gICAgICBsb2NhbFBhdGggPSBkZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0gPSBkZXN0O1xuICAgICAgbG9jYWxQYXRoID0gZ2V0UGF0aEZyb21TdHJlYW0oZGVzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlVHJhbnNmZXIoXG4gICAgICBhc3luYyAoeyBpbnN0YW5jZSwgdGFza0lkIH0pID0+IHtcbiAgICAgICAgY29uc3QgdG90YWxCeXRlcyA9IGF3YWl0IGluc3RhbmNlLnNpemUocmVtb3RlUGF0aCk7XG5cbiAgICAgICAgYXdhaXQgaW5zdGFuY2UuZG93bmxvYWQoc3RyZWFtLCB7XG4gICAgICAgICAgaWQ6IHRhc2tJZCxcbiAgICAgICAgICBzdGFydEF0LFxuICAgICAgICAgIGxvY2FsUGF0aCxcbiAgICAgICAgICByZW1vdGVQYXRoLFxuICAgICAgICAgIHRvdGFsQnl0ZXMsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHsgcmVtb3RlUGF0aCwgbG9jYWxQYXRoIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIGEgbG9jYWwgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZSBjYW4gYmUgZWl0aGVyIGBSZWFkYWJsZWAgc3RyZWFtIG9yIHBhdGggb2YgYSByZW1vdGUgZmlsZS5cbiAgICovXG4gIHB1YmxpYyB1cGxvYWQoc291cmNlOiBSZWFkYWJsZSB8IHN0cmluZywgcmVtb3RlUGF0aDogc3RyaW5nKSB7XG4gICAgbGV0IHN0cmVhbTogUmVhZGFibGU7XG4gICAgbGV0IGxvY2FsUGF0aDogc3RyaW5nO1xuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtKHNvdXJjZSk7XG4gICAgICBsb2NhbFBhdGggPSBzb3VyY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbSA9IHNvdXJjZTtcbiAgICAgIGxvY2FsUGF0aCA9IGdldFBhdGhGcm9tU3RyZWFtKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlVHJhbnNmZXIoXG4gICAgICBhc3luYyAoeyBpbnN0YW5jZSwgdGFza0lkIH0pID0+IHtcbiAgICAgICAgY29uc3QgdG90YWxCeXRlcyA9IGF3YWl0IGdldEZpbGVTaXplKGxvY2FsUGF0aCk7XG5cbiAgICAgICAgYXdhaXQgaW5zdGFuY2UudXBsb2FkKHN0cmVhbSwge1xuICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgbG9jYWxQYXRoLFxuICAgICAgICAgIHJlbW90ZVBhdGgsXG4gICAgICAgICAgdG90YWxCeXRlcyxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgeyByZW1vdGVQYXRoLCBsb2NhbFBhdGggfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIGZpbGVzIGluIGEgZm9sZGVyLlxuICAgKi9cbiAgcHVibGljIGxpc3QocGF0aD86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRhc2tzLmhhbmRsZTxJRmlsZVtdPigoeyBpbnN0YW5jZSB9KSA9PiBpbnN0YW5jZS5saXN0KHBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHNpemUgb2YgYSBmaWxlLlxuICAgKi9cbiAgcHVibGljIHNpemUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuaGFuZGxlPG51bWJlcj4oKHsgaW5zdGFuY2UgfSkgPT4gaW5zdGFuY2Uuc2l6ZShwYXRoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgZmlsZSBvciBhIGZvbGRlciBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgZXhpc3RzKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRhc2tzLmhhbmRsZTxib29sZWFuPigoeyBpbnN0YW5jZSB9KSA9PiBpbnN0YW5jZS5leGlzdHMocGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIGEgZmlsZSBvciBhIGZvbGRlci5cbiAgICogQ2FuIGJlIHVzZWQgdG8gcmVuYW1lLlxuICAgKi9cbiAgcHVibGljIG1vdmUoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRhc2tzLmhhbmRsZSgoeyBpbnN0YW5jZSB9KSA9PiBpbnN0YW5jZS5tb3ZlKHNvdXJjZSwgZGVzdCkpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUZpbGUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuaGFuZGxlKCh7IGluc3RhbmNlIH0pID0+IGluc3RhbmNlLnJlbW92ZUZpbGUocGF0aCkpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUVtcHR5Rm9sZGVyKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRhc2tzLmhhbmRsZSgoeyBpbnN0YW5jZSB9KSA9PlxuICAgICAgaW5zdGFuY2UucmVtb3ZlRW1wdHlGb2xkZXIocGF0aCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZm9sZGVyIGFuZCBhbGwgb2YgaXRzIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRm9sZGVyKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRhc2tzLmhhbmRsZSgoeyBpbnN0YW5jZSB9KSA9PiBpbnN0YW5jZS5yZW1vdmVGb2xkZXIocGF0aCkpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUZvbGRlcihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YXNrcy5oYW5kbGUoKHsgaW5zdGFuY2UgfSkgPT4gaW5zdGFuY2UuY3JlYXRlRm9sZGVyKHBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtcHR5IGZpbGUuIFNpbWlsYXIgdG8gYHRvdWNoYCBpbiBVbml4LlxuICAgKi9cbiAgcHVibGljIGNyZWF0ZUVtcHR5RmlsZShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YXNrcy5oYW5kbGUoKHsgaW5zdGFuY2UgfSkgPT4gaW5zdGFuY2UuY3JlYXRlRW1wdHlGaWxlKHBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICBwdWJsaWMgcHdkKCkge1xuICAgIHJldHVybiB0aGlzLnRhc2tzLmhhbmRsZTxzdHJpbmc+KCh7IGluc3RhbmNlIH0pID0+IGluc3RhbmNlLnB3ZCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHJhdyBjb21tYW5kLiBTdXBwb3J0IG5vdCBndWFyYW50ZWVkLlxuICAgKi9cbiAgcHVibGljIHNlbmQoY29tbWFuZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuaGFuZGxlPHN0cmluZz4oKHsgaW5zdGFuY2UgfSkgPT4gaW5zdGFuY2Uuc2VuZChjb21tYW5kKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Db25uZWN0ID0gKCkgPT4ge1xuICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBvbkRpc2Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgdGhpcy5lbWl0KCdkaXNjb25uZWN0Jyk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIG9uUHJvZ3Jlc3MgPSAoZGF0YSwgcHJvZ3Jlc3MpID0+IHtcbiAgICB0aGlzLmVtaXQoJ3RyYW5zZmVyLXByb2dyZXNzJywgZGF0YSwgcHJvZ3Jlc3MpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVUcmFuc2ZlcihcbiAgICBmbjogSVRhc2tIYW5kbGVyPFN0cmF0ZWd5PixcbiAgICBkaXJlY3Rpb246IElUcmFuc2ZlckRpcmVjdGlvbixcbiAgKSB7XG4gICAgY29uc3QgdGFza0lkID0gdGhpcy50YXNrcy5jcmVhdGVUYXNrSWQoKTtcbiAgICBjb25zdCB0cmFuc2ZlcjogSVRyYW5zZmVyID0geyBpZDogdGFza0lkLCAuLi5kaXJlY3Rpb24gfTtcblxuICAgIHRoaXMudHJhbnNmZXJzLnNldCh0YXNrSWQsIG51bGwpO1xuICAgIHRoaXMuZW1pdCgndHJhbnNmZXItbmV3JywgdHJhbnNmZXIpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudGFza3MuaGFuZGxlKFxuICAgICAgICBhc3luYyAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMudHJhbnNmZXJzLnNldCh0YXNrSWQsIGUud29ya2VySW5kZXgpO1xuXG4gICAgICAgICAgYXdhaXQgZm4oZSk7XG4gICAgICAgIH0sXG4gICAgICAgICd0cmFuc2Zlci10cmFuc2ZlcicsXG4gICAgICAgIHRhc2tJZCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNmZXJzLmRlbGV0ZSh0YXNrSWQpO1xuICAgICAgdGhpcy5lbWl0KCd0cmFuc2Zlci1maW5pc2gnLCB0cmFuc2Zlcik7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDbGllbnQsIEZpbGVJbmZvIH0gZnJvbSAnYmFzaWMtZnRwJztcbmltcG9ydCB7IFdyaXRhYmxlLCBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5cbmltcG9ydCB7IFN0cmF0ZWd5IH0gZnJvbSAnLi9zdHJhdGVneSc7XG5pbXBvcnQge1xuICBJRmlsZSxcbiAgSUZ0cENvbmZpZyxcbiAgSVRyYW5zZmVyT3B0aW9ucyxcbiAgSUZ0cE9wdGlvbnMsXG4gIElUcmFuc2ZlckluZm8sXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRnRwVXRpbHMgfSBmcm9tICcuLi91dGlscy9mdHAnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRnRwU3RyYXRlZ3kge1xuICBjb25maWc6IElGdHBDb25maWc7XG4gIG9wdGlvbnM6IElGdHBPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRnRwU3RyYXRlZ3kgZXh0ZW5kcyBTdHJhdGVneSB7XG4gIHByb3RlY3RlZCBjbGllbnQ6IENsaWVudDtcblxuICBwdWJsaWMgZ2V0IGNvbm5lY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQ/LmNsb3NlZCA9PT0gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzRlRQUygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucHJvdG9jb2wgPT09ICdmdHBzJztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgc29ja2V0KCkge1xuICAgIHJldHVybiB0aGlzLmNsaWVudD8uZnRwPy5zb2NrZXQ7XG4gIH1cblxuICBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLmNsaWVudCkge1xuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgQ2xpZW50KCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jbGllbnQuYWNjZXNzKHtcbiAgICAgIHNlY3VyZTogdGhpcy5pc0ZUUFMsXG4gICAgICBzZWN1cmVPcHRpb25zOiB0aGlzLm9wdGlvbnM/LnNlY3VyZU9wdGlvbnMsXG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICB9KTtcblxuICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpO1xuICB9O1xuXG4gIGRpc2Nvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGVkKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3QnKTtcblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50LmNsb3NlKCk7XG5cbiAgICAgICAgdGhpcy5jbGllbnQuZnRwLnNvY2tldC5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNsaWVudCA9IG51bGw7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIGRvd25sb2FkID0gYXN5bmMgKFxuICAgIGRlc3Q6IFdyaXRhYmxlLFxuICAgIGluZm86IElUcmFuc2ZlckluZm8sXG4gICAgb3B0aW9ucz86IElUcmFuc2Zlck9wdGlvbnMsXG4gICkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVRyYW5zZmVyKFxuICAgICAgKCkgPT4gdGhpcy5jbGllbnQuZG93bmxvYWRUbyhkZXN0LCBpbmZvLnJlbW90ZVBhdGgsIGluZm8uc3RhcnRBdCksXG4gICAgICBpbmZvLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICB9O1xuXG4gIHVwbG9hZCA9IGFzeW5jIChcbiAgICBzb3VyY2U6IFJlYWRhYmxlLFxuICAgIGluZm86IElUcmFuc2ZlckluZm8sXG4gICAgb3B0aW9ucz86IElUcmFuc2Zlck9wdGlvbnMsXG4gICkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVRyYW5zZmVyKFxuICAgICAgKCkgPT4gdGhpcy5jbGllbnQudXBsb2FkRnJvbShzb3VyY2UsIGluZm8ucmVtb3RlUGF0aCksXG4gICAgICBpbmZvLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICB9O1xuXG4gIGxpc3QgPSAocGF0aCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZTxJRmlsZVtdPigoKSA9PlxuICAgICAgdGhpcy5jbGllbnQubGlzdChwYXRoKS50aGVuKChyKSA9PiByLm1hcCh0aGlzLmZvcm1hdEZpbGUpKSxcbiAgICApO1xuICB9O1xuXG4gIHNpemUgPSAocGF0aCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZTxudW1iZXI+KCgpID0+IHRoaXMuY2xpZW50LnNpemUocGF0aCkpO1xuICB9O1xuXG4gIGV4aXN0cyA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jbGllbnQucmVuYW1lKHBhdGgsIHBhdGgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIG1vdmUgPSAoc291cmNlLCBkZXN0KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlKCgpID0+IHRoaXMuY2xpZW50LnJlbmFtZShzb3VyY2UsIGRlc3QpKTtcbiAgfTtcblxuICByZW1vdmVGaWxlID0gKHBhdGgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUoKCkgPT4gdGhpcy5jbGllbnQucmVtb3ZlKHBhdGgpKTtcbiAgfTtcblxuICByZW1vdmVFbXB0eUZvbGRlciA9IChwYXRoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlKCgpID0+IHRoaXMuY2xpZW50LnJlbW92ZUVtcHR5RGlyKHBhdGgpKTtcbiAgfTtcblxuICByZW1vdmVGb2xkZXIgPSAocGF0aCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZSgoKSA9PiB0aGlzLmNsaWVudC5yZW1vdmVEaXIocGF0aCkpO1xuICB9O1xuXG4gIGNyZWF0ZUZvbGRlciA9IGFzeW5jIChwYXRoKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kKGBNS0QgJHtwYXRofWApO1xuICB9O1xuXG4gIGNyZWF0ZUVtcHR5RmlsZSA9IGFzeW5jIChwYXRoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gUmVhZGFibGUuZnJvbSgnXFxuJyk7XG5cbiAgICBhd2FpdCB0aGlzLnVwbG9hZChzb3VyY2UsIHsgcmVtb3RlUGF0aDogcGF0aCB9LCB7IHF1aWV0OiB0cnVlIH0pO1xuICB9O1xuXG4gIHB3ZCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGU8c3RyaW5nPigoKSA9PiB0aGlzLmNsaWVudC5wd2QoKSk7XG4gIH07XG5cbiAgc2VuZCA9IChjb21tYW5kKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlPHN0cmluZz4oKCkgPT5cbiAgICAgIHRoaXMuY2xpZW50LnNlbmQoY29tbWFuZCkudGhlbigocikgPT4gci5tZXNzYWdlKSxcbiAgICApO1xuICB9O1xuXG4gIHByb3RlY3RlZCBmb3JtYXRGaWxlID0gKGZpbGU6IEZpbGVJbmZvKTogSUZpbGUgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GdHBVdGlscy5mb3JtYXRGaWxlKGZpbGUpLFxuICAgICAgbGFzdE1vZGlmaWVkOiBGdHBVdGlscy5nZXRWYWxpZERhdGUoZmlsZS5kYXRlKSxcbiAgICB9O1xuICB9O1xuXG4gIHByb3RlY3RlZCBoYW5kbGUgPSBhc3luYyA8VCA9IHZvaWQ+KGZuOiBGdW5jdGlvbik6IFByb21pc2U8VD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIubWVzc2FnZSBhcyBzdHJpbmc7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWVzc2FnZSAhPT0gJ0NsaWVudCBpcyBjbG9zZWQnICYmXG4gICAgICAgICFtZXNzYWdlLnN0YXJ0c1dpdGgoJ1VzZXIgY2xvc2VkIGNsaWVudCBkdXJpbmcgdGFzaycpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHByb3RlY3RlZCBoYW5kbGVUcmFuc2ZlciA9IGFzeW5jIChcbiAgICBmbjogRnVuY3Rpb24sXG4gICAgaW5mbzogSVRyYW5zZmVySW5mbyxcbiAgICBvcHRpb25zOiBJVHJhbnNmZXJPcHRpb25zLFxuICApID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5wcmVwYXJlVHJhbnNmZXIoaW5mbywgb3B0aW9ucyk7XG5cbiAgICB0aGlzLmNsaWVudC50cmFja1Byb2dyZXNzKChpbmZvKSA9PiBoYW5kbGVyKGluZm8uYnl0ZXMpKTtcblxuICAgIGF3YWl0IHRoaXMuaGFuZGxlKGZuKTtcblxuICAgIHRoaXMuY2xpZW50Py50cmFja1Byb2dyZXNzKHVuZGVmaW5lZCk7XG4gICAgdGhpcy5maW5pc2hUcmFuc2ZlcigpO1xuICB9O1xufVxuIiwiaW1wb3J0IHsgV3JpdGFibGUsIFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgU29ja2V0IH0gZnJvbSAnbmV0JztcbmltcG9ydCB7IENsaWVudCwgU0ZUUFdyYXBwZXIsIENsaWVudENoYW5uZWwgfSBmcm9tICdAb2x6aWUtMTIvc3NoMic7XG5pbXBvcnQgeyBTdGF0cywgRmlsZUVudHJ5IH0gZnJvbSAnQG9semllLTEyL3NzaDItc3RyZWFtcyc7XG5pbXBvcnQgeyBGaWxlSW5mbywgcGFyc2VMaXN0IH0gZnJvbSAnYmFzaWMtZnRwJztcblxuaW1wb3J0IHsgU3RyYXRlZ3kgfSBmcm9tICcuL3N0cmF0ZWd5JztcbmltcG9ydCB7XG4gIElGaWxlLFxuICBJVHJhbnNmZXJPcHRpb25zLFxuICBJRnRwQ29uZmlnLFxuICBJU0Z0cE9wdGlvbnMsXG4gIElUcmFuc2ZlckluZm8sXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRnRwVXRpbHMgfSBmcm9tICcuLi91dGlscy9mdHAnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgU2Z0cFN0cmF0ZWd5IHtcbiAgY29uZmlnOiBJRnRwQ29uZmlnO1xuICBvcHRpb25zOiBJU0Z0cE9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBTZnRwU3RyYXRlZ3kgZXh0ZW5kcyBTdHJhdGVneSB7XG4gIHByb3RlY3RlZCBjbGllbnQ6IENsaWVudDtcblxuICBwcm90ZWN0ZWQgd3JhcHBlcjogU0ZUUFdyYXBwZXI7XG5cbiAgcHVibGljIGNvbm5lY3RlZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBnZXQgc29ja2V0KCk6IFNvY2tldCB7XG4gICAgcmV0dXJuICh0aGlzLmNsaWVudCBhcyBhbnkpLl9zb2NrO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFdyYXBwZXIoKTogU0ZUUFdyYXBwZXIge1xuICAgIHJldHVybiBwcm9taXNpZnkodGhpcy5jbGllbnQuc2Z0cCkuYmluZCh0aGlzLmNsaWVudCkoKTtcbiAgfVxuXG4gIGNvbm5lY3QgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNsaWVudCA9IG5ldyBDbGllbnQoKTtcblxuICAgICAgY29uc3QgY2xlYW4gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICB0aGlzLmNsaWVudC5yZW1vdmVMaXN0ZW5lcigncmVhZHknLCBvblJlYWR5KTtcbiAgICAgICAgdGhpcy5jbGllbnQucmVtb3ZlTGlzdGVuZXIoXG4gICAgICAgICAgJ2tleWJvYXJkLWludGVyYWN0aXZlJyxcbiAgICAgICAgICB0aGlzLm9uS2V5Ym9hcmRJbnRlcmFjdGl2ZSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgICBjbGVhbigpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblJlYWR5ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjbGVhbigpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVyID0gYXdhaXQgdGhpcy5nZXRXcmFwcGVyKCk7XG4gICAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpO1xuXG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBjbGVhbigpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNsaWVudC5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgdGhpcy5jbGllbnQub25jZSgncmVhZHknLCBvblJlYWR5KTtcbiAgICAgIHRoaXMuY2xpZW50Lm9uY2UoJ2VuZCcsIHRoaXMub25EaXNjb25uZWN0KTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucz8udHJ5S2V5Ym9hcmQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQub25jZSgna2V5Ym9hcmQtaW50ZXJhY3RpdmUnLCB0aGlzLm9uS2V5Ym9hcmRJbnRlcmFjdGl2ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xpZW50LmNvbm5lY3Qoe1xuICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMuY29uZmlnLnVzZXIsXG4gICAgICAgIHJlYWR5VGltZW91dDogdGhpcy5vcHRpb25zPy50aW1lb3V0LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIG9uS2V5Ym9hcmRJbnRlcmFjdGl2ZSA9IChcbiAgICBuYW1lLFxuICAgIGluc3RydWN0aW9ucyxcbiAgICBpbnN0cnVjdGlvbnNMYW5nLFxuICAgIHByb21wdHMsXG4gICAgZmluaXNoLFxuICApID0+IHtcbiAgICBmaW5pc2goW3RoaXMuY29uZmlnLnBhc3N3b3JkXSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIG9uRGlzY29ubmVjdCA9ICgpID0+IHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5jbGllbnQgPSBudWxsO1xuICAgIHRoaXMud3JhcHBlciA9IG51bGw7XG5cbiAgICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3QnKTtcbiAgfTtcblxuICBkaXNjb25uZWN0ID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jbGllbnQuZW5kKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBkb3dubG9hZCA9IGFzeW5jIChcbiAgICBkZXN0OiBXcml0YWJsZSxcbiAgICBpbmZvOiBJVHJhbnNmZXJJbmZvLFxuICAgIG9wdGlvbnM/OiBJVHJhbnNmZXJPcHRpb25zLFxuICApID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLndyYXBwZXI/LmNyZWF0ZVJlYWRTdHJlYW0oaW5mby5yZW1vdGVQYXRoLCB7XG4gICAgICBzdGFydDogaW5mby5zdGFydEF0LFxuICAgICAgYXV0b0Nsb3NlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlVHJhbnNmZXIoc291cmNlLCBkZXN0LCBpbmZvLCBvcHRpb25zKTtcbiAgfTtcblxuICB1cGxvYWQgPSBhc3luYyAoXG4gICAgc291cmNlOiBSZWFkYWJsZSxcbiAgICBpbmZvOiBJVHJhbnNmZXJJbmZvLFxuICAgIG9wdGlvbnM/OiBJVHJhbnNmZXJPcHRpb25zLFxuICApID0+IHtcbiAgICBjb25zdCBkZXN0ID0gdGhpcy53cmFwcGVyPy5jcmVhdGVXcml0ZVN0cmVhbShpbmZvLnJlbW90ZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlVHJhbnNmZXIoc291cmNlLCBkZXN0LCBpbmZvLCBvcHRpb25zKTtcbiAgfTtcblxuICBsaXN0ID0gKHBhdGggPSAnLi8nKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3QocGF0aCkudGhlbigoZmlsZXMpID0+XG4gICAgICBmaWxlcz8ubWFwKChyKSA9PiB0aGlzLmZvcm1hdEZpbGUocGFyc2VMaXN0KHIubG9uZ25hbWUpWzBdLCByKSksXG4gICAgKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZm9ybWF0RmlsZSA9IChmaWxlOiBGaWxlSW5mbywgZW50cnk6IEZpbGVFbnRyeSk6IElGaWxlID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uRnRwVXRpbHMuZm9ybWF0RmlsZShmaWxlKSxcbiAgICAgIGxhc3RNb2RpZmllZDogRnRwVXRpbHMuZ2V0RGF0ZUZyb21Vbml4VGltZShlbnRyeS5hdHRycy5tdGltZSksXG4gICAgfTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgX2xpc3QocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlPEZpbGVFbnRyeVtdPih0aGlzLndyYXBwZXI/LnJlYWRkaXIsIHBhdGgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zdGF0KHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZTxTdGF0cz4odGhpcy53cmFwcGVyPy5zdGF0LCBwYXRoKTtcbiAgfVxuXG4gIHNpemUgPSAocGF0aCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0KHBhdGgpLnRoZW4oKHIpID0+IHI/LnNpemUpO1xuICB9O1xuXG4gIGV4aXN0cyA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fc3RhdChwYXRoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBtb3ZlID0gKHNvdXJjZSwgZGVzdCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZSh0aGlzLndyYXBwZXI/LnJlbmFtZSwgc291cmNlLCBkZXN0KTtcbiAgfTtcblxuICByZW1vdmVGaWxlID0gKHBhdGgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUodGhpcy53cmFwcGVyPy51bmxpbmssIHBhdGgpO1xuICB9O1xuXG4gIHJlbW92ZUVtcHR5Rm9sZGVyID0gKHBhdGgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUodGhpcy53cmFwcGVyPy5ybWRpciwgcGF0aCk7XG4gIH07XG5cbiAgcmVtb3ZlRm9sZGVyID0gYXN5bmMgKHBhdGgpID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMuX2xpc3QocGF0aCk7XG5cbiAgICBpZiAoZmlsZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoICsgJy8nICsgZmlsZS5maWxlbmFtZTtcblxuICAgICAgICBpZiAoKGZpbGUuYXR0cnMgYXMgYW55KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVGb2xkZXIoZmlsZVBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlRmlsZShmaWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJlbW92ZUVtcHR5Rm9sZGVyKHBhdGgpO1xuICB9O1xuXG4gIGNyZWF0ZUZvbGRlciA9IChwYXRoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlKHRoaXMud3JhcHBlcj8ubWtkaXIsIHBhdGgpO1xuICB9O1xuXG4gIGNyZWF0ZUVtcHR5RmlsZSA9IGFzeW5jIChwYXRoKSA9PiB7XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy5fb3BlbihwYXRoLCAndycpO1xuXG4gICAgaWYgKGJ1ZmZlcikge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2UoYnVmZmVyKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvdGVjdGVkIF9vcGVuKHBhdGg6IHN0cmluZywgbW9kZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlPEJ1ZmZlcj4odGhpcy53cmFwcGVyPy5vcGVuLCBwYXRoLCBtb2RlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfY2xvc2UoYnVmZmVyOiBCdWZmZXIpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUodGhpcy53cmFwcGVyPy5jbG9zZSwgYnVmZmVyKTtcbiAgfVxuXG4gIHB3ZCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGU8c3RyaW5nPih0aGlzLndyYXBwZXI/LnJlYWxwYXRoLCAnLi8nKTtcbiAgfTtcblxuICBzZW5kID0gYXN5bmMgKGNvbW1hbmQpID0+IHtcbiAgICBsZXQgc3RyZWFtOiBDbGllbnRDaGFubmVsO1xuICAgIGxldCBkYXRhID0gJyc7XG5cbiAgICBhd2FpdCB0aGlzLmhhbmRsZU5ldHdvcmsoXG4gICAgICAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50LmV4ZWMoY29tbWFuZCwgKGVyciwgc3RyZWFtKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuXG4gICAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgICAgIGRhdGEgKz0gY2h1bms7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsIHJlc29sdmUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgICBzdHJlYW0uY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGhhbmRsZSA9IDxUID0gdm9pZD4oZm46IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZU5ldHdvcms8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFmbikgcmV0dXJuIHJlc29sdmUobnVsbCk7XG5cbiAgICAgIGZuLmJpbmQodGhpcy53cmFwcGVyKSguLi5hcmdzLCAoZXJyLCAuLi5kYXRhKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgcmVzb2x2ZSguLi5kYXRhKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHByb3RlY3RlZCBoYW5kbGVUcmFuc2ZlciA9IChcbiAgICBzb3VyY2U6IFJlYWRhYmxlLFxuICAgIGRlc3Q6IFdyaXRhYmxlLFxuICAgIGluZm86IElUcmFuc2ZlckluZm8sXG4gICAgb3B0aW9uczogSVRyYW5zZmVyT3B0aW9ucyxcbiAgKSA9PiB7XG4gICAgaWYgKCFzb3VyY2UgfHwgIWRlc3QpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMucHJlcGFyZVRyYW5zZmVyKGluZm8sIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTmV0d29yayhcbiAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IGJ1ZmZlcmVkID0gMDtcblxuICAgICAgICBzb3VyY2Uub24oJ2RhdGEnLCAoY2h1bms6IEJ1ZmZlcikgPT4ge1xuICAgICAgICAgIGJ1ZmZlcmVkICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaGFuZGxlcihidWZmZXJlZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNvdXJjZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHNvdXJjZS5vbmNlKCdjbG9zZScsIHJlc29sdmUpO1xuXG4gICAgICAgIHNvdXJjZS5waXBlKGRlc3QpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgc291cmNlLnVucGlwZShkZXN0KTtcbiAgICAgICAgc291cmNlLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICB0aGlzLmZpbmlzaFRyYW5zZmVyKCk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG59XG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgV3JpdGFibGUsIFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcblxuaW1wb3J0IHtcbiAgSUZpbGUsXG4gIElUcmFuc2Zlck9wdGlvbnMsXG4gIElUcmFuc2ZlclByb2dyZXNzTGlzdGVuZXIsXG4gIElUcmFuc2ZlckluZm8sXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVHJhbnNmZXIgfSBmcm9tICcuLi90cmFuc2Zlcic7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBTdHJhdGVneSB7XG4gIG9uKGV2ZW50OiAnY29ubmVjdCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpcztcbiAgb24oZXZlbnQ6ICdkaXNjb25uZWN0JywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzO1xuICBvbihldmVudDogJ3Byb2dyZXNzJywgbGlzdGVuZXI6IElUcmFuc2ZlclByb2dyZXNzTGlzdGVuZXIpOiB0aGlzO1xuXG4gIG9uY2UoZXZlbnQ6ICdjb25uZWN0JywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzO1xuICBvbmNlKGV2ZW50OiAnZGlzY29ubmVjdCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpcztcbn1cblxuLyoqXG4gKiBBbiBhYnN0cmFjdCBjbGFzcywgd2hpY2ggYWxsb3dzIHRvIGNyZWF0ZSBhIGN1c3RvbSBwcm90b2NvbC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0cmF0ZWd5IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNvbm5lY3RlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIHRyYW5zZmVyOiBUcmFuc2ZlcjtcblxuICBwdWJsaWMgYWJzdHJhY3QgY29ubmVjdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgZGlzY29ubmVjdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBwdWJsaWMgYXN5bmMgYWJvcnQoKSB7XG4gICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgYXdhaXQgdGhpcy5jb25uZWN0KCk7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgZG93bmxvYWQ6IChcbiAgICBkZXN0OiBXcml0YWJsZSxcbiAgICBpbmZvOiBJVHJhbnNmZXJJbmZvLFxuICAgIG9wdGlvbnM/OiBJVHJhbnNmZXJPcHRpb25zLFxuICApID0+IFByb21pc2U8dm9pZD47XG5cbiAgcHVibGljIGFic3RyYWN0IHVwbG9hZDogKFxuICAgIHNvdXJjZTogUmVhZGFibGUsXG4gICAgaW5mbzogSVRyYW5zZmVySW5mbyxcbiAgICBvcHRpb25zPzogSVRyYW5zZmVyT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBsaXN0OiAocGF0aD86IHN0cmluZykgPT4gUHJvbWlzZTxJRmlsZVtdPjtcblxuICBwdWJsaWMgYWJzdHJhY3Qgc2l6ZTogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTxudW1iZXI+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBleGlzdHM6IChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgcHVibGljIGFic3RyYWN0IG1vdmU6IChzb3VyY2U6IHN0cmluZywgZGVzdDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCByZW1vdmVGaWxlOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCByZW1vdmVFbXB0eUZvbGRlcjogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgcmVtb3ZlRm9sZGVyOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBjcmVhdGVGb2xkZXI6IChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG5cbiAgcHVibGljIGFic3RyYWN0IGNyZWF0ZUVtcHR5RmlsZTogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgcHdkOiAoKSA9PiBQcm9taXNlPHN0cmluZz47XG5cbiAgcHVibGljIGFic3RyYWN0IHNlbmQ6IChjb21tYW5kOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnOiBhbnksXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnM/OiBhbnksXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJlcGFyZVRyYW5zZmVyKGluZm86IElUcmFuc2ZlckluZm8sIG9wdGlvbnM/OiBJVHJhbnNmZXJPcHRpb25zKSB7XG4gICAgdGhpcy50cmFuc2ZlciA9IG5ldyBUcmFuc2ZlcihpbmZvLCBvcHRpb25zLCAoZGF0YSwgcHJvZ3Jlc3MpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCBkYXRhLCBwcm9ncmVzcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2Zlci5oYW5kbGVQcm9ncmVzcztcbiAgfVxuXG4gIHByb3RlY3RlZCBmaW5pc2hUcmFuc2ZlcigpIHtcbiAgICB0aGlzLnRyYW5zZmVyID0gbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVOZXR3b3JrPFQgPSB2b2lkPihjYjogYW55LCBjbGVhbj86IGFueSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBvbkNsZWFuID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdkaXNjb25uZWN0Jywgb25EaXNjb25uZWN0KTtcblxuICAgICAgICBpZiAoY2xlYW4pIHtcbiAgICAgICAgICBjbGVhbihvblJlc29sdmUsIG9uUmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25EaXNjb25uZWN0ID0gKCkgPT4gb25SZXNvbHZlKG51bGwpO1xuXG4gICAgICBjb25zdCBvblJlc29sdmUgPSAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIG9uQ2xlYW4oKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uUmVqZWN0ID0gKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgb25DbGVhbigpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub25jZSgnZGlzY29ubmVjdCcsIG9uRGlzY29ubmVjdCk7XG5cbiAgICAgIGNiKG9uUmVzb2x2ZSwgb25SZWplY3QpO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5pbXBvcnQge1xuICBJVGFzayxcbiAgSVRhc2tDaGFuZ2UsXG4gIElUYXNrV29ya2VyLFxuICBJVGFza3NHcm91cEZpbHRlcixcbiAgSVRhc2tIYW5kbGVyRXZlbnQsXG4gIElUYXNrSGFuZGxlcixcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGV4ZWNGdW5jdGlvbiB9IGZyb20gJy4vdXRpbHMvZnVuY3Rpb24nO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVGFza3NNYW5hZ2VyIHtcbiAgb24oZXZlbnQ6ICdjaGFuZ2UnLCBsaXN0ZW5lcjogKGU6IElUYXNrQ2hhbmdlKSA9PiB2b2lkKTogdGhpcztcbn1cblxuY29uc3QgREVGQVVMVF9HUk9VUF9GSUxURVI6IElUYXNrc0dyb3VwRmlsdGVyID0gKHdvcmtlciwgZ3JvdXApID0+XG4gIHdvcmtlci5ncm91cCA9PT0gZ3JvdXA7XG5cbi8qKlxuICogQWxsb3dzIHRvIGNyZWF0ZSBtdWx0aXBsZSBjaGFubmVscyB3aXRoIGdpdmVuIGdyb3Vwcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tzTWFuYWdlcjxLID0gbnVtYmVyPiBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHByaXZhdGUgd29ya2VyczogSVRhc2tXb3JrZXJbXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBxdWV1ZTogSVRhc2tbXSA9IFtdO1xuXG4gIHByb3RlY3RlZCB0YXNrQ291bnRlciA9IC0xO1xuXG4gIHByb3RlY3RlZCB1bmF2YWlsYWJsZVdvcmtlcnMgPSAwO1xuXG4gIHB1YmxpYyB3b3JrZXJGaWx0ZXI6IElUYXNrc0dyb3VwRmlsdGVyO1xuXG4gIHB1YmxpYyBnZXRXb3JrZXJJbnN0YW5jZTogKGluZGV4OiBudW1iZXIsIGdyb3VwOiBzdHJpbmcpID0+IEs7XG5cbiAgcHJvdGVjdGVkIGdldFdvcmtlcihncm91cDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudW5hdmFpbGFibGVXb3JrZXJzID09PSB0aGlzLndvcmtlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLndvcmtlckZpbHRlciB8fCBERUZBVUxUX0dST1VQX0ZJTFRFUjtcblxuICAgIHJldHVybiB0aGlzLndvcmtlcnMuZmluZCgocikgPT4gIXIuYnVzeSAmJiAhci5wYXVzZWQgJiYgZmlsdGVyKHIsIGdyb3VwKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0V29ya2VycyhpbmRleGVzPzogbnVtYmVyW10pIHtcbiAgICBpZiAoIWluZGV4ZXM/Lmxlbmd0aCkgcmV0dXJuIHRoaXMud29ya2VycztcbiAgICByZXR1cm4gaW5kZXhlcy5tYXAoKHIpID0+IHRoaXMud29ya2Vyc1tyXSk7XG4gIH1cblxuICBwdWJsaWMgc2V0V29ya2VycyguLi53b3JrZXJzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMud29ya2VycyA9IHdvcmtlcnMubWFwKChncm91cCwgaW5kZXgpID0+ICh7XG4gICAgICBidXN5OiBmYWxzZSxcbiAgICAgIGdyb3VwLFxuICAgICAgaW5kZXgsXG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZTxUID0gdm9pZD4oXG4gICAgZm46IElUYXNrSGFuZGxlcjxLPixcbiAgICBncm91cD86IHN0cmluZyxcbiAgICB0YXNrSWQ/OiBudW1iZXIsXG4gICk6IFByb21pc2U8VD4ge1xuICAgIHRoaXMud29ya2Vyc0NoZWNrKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGFzazogSVRhc2sgPSB7XG4gICAgICAgIGlkOiB0YXNrSWQgPz8gdGhpcy5jcmVhdGVUYXNrSWQoKSxcbiAgICAgICAgZm4sXG4gICAgICAgIGdyb3VwLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZTogSVRhc2tDaGFuZ2UpID0+IHtcbiAgICAgICAgaWYgKGUudGFza0lkID09PSB0YXNrLmlkKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgICAgICAgaWYgKGUuZXJyb3IpIHJldHVybiByZWplY3QoZS5lcnJvcik7XG4gICAgICAgICAgcmVzb2x2ZShlLmRhdGEpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9uKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByb2Nlc3ModGFzayk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2VzcyA9IGFzeW5jICh0YXNrOiBJVGFzaywgd29ya2VyPzogSVRhc2tXb3JrZXIpID0+IHtcbiAgICB3b3JrZXIgPSB3b3JrZXIgfHwgdGhpcy5nZXRXb3JrZXIodGFzay5ncm91cCk7XG5cbiAgICBpZiAod29ya2VyKSB7XG4gICAgICB3b3JrZXIuYnVzeSA9IHRydWU7XG4gICAgICB0aGlzLnVuYXZhaWxhYmxlV29ya2VycysrO1xuXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuZ2V0V29ya2VySW5zdGFuY2VcbiAgICAgICAgPyB0aGlzLmdldFdvcmtlckluc3RhbmNlKHdvcmtlci5pbmRleCwgdGFzay5ncm91cClcbiAgICAgICAgOiB3b3JrZXIuaW5kZXg7XG5cbiAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IGV4ZWNGdW5jdGlvbih0YXNrLmZuLCB7XG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICB0YXNrSWQ6IHRhc2suaWQsXG4gICAgICAgIHdvcmtlckluZGV4OiB3b3JrZXIuaW5kZXgsXG4gICAgICB9IGFzIElUYXNrSGFuZGxlckV2ZW50PEs+KTtcblxuICAgICAgd29ya2VyLmJ1c3kgPSBmYWxzZTtcbiAgICAgIHRoaXMudW5hdmFpbGFibGVXb3JrZXJzLS07XG5cbiAgICAgIHRoaXMuZmluaXNoVGFzayh0YXNrLmlkLCBkYXRhLCBlcnJvcik7XG4gICAgICB0aGlzLnByb2Nlc3NOZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVldWUucHVzaCh0YXNrKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHByb2Nlc3NOZXh0KCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCkge1xuICAgICAgY29uc3QgcXVldWUgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHRoaXMucXVldWUpIHtcbiAgICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy5nZXRXb3JrZXIodGFzay5ncm91cCk7XG5cbiAgICAgICAgaWYgKHdvcmtlcikge1xuICAgICAgICAgIHRoaXMucHJvY2Vzcyh0YXNrLCB3b3JrZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXVlLnB1c2godGFzayk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5xdWV1ZSA9IHF1ZXVlO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB3b3JrZXJzQ2hlY2soKSB7XG4gICAgaWYgKCF0aGlzLndvcmtlcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHdvcmtlcnMgc2V0Jyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHBhdXNlV29ya2VycyguLi5pbmRleGVzOiBudW1iZXJbXSkge1xuICAgIHRoaXMudW5hdmFpbGFibGVXb3JrZXJzICs9IGluZGV4ZXMubGVuZ3RoO1xuXG4gICAgdGhpcy5nZXRXb3JrZXJzKGluZGV4ZXMpLmZvckVhY2goKHIpID0+IChyLnBhdXNlZCA9IHRydWUpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXN1bWVXb3JrZXJzKC4uLmluZGV4ZXM6IG51bWJlcltdKSB7XG4gICAgdGhpcy51bmF2YWlsYWJsZVdvcmtlcnMgLT0gaW5kZXhlcy5sZW5ndGg7XG5cbiAgICB0aGlzLmdldFdvcmtlcnMoaW5kZXhlcykuZm9yRWFjaCgocikgPT4gKHIucGF1c2VkID0gZmFsc2UpKTtcbiAgICB0aGlzLnByb2Nlc3NOZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlVGFza3MoLi4uaWRzOiBudW1iZXJbXSkge1xuICAgIGNvbnN0IHF1ZXVlOiBJVGFza1tdID0gW107XG5cbiAgICB0aGlzLnF1ZXVlLmZvckVhY2goKHRhc2spID0+IHtcbiAgICAgIGlmIChpZHMuaW5jbHVkZXModGFzay5pZCkpIHtcbiAgICAgICAgdGhpcy5maW5pc2hUYXNrKHRhc2suaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWUucHVzaCh0YXNrKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucXVldWUgPSBxdWV1ZTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVBbGxUYXNrcygpIHtcbiAgICB0aGlzLnF1ZXVlLmZvckVhY2goKHIpID0+IHRoaXMuZmluaXNoVGFzayhyLmlkKSk7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVRhc2tJZCgpIHtcbiAgICByZXR1cm4gKyt0aGlzLnRhc2tDb3VudGVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmlzaFRhc2soaWQ6IG51bWJlciwgZGF0YT86IGFueSwgZXJyb3I/OiBFcnJvcikge1xuICAgIHRoaXMuZW1pdCgnY2hhbmdlJywge1xuICAgICAgdGFza0lkOiBpZCxcbiAgICAgIGRhdGEsXG4gICAgICBlcnJvcixcbiAgICAgIHR5cGU6ICdmaW5pc2hlZCcsXG4gICAgfSBhcyBJVGFza0NoYW5nZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIElUcmFuc2Zlck9wdGlvbnMsXG4gIElUcmFuc2ZlclByb2dyZXNzTGlzdGVuZXIsXG4gIElUcmFuc2ZlckluZm8sXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2ZlciB7XG4gIHB1YmxpYyBzdGFydFRpbWU6IG51bWJlcjtcblxuICBwcm90ZWN0ZWQgYnl0ZXM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5mbzogSVRyYW5zZmVySW5mbyxcbiAgICBwdWJsaWMgb3B0aW9uczogSVRyYW5zZmVyT3B0aW9ucyxcbiAgICBwdWJsaWMgb25Qcm9ncmVzczogSVRyYW5zZmVyUHJvZ3Jlc3NMaXN0ZW5lcixcbiAgKSB7XG4gICAgdGhpcy5zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuYnl0ZXMgPSBpbmZvPy5zdGFydEF0ID8/IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVsYXBzZWQoKSB7XG4gICAgcmV0dXJuIChEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUpIC8gMTAwMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3BlZWQoKSB7XG4gICAgY29uc3QgZWxhcHNlZCA9IHRoaXMuZWxhcHNlZDtcblxuICAgIGlmIChlbGFwc2VkID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLmJ5dGVzIC8gZWxhcHNlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGV0YSgpIHtcbiAgICBjb25zdCBzcGVlZCA9IHRoaXMuc3BlZWQ7XG5cbiAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJhdGUgPSB0aGlzLmluZm8udG90YWxCeXRlcyAvIHRoaXMuc3BlZWQ7XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZChyYXRlIC0gdGhpcy5lbGFwc2VkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGVyY2VudCgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgodGhpcy5ieXRlcyAvIHRoaXMuaW5mby50b3RhbEJ5dGVzKSAqIDEwMCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlUHJvZ3Jlc3MgPSAoYnl0ZXM6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuYnl0ZXMgPSBieXRlcztcblxuICAgIGNvbnN0IHsgaWQsIGxvY2FsUGF0aCwgcmVtb3RlUGF0aCwgdG90YWxCeXRlcyB9ID0gdGhpcy5pbmZvO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnM/LnF1aWV0KSB7XG4gICAgICB0aGlzLm9uUHJvZ3Jlc3MoXG4gICAgICAgIHsgaWQsIGxvY2FsUGF0aCwgcmVtb3RlUGF0aCB9LFxuICAgICAgICB7XG4gICAgICAgICAgYnl0ZXMsXG4gICAgICAgICAgdG90YWxCeXRlcyxcbiAgICAgICAgICBzcGVlZDogdGhpcy5zcGVlZCxcbiAgICAgICAgICBldGE6IHRoaXMuZXRhLFxuICAgICAgICAgIHBlcmNlbnQ6IHRoaXMucGVyY2VudCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuIiwiZXhwb3J0IGNvbnN0IHJlcGVhdCA9IDxUPih2YWx1ZTogVCwgY291bnQ6IG51bWJlcikgPT4ge1xuICByZXR1cm4gQXJyYXkoY291bnQpLmZpbGwodmFsdWUpO1xufTtcbiIsImltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgUmVhZGFibGUsIFdyaXRhYmxlIH0gZnJvbSAnc3RyZWFtJztcblxuZXhwb3J0IGNvbnN0IGdldFBhdGhGcm9tU3RyZWFtID0gKHN0cmVhbTogUmVhZGFibGUgfCBXcml0YWJsZSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiAoc3RyZWFtIGFzIGFueSkucGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlU2l6ZSA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gLTE7XG5cbiAgY29uc3QgeyBzaXplIH0gPSBhd2FpdCBmcy5zdGF0KHBhdGgpO1xuICByZXR1cm4gc2l6ZTtcbn07XG4iLCJpbXBvcnQgeyBGaWxlSW5mbywgRmlsZVR5cGUgfSBmcm9tICdiYXNpYy1mdHAnO1xuXG5pbXBvcnQgeyBJRmlsZSwgSUZpbGVUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmNvbnN0IE1TRE9TX0RBVEVfUkVHRVggPSAvWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV1cXHNbMC05XVswLTldXFw6WzAtOV1bMC05XVtQQV1NL2dpO1xuXG5leHBvcnQgY2xhc3MgRnRwVXRpbHMge1xuICAvKipcbiAgICogRm9ybWF0cyByYXcgZmlsZSBpbmZvLlxuICAgKiBEb2Vzbid0IGluY2x1ZGUgYGxhc3RNb2RpZmllZGAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZvcm1hdEZpbGUoZmlsZTogRmlsZUluZm8pOiBJRmlsZSB7XG4gICAgY29uc3QgeyBwZXJtaXNzaW9ucywgbmFtZSwgc2l6ZSwgdXNlciwgZ3JvdXAsIHR5cGUgfSA9IGZpbGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0RmlsZVR5cGUodHlwZSksXG4gICAgICBzaXplLFxuICAgICAgb3duZXI6IHVzZXIsXG4gICAgICBncm91cCxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIG93bmVyOiBwZXJtaXNzaW9ucz8udXNlcixcbiAgICAgICAgZ3JvdXA6IHBlcm1pc3Npb25zPy5ncm91cCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RmlsZVR5cGUodHlwZTogRmlsZVR5cGUpOiBJRmlsZVR5cGUge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWxlVHlwZS5EaXJlY3Rvcnk6IHtcbiAgICAgICAgcmV0dXJuICdmb2xkZXInO1xuICAgICAgfVxuICAgICAgY2FzZSBGaWxlVHlwZS5GaWxlOiB7XG4gICAgICAgIHJldHVybiAnZmlsZSc7XG4gICAgICB9XG4gICAgICBjYXNlIEZpbGVUeXBlLlN5bWJvbGljTGluazoge1xuICAgICAgICByZXR1cm4gJ3N5bWJvbGljLWxpbmsnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAndW5rbm93bic7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBtcy1kb3MgZGF0ZSBhbmQgSlMgZGF0ZSBvYmplY3QgZm9ybWF0cy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0VmFsaWREYXRlKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgZGF0ZSA9IHN0ci50cmltKCk7XG5cbiAgICBjb25zdCBtYXRjaCA9IGRhdGUubWF0Y2goTVNET1NfREFURV9SRUdFWCk7XG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgW21vbnRoLCBkYXksIHllYXIsIF9ob3VyLCBtaW51dGVzXSA9IGRhdGUubWF0Y2goL1swLTldWzAtOV0vZyk7XG5cbiAgICBsZXQgaG91ciA9IHBhcnNlSW50KF9ob3VyKTtcblxuICAgIGlmIChkYXRlW2RhdGUubGVuZ3RoIC0gMl0gPT09ICdQJykge1xuICAgICAgaG91ciArPSAxMjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICBwYXJzZUludChgMjAke3llYXJ9YCksXG4gICAgICBwYXJzZUludChtb250aCkgLSAxLFxuICAgICAgcGFyc2VJbnQoZGF5KSxcbiAgICAgIGhvdXIsXG4gICAgICBwYXJzZUludChtaW51dGVzKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXREYXRlRnJvbVVuaXhUaW1lKHRpbWU6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lICogMTAwMCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IElUYXNrUmVzcG9uc2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWNGdW5jdGlvbiA9IGFzeW5jIChcbiAgZjogRnVuY3Rpb24sXG4gIC4uLmFyZ3M6IGFueVxuKTogUHJvbWlzZTxJVGFza1Jlc3BvbnNlPiA9PiB7XG4gIGxldCBkYXRhOiBhbnk7XG4gIGxldCBlcnJvcjogRXJyb3I7XG5cbiAgdHJ5IHtcbiAgICBkYXRhID0gYXdhaXQgZiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3IgPSBlcnI7XG4gIH1cblxuICByZXR1cm4geyBkYXRhLCBlcnJvciB9O1xufTtcbiIsIihmdW5jdGlvbihuYWNsKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFBvcnRlZCBpbiAyMDE0IGJ5IERtaXRyeSBDaGVzdG55a2ggYW5kIERldmkgTWFuZGlyaS5cbi8vIFB1YmxpYyBkb21haW4uXG4vL1xuLy8gSW1wbGVtZW50YXRpb24gZGVyaXZlZCBmcm9tIFR3ZWV0TmFDbCB2ZXJzaW9uIDIwMTQwNDI3LlxuLy8gU2VlIGZvciBkZXRhaWxzOiBodHRwOi8vdHdlZXRuYWNsLmNyLnlwLnRvL1xuXG52YXIgZ2YgPSBmdW5jdGlvbihpbml0KSB7XG4gIHZhciBpLCByID0gbmV3IEZsb2F0NjRBcnJheSgxNik7XG4gIGlmIChpbml0KSBmb3IgKGkgPSAwOyBpIDwgaW5pdC5sZW5ndGg7IGkrKykgcltpXSA9IGluaXRbaV07XG4gIHJldHVybiByO1xufTtcblxuLy8gIFBsdWdnYWJsZSwgaW5pdGlhbGl6ZWQgaW4gaGlnaC1sZXZlbCBBUEkgYmVsb3cuXG52YXIgcmFuZG9tYnl0ZXMgPSBmdW5jdGlvbigvKiB4LCBuICovKSB7IHRocm93IG5ldyBFcnJvcignbm8gUFJORycpOyB9O1xuXG52YXIgXzAgPSBuZXcgVWludDhBcnJheSgxNik7XG52YXIgXzkgPSBuZXcgVWludDhBcnJheSgzMik7IF85WzBdID0gOTtcblxudmFyIGdmMCA9IGdmKCksXG4gICAgZ2YxID0gZ2YoWzFdKSxcbiAgICBfMTIxNjY1ID0gZ2YoWzB4ZGI0MSwgMV0pLFxuICAgIEQgPSBnZihbMHg3OGEzLCAweDEzNTksIDB4NGRjYSwgMHg3NWViLCAweGQ4YWIsIDB4NDE0MSwgMHgwYTRkLCAweDAwNzAsIDB4ZTg5OCwgMHg3Nzc5LCAweDQwNzksIDB4OGNjNywgMHhmZTczLCAweDJiNmYsIDB4NmNlZSwgMHg1MjAzXSksXG4gICAgRDIgPSBnZihbMHhmMTU5LCAweDI2YjIsIDB4OWI5NCwgMHhlYmQ2LCAweGIxNTYsIDB4ODI4MywgMHgxNDlhLCAweDAwZTAsIDB4ZDEzMCwgMHhlZWYzLCAweDgwZjIsIDB4MTk4ZSwgMHhmY2U3LCAweDU2ZGYsIDB4ZDlkYywgMHgyNDA2XSksXG4gICAgWCA9IGdmKFsweGQ1MWEsIDB4OGYyNSwgMHgyZDYwLCAweGM5NTYsIDB4YTdiMiwgMHg5NTI1LCAweGM3NjAsIDB4NjkyYywgMHhkYzVjLCAweGZkZDYsIDB4ZTIzMSwgMHhjMGE0LCAweDUzZmUsIDB4Y2Q2ZSwgMHgzNmQzLCAweDIxNjldKSxcbiAgICBZID0gZ2YoWzB4NjY1OCwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2Nl0pLFxuICAgIEkgPSBnZihbMHhhMGIwLCAweDRhMGUsIDB4MWIyNywgMHhjNGVlLCAweGU0NzgsIDB4YWQyZiwgMHgxODA2LCAweDJmNDMsIDB4ZDdhNywgMHgzZGZiLCAweDAwOTksIDB4MmI0ZCwgMHhkZjBiLCAweDRmYzEsIDB4MjQ4MCwgMHgyYjgzXSk7XG5cbmZ1bmN0aW9uIHRzNjQoeCwgaSwgaCwgbCkge1xuICB4W2ldICAgPSAoaCA+PiAyNCkgJiAweGZmO1xuICB4W2krMV0gPSAoaCA+PiAxNikgJiAweGZmO1xuICB4W2krMl0gPSAoaCA+PiAgOCkgJiAweGZmO1xuICB4W2krM10gPSBoICYgMHhmZjtcbiAgeFtpKzRdID0gKGwgPj4gMjQpICAmIDB4ZmY7XG4gIHhbaSs1XSA9IChsID4+IDE2KSAgJiAweGZmO1xuICB4W2krNl0gPSAobCA+PiAgOCkgICYgMHhmZjtcbiAgeFtpKzddID0gbCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIHZuKHgsIHhpLCB5LCB5aSwgbikge1xuICB2YXIgaSxkID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgZCB8PSB4W3hpK2ldXnlbeWkraV07XG4gIHJldHVybiAoMSAmICgoZCAtIDEpID4+PiA4KSkgLSAxO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fdmVyaWZ5XzE2KHgsIHhpLCB5LCB5aSkge1xuICByZXR1cm4gdm4oeCx4aSx5LHlpLDE2KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3ZlcmlmeV8zMih4LCB4aSwgeSwgeWkpIHtcbiAgcmV0dXJuIHZuKHgseGkseSx5aSwzMik7XG59XG5cbmZ1bmN0aW9uIGNvcmVfc2Fsc2EyMChvLCBwLCBrLCBjKSB7XG4gIHZhciBqMCAgPSBjWyAwXSAmIDB4ZmYgfCAoY1sgMV0gJiAweGZmKTw8OCB8IChjWyAyXSAmIDB4ZmYpPDwxNiB8IChjWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxICA9IGtbIDBdICYgMHhmZiB8IChrWyAxXSAmIDB4ZmYpPDw4IHwgKGtbIDJdICYgMHhmZik8PDE2IHwgKGtbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajIgID0ga1sgNF0gJiAweGZmIHwgKGtbIDVdICYgMHhmZik8PDggfCAoa1sgNl0gJiAweGZmKTw8MTYgfCAoa1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqMyAgPSBrWyA4XSAmIDB4ZmYgfCAoa1sgOV0gJiAweGZmKTw8OCB8IChrWzEwXSAmIDB4ZmYpPDwxNiB8IChrWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo0ICA9IGtbMTJdICYgMHhmZiB8IChrWzEzXSAmIDB4ZmYpPDw4IHwgKGtbMTRdICYgMHhmZik8PDE2IHwgKGtbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajUgID0gY1sgNF0gJiAweGZmIHwgKGNbIDVdICYgMHhmZik8PDggfCAoY1sgNl0gJiAweGZmKTw8MTYgfCAoY1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqNiAgPSBwWyAwXSAmIDB4ZmYgfCAocFsgMV0gJiAweGZmKTw8OCB8IChwWyAyXSAmIDB4ZmYpPDwxNiB8IChwWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo3ICA9IHBbIDRdICYgMHhmZiB8IChwWyA1XSAmIDB4ZmYpPDw4IHwgKHBbIDZdICYgMHhmZik8PDE2IHwgKHBbIDddICYgMHhmZik8PDI0LFxuICAgICAgajggID0gcFsgOF0gJiAweGZmIHwgKHBbIDldICYgMHhmZik8PDggfCAocFsxMF0gJiAweGZmKTw8MTYgfCAocFsxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqOSAgPSBwWzEyXSAmIDB4ZmYgfCAocFsxM10gJiAweGZmKTw8OCB8IChwWzE0XSAmIDB4ZmYpPDwxNiB8IChwWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMCA9IGNbIDhdICYgMHhmZiB8IChjWyA5XSAmIDB4ZmYpPDw4IHwgKGNbMTBdICYgMHhmZik8PDE2IHwgKGNbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajExID0ga1sxNl0gJiAweGZmIHwgKGtbMTddICYgMHhmZik8PDggfCAoa1sxOF0gJiAweGZmKTw8MTYgfCAoa1sxOV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTIgPSBrWzIwXSAmIDB4ZmYgfCAoa1syMV0gJiAweGZmKTw8OCB8IChrWzIyXSAmIDB4ZmYpPDwxNiB8IChrWzIzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMyA9IGtbMjRdICYgMHhmZiB8IChrWzI1XSAmIDB4ZmYpPDw4IHwgKGtbMjZdICYgMHhmZik8PDE2IHwgKGtbMjddICYgMHhmZik8PDI0LFxuICAgICAgajE0ID0ga1syOF0gJiAweGZmIHwgKGtbMjldICYgMHhmZik8PDggfCAoa1szMF0gJiAweGZmKTw8MTYgfCAoa1szMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTUgPSBjWzEyXSAmIDB4ZmYgfCAoY1sxM10gJiAweGZmKTw8OCB8IChjWzE0XSAmIDB4ZmYpPDwxNiB8IChjWzE1XSAmIDB4ZmYpPDwyNDtcblxuICB2YXIgeDAgPSBqMCwgeDEgPSBqMSwgeDIgPSBqMiwgeDMgPSBqMywgeDQgPSBqNCwgeDUgPSBqNSwgeDYgPSBqNiwgeDcgPSBqNyxcbiAgICAgIHg4ID0gajgsIHg5ID0gajksIHgxMCA9IGoxMCwgeDExID0gajExLCB4MTIgPSBqMTIsIHgxMyA9IGoxMywgeDE0ID0gajE0LFxuICAgICAgeDE1ID0gajE1LCB1O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkgKz0gMikge1xuICAgIHUgPSB4MCArIHgxMiB8IDA7XG4gICAgeDQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg0ICsgeDAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHg0IHwgMDtcbiAgICB4MTIgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEyICsgeDggfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4MSB8IDA7XG4gICAgeDkgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg5ICsgeDUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDkgfCAwO1xuICAgIHgxIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxICsgeDEzIHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg2IHwgMDtcbiAgICB4MTQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxNCArIHgxMCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDE0IHwgMDtcbiAgICB4NiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NiArIHgyIHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTEgfCAwO1xuICAgIHgzIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MyArIHgxNSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDMgfCAwO1xuICAgIHgxMSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTEgKyB4NyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDAgKyB4MyB8IDA7XG4gICAgeDEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxICsgeDAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxIHwgMDtcbiAgICB4MyBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MyArIHgyIHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDQgfCAwO1xuICAgIHg2IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NiArIHg1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4NiB8IDA7XG4gICAgeDQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDQgKyB4NyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4OSB8IDA7XG4gICAgeDExIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTEgKyB4MTAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHgxMSB8IDA7XG4gICAgeDkgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDkgKyB4OCB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDE0IHwgMDtcbiAgICB4MTIgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMiArIHgxNSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4MTIgfCAwO1xuICAgIHgxNCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTQgKyB4MTMgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuICB9XG4gICB4MCA9ICB4MCArICBqMCB8IDA7XG4gICB4MSA9ICB4MSArICBqMSB8IDA7XG4gICB4MiA9ICB4MiArICBqMiB8IDA7XG4gICB4MyA9ICB4MyArICBqMyB8IDA7XG4gICB4NCA9ICB4NCArICBqNCB8IDA7XG4gICB4NSA9ICB4NSArICBqNSB8IDA7XG4gICB4NiA9ICB4NiArICBqNiB8IDA7XG4gICB4NyA9ICB4NyArICBqNyB8IDA7XG4gICB4OCA9ICB4OCArICBqOCB8IDA7XG4gICB4OSA9ICB4OSArICBqOSB8IDA7XG4gIHgxMCA9IHgxMCArIGoxMCB8IDA7XG4gIHgxMSA9IHgxMSArIGoxMSB8IDA7XG4gIHgxMiA9IHgxMiArIGoxMiB8IDA7XG4gIHgxMyA9IHgxMyArIGoxMyB8IDA7XG4gIHgxNCA9IHgxNCArIGoxNCB8IDA7XG4gIHgxNSA9IHgxNSArIGoxNSB8IDA7XG5cbiAgb1sgMF0gPSB4MCA+Pj4gIDAgJiAweGZmO1xuICBvWyAxXSA9IHgwID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDJdID0geDAgPj4+IDE2ICYgMHhmZjtcbiAgb1sgM10gPSB4MCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDRdID0geDEgPj4+ICAwICYgMHhmZjtcbiAgb1sgNV0gPSB4MSA+Pj4gIDggJiAweGZmO1xuICBvWyA2XSA9IHgxID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDddID0geDEgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA4XSA9IHgyID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDldID0geDIgPj4+ICA4ICYgMHhmZjtcbiAgb1sxMF0gPSB4MiA+Pj4gMTYgJiAweGZmO1xuICBvWzExXSA9IHgyID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxMl0gPSB4MyA+Pj4gIDAgJiAweGZmO1xuICBvWzEzXSA9IHgzID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTRdID0geDMgPj4+IDE2ICYgMHhmZjtcbiAgb1sxNV0gPSB4MyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTZdID0geDQgPj4+ICAwICYgMHhmZjtcbiAgb1sxN10gPSB4NCA+Pj4gIDggJiAweGZmO1xuICBvWzE4XSA9IHg0ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTldID0geDQgPj4+IDI0ICYgMHhmZjtcblxuICBvWzIwXSA9IHg1ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjFdID0geDUgPj4+ICA4ICYgMHhmZjtcbiAgb1syMl0gPSB4NSA+Pj4gMTYgJiAweGZmO1xuICBvWzIzXSA9IHg1ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syNF0gPSB4NiA+Pj4gIDAgJiAweGZmO1xuICBvWzI1XSA9IHg2ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjZdID0geDYgPj4+IDE2ICYgMHhmZjtcbiAgb1syN10gPSB4NiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjhdID0geDcgPj4+ICAwICYgMHhmZjtcbiAgb1syOV0gPSB4NyA+Pj4gIDggJiAweGZmO1xuICBvWzMwXSA9IHg3ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMzFdID0geDcgPj4+IDI0ICYgMHhmZjtcblxuICBvWzMyXSA9IHg4ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMzNdID0geDggPj4+ICA4ICYgMHhmZjtcbiAgb1szNF0gPSB4OCA+Pj4gMTYgJiAweGZmO1xuICBvWzM1XSA9IHg4ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1szNl0gPSB4OSA+Pj4gIDAgJiAweGZmO1xuICBvWzM3XSA9IHg5ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzhdID0geDkgPj4+IDE2ICYgMHhmZjtcbiAgb1szOV0gPSB4OSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNDBdID0geDEwID4+PiAgMCAmIDB4ZmY7XG4gIG9bNDFdID0geDEwID4+PiAgOCAmIDB4ZmY7XG4gIG9bNDJdID0geDEwID4+PiAxNiAmIDB4ZmY7XG4gIG9bNDNdID0geDEwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s0NF0gPSB4MTEgPj4+ICAwICYgMHhmZjtcbiAgb1s0NV0gPSB4MTEgPj4+ICA4ICYgMHhmZjtcbiAgb1s0Nl0gPSB4MTEgPj4+IDE2ICYgMHhmZjtcbiAgb1s0N10gPSB4MTEgPj4+IDI0ICYgMHhmZjtcblxuICBvWzQ4XSA9IHgxMiA+Pj4gIDAgJiAweGZmO1xuICBvWzQ5XSA9IHgxMiA+Pj4gIDggJiAweGZmO1xuICBvWzUwXSA9IHgxMiA+Pj4gMTYgJiAweGZmO1xuICBvWzUxXSA9IHgxMiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNTJdID0geDEzID4+PiAgMCAmIDB4ZmY7XG4gIG9bNTNdID0geDEzID4+PiAgOCAmIDB4ZmY7XG4gIG9bNTRdID0geDEzID4+PiAxNiAmIDB4ZmY7XG4gIG9bNTVdID0geDEzID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s1Nl0gPSB4MTQgPj4+ICAwICYgMHhmZjtcbiAgb1s1N10gPSB4MTQgPj4+ICA4ICYgMHhmZjtcbiAgb1s1OF0gPSB4MTQgPj4+IDE2ICYgMHhmZjtcbiAgb1s1OV0gPSB4MTQgPj4+IDI0ICYgMHhmZjtcblxuICBvWzYwXSA9IHgxNSA+Pj4gIDAgJiAweGZmO1xuICBvWzYxXSA9IHgxNSA+Pj4gIDggJiAweGZmO1xuICBvWzYyXSA9IHgxNSA+Pj4gMTYgJiAweGZmO1xuICBvWzYzXSA9IHgxNSA+Pj4gMjQgJiAweGZmO1xufVxuXG5mdW5jdGlvbiBjb3JlX2hzYWxzYTIwKG8scCxrLGMpIHtcbiAgdmFyIGowICA9IGNbIDBdICYgMHhmZiB8IChjWyAxXSAmIDB4ZmYpPDw4IHwgKGNbIDJdICYgMHhmZik8PDE2IHwgKGNbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajEgID0ga1sgMF0gJiAweGZmIHwgKGtbIDFdICYgMHhmZik8PDggfCAoa1sgMl0gJiAweGZmKTw8MTYgfCAoa1sgM10gJiAweGZmKTw8MjQsXG4gICAgICBqMiAgPSBrWyA0XSAmIDB4ZmYgfCAoa1sgNV0gJiAweGZmKTw8OCB8IChrWyA2XSAmIDB4ZmYpPDwxNiB8IChrWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGozICA9IGtbIDhdICYgMHhmZiB8IChrWyA5XSAmIDB4ZmYpPDw4IHwgKGtbMTBdICYgMHhmZik8PDE2IHwgKGtbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajQgID0ga1sxMl0gJiAweGZmIHwgKGtbMTNdICYgMHhmZik8PDggfCAoa1sxNF0gJiAweGZmKTw8MTYgfCAoa1sxNV0gJiAweGZmKTw8MjQsXG4gICAgICBqNSAgPSBjWyA0XSAmIDB4ZmYgfCAoY1sgNV0gJiAweGZmKTw8OCB8IChjWyA2XSAmIDB4ZmYpPDwxNiB8IChjWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo2ICA9IHBbIDBdICYgMHhmZiB8IChwWyAxXSAmIDB4ZmYpPDw4IHwgKHBbIDJdICYgMHhmZik8PDE2IHwgKHBbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajcgID0gcFsgNF0gJiAweGZmIHwgKHBbIDVdICYgMHhmZik8PDggfCAocFsgNl0gJiAweGZmKTw8MTYgfCAocFsgN10gJiAweGZmKTw8MjQsXG4gICAgICBqOCAgPSBwWyA4XSAmIDB4ZmYgfCAocFsgOV0gJiAweGZmKTw8OCB8IChwWzEwXSAmIDB4ZmYpPDwxNiB8IChwWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo5ICA9IHBbMTJdICYgMHhmZiB8IChwWzEzXSAmIDB4ZmYpPDw4IHwgKHBbMTRdICYgMHhmZik8PDE2IHwgKHBbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajEwID0gY1sgOF0gJiAweGZmIHwgKGNbIDldICYgMHhmZik8PDggfCAoY1sxMF0gJiAweGZmKTw8MTYgfCAoY1sxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTEgPSBrWzE2XSAmIDB4ZmYgfCAoa1sxN10gJiAweGZmKTw8OCB8IChrWzE4XSAmIDB4ZmYpPDwxNiB8IChrWzE5XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMiA9IGtbMjBdICYgMHhmZiB8IChrWzIxXSAmIDB4ZmYpPDw4IHwgKGtbMjJdICYgMHhmZik8PDE2IHwgKGtbMjNdICYgMHhmZik8PDI0LFxuICAgICAgajEzID0ga1syNF0gJiAweGZmIHwgKGtbMjVdICYgMHhmZik8PDggfCAoa1syNl0gJiAweGZmKTw8MTYgfCAoa1syN10gJiAweGZmKTw8MjQsXG4gICAgICBqMTQgPSBrWzI4XSAmIDB4ZmYgfCAoa1syOV0gJiAweGZmKTw8OCB8IChrWzMwXSAmIDB4ZmYpPDwxNiB8IChrWzMxXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxNSA9IGNbMTJdICYgMHhmZiB8IChjWzEzXSAmIDB4ZmYpPDw4IHwgKGNbMTRdICYgMHhmZik8PDE2IHwgKGNbMTVdICYgMHhmZik8PDI0O1xuXG4gIHZhciB4MCA9IGowLCB4MSA9IGoxLCB4MiA9IGoyLCB4MyA9IGozLCB4NCA9IGo0LCB4NSA9IGo1LCB4NiA9IGo2LCB4NyA9IGo3LFxuICAgICAgeDggPSBqOCwgeDkgPSBqOSwgeDEwID0gajEwLCB4MTEgPSBqMTEsIHgxMiA9IGoxMiwgeDEzID0gajEzLCB4MTQgPSBqMTQsXG4gICAgICB4MTUgPSBqMTUsIHU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSArPSAyKSB7XG4gICAgdSA9IHgwICsgeDEyIHwgMDtcbiAgICB4NCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDQgKyB4MCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDQgfCAwO1xuICAgIHgxMiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTIgKyB4OCB8IDA7XG4gICAgeDAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4NSArIHgxIHwgMDtcbiAgICB4OSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDkgKyB4NSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4OSB8IDA7XG4gICAgeDEgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEgKyB4MTMgfCAwO1xuICAgIHg1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDEwICsgeDYgfCAwO1xuICAgIHgxNCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDE0ICsgeDEwIHwgMDtcbiAgICB4MiBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDIgKyB4MTQgfCAwO1xuICAgIHg2IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg2ICsgeDIgfCAwO1xuICAgIHgxMCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxNSArIHgxMSB8IDA7XG4gICAgeDMgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgzICsgeDE1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4MyB8IDA7XG4gICAgeDExIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxMSArIHg3IHwgMDtcbiAgICB4MTUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MCArIHgzIHwgMDtcbiAgICB4MSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEgKyB4MCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDEgfCAwO1xuICAgIHgzIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgzICsgeDIgfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4NCB8IDA7XG4gICAgeDYgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg2ICsgeDUgfCAwO1xuICAgIHg3IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4NyArIHg2IHwgMDtcbiAgICB4NCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NCArIHg3IHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg5IHwgMDtcbiAgICB4MTEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMSArIHgxMCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDExIHwgMDtcbiAgICB4OSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4OSArIHg4IHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTQgfCAwO1xuICAgIHgxMiBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEyICsgeDE1IHwgMDtcbiAgICB4MTMgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgxMyArIHgxMiB8IDA7XG4gICAgeDE0IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxNCArIHgxMyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG4gIH1cblxuICBvWyAwXSA9IHgwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDFdID0geDAgPj4+ICA4ICYgMHhmZjtcbiAgb1sgMl0gPSB4MCA+Pj4gMTYgJiAweGZmO1xuICBvWyAzXSA9IHgwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sgNF0gPSB4NSA+Pj4gIDAgJiAweGZmO1xuICBvWyA1XSA9IHg1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDZdID0geDUgPj4+IDE2ICYgMHhmZjtcbiAgb1sgN10gPSB4NSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDhdID0geDEwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDldID0geDEwID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTBdID0geDEwID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTFdID0geDEwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxMl0gPSB4MTUgPj4+ICAwICYgMHhmZjtcbiAgb1sxM10gPSB4MTUgPj4+ICA4ICYgMHhmZjtcbiAgb1sxNF0gPSB4MTUgPj4+IDE2ICYgMHhmZjtcbiAgb1sxNV0gPSB4MTUgPj4+IDI0ICYgMHhmZjtcblxuICBvWzE2XSA9IHg2ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTddID0geDYgPj4+ICA4ICYgMHhmZjtcbiAgb1sxOF0gPSB4NiA+Pj4gMTYgJiAweGZmO1xuICBvWzE5XSA9IHg2ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syMF0gPSB4NyA+Pj4gIDAgJiAweGZmO1xuICBvWzIxXSA9IHg3ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjJdID0geDcgPj4+IDE2ICYgMHhmZjtcbiAgb1syM10gPSB4NyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjRdID0geDggPj4+ICAwICYgMHhmZjtcbiAgb1syNV0gPSB4OCA+Pj4gIDggJiAweGZmO1xuICBvWzI2XSA9IHg4ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjddID0geDggPj4+IDI0ICYgMHhmZjtcblxuICBvWzI4XSA9IHg5ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjldID0geDkgPj4+ICA4ICYgMHhmZjtcbiAgb1szMF0gPSB4OSA+Pj4gMTYgJiAweGZmO1xuICBvWzMxXSA9IHg5ID4+PiAyNCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19jb3JlX3NhbHNhMjAob3V0LGlucCxrLGMpIHtcbiAgY29yZV9zYWxzYTIwKG91dCxpbnAsayxjKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2NvcmVfaHNhbHNhMjAob3V0LGlucCxrLGMpIHtcbiAgY29yZV9oc2Fsc2EyMChvdXQsaW5wLGssYyk7XG59XG5cbnZhciBzaWdtYSA9IG5ldyBVaW50OEFycmF5KFsxMDEsIDEyMCwgMTEyLCA5NywgMTEwLCAxMDAsIDMyLCA1MSwgNTAsIDQ1LCA5OCwgMTIxLCAxMTYsIDEwMSwgMzIsIDEwN10pO1xuICAgICAgICAgICAgLy8gXCJleHBhbmQgMzItYnl0ZSBrXCJcblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcihjLGNwb3MsbSxtcG9zLGIsbixrKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMTYpLCB4ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgdSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHpbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB6W2ldID0gbltpXTtcbiAgd2hpbGUgKGIgPj0gNjQpIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgY1tjcG9zK2ldID0gbVttcG9zK2ldIF4geFtpXTtcbiAgICB1ID0gMTtcbiAgICBmb3IgKGkgPSA4OyBpIDwgMTY7IGkrKykge1xuICAgICAgdSA9IHUgKyAoeltpXSAmIDB4ZmYpIHwgMDtcbiAgICAgIHpbaV0gPSB1ICYgMHhmZjtcbiAgICAgIHUgPj4+PSA4O1xuICAgIH1cbiAgICBiIC09IDY0O1xuICAgIGNwb3MgKz0gNjQ7XG4gICAgbXBvcyArPSA2NDtcbiAgfVxuICBpZiAoYiA+IDApIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYjsgaSsrKSBjW2Nwb3MraV0gPSBtW21wb3MraV0gXiB4W2ldO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAoYyxjcG9zLGIsbixrKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMTYpLCB4ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgdSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHpbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB6W2ldID0gbltpXTtcbiAgd2hpbGUgKGIgPj0gNjQpIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgY1tjcG9zK2ldID0geFtpXTtcbiAgICB1ID0gMTtcbiAgICBmb3IgKGkgPSA4OyBpIDwgMTY7IGkrKykge1xuICAgICAgdSA9IHUgKyAoeltpXSAmIDB4ZmYpIHwgMDtcbiAgICAgIHpbaV0gPSB1ICYgMHhmZjtcbiAgICAgIHUgPj4+PSA4O1xuICAgIH1cbiAgICBiIC09IDY0O1xuICAgIGNwb3MgKz0gNjQ7XG4gIH1cbiAgaWYgKGIgPiAwKSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IGI7IGkrKykgY1tjcG9zK2ldID0geFtpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbShjLGNwb3MsZCxuLGspIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwKHMsbixrLHNpZ21hKTtcbiAgdmFyIHNuID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBzbltpXSA9IG5baSsxNl07XG4gIHJldHVybiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAoYyxjcG9zLGQsc24scyk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW1feG9yKGMsY3BvcyxtLG1wb3MsZCxuLGspIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwKHMsbixrLHNpZ21hKTtcbiAgdmFyIHNuID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBzbltpXSA9IG5baSsxNl07XG4gIHJldHVybiBjcnlwdG9fc3RyZWFtX3NhbHNhMjBfeG9yKGMsY3BvcyxtLG1wb3MsZCxzbixzKTtcbn1cblxuLypcbiogUG9ydCBvZiBBbmRyZXcgTW9vbidzIFBvbHkxMzA1LWRvbm5hLTE2LiBQdWJsaWMgZG9tYWluLlxuKiBodHRwczovL2dpdGh1Yi5jb20vZmxvb2R5YmVycnkvcG9seTEzMDUtZG9ubmFcbiovXG5cbnZhciBwb2x5MTMwNSA9IGZ1bmN0aW9uKGtleSkge1xuICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgdGhpcy5yID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdGhpcy5oID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdGhpcy5wYWQgPSBuZXcgVWludDE2QXJyYXkoOCk7XG4gIHRoaXMubGVmdG92ZXIgPSAwO1xuICB0aGlzLmZpbiA9IDA7XG5cbiAgdmFyIHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NztcblxuICB0MCA9IGtleVsgMF0gJiAweGZmIHwgKGtleVsgMV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbMF0gPSAoIHQwICAgICAgICAgICAgICAgICAgICAgKSAmIDB4MWZmZjtcbiAgdDEgPSBrZXlbIDJdICYgMHhmZiB8IChrZXlbIDNdICYgMHhmZikgPDwgODsgdGhpcy5yWzFdID0gKCh0MCA+Pj4gMTMpIHwgKHQxIDw8ICAzKSkgJiAweDFmZmY7XG4gIHQyID0ga2V5WyA0XSAmIDB4ZmYgfCAoa2V5WyA1XSAmIDB4ZmYpIDw8IDg7IHRoaXMuclsyXSA9ICgodDEgPj4+IDEwKSB8ICh0MiA8PCAgNikpICYgMHgxZjAzO1xuICB0MyA9IGtleVsgNl0gJiAweGZmIHwgKGtleVsgN10gJiAweGZmKSA8PCA4OyB0aGlzLnJbM10gPSAoKHQyID4+PiAgNykgfCAodDMgPDwgIDkpKSAmIDB4MWZmZjtcbiAgdDQgPSBrZXlbIDhdICYgMHhmZiB8IChrZXlbIDldICYgMHhmZikgPDwgODsgdGhpcy5yWzRdID0gKCh0MyA+Pj4gIDQpIHwgKHQ0IDw8IDEyKSkgJiAweDAwZmY7XG4gIHRoaXMucls1XSA9ICgodDQgPj4+ICAxKSkgJiAweDFmZmU7XG4gIHQ1ID0ga2V5WzEwXSAmIDB4ZmYgfCAoa2V5WzExXSAmIDB4ZmYpIDw8IDg7IHRoaXMucls2XSA9ICgodDQgPj4+IDE0KSB8ICh0NSA8PCAgMikpICYgMHgxZmZmO1xuICB0NiA9IGtleVsxMl0gJiAweGZmIHwgKGtleVsxM10gJiAweGZmKSA8PCA4OyB0aGlzLnJbN10gPSAoKHQ1ID4+PiAxMSkgfCAodDYgPDwgIDUpKSAmIDB4MWY4MTtcbiAgdDcgPSBrZXlbMTRdICYgMHhmZiB8IChrZXlbMTVdICYgMHhmZikgPDwgODsgdGhpcy5yWzhdID0gKCh0NiA+Pj4gIDgpIHwgKHQ3IDw8ICA4KSkgJiAweDFmZmY7XG4gIHRoaXMucls5XSA9ICgodDcgPj4+ICA1KSkgJiAweDAwN2Y7XG5cbiAgdGhpcy5wYWRbMF0gPSBrZXlbMTZdICYgMHhmZiB8IChrZXlbMTddICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbMV0gPSBrZXlbMThdICYgMHhmZiB8IChrZXlbMTldICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbMl0gPSBrZXlbMjBdICYgMHhmZiB8IChrZXlbMjFdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbM10gPSBrZXlbMjJdICYgMHhmZiB8IChrZXlbMjNdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNF0gPSBrZXlbMjRdICYgMHhmZiB8IChrZXlbMjVdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNV0gPSBrZXlbMjZdICYgMHhmZiB8IChrZXlbMjddICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNl0gPSBrZXlbMjhdICYgMHhmZiB8IChrZXlbMjldICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbN10gPSBrZXlbMzBdICYgMHhmZiB8IChrZXlbMzFdICYgMHhmZikgPDwgODtcbn07XG5cbnBvbHkxMzA1LnByb3RvdHlwZS5ibG9ja3MgPSBmdW5jdGlvbihtLCBtcG9zLCBieXRlcykge1xuICB2YXIgaGliaXQgPSB0aGlzLmZpbiA/IDAgOiAoMSA8PCAxMSk7XG4gIHZhciB0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIGM7XG4gIHZhciBkMCwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcsIGQ4LCBkOTtcblxuICB2YXIgaDAgPSB0aGlzLmhbMF0sXG4gICAgICBoMSA9IHRoaXMuaFsxXSxcbiAgICAgIGgyID0gdGhpcy5oWzJdLFxuICAgICAgaDMgPSB0aGlzLmhbM10sXG4gICAgICBoNCA9IHRoaXMuaFs0XSxcbiAgICAgIGg1ID0gdGhpcy5oWzVdLFxuICAgICAgaDYgPSB0aGlzLmhbNl0sXG4gICAgICBoNyA9IHRoaXMuaFs3XSxcbiAgICAgIGg4ID0gdGhpcy5oWzhdLFxuICAgICAgaDkgPSB0aGlzLmhbOV07XG5cbiAgdmFyIHIwID0gdGhpcy5yWzBdLFxuICAgICAgcjEgPSB0aGlzLnJbMV0sXG4gICAgICByMiA9IHRoaXMuclsyXSxcbiAgICAgIHIzID0gdGhpcy5yWzNdLFxuICAgICAgcjQgPSB0aGlzLnJbNF0sXG4gICAgICByNSA9IHRoaXMucls1XSxcbiAgICAgIHI2ID0gdGhpcy5yWzZdLFxuICAgICAgcjcgPSB0aGlzLnJbN10sXG4gICAgICByOCA9IHRoaXMucls4XSxcbiAgICAgIHI5ID0gdGhpcy5yWzldO1xuXG4gIHdoaWxlIChieXRlcyA+PSAxNikge1xuICAgIHQwID0gbVttcG9zKyAwXSAmIDB4ZmYgfCAobVttcG9zKyAxXSAmIDB4ZmYpIDw8IDg7IGgwICs9ICggdDAgICAgICAgICAgICAgICAgICAgICApICYgMHgxZmZmO1xuICAgIHQxID0gbVttcG9zKyAyXSAmIDB4ZmYgfCAobVttcG9zKyAzXSAmIDB4ZmYpIDw8IDg7IGgxICs9ICgodDAgPj4+IDEzKSB8ICh0MSA8PCAgMykpICYgMHgxZmZmO1xuICAgIHQyID0gbVttcG9zKyA0XSAmIDB4ZmYgfCAobVttcG9zKyA1XSAmIDB4ZmYpIDw8IDg7IGgyICs9ICgodDEgPj4+IDEwKSB8ICh0MiA8PCAgNikpICYgMHgxZmZmO1xuICAgIHQzID0gbVttcG9zKyA2XSAmIDB4ZmYgfCAobVttcG9zKyA3XSAmIDB4ZmYpIDw8IDg7IGgzICs9ICgodDIgPj4+ICA3KSB8ICh0MyA8PCAgOSkpICYgMHgxZmZmO1xuICAgIHQ0ID0gbVttcG9zKyA4XSAmIDB4ZmYgfCAobVttcG9zKyA5XSAmIDB4ZmYpIDw8IDg7IGg0ICs9ICgodDMgPj4+ICA0KSB8ICh0NCA8PCAxMikpICYgMHgxZmZmO1xuICAgIGg1ICs9ICgodDQgPj4+ICAxKSkgJiAweDFmZmY7XG4gICAgdDUgPSBtW21wb3MrMTBdICYgMHhmZiB8IChtW21wb3MrMTFdICYgMHhmZikgPDwgODsgaDYgKz0gKCh0NCA+Pj4gMTQpIHwgKHQ1IDw8ICAyKSkgJiAweDFmZmY7XG4gICAgdDYgPSBtW21wb3MrMTJdICYgMHhmZiB8IChtW21wb3MrMTNdICYgMHhmZikgPDwgODsgaDcgKz0gKCh0NSA+Pj4gMTEpIHwgKHQ2IDw8ICA1KSkgJiAweDFmZmY7XG4gICAgdDcgPSBtW21wb3MrMTRdICYgMHhmZiB8IChtW21wb3MrMTVdICYgMHhmZikgPDwgODsgaDggKz0gKCh0NiA+Pj4gIDgpIHwgKHQ3IDw8ICA4KSkgJiAweDFmZmY7XG4gICAgaDkgKz0gKCh0NyA+Pj4gNSkpIHwgaGliaXQ7XG5cbiAgICBjID0gMDtcblxuICAgIGQwID0gYztcbiAgICBkMCArPSBoMCAqIHIwO1xuICAgIGQwICs9IGgxICogKDUgKiByOSk7XG4gICAgZDAgKz0gaDIgKiAoNSAqIHI4KTtcbiAgICBkMCArPSBoMyAqICg1ICogcjcpO1xuICAgIGQwICs9IGg0ICogKDUgKiByNik7XG4gICAgYyA9IChkMCA+Pj4gMTMpOyBkMCAmPSAweDFmZmY7XG4gICAgZDAgKz0gaDUgKiAoNSAqIHI1KTtcbiAgICBkMCArPSBoNiAqICg1ICogcjQpO1xuICAgIGQwICs9IGg3ICogKDUgKiByMyk7XG4gICAgZDAgKz0gaDggKiAoNSAqIHIyKTtcbiAgICBkMCArPSBoOSAqICg1ICogcjEpO1xuICAgIGMgKz0gKGQwID4+PiAxMyk7IGQwICY9IDB4MWZmZjtcblxuICAgIGQxID0gYztcbiAgICBkMSArPSBoMCAqIHIxO1xuICAgIGQxICs9IGgxICogcjA7XG4gICAgZDEgKz0gaDIgKiAoNSAqIHI5KTtcbiAgICBkMSArPSBoMyAqICg1ICogcjgpO1xuICAgIGQxICs9IGg0ICogKDUgKiByNyk7XG4gICAgYyA9IChkMSA+Pj4gMTMpOyBkMSAmPSAweDFmZmY7XG4gICAgZDEgKz0gaDUgKiAoNSAqIHI2KTtcbiAgICBkMSArPSBoNiAqICg1ICogcjUpO1xuICAgIGQxICs9IGg3ICogKDUgKiByNCk7XG4gICAgZDEgKz0gaDggKiAoNSAqIHIzKTtcbiAgICBkMSArPSBoOSAqICg1ICogcjIpO1xuICAgIGMgKz0gKGQxID4+PiAxMyk7IGQxICY9IDB4MWZmZjtcblxuICAgIGQyID0gYztcbiAgICBkMiArPSBoMCAqIHIyO1xuICAgIGQyICs9IGgxICogcjE7XG4gICAgZDIgKz0gaDIgKiByMDtcbiAgICBkMiArPSBoMyAqICg1ICogcjkpO1xuICAgIGQyICs9IGg0ICogKDUgKiByOCk7XG4gICAgYyA9IChkMiA+Pj4gMTMpOyBkMiAmPSAweDFmZmY7XG4gICAgZDIgKz0gaDUgKiAoNSAqIHI3KTtcbiAgICBkMiArPSBoNiAqICg1ICogcjYpO1xuICAgIGQyICs9IGg3ICogKDUgKiByNSk7XG4gICAgZDIgKz0gaDggKiAoNSAqIHI0KTtcbiAgICBkMiArPSBoOSAqICg1ICogcjMpO1xuICAgIGMgKz0gKGQyID4+PiAxMyk7IGQyICY9IDB4MWZmZjtcblxuICAgIGQzID0gYztcbiAgICBkMyArPSBoMCAqIHIzO1xuICAgIGQzICs9IGgxICogcjI7XG4gICAgZDMgKz0gaDIgKiByMTtcbiAgICBkMyArPSBoMyAqIHIwO1xuICAgIGQzICs9IGg0ICogKDUgKiByOSk7XG4gICAgYyA9IChkMyA+Pj4gMTMpOyBkMyAmPSAweDFmZmY7XG4gICAgZDMgKz0gaDUgKiAoNSAqIHI4KTtcbiAgICBkMyArPSBoNiAqICg1ICogcjcpO1xuICAgIGQzICs9IGg3ICogKDUgKiByNik7XG4gICAgZDMgKz0gaDggKiAoNSAqIHI1KTtcbiAgICBkMyArPSBoOSAqICg1ICogcjQpO1xuICAgIGMgKz0gKGQzID4+PiAxMyk7IGQzICY9IDB4MWZmZjtcblxuICAgIGQ0ID0gYztcbiAgICBkNCArPSBoMCAqIHI0O1xuICAgIGQ0ICs9IGgxICogcjM7XG4gICAgZDQgKz0gaDIgKiByMjtcbiAgICBkNCArPSBoMyAqIHIxO1xuICAgIGQ0ICs9IGg0ICogcjA7XG4gICAgYyA9IChkNCA+Pj4gMTMpOyBkNCAmPSAweDFmZmY7XG4gICAgZDQgKz0gaDUgKiAoNSAqIHI5KTtcbiAgICBkNCArPSBoNiAqICg1ICogcjgpO1xuICAgIGQ0ICs9IGg3ICogKDUgKiByNyk7XG4gICAgZDQgKz0gaDggKiAoNSAqIHI2KTtcbiAgICBkNCArPSBoOSAqICg1ICogcjUpO1xuICAgIGMgKz0gKGQ0ID4+PiAxMyk7IGQ0ICY9IDB4MWZmZjtcblxuICAgIGQ1ID0gYztcbiAgICBkNSArPSBoMCAqIHI1O1xuICAgIGQ1ICs9IGgxICogcjQ7XG4gICAgZDUgKz0gaDIgKiByMztcbiAgICBkNSArPSBoMyAqIHIyO1xuICAgIGQ1ICs9IGg0ICogcjE7XG4gICAgYyA9IChkNSA+Pj4gMTMpOyBkNSAmPSAweDFmZmY7XG4gICAgZDUgKz0gaDUgKiByMDtcbiAgICBkNSArPSBoNiAqICg1ICogcjkpO1xuICAgIGQ1ICs9IGg3ICogKDUgKiByOCk7XG4gICAgZDUgKz0gaDggKiAoNSAqIHI3KTtcbiAgICBkNSArPSBoOSAqICg1ICogcjYpO1xuICAgIGMgKz0gKGQ1ID4+PiAxMyk7IGQ1ICY9IDB4MWZmZjtcblxuICAgIGQ2ID0gYztcbiAgICBkNiArPSBoMCAqIHI2O1xuICAgIGQ2ICs9IGgxICogcjU7XG4gICAgZDYgKz0gaDIgKiByNDtcbiAgICBkNiArPSBoMyAqIHIzO1xuICAgIGQ2ICs9IGg0ICogcjI7XG4gICAgYyA9IChkNiA+Pj4gMTMpOyBkNiAmPSAweDFmZmY7XG4gICAgZDYgKz0gaDUgKiByMTtcbiAgICBkNiArPSBoNiAqIHIwO1xuICAgIGQ2ICs9IGg3ICogKDUgKiByOSk7XG4gICAgZDYgKz0gaDggKiAoNSAqIHI4KTtcbiAgICBkNiArPSBoOSAqICg1ICogcjcpO1xuICAgIGMgKz0gKGQ2ID4+PiAxMyk7IGQ2ICY9IDB4MWZmZjtcblxuICAgIGQ3ID0gYztcbiAgICBkNyArPSBoMCAqIHI3O1xuICAgIGQ3ICs9IGgxICogcjY7XG4gICAgZDcgKz0gaDIgKiByNTtcbiAgICBkNyArPSBoMyAqIHI0O1xuICAgIGQ3ICs9IGg0ICogcjM7XG4gICAgYyA9IChkNyA+Pj4gMTMpOyBkNyAmPSAweDFmZmY7XG4gICAgZDcgKz0gaDUgKiByMjtcbiAgICBkNyArPSBoNiAqIHIxO1xuICAgIGQ3ICs9IGg3ICogcjA7XG4gICAgZDcgKz0gaDggKiAoNSAqIHI5KTtcbiAgICBkNyArPSBoOSAqICg1ICogcjgpO1xuICAgIGMgKz0gKGQ3ID4+PiAxMyk7IGQ3ICY9IDB4MWZmZjtcblxuICAgIGQ4ID0gYztcbiAgICBkOCArPSBoMCAqIHI4O1xuICAgIGQ4ICs9IGgxICogcjc7XG4gICAgZDggKz0gaDIgKiByNjtcbiAgICBkOCArPSBoMyAqIHI1O1xuICAgIGQ4ICs9IGg0ICogcjQ7XG4gICAgYyA9IChkOCA+Pj4gMTMpOyBkOCAmPSAweDFmZmY7XG4gICAgZDggKz0gaDUgKiByMztcbiAgICBkOCArPSBoNiAqIHIyO1xuICAgIGQ4ICs9IGg3ICogcjE7XG4gICAgZDggKz0gaDggKiByMDtcbiAgICBkOCArPSBoOSAqICg1ICogcjkpO1xuICAgIGMgKz0gKGQ4ID4+PiAxMyk7IGQ4ICY9IDB4MWZmZjtcblxuICAgIGQ5ID0gYztcbiAgICBkOSArPSBoMCAqIHI5O1xuICAgIGQ5ICs9IGgxICogcjg7XG4gICAgZDkgKz0gaDIgKiByNztcbiAgICBkOSArPSBoMyAqIHI2O1xuICAgIGQ5ICs9IGg0ICogcjU7XG4gICAgYyA9IChkOSA+Pj4gMTMpOyBkOSAmPSAweDFmZmY7XG4gICAgZDkgKz0gaDUgKiByNDtcbiAgICBkOSArPSBoNiAqIHIzO1xuICAgIGQ5ICs9IGg3ICogcjI7XG4gICAgZDkgKz0gaDggKiByMTtcbiAgICBkOSArPSBoOSAqIHIwO1xuICAgIGMgKz0gKGQ5ID4+PiAxMyk7IGQ5ICY9IDB4MWZmZjtcblxuICAgIGMgPSAoKChjIDw8IDIpICsgYykpIHwgMDtcbiAgICBjID0gKGMgKyBkMCkgfCAwO1xuICAgIGQwID0gYyAmIDB4MWZmZjtcbiAgICBjID0gKGMgPj4+IDEzKTtcbiAgICBkMSArPSBjO1xuXG4gICAgaDAgPSBkMDtcbiAgICBoMSA9IGQxO1xuICAgIGgyID0gZDI7XG4gICAgaDMgPSBkMztcbiAgICBoNCA9IGQ0O1xuICAgIGg1ID0gZDU7XG4gICAgaDYgPSBkNjtcbiAgICBoNyA9IGQ3O1xuICAgIGg4ID0gZDg7XG4gICAgaDkgPSBkOTtcblxuICAgIG1wb3MgKz0gMTY7XG4gICAgYnl0ZXMgLT0gMTY7XG4gIH1cbiAgdGhpcy5oWzBdID0gaDA7XG4gIHRoaXMuaFsxXSA9IGgxO1xuICB0aGlzLmhbMl0gPSBoMjtcbiAgdGhpcy5oWzNdID0gaDM7XG4gIHRoaXMuaFs0XSA9IGg0O1xuICB0aGlzLmhbNV0gPSBoNTtcbiAgdGhpcy5oWzZdID0gaDY7XG4gIHRoaXMuaFs3XSA9IGg3O1xuICB0aGlzLmhbOF0gPSBoODtcbiAgdGhpcy5oWzldID0gaDk7XG59O1xuXG5wb2x5MTMwNS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24obWFjLCBtYWNwb3MpIHtcbiAgdmFyIGcgPSBuZXcgVWludDE2QXJyYXkoMTApO1xuICB2YXIgYywgbWFzaywgZiwgaTtcblxuICBpZiAodGhpcy5sZWZ0b3Zlcikge1xuICAgIGkgPSB0aGlzLmxlZnRvdmVyO1xuICAgIHRoaXMuYnVmZmVyW2krK10gPSAxO1xuICAgIGZvciAoOyBpIDwgMTY7IGkrKykgdGhpcy5idWZmZXJbaV0gPSAwO1xuICAgIHRoaXMuZmluID0gMTtcbiAgICB0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwgMCwgMTYpO1xuICB9XG5cbiAgYyA9IHRoaXMuaFsxXSA+Pj4gMTM7XG4gIHRoaXMuaFsxXSAmPSAweDFmZmY7XG4gIGZvciAoaSA9IDI7IGkgPCAxMDsgaSsrKSB7XG4gICAgdGhpcy5oW2ldICs9IGM7XG4gICAgYyA9IHRoaXMuaFtpXSA+Pj4gMTM7XG4gICAgdGhpcy5oW2ldICY9IDB4MWZmZjtcbiAgfVxuICB0aGlzLmhbMF0gKz0gKGMgKiA1KTtcbiAgYyA9IHRoaXMuaFswXSA+Pj4gMTM7XG4gIHRoaXMuaFswXSAmPSAweDFmZmY7XG4gIHRoaXMuaFsxXSArPSBjO1xuICBjID0gdGhpcy5oWzFdID4+PiAxMztcbiAgdGhpcy5oWzFdICY9IDB4MWZmZjtcbiAgdGhpcy5oWzJdICs9IGM7XG5cbiAgZ1swXSA9IHRoaXMuaFswXSArIDU7XG4gIGMgPSBnWzBdID4+PiAxMztcbiAgZ1swXSAmPSAweDFmZmY7XG4gIGZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgZ1tpXSA9IHRoaXMuaFtpXSArIGM7XG4gICAgYyA9IGdbaV0gPj4+IDEzO1xuICAgIGdbaV0gJj0gMHgxZmZmO1xuICB9XG4gIGdbOV0gLT0gKDEgPDwgMTMpO1xuXG4gIG1hc2sgPSAoYyBeIDEpIC0gMTtcbiAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIGdbaV0gJj0gbWFzaztcbiAgbWFzayA9IH5tYXNrO1xuICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgdGhpcy5oW2ldID0gKHRoaXMuaFtpXSAmIG1hc2spIHwgZ1tpXTtcblxuICB0aGlzLmhbMF0gPSAoKHRoaXMuaFswXSAgICAgICApIHwgKHRoaXMuaFsxXSA8PCAxMykgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFsxXSA9ICgodGhpcy5oWzFdID4+PiAgMykgfCAodGhpcy5oWzJdIDw8IDEwKSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzJdID0gKCh0aGlzLmhbMl0gPj4+ICA2KSB8ICh0aGlzLmhbM10gPDwgIDcpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbM10gPSAoKHRoaXMuaFszXSA+Pj4gIDkpIHwgKHRoaXMuaFs0XSA8PCAgNCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs0XSA9ICgodGhpcy5oWzRdID4+PiAxMikgfCAodGhpcy5oWzVdIDw8ICAxKSB8ICh0aGlzLmhbNl0gPDwgMTQpKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzVdID0gKCh0aGlzLmhbNl0gPj4+ICAyKSB8ICh0aGlzLmhbN10gPDwgMTEpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbNl0gPSAoKHRoaXMuaFs3XSA+Pj4gIDUpIHwgKHRoaXMuaFs4XSA8PCAgOCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs3XSA9ICgodGhpcy5oWzhdID4+PiAgOCkgfCAodGhpcy5oWzldIDw8ICA1KSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcblxuICBmID0gdGhpcy5oWzBdICsgdGhpcy5wYWRbMF07XG4gIHRoaXMuaFswXSA9IGYgJiAweGZmZmY7XG4gIGZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHtcbiAgICBmID0gKCgodGhpcy5oW2ldICsgdGhpcy5wYWRbaV0pIHwgMCkgKyAoZiA+Pj4gMTYpKSB8IDA7XG4gICAgdGhpcy5oW2ldID0gZiAmIDB4ZmZmZjtcbiAgfVxuXG4gIG1hY1ttYWNwb3MrIDBdID0gKHRoaXMuaFswXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyAxXSA9ICh0aGlzLmhbMF0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgMl0gPSAodGhpcy5oWzFdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDNdID0gKHRoaXMuaFsxXSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA0XSA9ICh0aGlzLmhbMl0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgNV0gPSAodGhpcy5oWzJdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDZdID0gKHRoaXMuaFszXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA3XSA9ICh0aGlzLmhbM10gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgOF0gPSAodGhpcy5oWzRdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDldID0gKHRoaXMuaFs0XSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEwXSA9ICh0aGlzLmhbNV0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysxMV0gPSAodGhpcy5oWzVdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTJdID0gKHRoaXMuaFs2XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEzXSA9ICh0aGlzLmhbNl0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysxNF0gPSAodGhpcy5oWzddID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTVdID0gKHRoaXMuaFs3XSA+Pj4gOCkgJiAweGZmO1xufTtcblxucG9seTEzMDUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKG0sIG1wb3MsIGJ5dGVzKSB7XG4gIHZhciBpLCB3YW50O1xuXG4gIGlmICh0aGlzLmxlZnRvdmVyKSB7XG4gICAgd2FudCA9ICgxNiAtIHRoaXMubGVmdG92ZXIpO1xuICAgIGlmICh3YW50ID4gYnl0ZXMpXG4gICAgICB3YW50ID0gYnl0ZXM7XG4gICAgZm9yIChpID0gMDsgaSA8IHdhbnQ7IGkrKylcbiAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVmdG92ZXIgKyBpXSA9IG1bbXBvcytpXTtcbiAgICBieXRlcyAtPSB3YW50O1xuICAgIG1wb3MgKz0gd2FudDtcbiAgICB0aGlzLmxlZnRvdmVyICs9IHdhbnQ7XG4gICAgaWYgKHRoaXMubGVmdG92ZXIgPCAxNilcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwgMCwgMTYpO1xuICAgIHRoaXMubGVmdG92ZXIgPSAwO1xuICB9XG5cbiAgaWYgKGJ5dGVzID49IDE2KSB7XG4gICAgd2FudCA9IGJ5dGVzIC0gKGJ5dGVzICUgMTYpO1xuICAgIHRoaXMuYmxvY2tzKG0sIG1wb3MsIHdhbnQpO1xuICAgIG1wb3MgKz0gd2FudDtcbiAgICBieXRlcyAtPSB3YW50O1xuICB9XG5cbiAgaWYgKGJ5dGVzKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyspXG4gICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyICsgaV0gPSBtW21wb3MraV07XG4gICAgdGhpcy5sZWZ0b3ZlciArPSBieXRlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gY3J5cHRvX29uZXRpbWVhdXRoKG91dCwgb3V0cG9zLCBtLCBtcG9zLCBuLCBrKSB7XG4gIHZhciBzID0gbmV3IHBvbHkxMzA1KGspO1xuICBzLnVwZGF0ZShtLCBtcG9zLCBuKTtcbiAgcy5maW5pc2gob3V0LCBvdXRwb3MpO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeShoLCBocG9zLCBtLCBtcG9zLCBuLCBrKSB7XG4gIHZhciB4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBjcnlwdG9fb25ldGltZWF1dGgoeCwwLG0sbXBvcyxuLGspO1xuICByZXR1cm4gY3J5cHRvX3ZlcmlmeV8xNihoLGhwb3MseCwwKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NlY3JldGJveChjLG0sZCxuLGspIHtcbiAgdmFyIGk7XG4gIGlmIChkIDwgMzIpIHJldHVybiAtMTtcbiAgY3J5cHRvX3N0cmVhbV94b3IoYywwLG0sMCxkLG4sayk7XG4gIGNyeXB0b19vbmV0aW1lYXV0aChjLCAxNiwgYywgMzIsIGQgLSAzMiwgYyk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSBjW2ldID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3hfb3BlbihtLGMsZCxuLGspIHtcbiAgdmFyIGk7XG4gIHZhciB4ID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBpZiAoZCA8IDMyKSByZXR1cm4gLTE7XG4gIGNyeXB0b19zdHJlYW0oeCwwLDMyLG4sayk7XG4gIGlmIChjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5KGMsIDE2LGMsIDMyLGQgLSAzMix4KSAhPT0gMCkgcmV0dXJuIC0xO1xuICBjcnlwdG9fc3RyZWFtX3hvcihtLDAsYywwLGQsbixrKTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIG1baV0gPSAwO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gc2V0MjU1MTkociwgYSkge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHJbaV0gPSBhW2ldfDA7XG59XG5cbmZ1bmN0aW9uIGNhcjI1NTE5KG8pIHtcbiAgdmFyIGksIHYsIGMgPSAxO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIHYgPSBvW2ldICsgYyArIDY1NTM1O1xuICAgIGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7XG4gICAgb1tpXSA9IHYgLSBjICogNjU1MzY7XG4gIH1cbiAgb1swXSArPSBjLTEgKyAzNyAqIChjLTEpO1xufVxuXG5mdW5jdGlvbiBzZWwyNTUxOShwLCBxLCBiKSB7XG4gIHZhciB0LCBjID0gfihiLTEpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB0ID0gYyAmIChwW2ldIF4gcVtpXSk7XG4gICAgcFtpXSBePSB0O1xuICAgIHFbaV0gXj0gdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWNrMjU1MTkobywgbikge1xuICB2YXIgaSwgaiwgYjtcbiAgdmFyIG0gPSBnZigpLCB0ID0gZ2YoKTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHRbaV0gPSBuW2ldO1xuICBjYXIyNTUxOSh0KTtcbiAgY2FyMjU1MTkodCk7XG4gIGNhcjI1NTE5KHQpO1xuICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7XG4gICAgbVswXSA9IHRbMF0gLSAweGZmZWQ7XG4gICAgZm9yIChpID0gMTsgaSA8IDE1OyBpKyspIHtcbiAgICAgIG1baV0gPSB0W2ldIC0gMHhmZmZmIC0gKChtW2ktMV0+PjE2KSAmIDEpO1xuICAgICAgbVtpLTFdICY9IDB4ZmZmZjtcbiAgICB9XG4gICAgbVsxNV0gPSB0WzE1XSAtIDB4N2ZmZiAtICgobVsxNF0+PjE2KSAmIDEpO1xuICAgIGIgPSAobVsxNV0+PjE2KSAmIDE7XG4gICAgbVsxNF0gJj0gMHhmZmZmO1xuICAgIHNlbDI1NTE5KHQsIG0sIDEtYik7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBvWzIqaV0gPSB0W2ldICYgMHhmZjtcbiAgICBvWzIqaSsxXSA9IHRbaV0+Pjg7XG4gIH1cbn1cblxuZnVuY3Rpb24gbmVxMjU1MTkoYSwgYikge1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KDMyKSwgZCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgcGFjazI1NTE5KGMsIGEpO1xuICBwYWNrMjU1MTkoZCwgYik7XG4gIHJldHVybiBjcnlwdG9fdmVyaWZ5XzMyKGMsIDAsIGQsIDApO1xufVxuXG5mdW5jdGlvbiBwYXIyNTUxOShhKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBwYWNrMjU1MTkoZCwgYSk7XG4gIHJldHVybiBkWzBdICYgMTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrMjU1MTkobywgbikge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIG9baV0gPSBuWzIqaV0gKyAoblsyKmkrMV0gPDwgOCk7XG4gIG9bMTVdICY9IDB4N2ZmZjtcbn1cblxuZnVuY3Rpb24gQShvLCBhLCBiKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgb1tpXSA9IGFbaV0gKyBiW2ldO1xufVxuXG5mdW5jdGlvbiBaKG8sIGEsIGIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSBvW2ldID0gYVtpXSAtIGJbaV07XG59XG5cbmZ1bmN0aW9uIE0obywgYSwgYikge1xuICB2YXIgdiwgYyxcbiAgICAgdDAgPSAwLCAgdDEgPSAwLCAgdDIgPSAwLCAgdDMgPSAwLCAgdDQgPSAwLCAgdDUgPSAwLCAgdDYgPSAwLCAgdDcgPSAwLFxuICAgICB0OCA9IDAsICB0OSA9IDAsIHQxMCA9IDAsIHQxMSA9IDAsIHQxMiA9IDAsIHQxMyA9IDAsIHQxNCA9IDAsIHQxNSA9IDAsXG4gICAgdDE2ID0gMCwgdDE3ID0gMCwgdDE4ID0gMCwgdDE5ID0gMCwgdDIwID0gMCwgdDIxID0gMCwgdDIyID0gMCwgdDIzID0gMCxcbiAgICB0MjQgPSAwLCB0MjUgPSAwLCB0MjYgPSAwLCB0MjcgPSAwLCB0MjggPSAwLCB0MjkgPSAwLCB0MzAgPSAwLFxuICAgIGIwID0gYlswXSxcbiAgICBiMSA9IGJbMV0sXG4gICAgYjIgPSBiWzJdLFxuICAgIGIzID0gYlszXSxcbiAgICBiNCA9IGJbNF0sXG4gICAgYjUgPSBiWzVdLFxuICAgIGI2ID0gYls2XSxcbiAgICBiNyA9IGJbN10sXG4gICAgYjggPSBiWzhdLFxuICAgIGI5ID0gYls5XSxcbiAgICBiMTAgPSBiWzEwXSxcbiAgICBiMTEgPSBiWzExXSxcbiAgICBiMTIgPSBiWzEyXSxcbiAgICBiMTMgPSBiWzEzXSxcbiAgICBiMTQgPSBiWzE0XSxcbiAgICBiMTUgPSBiWzE1XTtcblxuICB2ID0gYVswXTtcbiAgdDAgKz0gdiAqIGIwO1xuICB0MSArPSB2ICogYjE7XG4gIHQyICs9IHYgKiBiMjtcbiAgdDMgKz0gdiAqIGIzO1xuICB0NCArPSB2ICogYjQ7XG4gIHQ1ICs9IHYgKiBiNTtcbiAgdDYgKz0gdiAqIGI2O1xuICB0NyArPSB2ICogYjc7XG4gIHQ4ICs9IHYgKiBiODtcbiAgdDkgKz0gdiAqIGI5O1xuICB0MTAgKz0gdiAqIGIxMDtcbiAgdDExICs9IHYgKiBiMTE7XG4gIHQxMiArPSB2ICogYjEyO1xuICB0MTMgKz0gdiAqIGIxMztcbiAgdDE0ICs9IHYgKiBiMTQ7XG4gIHQxNSArPSB2ICogYjE1O1xuICB2ID0gYVsxXTtcbiAgdDEgKz0gdiAqIGIwO1xuICB0MiArPSB2ICogYjE7XG4gIHQzICs9IHYgKiBiMjtcbiAgdDQgKz0gdiAqIGIzO1xuICB0NSArPSB2ICogYjQ7XG4gIHQ2ICs9IHYgKiBiNTtcbiAgdDcgKz0gdiAqIGI2O1xuICB0OCArPSB2ICogYjc7XG4gIHQ5ICs9IHYgKiBiODtcbiAgdDEwICs9IHYgKiBiOTtcbiAgdDExICs9IHYgKiBiMTA7XG4gIHQxMiArPSB2ICogYjExO1xuICB0MTMgKz0gdiAqIGIxMjtcbiAgdDE0ICs9IHYgKiBiMTM7XG4gIHQxNSArPSB2ICogYjE0O1xuICB0MTYgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMl07XG4gIHQyICs9IHYgKiBiMDtcbiAgdDMgKz0gdiAqIGIxO1xuICB0NCArPSB2ICogYjI7XG4gIHQ1ICs9IHYgKiBiMztcbiAgdDYgKz0gdiAqIGI0O1xuICB0NyArPSB2ICogYjU7XG4gIHQ4ICs9IHYgKiBiNjtcbiAgdDkgKz0gdiAqIGI3O1xuICB0MTAgKz0gdiAqIGI4O1xuICB0MTEgKz0gdiAqIGI5O1xuICB0MTIgKz0gdiAqIGIxMDtcbiAgdDEzICs9IHYgKiBiMTE7XG4gIHQxNCArPSB2ICogYjEyO1xuICB0MTUgKz0gdiAqIGIxMztcbiAgdDE2ICs9IHYgKiBiMTQ7XG4gIHQxNyArPSB2ICogYjE1O1xuICB2ID0gYVszXTtcbiAgdDMgKz0gdiAqIGIwO1xuICB0NCArPSB2ICogYjE7XG4gIHQ1ICs9IHYgKiBiMjtcbiAgdDYgKz0gdiAqIGIzO1xuICB0NyArPSB2ICogYjQ7XG4gIHQ4ICs9IHYgKiBiNTtcbiAgdDkgKz0gdiAqIGI2O1xuICB0MTAgKz0gdiAqIGI3O1xuICB0MTEgKz0gdiAqIGI4O1xuICB0MTIgKz0gdiAqIGI5O1xuICB0MTMgKz0gdiAqIGIxMDtcbiAgdDE0ICs9IHYgKiBiMTE7XG4gIHQxNSArPSB2ICogYjEyO1xuICB0MTYgKz0gdiAqIGIxMztcbiAgdDE3ICs9IHYgKiBiMTQ7XG4gIHQxOCArPSB2ICogYjE1O1xuICB2ID0gYVs0XTtcbiAgdDQgKz0gdiAqIGIwO1xuICB0NSArPSB2ICogYjE7XG4gIHQ2ICs9IHYgKiBiMjtcbiAgdDcgKz0gdiAqIGIzO1xuICB0OCArPSB2ICogYjQ7XG4gIHQ5ICs9IHYgKiBiNTtcbiAgdDEwICs9IHYgKiBiNjtcbiAgdDExICs9IHYgKiBiNztcbiAgdDEyICs9IHYgKiBiODtcbiAgdDEzICs9IHYgKiBiOTtcbiAgdDE0ICs9IHYgKiBiMTA7XG4gIHQxNSArPSB2ICogYjExO1xuICB0MTYgKz0gdiAqIGIxMjtcbiAgdDE3ICs9IHYgKiBiMTM7XG4gIHQxOCArPSB2ICogYjE0O1xuICB0MTkgKz0gdiAqIGIxNTtcbiAgdiA9IGFbNV07XG4gIHQ1ICs9IHYgKiBiMDtcbiAgdDYgKz0gdiAqIGIxO1xuICB0NyArPSB2ICogYjI7XG4gIHQ4ICs9IHYgKiBiMztcbiAgdDkgKz0gdiAqIGI0O1xuICB0MTAgKz0gdiAqIGI1O1xuICB0MTEgKz0gdiAqIGI2O1xuICB0MTIgKz0gdiAqIGI3O1xuICB0MTMgKz0gdiAqIGI4O1xuICB0MTQgKz0gdiAqIGI5O1xuICB0MTUgKz0gdiAqIGIxMDtcbiAgdDE2ICs9IHYgKiBiMTE7XG4gIHQxNyArPSB2ICogYjEyO1xuICB0MTggKz0gdiAqIGIxMztcbiAgdDE5ICs9IHYgKiBiMTQ7XG4gIHQyMCArPSB2ICogYjE1O1xuICB2ID0gYVs2XTtcbiAgdDYgKz0gdiAqIGIwO1xuICB0NyArPSB2ICogYjE7XG4gIHQ4ICs9IHYgKiBiMjtcbiAgdDkgKz0gdiAqIGIzO1xuICB0MTAgKz0gdiAqIGI0O1xuICB0MTEgKz0gdiAqIGI1O1xuICB0MTIgKz0gdiAqIGI2O1xuICB0MTMgKz0gdiAqIGI3O1xuICB0MTQgKz0gdiAqIGI4O1xuICB0MTUgKz0gdiAqIGI5O1xuICB0MTYgKz0gdiAqIGIxMDtcbiAgdDE3ICs9IHYgKiBiMTE7XG4gIHQxOCArPSB2ICogYjEyO1xuICB0MTkgKz0gdiAqIGIxMztcbiAgdDIwICs9IHYgKiBiMTQ7XG4gIHQyMSArPSB2ICogYjE1O1xuICB2ID0gYVs3XTtcbiAgdDcgKz0gdiAqIGIwO1xuICB0OCArPSB2ICogYjE7XG4gIHQ5ICs9IHYgKiBiMjtcbiAgdDEwICs9IHYgKiBiMztcbiAgdDExICs9IHYgKiBiNDtcbiAgdDEyICs9IHYgKiBiNTtcbiAgdDEzICs9IHYgKiBiNjtcbiAgdDE0ICs9IHYgKiBiNztcbiAgdDE1ICs9IHYgKiBiODtcbiAgdDE2ICs9IHYgKiBiOTtcbiAgdDE3ICs9IHYgKiBiMTA7XG4gIHQxOCArPSB2ICogYjExO1xuICB0MTkgKz0gdiAqIGIxMjtcbiAgdDIwICs9IHYgKiBiMTM7XG4gIHQyMSArPSB2ICogYjE0O1xuICB0MjIgKz0gdiAqIGIxNTtcbiAgdiA9IGFbOF07XG4gIHQ4ICs9IHYgKiBiMDtcbiAgdDkgKz0gdiAqIGIxO1xuICB0MTAgKz0gdiAqIGIyO1xuICB0MTEgKz0gdiAqIGIzO1xuICB0MTIgKz0gdiAqIGI0O1xuICB0MTMgKz0gdiAqIGI1O1xuICB0MTQgKz0gdiAqIGI2O1xuICB0MTUgKz0gdiAqIGI3O1xuICB0MTYgKz0gdiAqIGI4O1xuICB0MTcgKz0gdiAqIGI5O1xuICB0MTggKz0gdiAqIGIxMDtcbiAgdDE5ICs9IHYgKiBiMTE7XG4gIHQyMCArPSB2ICogYjEyO1xuICB0MjEgKz0gdiAqIGIxMztcbiAgdDIyICs9IHYgKiBiMTQ7XG4gIHQyMyArPSB2ICogYjE1O1xuICB2ID0gYVs5XTtcbiAgdDkgKz0gdiAqIGIwO1xuICB0MTAgKz0gdiAqIGIxO1xuICB0MTEgKz0gdiAqIGIyO1xuICB0MTIgKz0gdiAqIGIzO1xuICB0MTMgKz0gdiAqIGI0O1xuICB0MTQgKz0gdiAqIGI1O1xuICB0MTUgKz0gdiAqIGI2O1xuICB0MTYgKz0gdiAqIGI3O1xuICB0MTcgKz0gdiAqIGI4O1xuICB0MTggKz0gdiAqIGI5O1xuICB0MTkgKz0gdiAqIGIxMDtcbiAgdDIwICs9IHYgKiBiMTE7XG4gIHQyMSArPSB2ICogYjEyO1xuICB0MjIgKz0gdiAqIGIxMztcbiAgdDIzICs9IHYgKiBiMTQ7XG4gIHQyNCArPSB2ICogYjE1O1xuICB2ID0gYVsxMF07XG4gIHQxMCArPSB2ICogYjA7XG4gIHQxMSArPSB2ICogYjE7XG4gIHQxMiArPSB2ICogYjI7XG4gIHQxMyArPSB2ICogYjM7XG4gIHQxNCArPSB2ICogYjQ7XG4gIHQxNSArPSB2ICogYjU7XG4gIHQxNiArPSB2ICogYjY7XG4gIHQxNyArPSB2ICogYjc7XG4gIHQxOCArPSB2ICogYjg7XG4gIHQxOSArPSB2ICogYjk7XG4gIHQyMCArPSB2ICogYjEwO1xuICB0MjEgKz0gdiAqIGIxMTtcbiAgdDIyICs9IHYgKiBiMTI7XG4gIHQyMyArPSB2ICogYjEzO1xuICB0MjQgKz0gdiAqIGIxNDtcbiAgdDI1ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzExXTtcbiAgdDExICs9IHYgKiBiMDtcbiAgdDEyICs9IHYgKiBiMTtcbiAgdDEzICs9IHYgKiBiMjtcbiAgdDE0ICs9IHYgKiBiMztcbiAgdDE1ICs9IHYgKiBiNDtcbiAgdDE2ICs9IHYgKiBiNTtcbiAgdDE3ICs9IHYgKiBiNjtcbiAgdDE4ICs9IHYgKiBiNztcbiAgdDE5ICs9IHYgKiBiODtcbiAgdDIwICs9IHYgKiBiOTtcbiAgdDIxICs9IHYgKiBiMTA7XG4gIHQyMiArPSB2ICogYjExO1xuICB0MjMgKz0gdiAqIGIxMjtcbiAgdDI0ICs9IHYgKiBiMTM7XG4gIHQyNSArPSB2ICogYjE0O1xuICB0MjYgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTJdO1xuICB0MTIgKz0gdiAqIGIwO1xuICB0MTMgKz0gdiAqIGIxO1xuICB0MTQgKz0gdiAqIGIyO1xuICB0MTUgKz0gdiAqIGIzO1xuICB0MTYgKz0gdiAqIGI0O1xuICB0MTcgKz0gdiAqIGI1O1xuICB0MTggKz0gdiAqIGI2O1xuICB0MTkgKz0gdiAqIGI3O1xuICB0MjAgKz0gdiAqIGI4O1xuICB0MjEgKz0gdiAqIGI5O1xuICB0MjIgKz0gdiAqIGIxMDtcbiAgdDIzICs9IHYgKiBiMTE7XG4gIHQyNCArPSB2ICogYjEyO1xuICB0MjUgKz0gdiAqIGIxMztcbiAgdDI2ICs9IHYgKiBiMTQ7XG4gIHQyNyArPSB2ICogYjE1O1xuICB2ID0gYVsxM107XG4gIHQxMyArPSB2ICogYjA7XG4gIHQxNCArPSB2ICogYjE7XG4gIHQxNSArPSB2ICogYjI7XG4gIHQxNiArPSB2ICogYjM7XG4gIHQxNyArPSB2ICogYjQ7XG4gIHQxOCArPSB2ICogYjU7XG4gIHQxOSArPSB2ICogYjY7XG4gIHQyMCArPSB2ICogYjc7XG4gIHQyMSArPSB2ICogYjg7XG4gIHQyMiArPSB2ICogYjk7XG4gIHQyMyArPSB2ICogYjEwO1xuICB0MjQgKz0gdiAqIGIxMTtcbiAgdDI1ICs9IHYgKiBiMTI7XG4gIHQyNiArPSB2ICogYjEzO1xuICB0MjcgKz0gdiAqIGIxNDtcbiAgdDI4ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzE0XTtcbiAgdDE0ICs9IHYgKiBiMDtcbiAgdDE1ICs9IHYgKiBiMTtcbiAgdDE2ICs9IHYgKiBiMjtcbiAgdDE3ICs9IHYgKiBiMztcbiAgdDE4ICs9IHYgKiBiNDtcbiAgdDE5ICs9IHYgKiBiNTtcbiAgdDIwICs9IHYgKiBiNjtcbiAgdDIxICs9IHYgKiBiNztcbiAgdDIyICs9IHYgKiBiODtcbiAgdDIzICs9IHYgKiBiOTtcbiAgdDI0ICs9IHYgKiBiMTA7XG4gIHQyNSArPSB2ICogYjExO1xuICB0MjYgKz0gdiAqIGIxMjtcbiAgdDI3ICs9IHYgKiBiMTM7XG4gIHQyOCArPSB2ICogYjE0O1xuICB0MjkgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTVdO1xuICB0MTUgKz0gdiAqIGIwO1xuICB0MTYgKz0gdiAqIGIxO1xuICB0MTcgKz0gdiAqIGIyO1xuICB0MTggKz0gdiAqIGIzO1xuICB0MTkgKz0gdiAqIGI0O1xuICB0MjAgKz0gdiAqIGI1O1xuICB0MjEgKz0gdiAqIGI2O1xuICB0MjIgKz0gdiAqIGI3O1xuICB0MjMgKz0gdiAqIGI4O1xuICB0MjQgKz0gdiAqIGI5O1xuICB0MjUgKz0gdiAqIGIxMDtcbiAgdDI2ICs9IHYgKiBiMTE7XG4gIHQyNyArPSB2ICogYjEyO1xuICB0MjggKz0gdiAqIGIxMztcbiAgdDI5ICs9IHYgKiBiMTQ7XG4gIHQzMCArPSB2ICogYjE1O1xuXG4gIHQwICArPSAzOCAqIHQxNjtcbiAgdDEgICs9IDM4ICogdDE3O1xuICB0MiAgKz0gMzggKiB0MTg7XG4gIHQzICArPSAzOCAqIHQxOTtcbiAgdDQgICs9IDM4ICogdDIwO1xuICB0NSAgKz0gMzggKiB0MjE7XG4gIHQ2ICArPSAzOCAqIHQyMjtcbiAgdDcgICs9IDM4ICogdDIzO1xuICB0OCAgKz0gMzggKiB0MjQ7XG4gIHQ5ICArPSAzOCAqIHQyNTtcbiAgdDEwICs9IDM4ICogdDI2O1xuICB0MTEgKz0gMzggKiB0Mjc7XG4gIHQxMiArPSAzOCAqIHQyODtcbiAgdDEzICs9IDM4ICogdDI5O1xuICB0MTQgKz0gMzggKiB0MzA7XG4gIC8vIHQxNSBsZWZ0IGFzIGlzXG5cbiAgLy8gZmlyc3QgY2FyXG4gIGMgPSAxO1xuICB2ID0gIHQwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQxICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDUgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ2ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDYgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ3ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDcgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ4ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDggPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ5ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDkgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDExICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTUgPSB2IC0gYyAqIDY1NTM2O1xuICB0MCArPSBjLTEgKyAzNyAqIChjLTEpO1xuXG4gIC8vIHNlY29uZCBjYXJcbiAgYyA9IDE7XG4gIHYgPSAgdDAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDYgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDcgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDggKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDkgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNSA9IHYgLSBjICogNjU1MzY7XG4gIHQwICs9IGMtMSArIDM3ICogKGMtMSk7XG5cbiAgb1sgMF0gPSB0MDtcbiAgb1sgMV0gPSB0MTtcbiAgb1sgMl0gPSB0MjtcbiAgb1sgM10gPSB0MztcbiAgb1sgNF0gPSB0NDtcbiAgb1sgNV0gPSB0NTtcbiAgb1sgNl0gPSB0NjtcbiAgb1sgN10gPSB0NztcbiAgb1sgOF0gPSB0ODtcbiAgb1sgOV0gPSB0OTtcbiAgb1sxMF0gPSB0MTA7XG4gIG9bMTFdID0gdDExO1xuICBvWzEyXSA9IHQxMjtcbiAgb1sxM10gPSB0MTM7XG4gIG9bMTRdID0gdDE0O1xuICBvWzE1XSA9IHQxNTtcbn1cblxuZnVuY3Rpb24gUyhvLCBhKSB7XG4gIE0obywgYSwgYSk7XG59XG5cbmZ1bmN0aW9uIGludjI1NTE5KG8sIGkpIHtcbiAgdmFyIGMgPSBnZigpO1xuICB2YXIgYTtcbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIGNbYV0gPSBpW2FdO1xuICBmb3IgKGEgPSAyNTM7IGEgPj0gMDsgYS0tKSB7XG4gICAgUyhjLCBjKTtcbiAgICBpZihhICE9PSAyICYmIGEgIT09IDQpIE0oYywgYywgaSk7XG4gIH1cbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIG9bYV0gPSBjW2FdO1xufVxuXG5mdW5jdGlvbiBwb3cyNTIzKG8sIGkpIHtcbiAgdmFyIGMgPSBnZigpO1xuICB2YXIgYTtcbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIGNbYV0gPSBpW2FdO1xuICBmb3IgKGEgPSAyNTA7IGEgPj0gMDsgYS0tKSB7XG4gICAgICBTKGMsIGMpO1xuICAgICAgaWYoYSAhPT0gMSkgTShjLCBjLCBpKTtcbiAgfVxuICBmb3IgKGEgPSAwOyBhIDwgMTY7IGErKykgb1thXSA9IGNbYV07XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIHApIHtcbiAgdmFyIHogPSBuZXcgVWludDhBcnJheSgzMik7XG4gIHZhciB4ID0gbmV3IEZsb2F0NjRBcnJheSg4MCksIHIsIGk7XG4gIHZhciBhID0gZ2YoKSwgYiA9IGdmKCksIGMgPSBnZigpLFxuICAgICAgZCA9IGdmKCksIGUgPSBnZigpLCBmID0gZ2YoKTtcbiAgZm9yIChpID0gMDsgaSA8IDMxOyBpKyspIHpbaV0gPSBuW2ldO1xuICB6WzMxXT0oblszMV0mMTI3KXw2NDtcbiAgelswXSY9MjQ4O1xuICB1bnBhY2syNTUxOSh4LHApO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJbaV09eFtpXTtcbiAgICBkW2ldPWFbaV09Y1tpXT0wO1xuICB9XG4gIGFbMF09ZFswXT0xO1xuICBmb3IgKGk9MjU0OyBpPj0wOyAtLWkpIHtcbiAgICByPSh6W2k+Pj4zXT4+PihpJjcpKSYxO1xuICAgIHNlbDI1NTE5KGEsYixyKTtcbiAgICBzZWwyNTUxOShjLGQscik7XG4gICAgQShlLGEsYyk7XG4gICAgWihhLGEsYyk7XG4gICAgQShjLGIsZCk7XG4gICAgWihiLGIsZCk7XG4gICAgUyhkLGUpO1xuICAgIFMoZixhKTtcbiAgICBNKGEsYyxhKTtcbiAgICBNKGMsYixlKTtcbiAgICBBKGUsYSxjKTtcbiAgICBaKGEsYSxjKTtcbiAgICBTKGIsYSk7XG4gICAgWihjLGQsZik7XG4gICAgTShhLGMsXzEyMTY2NSk7XG4gICAgQShhLGEsZCk7XG4gICAgTShjLGMsYSk7XG4gICAgTShhLGQsZik7XG4gICAgTShkLGIseCk7XG4gICAgUyhiLGUpO1xuICAgIHNlbDI1NTE5KGEsYixyKTtcbiAgICBzZWwyNTUxOShjLGQscik7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB4W2krMTZdPWFbaV07XG4gICAgeFtpKzMyXT1jW2ldO1xuICAgIHhbaSs0OF09YltpXTtcbiAgICB4W2krNjRdPWRbaV07XG4gIH1cbiAgdmFyIHgzMiA9IHguc3ViYXJyYXkoMzIpO1xuICB2YXIgeDE2ID0geC5zdWJhcnJheSgxNik7XG4gIGludjI1NTE5KHgzMix4MzIpO1xuICBNKHgxNix4MTYseDMyKTtcbiAgcGFjazI1NTE5KHEseDE2KTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UocSwgbikge1xuICByZXR1cm4gY3J5cHRvX3NjYWxhcm11bHQocSwgbiwgXzkpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X2tleXBhaXIoeSwgeCkge1xuICByYW5kb21ieXRlcyh4LCAzMik7XG4gIHJldHVybiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHksIHgpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHksIHgpIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19zY2FsYXJtdWx0KHMsIHgsIHkpO1xuICByZXR1cm4gY3J5cHRvX2NvcmVfaHNhbHNhMjAoaywgXzAsIHMsIHNpZ21hKTtcbn1cblxudmFyIGNyeXB0b19ib3hfYWZ0ZXJubSA9IGNyeXB0b19zZWNyZXRib3g7XG52YXIgY3J5cHRvX2JveF9vcGVuX2FmdGVybm0gPSBjcnlwdG9fc2VjcmV0Ym94X29wZW47XG5cbmZ1bmN0aW9uIGNyeXB0b19ib3goYywgbSwgZCwgbiwgeSwgeCkge1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgY3J5cHRvX2JveF9iZWZvcmVubShrLCB5LCB4KTtcbiAgcmV0dXJuIGNyeXB0b19ib3hfYWZ0ZXJubShjLCBtLCBkLCBuLCBrKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9vcGVuKG0sIGMsIGQsIG4sIHksIHgpIHtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgeSwgeCk7XG4gIHJldHVybiBjcnlwdG9fYm94X29wZW5fYWZ0ZXJubShtLCBjLCBkLCBuLCBrKTtcbn1cblxudmFyIEsgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl07XG5cbmZ1bmN0aW9uIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgbSwgbikge1xuICB2YXIgd2ggPSBuZXcgSW50MzJBcnJheSgxNiksIHdsID0gbmV3IEludDMyQXJyYXkoMTYpLFxuICAgICAgYmgwLCBiaDEsIGJoMiwgYmgzLCBiaDQsIGJoNSwgYmg2LCBiaDcsXG4gICAgICBibDAsIGJsMSwgYmwyLCBibDMsIGJsNCwgYmw1LCBibDYsIGJsNyxcbiAgICAgIHRoLCB0bCwgaSwgaiwgaCwgbCwgYSwgYiwgYywgZDtcblxuICB2YXIgYWgwID0gaGhbMF0sXG4gICAgICBhaDEgPSBoaFsxXSxcbiAgICAgIGFoMiA9IGhoWzJdLFxuICAgICAgYWgzID0gaGhbM10sXG4gICAgICBhaDQgPSBoaFs0XSxcbiAgICAgIGFoNSA9IGhoWzVdLFxuICAgICAgYWg2ID0gaGhbNl0sXG4gICAgICBhaDcgPSBoaFs3XSxcblxuICAgICAgYWwwID0gaGxbMF0sXG4gICAgICBhbDEgPSBobFsxXSxcbiAgICAgIGFsMiA9IGhsWzJdLFxuICAgICAgYWwzID0gaGxbM10sXG4gICAgICBhbDQgPSBobFs0XSxcbiAgICAgIGFsNSA9IGhsWzVdLFxuICAgICAgYWw2ID0gaGxbNl0sXG4gICAgICBhbDcgPSBobFs3XTtcblxuICB2YXIgcG9zID0gMDtcbiAgd2hpbGUgKG4gPj0gMTI4KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGogPSA4ICogaSArIHBvcztcbiAgICAgIHdoW2ldID0gKG1baiswXSA8PCAyNCkgfCAobVtqKzFdIDw8IDE2KSB8IChtW2orMl0gPDwgOCkgfCBtW2orM107XG4gICAgICB3bFtpXSA9IChtW2orNF0gPDwgMjQpIHwgKG1bais1XSA8PCAxNikgfCAobVtqKzZdIDw8IDgpIHwgbVtqKzddO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgODA7IGkrKykge1xuICAgICAgYmgwID0gYWgwO1xuICAgICAgYmgxID0gYWgxO1xuICAgICAgYmgyID0gYWgyO1xuICAgICAgYmgzID0gYWgzO1xuICAgICAgYmg0ID0gYWg0O1xuICAgICAgYmg1ID0gYWg1O1xuICAgICAgYmg2ID0gYWg2O1xuICAgICAgYmg3ID0gYWg3O1xuXG4gICAgICBibDAgPSBhbDA7XG4gICAgICBibDEgPSBhbDE7XG4gICAgICBibDIgPSBhbDI7XG4gICAgICBibDMgPSBhbDM7XG4gICAgICBibDQgPSBhbDQ7XG4gICAgICBibDUgPSBhbDU7XG4gICAgICBibDYgPSBhbDY7XG4gICAgICBibDcgPSBhbDc7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IGFoNztcbiAgICAgIGwgPSBhbDc7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAvLyBTaWdtYTFcbiAgICAgIGggPSAoKGFoNCA+Pj4gMTQpIHwgKGFsNCA8PCAoMzItMTQpKSkgXiAoKGFoNCA+Pj4gMTgpIHwgKGFsNCA8PCAoMzItMTgpKSkgXiAoKGFsNCA+Pj4gKDQxLTMyKSkgfCAoYWg0IDw8ICgzMi0oNDEtMzIpKSkpO1xuICAgICAgbCA9ICgoYWw0ID4+PiAxNCkgfCAoYWg0IDw8ICgzMi0xNCkpKSBeICgoYWw0ID4+PiAxOCkgfCAoYWg0IDw8ICgzMi0xOCkpKSBeICgoYWg0ID4+PiAoNDEtMzIpKSB8IChhbDQgPDwgKDMyLSg0MS0zMikpKSk7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgLy8gQ2hcbiAgICAgIGggPSAoYWg0ICYgYWg1KSBeICh+YWg0ICYgYWg2KTtcbiAgICAgIGwgPSAoYWw0ICYgYWw1KSBeICh+YWw0ICYgYWw2KTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyBLXG4gICAgICBoID0gS1tpKjJdO1xuICAgICAgbCA9IEtbaSoyKzFdO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIHdcbiAgICAgIGggPSB3aFtpJTE2XTtcbiAgICAgIGwgPSB3bFtpJTE2XTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICBiICs9IGEgPj4+IDE2O1xuICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICAgIHRoID0gYyAmIDB4ZmZmZiB8IGQgPDwgMTY7XG4gICAgICB0bCA9IGEgJiAweGZmZmYgfCBiIDw8IDE2O1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSB0aDtcbiAgICAgIGwgPSB0bDtcblxuICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIFNpZ21hMFxuICAgICAgaCA9ICgoYWgwID4+PiAyOCkgfCAoYWwwIDw8ICgzMi0yOCkpKSBeICgoYWwwID4+PiAoMzQtMzIpKSB8IChhaDAgPDwgKDMyLSgzNC0zMikpKSkgXiAoKGFsMCA+Pj4gKDM5LTMyKSkgfCAoYWgwIDw8ICgzMi0oMzktMzIpKSkpO1xuICAgICAgbCA9ICgoYWwwID4+PiAyOCkgfCAoYWgwIDw8ICgzMi0yOCkpKSBeICgoYWgwID4+PiAoMzQtMzIpKSB8IChhbDAgPDwgKDMyLSgzNC0zMikpKSkgXiAoKGFoMCA+Pj4gKDM5LTMyKSkgfCAoYWwwIDw8ICgzMi0oMzktMzIpKSkpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIE1halxuICAgICAgaCA9IChhaDAgJiBhaDEpIF4gKGFoMCAmIGFoMikgXiAoYWgxICYgYWgyKTtcbiAgICAgIGwgPSAoYWwwICYgYWwxKSBeIChhbDAgJiBhbDIpIF4gKGFsMSAmIGFsMik7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICBiaDcgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICBibDcgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IGJoMztcbiAgICAgIGwgPSBibDM7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICBoID0gdGg7XG4gICAgICBsID0gdGw7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICBiaDMgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICBibDMgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICAgIGFoMSA9IGJoMDtcbiAgICAgIGFoMiA9IGJoMTtcbiAgICAgIGFoMyA9IGJoMjtcbiAgICAgIGFoNCA9IGJoMztcbiAgICAgIGFoNSA9IGJoNDtcbiAgICAgIGFoNiA9IGJoNTtcbiAgICAgIGFoNyA9IGJoNjtcbiAgICAgIGFoMCA9IGJoNztcblxuICAgICAgYWwxID0gYmwwO1xuICAgICAgYWwyID0gYmwxO1xuICAgICAgYWwzID0gYmwyO1xuICAgICAgYWw0ID0gYmwzO1xuICAgICAgYWw1ID0gYmw0O1xuICAgICAgYWw2ID0gYmw1O1xuICAgICAgYWw3ID0gYmw2O1xuICAgICAgYWwwID0gYmw3O1xuXG4gICAgICBpZiAoaSUxNiA9PT0gMTUpIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHtcbiAgICAgICAgICAvLyBhZGRcbiAgICAgICAgICBoID0gd2hbal07XG4gICAgICAgICAgbCA9IHdsW2pdO1xuXG4gICAgICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAgICAgaCA9IHdoWyhqKzkpJTE2XTtcbiAgICAgICAgICBsID0gd2xbKGorOSklMTZdO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIC8vIHNpZ21hMFxuICAgICAgICAgIHRoID0gd2hbKGorMSklMTZdO1xuICAgICAgICAgIHRsID0gd2xbKGorMSklMTZdO1xuICAgICAgICAgIGggPSAoKHRoID4+PiAxKSB8ICh0bCA8PCAoMzItMSkpKSBeICgodGggPj4+IDgpIHwgKHRsIDw8ICgzMi04KSkpIF4gKHRoID4+PiA3KTtcbiAgICAgICAgICBsID0gKCh0bCA+Pj4gMSkgfCAodGggPDwgKDMyLTEpKSkgXiAoKHRsID4+PiA4KSB8ICh0aCA8PCAoMzItOCkpKSBeICgodGwgPj4+IDcpIHwgKHRoIDw8ICgzMi03KSkpO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIC8vIHNpZ21hMVxuICAgICAgICAgIHRoID0gd2hbKGorMTQpJTE2XTtcbiAgICAgICAgICB0bCA9IHdsWyhqKzE0KSUxNl07XG4gICAgICAgICAgaCA9ICgodGggPj4+IDE5KSB8ICh0bCA8PCAoMzItMTkpKSkgXiAoKHRsID4+PiAoNjEtMzIpKSB8ICh0aCA8PCAoMzItKDYxLTMyKSkpKSBeICh0aCA+Pj4gNik7XG4gICAgICAgICAgbCA9ICgodGwgPj4+IDE5KSB8ICh0aCA8PCAoMzItMTkpKSkgXiAoKHRoID4+PiAoNjEtMzIpKSB8ICh0bCA8PCAoMzItKDYxLTMyKSkpKSBeICgodGwgPj4+IDYpIHwgKHRoIDw8ICgzMi02KSkpO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICAgICAgd2hbal0gPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICAgICAgd2xbal0gPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGRcbiAgICBoID0gYWgwO1xuICAgIGwgPSBhbDA7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMF07XG4gICAgbCA9IGhsWzBdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMF0gPSBhaDAgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMF0gPSBhbDAgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgxO1xuICAgIGwgPSBhbDE7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMV07XG4gICAgbCA9IGhsWzFdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMV0gPSBhaDEgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMV0gPSBhbDEgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgyO1xuICAgIGwgPSBhbDI7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMl07XG4gICAgbCA9IGhsWzJdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMl0gPSBhaDIgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMl0gPSBhbDIgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgzO1xuICAgIGwgPSBhbDM7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbM107XG4gICAgbCA9IGhsWzNdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbM10gPSBhaDMgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbM10gPSBhbDMgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg0O1xuICAgIGwgPSBhbDQ7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNF07XG4gICAgbCA9IGhsWzRdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNF0gPSBhaDQgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNF0gPSBhbDQgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg1O1xuICAgIGwgPSBhbDU7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNV07XG4gICAgbCA9IGhsWzVdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNV0gPSBhaDUgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNV0gPSBhbDUgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg2O1xuICAgIGwgPSBhbDY7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNl07XG4gICAgbCA9IGhsWzZdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNl0gPSBhaDYgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNl0gPSBhbDYgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg3O1xuICAgIGwgPSBhbDc7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbN107XG4gICAgbCA9IGhsWzddO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbN10gPSBhaDcgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbN10gPSBhbDcgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBwb3MgKz0gMTI4O1xuICAgIG4gLT0gMTI4O1xuICB9XG5cbiAgcmV0dXJuIG47XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19oYXNoKG91dCwgbSwgbikge1xuICB2YXIgaGggPSBuZXcgSW50MzJBcnJheSg4KSxcbiAgICAgIGhsID0gbmV3IEludDMyQXJyYXkoOCksXG4gICAgICB4ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KSxcbiAgICAgIGksIGIgPSBuO1xuXG4gIGhoWzBdID0gMHg2YTA5ZTY2NztcbiAgaGhbMV0gPSAweGJiNjdhZTg1O1xuICBoaFsyXSA9IDB4M2M2ZWYzNzI7XG4gIGhoWzNdID0gMHhhNTRmZjUzYTtcbiAgaGhbNF0gPSAweDUxMGU1MjdmO1xuICBoaFs1XSA9IDB4OWIwNTY4OGM7XG4gIGhoWzZdID0gMHgxZjgzZDlhYjtcbiAgaGhbN10gPSAweDViZTBjZDE5O1xuXG4gIGhsWzBdID0gMHhmM2JjYzkwODtcbiAgaGxbMV0gPSAweDg0Y2FhNzNiO1xuICBobFsyXSA9IDB4ZmU5NGY4MmI7XG4gIGhsWzNdID0gMHg1ZjFkMzZmMTtcbiAgaGxbNF0gPSAweGFkZTY4MmQxO1xuICBobFs1XSA9IDB4MmIzZTZjMWY7XG4gIGhsWzZdID0gMHhmYjQxYmQ2YjtcbiAgaGxbN10gPSAweDEzN2UyMTc5O1xuXG4gIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgbSwgbik7XG4gIG4gJT0gMTI4O1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHhbaV0gPSBtW2ItbitpXTtcbiAgeFtuXSA9IDEyODtcblxuICBuID0gMjU2LTEyOCoobjwxMTI/MTowKTtcbiAgeFtuLTldID0gMDtcbiAgdHM2NCh4LCBuLTgsICAoYiAvIDB4MjAwMDAwMDApIHwgMCwgYiA8PCAzKTtcbiAgY3J5cHRvX2hhc2hibG9ja3NfaGwoaGgsIGhsLCB4LCBuKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB0czY0KG91dCwgOCppLCBoaFtpXSwgaGxbaV0pO1xuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBhZGQocCwgcSkge1xuICB2YXIgYSA9IGdmKCksIGIgPSBnZigpLCBjID0gZ2YoKSxcbiAgICAgIGQgPSBnZigpLCBlID0gZ2YoKSwgZiA9IGdmKCksXG4gICAgICBnID0gZ2YoKSwgaCA9IGdmKCksIHQgPSBnZigpO1xuXG4gIFooYSwgcFsxXSwgcFswXSk7XG4gIFoodCwgcVsxXSwgcVswXSk7XG4gIE0oYSwgYSwgdCk7XG4gIEEoYiwgcFswXSwgcFsxXSk7XG4gIEEodCwgcVswXSwgcVsxXSk7XG4gIE0oYiwgYiwgdCk7XG4gIE0oYywgcFszXSwgcVszXSk7XG4gIE0oYywgYywgRDIpO1xuICBNKGQsIHBbMl0sIHFbMl0pO1xuICBBKGQsIGQsIGQpO1xuICBaKGUsIGIsIGEpO1xuICBaKGYsIGQsIGMpO1xuICBBKGcsIGQsIGMpO1xuICBBKGgsIGIsIGEpO1xuXG4gIE0ocFswXSwgZSwgZik7XG4gIE0ocFsxXSwgaCwgZyk7XG4gIE0ocFsyXSwgZywgZik7XG4gIE0ocFszXSwgZSwgaCk7XG59XG5cbmZ1bmN0aW9uIGNzd2FwKHAsIHEsIGIpIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBzZWwyNTUxOShwW2ldLCBxW2ldLCBiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWNrKHIsIHApIHtcbiAgdmFyIHR4ID0gZ2YoKSwgdHkgPSBnZigpLCB6aSA9IGdmKCk7XG4gIGludjI1NTE5KHppLCBwWzJdKTtcbiAgTSh0eCwgcFswXSwgemkpO1xuICBNKHR5LCBwWzFdLCB6aSk7XG4gIHBhY2syNTUxOShyLCB0eSk7XG4gIHJbMzFdIF49IHBhcjI1NTE5KHR4KSA8PCA3O1xufVxuXG5mdW5jdGlvbiBzY2FsYXJtdWx0KHAsIHEsIHMpIHtcbiAgdmFyIGIsIGk7XG4gIHNldDI1NTE5KHBbMF0sIGdmMCk7XG4gIHNldDI1NTE5KHBbMV0sIGdmMSk7XG4gIHNldDI1NTE5KHBbMl0sIGdmMSk7XG4gIHNldDI1NTE5KHBbM10sIGdmMCk7XG4gIGZvciAoaSA9IDI1NTsgaSA+PSAwOyAtLWkpIHtcbiAgICBiID0gKHNbKGkvOCl8MF0gPj4gKGkmNykpICYgMTtcbiAgICBjc3dhcChwLCBxLCBiKTtcbiAgICBhZGQocSwgcCk7XG4gICAgYWRkKHAsIHApO1xuICAgIGNzd2FwKHAsIHEsIGIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjYWxhcmJhc2UocCwgcykge1xuICB2YXIgcSA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcbiAgc2V0MjU1MTkocVswXSwgWCk7XG4gIHNldDI1NTE5KHFbMV0sIFkpO1xuICBzZXQyNTUxOShxWzJdLCBnZjEpO1xuICBNKHFbM10sIFgsIFkpO1xuICBzY2FsYXJtdWx0KHAsIHEsIHMpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzaywgc2VlZGVkKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcbiAgdmFyIGk7XG5cbiAgaWYgKCFzZWVkZWQpIHJhbmRvbWJ5dGVzKHNrLCAzMik7XG4gIGNyeXB0b19oYXNoKGQsIHNrLCAzMik7XG4gIGRbMF0gJj0gMjQ4O1xuICBkWzMxXSAmPSAxMjc7XG4gIGRbMzFdIHw9IDY0O1xuXG4gIHNjYWxhcmJhc2UocCwgZCk7XG4gIHBhY2socGssIHApO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBza1tpKzMyXSA9IHBrW2ldO1xuICByZXR1cm4gMDtcbn1cblxudmFyIEwgPSBuZXcgRmxvYXQ2NEFycmF5KFsweGVkLCAweGQzLCAweGY1LCAweDVjLCAweDFhLCAweDYzLCAweDEyLCAweDU4LCAweGQ2LCAweDljLCAweGY3LCAweGEyLCAweGRlLCAweGY5LCAweGRlLCAweDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDEwXSk7XG5cbmZ1bmN0aW9uIG1vZEwociwgeCkge1xuICB2YXIgY2FycnksIGksIGosIGs7XG4gIGZvciAoaSA9IDYzOyBpID49IDMyOyAtLWkpIHtcbiAgICBjYXJyeSA9IDA7XG4gICAgZm9yIChqID0gaSAtIDMyLCBrID0gaSAtIDEyOyBqIDwgazsgKytqKSB7XG4gICAgICB4W2pdICs9IGNhcnJ5IC0gMTYgKiB4W2ldICogTFtqIC0gKGkgLSAzMildO1xuICAgICAgY2FycnkgPSAoeFtqXSArIDEyOCkgPj4gODtcbiAgICAgIHhbal0gLT0gY2FycnkgKiAyNTY7XG4gICAgfVxuICAgIHhbal0gKz0gY2Fycnk7XG4gICAgeFtpXSA9IDA7XG4gIH1cbiAgY2FycnkgPSAwO1xuICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykge1xuICAgIHhbal0gKz0gY2FycnkgLSAoeFszMV0gPj4gNCkgKiBMW2pdO1xuICAgIGNhcnJ5ID0geFtqXSA+PiA4O1xuICAgIHhbal0gJj0gMjU1O1xuICB9XG4gIGZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB4W2pdIC09IGNhcnJ5ICogTFtqXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICB4W2krMV0gKz0geFtpXSA+PiA4O1xuICAgIHJbaV0gPSB4W2ldICYgMjU1O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZHVjZShyKSB7XG4gIHZhciB4ID0gbmV3IEZsb2F0NjRBcnJheSg2NCksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB4W2ldID0gcltpXTtcbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHJbaV0gPSAwO1xuICBtb2RMKHIsIHgpO1xufVxuXG4vLyBOb3RlOiBkaWZmZXJlbmNlIGZyb20gQyAtIHNtbGVuIHJldHVybmVkLCBub3QgcGFzc2VkIGFzIGFyZ3VtZW50LlxuZnVuY3Rpb24gY3J5cHRvX3NpZ24oc20sIG0sIG4sIHNrKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoNjQpLCBoID0gbmV3IFVpbnQ4QXJyYXkoNjQpLCByID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgaSwgaiwgeCA9IG5ldyBGbG9hdDY0QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcblxuICBjcnlwdG9faGFzaChkLCBzaywgMzIpO1xuICBkWzBdICY9IDI0ODtcbiAgZFszMV0gJj0gMTI3O1xuICBkWzMxXSB8PSA2NDtcblxuICB2YXIgc21sZW4gPSBuICsgNjQ7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHNtWzY0ICsgaV0gPSBtW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgc21bMzIgKyBpXSA9IGRbMzIgKyBpXTtcblxuICBjcnlwdG9faGFzaChyLCBzbS5zdWJhcnJheSgzMiksIG4rMzIpO1xuICByZWR1Y2Uocik7XG4gIHNjYWxhcmJhc2UocCwgcik7XG4gIHBhY2soc20sIHApO1xuXG4gIGZvciAoaSA9IDMyOyBpIDwgNjQ7IGkrKykgc21baV0gPSBza1tpXTtcbiAgY3J5cHRvX2hhc2goaCwgc20sIG4gKyA2NCk7XG4gIHJlZHVjZShoKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeFtpXSA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB4W2ldID0gcltpXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykge1xuICAgICAgeFtpK2pdICs9IGhbaV0gKiBkW2pdO1xuICAgIH1cbiAgfVxuXG4gIG1vZEwoc20uc3ViYXJyYXkoMzIpLCB4KTtcbiAgcmV0dXJuIHNtbGVuO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tuZWcociwgcCkge1xuICB2YXIgdCA9IGdmKCksIGNoayA9IGdmKCksIG51bSA9IGdmKCksXG4gICAgICBkZW4gPSBnZigpLCBkZW4yID0gZ2YoKSwgZGVuNCA9IGdmKCksXG4gICAgICBkZW42ID0gZ2YoKTtcblxuICBzZXQyNTUxOShyWzJdLCBnZjEpO1xuICB1bnBhY2syNTUxOShyWzFdLCBwKTtcbiAgUyhudW0sIHJbMV0pO1xuICBNKGRlbiwgbnVtLCBEKTtcbiAgWihudW0sIG51bSwgclsyXSk7XG4gIEEoZGVuLCByWzJdLCBkZW4pO1xuXG4gIFMoZGVuMiwgZGVuKTtcbiAgUyhkZW40LCBkZW4yKTtcbiAgTShkZW42LCBkZW40LCBkZW4yKTtcbiAgTSh0LCBkZW42LCBudW0pO1xuICBNKHQsIHQsIGRlbik7XG5cbiAgcG93MjUyMyh0LCB0KTtcbiAgTSh0LCB0LCBudW0pO1xuICBNKHQsIHQsIGRlbik7XG4gIE0odCwgdCwgZGVuKTtcbiAgTShyWzBdLCB0LCBkZW4pO1xuXG4gIFMoY2hrLCByWzBdKTtcbiAgTShjaGssIGNoaywgZGVuKTtcbiAgaWYgKG5lcTI1NTE5KGNoaywgbnVtKSkgTShyWzBdLCByWzBdLCBJKTtcblxuICBTKGNoaywgclswXSk7XG4gIE0oY2hrLCBjaGssIGRlbik7XG4gIGlmIChuZXEyNTUxOShjaGssIG51bSkpIHJldHVybiAtMTtcblxuICBpZiAocGFyMjU1MTkoclswXSkgPT09IChwWzMxXT4+NykpIFooclswXSwgZ2YwLCByWzBdKTtcblxuICBNKHJbM10sIHJbMF0sIHJbMV0pO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NpZ25fb3BlbihtLCBzbSwgbiwgcGspIHtcbiAgdmFyIGksIG1sZW47XG4gIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoMzIpLCBoID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXSxcbiAgICAgIHEgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG5cbiAgbWxlbiA9IC0xO1xuICBpZiAobiA8IDY0KSByZXR1cm4gLTE7XG5cbiAgaWYgKHVucGFja25lZyhxLCBwaykpIHJldHVybiAtMTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBtW2ldID0gc21baV07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBtW2krMzJdID0gcGtbaV07XG4gIGNyeXB0b19oYXNoKGgsIG0sIG4pO1xuICByZWR1Y2UoaCk7XG4gIHNjYWxhcm11bHQocCwgcSwgaCk7XG5cbiAgc2NhbGFyYmFzZShxLCBzbS5zdWJhcnJheSgzMikpO1xuICBhZGQocCwgcSk7XG4gIHBhY2sodCwgcCk7XG5cbiAgbiAtPSA2NDtcbiAgaWYgKGNyeXB0b192ZXJpZnlfMzIoc20sIDAsIHQsIDApKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IHNtW2kgKyA2NF07XG4gIG1sZW4gPSBuO1xuICByZXR1cm4gbWxlbjtcbn1cblxudmFyIGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMgPSAyNCxcbiAgICBjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyA9IDMyLFxuICAgIGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTID0gMTYsXG4gICAgY3J5cHRvX3NjYWxhcm11bHRfQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9OT05DRUJZVEVTID0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTLFxuICAgIGNyeXB0b19ib3hfWkVST0JZVEVTID0gY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMsXG4gICAgY3J5cHRvX2JveF9CT1haRVJPQllURVMgPSBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyxcbiAgICBjcnlwdG9fc2lnbl9CWVRFUyA9IDY0LFxuICAgIGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMgPSA2NCxcbiAgICBjcnlwdG9fc2lnbl9TRUVEQllURVMgPSAzMixcbiAgICBjcnlwdG9faGFzaF9CWVRFUyA9IDY0O1xuXG5uYWNsLmxvd2xldmVsID0ge1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMDogY3J5cHRvX2NvcmVfaHNhbHNhMjAsXG4gIGNyeXB0b19zdHJlYW1feG9yOiBjcnlwdG9fc3RyZWFtX3hvcixcbiAgY3J5cHRvX3N0cmVhbTogY3J5cHRvX3N0cmVhbSxcbiAgY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcjogY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcixcbiAgY3J5cHRvX3N0cmVhbV9zYWxzYTIwOiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAsXG4gIGNyeXB0b19vbmV0aW1lYXV0aDogY3J5cHRvX29uZXRpbWVhdXRoLFxuICBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5OiBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5LFxuICBjcnlwdG9fdmVyaWZ5XzE2OiBjcnlwdG9fdmVyaWZ5XzE2LFxuICBjcnlwdG9fdmVyaWZ5XzMyOiBjcnlwdG9fdmVyaWZ5XzMyLFxuICBjcnlwdG9fc2VjcmV0Ym94OiBjcnlwdG9fc2VjcmV0Ym94LFxuICBjcnlwdG9fc2VjcmV0Ym94X29wZW46IGNyeXB0b19zZWNyZXRib3hfb3BlbixcbiAgY3J5cHRvX3NjYWxhcm11bHQ6IGNyeXB0b19zY2FsYXJtdWx0LFxuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlOiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlLFxuICBjcnlwdG9fYm94X2JlZm9yZW5tOiBjcnlwdG9fYm94X2JlZm9yZW5tLFxuICBjcnlwdG9fYm94X2FmdGVybm06IGNyeXB0b19ib3hfYWZ0ZXJubSxcbiAgY3J5cHRvX2JveDogY3J5cHRvX2JveCxcbiAgY3J5cHRvX2JveF9vcGVuOiBjcnlwdG9fYm94X29wZW4sXG4gIGNyeXB0b19ib3hfa2V5cGFpcjogY3J5cHRvX2JveF9rZXlwYWlyLFxuICBjcnlwdG9faGFzaDogY3J5cHRvX2hhc2gsXG4gIGNyeXB0b19zaWduOiBjcnlwdG9fc2lnbixcbiAgY3J5cHRvX3NpZ25fa2V5cGFpcjogY3J5cHRvX3NpZ25fa2V5cGFpcixcbiAgY3J5cHRvX3NpZ25fb3BlbjogY3J5cHRvX3NpZ25fb3BlbixcblxuICBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVM6IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVM6IGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUzogY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMsXG4gIGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTOiBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyxcbiAgY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM6IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTLFxuICBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTOiBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTLFxuICBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTOiBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTLFxuICBjcnlwdG9fYm94X0JFRk9SRU5NQllURVM6IGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyxcbiAgY3J5cHRvX2JveF9OT05DRUJZVEVTOiBjcnlwdG9fYm94X05PTkNFQllURVMsXG4gIGNyeXB0b19ib3hfWkVST0JZVEVTOiBjcnlwdG9fYm94X1pFUk9CWVRFUyxcbiAgY3J5cHRvX2JveF9CT1haRVJPQllURVM6IGNyeXB0b19ib3hfQk9YWkVST0JZVEVTLFxuICBjcnlwdG9fc2lnbl9CWVRFUzogY3J5cHRvX3NpZ25fQllURVMsXG4gIGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTOiBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyxcbiAgY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVM6IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTLFxuICBjcnlwdG9fc2lnbl9TRUVEQllURVM6IGNyeXB0b19zaWduX1NFRURCWVRFUyxcbiAgY3J5cHRvX2hhc2hfQllURVM6IGNyeXB0b19oYXNoX0JZVEVTXG59O1xuXG4vKiBIaWdoLWxldmVsIEFQSSAqL1xuXG5mdW5jdGlvbiBjaGVja0xlbmd0aHMoaywgbikge1xuICBpZiAoay5sZW5ndGggIT09IGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIGtleSBzaXplJyk7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBub25jZSBzaXplJyk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQm94TGVuZ3Rocyhwaywgc2spIHtcbiAgaWYgKHBrLmxlbmd0aCAhPT0gY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgcHVibGljIGtleSBzaXplJyk7XG4gIGlmIChzay5sZW5ndGggIT09IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xufVxuXG5mdW5jdGlvbiBjaGVja0FycmF5VHlwZXMoKSB7XG4gIHZhciB0LCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgIGlmICgodCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHNbaV0pKSAhPT0gJ1tvYmplY3QgVWludDhBcnJheV0nKVxuICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgdHlwZSAnICsgdCArICcsIHVzZSBVaW50OEFycmF5Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cChhcnIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycltpXSA9IDA7XG59XG5cbi8vIFRPRE86IENvbXBsZXRlbHkgcmVtb3ZlIHRoaXMgaW4gdjAuMTUuXG5pZiAoIW5hY2wudXRpbCkge1xuICBuYWNsLnV0aWwgPSB7fTtcbiAgbmFjbC51dGlsLmRlY29kZVVURjggPSBuYWNsLnV0aWwuZW5jb2RlVVRGOCA9IG5hY2wudXRpbC5lbmNvZGVCYXNlNjQgPSBuYWNsLnV0aWwuZGVjb2RlQmFzZTY0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCduYWNsLnV0aWwgbW92ZWQgaW50byBzZXBhcmF0ZSBwYWNrYWdlOiBodHRwczovL2dpdGh1Yi5jb20vZGNoZXN0L3R3ZWV0bmFjbC11dGlsLWpzJyk7XG4gIH07XG59XG5cbm5hY2wucmFuZG9tQnl0ZXMgPSBmdW5jdGlvbihuKSB7XG4gIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gIHJhbmRvbWJ5dGVzKGIsIG4pO1xuICByZXR1cm4gYjtcbn07XG5cbm5hY2wuc2VjcmV0Ym94ID0gZnVuY3Rpb24obXNnLCBub25jZSwga2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIG5vbmNlLCBrZXkpO1xuICBjaGVja0xlbmd0aHMoa2V5LCBub25jZSk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMgKyBtc2cubGVuZ3RoKTtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheShtLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSBtW2krY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVNdID0gbXNnW2ldO1xuICBjcnlwdG9fc2VjcmV0Ym94KGMsIG0sIG0ubGVuZ3RoLCBub25jZSwga2V5KTtcbiAgcmV0dXJuIGMuc3ViYXJyYXkoY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMpO1xufTtcblxubmFjbC5zZWNyZXRib3gub3BlbiA9IGZ1bmN0aW9uKGJveCwgbm9uY2UsIGtleSkge1xuICBjaGVja0FycmF5VHlwZXMoYm94LCBub25jZSwga2V5KTtcbiAgY2hlY2tMZW5ndGhzKGtleSwgbm9uY2UpO1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTICsgYm94Lmxlbmd0aCk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoYy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJveC5sZW5ndGg7IGkrKykgY1tpK2NyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTXSA9IGJveFtpXTtcbiAgaWYgKGMubGVuZ3RoIDwgMzIpIHJldHVybiBmYWxzZTtcbiAgaWYgKGNyeXB0b19zZWNyZXRib3hfb3BlbihtLCBjLCBjLmxlbmd0aCwgbm9uY2UsIGtleSkgIT09IDApIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIG0uc3ViYXJyYXkoY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMpO1xufTtcblxubmFjbC5zZWNyZXRib3gua2V5TGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUztcbm5hY2wuc2VjcmV0Ym94Lm5vbmNlTGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTO1xubmFjbC5zZWNyZXRib3gub3ZlcmhlYWRMZW5ndGggPSBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUztcblxubmFjbC5zY2FsYXJNdWx0ID0gZnVuY3Rpb24obiwgcCkge1xuICBjaGVja0FycmF5VHlwZXMobiwgcCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG4gc2l6ZScpO1xuICBpZiAocC5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwIHNpemUnKTtcbiAgdmFyIHEgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyk7XG4gIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIHApO1xuICByZXR1cm4gcTtcbn07XG5cbm5hY2wuc2NhbGFyTXVsdC5iYXNlID0gZnVuY3Rpb24obikge1xuICBjaGVja0FycmF5VHlwZXMobik7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG4gc2l6ZScpO1xuICB2YXIgcSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKTtcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZShxLCBuKTtcbiAgcmV0dXJuIHE7XG59O1xuXG5uYWNsLnNjYWxhck11bHQuc2NhbGFyTGVuZ3RoID0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM7XG5uYWNsLnNjYWxhck11bHQuZ3JvdXBFbGVtZW50TGVuZ3RoID0gY3J5cHRvX3NjYWxhcm11bHRfQllURVM7XG5cbm5hY2wuYm94ID0gZnVuY3Rpb24obXNnLCBub25jZSwgcHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgdmFyIGsgPSBuYWNsLmJveC5iZWZvcmUocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gbmFjbC5zZWNyZXRib3gobXNnLCBub25jZSwgayk7XG59O1xuXG5uYWNsLmJveC5iZWZvcmUgPSBmdW5jdGlvbihwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICBjaGVja0JveExlbmd0aHMocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyk7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgcHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gaztcbn07XG5cbm5hY2wuYm94LmFmdGVyID0gbmFjbC5zZWNyZXRib3g7XG5cbm5hY2wuYm94Lm9wZW4gPSBmdW5jdGlvbihtc2csIG5vbmNlLCBwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICB2YXIgayA9IG5hY2wuYm94LmJlZm9yZShwdWJsaWNLZXksIHNlY3JldEtleSk7XG4gIHJldHVybiBuYWNsLnNlY3JldGJveC5vcGVuKG1zZywgbm9uY2UsIGspO1xufTtcblxubmFjbC5ib3gub3Blbi5hZnRlciA9IG5hY2wuc2VjcmV0Ym94Lm9wZW47XG5cbm5hY2wuYm94LmtleVBhaXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpO1xuICBjcnlwdG9fYm94X2tleXBhaXIocGssIHNrKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuYm94LmtleVBhaXIuZnJvbVNlY3JldEtleSA9IGZ1bmN0aW9uKHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMoc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpO1xuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHBrLCBzZWNyZXRLZXkpO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogbmV3IFVpbnQ4QXJyYXkoc2VjcmV0S2V5KX07XG59O1xuXG5uYWNsLmJveC5wdWJsaWNLZXlMZW5ndGggPSBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTO1xubmFjbC5ib3guc2VjcmV0S2V5TGVuZ3RoID0gY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUztcbm5hY2wuYm94LnNoYXJlZEtleUxlbmd0aCA9IGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUztcbm5hY2wuYm94Lm5vbmNlTGVuZ3RoID0gY3J5cHRvX2JveF9OT05DRUJZVEVTO1xubmFjbC5ib3gub3ZlcmhlYWRMZW5ndGggPSBuYWNsLnNlY3JldGJveC5vdmVyaGVhZExlbmd0aDtcblxubmFjbC5zaWduID0gZnVuY3Rpb24obXNnLCBzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgc2lnbmVkTXNnID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMrbXNnLmxlbmd0aCk7XG4gIGNyeXB0b19zaWduKHNpZ25lZE1zZywgbXNnLCBtc2cubGVuZ3RoLCBzZWNyZXRLZXkpO1xuICByZXR1cm4gc2lnbmVkTXNnO1xufTtcblxubmFjbC5zaWduLm9wZW4gPSBmdW5jdGlvbihzaWduZWRNc2csIHB1YmxpY0tleSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25hY2wuc2lnbi5vcGVuIGFjY2VwdHMgMiBhcmd1bWVudHM7IGRpZCB5b3UgbWVhbiB0byB1c2UgbmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeT8nKTtcbiAgY2hlY2tBcnJheVR5cGVzKHNpZ25lZE1zZywgcHVibGljS2V5KTtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICB2YXIgdG1wID0gbmV3IFVpbnQ4QXJyYXkoc2lnbmVkTXNnLmxlbmd0aCk7XG4gIHZhciBtbGVuID0gY3J5cHRvX3NpZ25fb3Blbih0bXAsIHNpZ25lZE1zZywgc2lnbmVkTXNnLmxlbmd0aCwgcHVibGljS2V5KTtcbiAgaWYgKG1sZW4gPCAwKSByZXR1cm4gbnVsbDtcbiAgdmFyIG0gPSBuZXcgVWludDhBcnJheShtbGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSBtW2ldID0gdG1wW2ldO1xuICByZXR1cm4gbTtcbn07XG5cbm5hY2wuc2lnbi5kZXRhY2hlZCA9IGZ1bmN0aW9uKG1zZywgc2VjcmV0S2V5KSB7XG4gIHZhciBzaWduZWRNc2cgPSBuYWNsLnNpZ24obXNnLCBzZWNyZXRLZXkpO1xuICB2YXIgc2lnID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZy5sZW5ndGg7IGkrKykgc2lnW2ldID0gc2lnbmVkTXNnW2ldO1xuICByZXR1cm4gc2lnO1xufTtcblxubmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeSA9IGZ1bmN0aW9uKG1zZywgc2lnLCBwdWJsaWNLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgc2lnLCBwdWJsaWNLZXkpO1xuICBpZiAoc2lnLmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2lnbmF0dXJlIHNpemUnKTtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICB2YXIgc20gPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9CWVRFUyArIG1zZy5sZW5ndGgpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTICsgbXNnLmxlbmd0aCk7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgY3J5cHRvX3NpZ25fQllURVM7IGkrKykgc21baV0gPSBzaWdbaV07XG4gIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHNtW2krY3J5cHRvX3NpZ25fQllURVNdID0gbXNnW2ldO1xuICByZXR1cm4gKGNyeXB0b19zaWduX29wZW4obSwgc20sIHNtLmxlbmd0aCwgcHVibGljS2V5KSA+PSAwKTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgdmFyIHNrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpO1xuICBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzayk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VjcmV0S2V5ID0gZnVuY3Rpb24oc2VjcmV0S2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhzZWNyZXRLZXkpO1xuICBpZiAoc2VjcmV0S2V5Lmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBway5sZW5ndGg7IGkrKykgcGtbaV0gPSBzZWNyZXRLZXlbMzIraV07XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBuZXcgVWludDhBcnJheShzZWNyZXRLZXkpfTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkID0gZnVuY3Rpb24oc2VlZCkge1xuICBjaGVja0FycmF5VHlwZXMoc2VlZCk7XG4gIGlmIChzZWVkLmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VFREJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlZWQgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKSBza1tpXSA9IHNlZWRbaV07XG4gIGNyeXB0b19zaWduX2tleXBhaXIocGssIHNrLCB0cnVlKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuc2lnbi5wdWJsaWNLZXlMZW5ndGggPSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUztcbm5hY2wuc2lnbi5zZWNyZXRLZXlMZW5ndGggPSBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUztcbm5hY2wuc2lnbi5zZWVkTGVuZ3RoID0gY3J5cHRvX3NpZ25fU0VFREJZVEVTO1xubmFjbC5zaWduLnNpZ25hdHVyZUxlbmd0aCA9IGNyeXB0b19zaWduX0JZVEVTO1xuXG5uYWNsLmhhc2ggPSBmdW5jdGlvbihtc2cpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZyk7XG4gIHZhciBoID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2hhc2hfQllURVMpO1xuICBjcnlwdG9faGFzaChoLCBtc2csIG1zZy5sZW5ndGgpO1xuICByZXR1cm4gaDtcbn07XG5cbm5hY2wuaGFzaC5oYXNoTGVuZ3RoID0gY3J5cHRvX2hhc2hfQllURVM7XG5cbm5hY2wudmVyaWZ5ID0gZnVuY3Rpb24oeCwgeSkge1xuICBjaGVja0FycmF5VHlwZXMoeCwgeSk7XG4gIC8vIFplcm8gbGVuZ3RoIGFyZ3VtZW50cyBhcmUgY29uc2lkZXJlZCBub3QgZXF1YWwuXG4gIGlmICh4Lmxlbmd0aCA9PT0gMCB8fCB5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoeC5sZW5ndGggIT09IHkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAodm4oeCwgMCwgeSwgMCwgeC5sZW5ndGgpID09PSAwKSA/IHRydWUgOiBmYWxzZTtcbn07XG5cbm5hY2wuc2V0UFJORyA9IGZ1bmN0aW9uKGZuKSB7XG4gIHJhbmRvbWJ5dGVzID0gZm47XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIC8vIEluaXRpYWxpemUgUFJORyBpZiBlbnZpcm9ubWVudCBwcm92aWRlcyBDU1BSTkcuXG4gIC8vIElmIG5vdCwgbWV0aG9kcyBjYWxsaW5nIHJhbmRvbWJ5dGVzIHdpbGwgdGhyb3cuXG4gIHZhciBjcnlwdG8gPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyAoc2VsZi5jcnlwdG8gfHwgc2VsZi5tc0NyeXB0bykgOiBudWxsO1xuICBpZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBCcm93c2Vycy5cbiAgICB2YXIgUVVPVEEgPSA2NTUzNjtcbiAgICBuYWNsLnNldFBSTkcoZnVuY3Rpb24oeCwgbikge1xuICAgICAgdmFyIGksIHYgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpICs9IFFVT1RBKSB7XG4gICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModi5zdWJhcnJheShpLCBpICsgTWF0aC5taW4obiAtIGksIFFVT1RBKSkpO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeFtpXSA9IHZbaV07XG4gICAgICBjbGVhbnVwKHYpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vZGUuanMuXG4gICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgaWYgKGNyeXB0byAmJiBjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcbiAgICAgIG5hY2wuc2V0UFJORyhmdW5jdGlvbih4LCBuKSB7XG4gICAgICAgIHZhciBpLCB2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKG4pO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB4W2ldID0gdltpXTtcbiAgICAgICAgY2xlYW51cCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSkoKTtcblxufSkodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgPyBtb2R1bGUuZXhwb3J0cyA6IChzZWxmLm5hY2wgPSBzZWxmLm5hY2wgfHwge30pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImFzc2VydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJidWZmZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZG5zXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5ldFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0cmVhbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0bHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXRpbFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ6bGliXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJleHBvcnQge1xuICBJUHJvdG9jb2wsXG4gIElDbGllbnRPcHRpb25zLFxuICBJQ29uZmlnLFxuICBJRnRwQ29uZmlnLFxuICBJU0Z0cENvbmZpZyxcbiAgSUZpbGUsXG4gIElGaWxlUGVybWlzc2lvbnMsXG4gIElGaWxlVHlwZSxcbiAgSVRyYW5zZmVyLFxuICBJVHJhbnNmZXJEaXJlY3Rpb24sXG4gIElUcmFuc2ZlclByb2dyZXNzLFxuICBJVHJhbnNmZXJQcm9ncmVzc0xpc3RlbmVyLFxuICBJVHJhbnNmZXJJbmZvLFxuICBJVHJhbnNmZXJPcHRpb25zLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgeyBDbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5leHBvcnQgeyBTdHJhdGVneSB9IGZyb20gJy4vc3RyYXRlZ2llcy9zdHJhdGVneSc7XG5leHBvcnQgeyBGdHBTdHJhdGVneSB9IGZyb20gJy4vc3RyYXRlZ2llcy9mdHAnO1xuZXhwb3J0IHsgU2Z0cFN0cmF0ZWd5IH0gZnJvbSAnLi9zdHJhdGVnaWVzL3NmdHAnO1xuXG5leHBvcnQgeyBleGVjRnVuY3Rpb24gfSBmcm9tICcuL3V0aWxzL2Z1bmN0aW9uJztcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJnbG9iYWwiLCJTRlRQU3RyZWFtIiwiU1NIMlN0cmVhbSIsInV0aWxzIiwiY29uc3RhbnRzIiwicmVhZFVJbnQzMkJFIiwiYnVmIiwib2Zmc2V0Iiwid3JpdGVVSW50MzJCRSIsInZhbHVlIiwid3JpdGVVSW50MzJMRSIsImkiLCJrZXlzIiwibGVuIiwiY3J5cHRvIiwiZWRkc2FTdXBwb3J0ZWQiLCJzaWduIiwidmVyaWZ5Iiwic2lnIiwidmVyaWZpZWQiLCJrZXkiLCJkYXRhIiwiQnVmZmVyIiwiZnJvbSIsImV4IiwiaXNCdWZmZXIiLCJsZW5ndGgiLCJjdXJ2ZTI1NTE5U3VwcG9ydGVkIiwiZGlmZmllSGVsbG1hbiIsImdlbmVyYXRlS2V5UGFpclN5bmMiLCJjcmVhdGVQdWJsaWNLZXkiLCJNRVNTQUdFIiwiRElTQ09OTkVDVCIsIklHTk9SRSIsIlVOSU1QTEVNRU5URUQiLCJERUJVRyIsIlNFUlZJQ0VfUkVRVUVTVCIsIlNFUlZJQ0VfQUNDRVBUIiwiS0VYSU5JVCIsIk5FV0tFWVMiLCJVU0VSQVVUSF9SRVFVRVNUIiwiVVNFUkFVVEhfRkFJTFVSRSIsIlVTRVJBVVRIX1NVQ0NFU1MiLCJVU0VSQVVUSF9CQU5ORVIiLCJHTE9CQUxfUkVRVUVTVCIsIlJFUVVFU1RfU1VDQ0VTUyIsIlJFUVVFU1RfRkFJTFVSRSIsIkNIQU5ORUxfT1BFTiIsIkNIQU5ORUxfT1BFTl9DT05GSVJNQVRJT04iLCJDSEFOTkVMX09QRU5fRkFJTFVSRSIsIkNIQU5ORUxfV0lORE9XX0FESlVTVCIsIkNIQU5ORUxfREFUQSIsIkNIQU5ORUxfRVhURU5ERURfREFUQSIsIkNIQU5ORUxfRU9GIiwiQ0hBTk5FTF9DTE9TRSIsIkNIQU5ORUxfUkVRVUVTVCIsIkNIQU5ORUxfU1VDQ0VTUyIsIkNIQU5ORUxfRkFJTFVSRSIsIk9iamVjdCIsIktFWERIX0lOSVQiLCJLRVhESF9SRVBMWSIsIktFWERIX0dFWF9SRVFVRVNUIiwiS0VYREhfR0VYX0dST1VQIiwiS0VYREhfR0VYX0lOSVQiLCJLRVhESF9HRVhfUkVQTFkiLCJLRVhFQ0RIX0lOSVQiLCJLRVhFQ0RIX1JFUExZIiwiVVNFUkFVVEhfUEFTU1dEX0NIQU5HRVJFUSIsIlVTRVJBVVRIX1BLX09LIiwiVVNFUkFVVEhfSU5GT19SRVFVRVNUIiwiVVNFUkFVVEhfSU5GT19SRVNQT05TRSIsIkRZTkFNSUNfS0VYREhfTUVTU0FHRSIsIktFWERIX01FU1NBR0UiLCJESVNDT05ORUNUX1JFQVNPTiIsIkhPU1RfTk9UX0FMTE9XRURfVE9fQ09OTkVDVCIsIlBST1RPQ09MX0VSUk9SIiwiS0VZX0VYQ0hBTkdFX0ZBSUxFRCIsIlJFU0VSVkVEIiwiTUFDX0VSUk9SIiwiQ09NUFJFU1NJT05fRVJST1IiLCJTRVJWSUNFX05PVF9BVkFJTEFCTEUiLCJQUk9UT0NPTF9WRVJTSU9OX05PVF9TVVBQT1JURUQiLCJIT1NUX0tFWV9OT1RfVkVSSUZJQUJMRSIsIkNPTk5FQ1RJT05fTE9TVCIsIkJZX0FQUExJQ0FUSU9OIiwiVE9PX01BTllfQ09OTkVDVElPTlMiLCJBVVRIX0NBTkNFTEVEX0JZX1VTRVIiLCJOT19NT1JFX0FVVEhfTUVUSE9EU19BVkFJTEFCTEUiLCJJTExFR0FMX1VTRVJfTkFNRSIsIkFETUlOSVNUUkFUSVZFTFlfUFJPSElCSVRFRCIsIkNPTk5FQ1RfRkFJTEVEIiwiVU5LTk9XTl9DSEFOTkVMX1RZUEUiLCJSRVNPVVJDRV9TSE9SVEFHRSIsIlRFUk1JTkFMX01PREUiLCJUVFlfT1BfRU5EIiwiVklOVFIiLCJWUVVJVCIsIlZFUkFTRSIsIlZLSUxMIiwiVkVPRiIsIlZFT0wiLCJWRU9MMiIsIlZTVEFSVCIsIlZTVE9QIiwiVlNVU1AiLCJWRFNVU1AiLCJWUkVQUklOVCIsIlZXRVJBU0UiLCJWTE5FWFQiLCJWRkxVU0giLCJWU1dUQ0giLCJWU1RBVFVTIiwiVkRJU0NBUkQiLCJJR05QQVIiLCJQQVJNUksiLCJJTlBDSyIsIklTVFJJUCIsIklOTENSIiwiSUdOQ1IiLCJJQ1JOTCIsIklVQ0xDIiwiSVhPTiIsIklYQU5ZIiwiSVhPRkYiLCJJTUFYQkVMIiwiSVNJRyIsIklDQU5PTiIsIlhDQVNFIiwiRUNITyIsIkVDSE9FIiwiRUNIT0siLCJFQ0hPTkwiLCJOT0ZMU0giLCJUT1NUT1AiLCJJRVhURU4iLCJFQ0hPQ1RMIiwiRUNIT0tFIiwiUEVORElOIiwiT1BPU1QiLCJPTENVQyIsIk9OTENSIiwiT0NSTkwiLCJPTk9DUiIsIk9OTFJFVCIsIkNTNyIsIkNTOCIsIlBBUkVOQiIsIlBBUk9ERCIsIlRUWV9PUF9JU1BFRUQiLCJUVFlfT1BfT1NQRUVEIiwiQ0hBTk5FTF9FWFRFTkRFRF9EQVRBVFlQRSIsIlNUREVSUiIsIlNJR05BTFMiLCJERUZBVUxUX0tFWCIsInVuc2hpZnQiLCJTVVBQT1JURURfS0VYIiwiS0VYX0JVRiIsImpvaW4iLCJjb25jYXQiLCJERUZBVUxUX1NFUlZFUl9IT1NUX0tFWSIsIlNVUFBPUlRFRF9TRVJWRVJfSE9TVF9LRVkiLCJTRVJWRVJfSE9TVF9LRVlfQlVGIiwiREVGQVVMVF9DSVBIRVIiLCJTVVBQT1JURURfQ0lQSEVSIiwiQ0lQSEVSX0JVRiIsIkRFRkFVTFRfSE1BQyIsIlNVUFBPUlRFRF9ITUFDIiwiSE1BQ19CVUYiLCJERUZBVUxUX0NPTVBSRVNTIiwiU1VQUE9SVEVEX0NPTVBSRVNTIiwiQ09NUFJFU1NfQlVGIiwibWFrZUNpcGhlckluZm8iLCJibG9ja0xlbiIsImtleUxlbiIsIml2TGVuIiwiYXV0aExlbiIsImRpc2NhcmRMZW4iLCJzdHJlYW0iLCJtYWtlSE1BQ0luZm8iLCJhY3R1YWxMZW4iLCJDSVBIRVJfSU5GTyIsIkhNQUNfSU5GTyIsIkFMR09SSVRITVMiLCJLRVgiLCJTRVJWRVJfSE9TVF9LRVkiLCJDSVBIRVIiLCJITUFDIiwiQ09NUFJFU1MiLCJTU0hfVE9fT1BFTlNTTCIsIkJVR1MiLCJCQURfREhHRVgiLCJPTERfRVhJVCIsIkRZTl9SUE9SVF9CVUciLCJCVUdHWV9JTVBMUyIsIkVERFNBX1NVUFBPUlRFRCIsIkNVUlZFMjU1MTlfU1VQUE9SVEVEIiwiQmlnSW50ZWdlciIsImEiLCJiIiwiYyIsInRoaXMiLCJmcm9tTnVtYmVyIiwiZnJvbVN0cmluZyIsIm5iaSIsInByb3RvdHlwZSIsImFtIiwieCIsInciLCJqIiwibiIsInhsIiwieGgiLCJsIiwiaCIsIm0iLCJEQiIsIkRNIiwiRFYiLCJGViIsIk1hdGgiLCJwb3ciLCJGMSIsIkJJX0ZQIiwiRjIiLCJyciIsInZ2IiwiQklfUkMiLCJBcnJheSIsImNoYXJDb2RlQXQiLCJpbnQyY2hhciIsImNoYXJBdCIsImludEF0IiwicyIsIm5idiIsInIiLCJmcm9tSW50IiwibmJpdHMiLCJ0IiwiQ2xhc3NpYyIsIk1vbnRnb21lcnkiLCJtcCIsImludkRpZ2l0IiwibXBsIiwibXBoIiwidW0iLCJtdDIiLCJvcF9hbmQiLCJ5Iiwib3Bfb3IiLCJvcF94b3IiLCJvcF9hbmRub3QiLCJsYml0IiwiY2JpdCIsIk51bGxFeHAiLCJuTm9wIiwiQmFycmV0dCIsInIyIiwicTMiLCJPTkUiLCJkbFNoaWZ0VG8iLCJtdSIsImRpdmlkZSIsImNvbnZlcnQiLCJjb21wYXJlVG8iLCJtb2QiLCJyZXZlcnQiLCJyZWR1Y2UiLCJkaXZSZW1UbyIsIm11bFRvIiwibXVsdGlwbHlUbyIsInNxclRvIiwic3F1YXJlVG8iLCJhYnMiLCJaRVJPIiwic3ViVG8iLCJjb3B5VG8iLCJ1MCIsImNsYW1wIiwiZHJTaGlmdFRvIiwiayIsImZyb21SYWRpeCIsIm1pIiwic2giLCJtYXgiLCJsU2hpZnRUbyIsImJzIiwiY2JzIiwiYm0iLCJkcyIsImZsb29yIiwiclNoaWZ0VG8iLCJtaW4iLCJxIiwicG0iLCJwdCIsInRzIiwibXMiLCJuc2giLCJ5cyIsInkwIiwieXQiLCJkMSIsImQyIiwiZSIsInFkIiwiaXNFdmVuIiwiZXhwIiwieiIsImciLCJ0b1N0cmluZyIsIm5lZ2F0ZSIsInRvUmFkaXgiLCJkIiwia20iLCJwIiwiYml0TGVuZ3RoIiwibW9kUG93SW50IiwibXVsdGlwbHlVcHBlclRvIiwibXVsdGlwbHlMb3dlclRvIiwiZEFkZE9mZnNldCIsImxvd3ByaW1lcyIsImxwbGltIiwiY2h1bmtTaXplIiwiTE4yIiwibG9nIiwic2lnbnVtIiwiY3MiLCJpbnRWYWx1ZSIsInN1YnN0ciIsImRNdWx0aXBseSIsInRlc3RCaXQiLCJiaXR3aXNlVG8iLCJzaGlmdExlZnQiLCJpc1Byb2JhYmxlUHJpbWUiLCJuZXh0Qnl0ZXMiLCJvcCIsImYiLCJjaGFuZ2VCaXQiLCJhZGRUbyIsIm1vZEludCIsIm1pbGxlclJhYmluIiwibjEiLCJzdWJ0cmFjdCIsImdldExvd2VzdFNldEJpdCIsInNoaWZ0UmlnaHQiLCJyYW5kb20iLCJtb2RQb3ciLCJjbG9uZSIsImJ5dGVWYWx1ZSIsInNob3J0VmFsdWUiLCJ0b0J5dGVBcnJheSIsImVxdWFscyIsImFuZCIsIm9yIiwieG9yIiwiYW5kTm90Iiwibm90IiwiYml0Q291bnQiLCJzZXRCaXQiLCJjbGVhckJpdCIsImZsaXBCaXQiLCJhZGQiLCJtdWx0aXBseSIsInJlbWFpbmRlciIsImRpdmlkZUFuZFJlbWFpbmRlciIsImsxIiwiZzIiLCJpczEiLCJtb2RJbnZlcnNlIiwiYWMiLCJ1IiwidiIsImdjZCIsInNxdWFyZSIsImNyeXB0b1NpZ24iLCJjcnlwdG9WZXJpZnkiLCJjcmVhdGVTaWduIiwiY3JlYXRlVmVyaWZ5IiwiY3JlYXRlRGVjaXBoZXJpdiIsImNyZWF0ZUhhc2giLCJjcmVhdGVIbWFjIiwic3VwcG9ydGVkT3BlblNTTENpcGhlcnMiLCJnZXRDaXBoZXJzIiwiQmVyIiwiYmNyeXB0X3Bia2RmIiwiYnVmZmVySGVscGVycyIsIlNZTV9IQVNIX0FMR08iLCJTeW1ib2wiLCJTWU1fUFJJVl9QRU0iLCJTWU1fUFVCX1BFTSIsIlNZTV9QVUJfU1NIIiwiU1lNX0RFQ1JZUFRFRCIsIkNJUEhFUl9JTkZPX09QRU5TU0wiLCJjcmVhdGUiLCJjaXBoZXJOYW1lIiwidHJpbVN0YXJ0IiwiU3RyaW5nIiwic3RyIiwic3RhcnQiLCJzbGljZSIsIm1ha2VQRU0iLCJ0eXBlIiwicmVwbGFjZSIsImNvbWJpbmVCdWZmZXJzIiwiYnVmMSIsImJ1ZjIiLCJyZXN1bHQiLCJhbGxvY1Vuc2FmZSIsImNvcHkiLCJza2lwRmllbGRzIiwibmZpZWxkcyIsImJ1ZkxlbiIsInBvcyIsIl9wb3MiLCJsZWZ0IiwiZ2VuT3BlblNTTFJTQVB1YiIsImFzbldyaXRlciIsIldyaXRlciIsInN0YXJ0U2VxdWVuY2UiLCJ3cml0ZU9JRCIsIndyaXRlTnVsbCIsImVuZFNlcXVlbmNlIiwiQml0U3RyaW5nIiwid3JpdGVCeXRlIiwid3JpdGVCdWZmZXIiLCJJbnRlZ2VyIiwiYnVmZmVyIiwiZ2VuT3BlblNTSFJTQVB1YiIsInB1YmxpY0tleSIsIndyaXRlIiwiZ2VuT3BlblNTTFJTQVByaXYiLCJnZW5SU0FBU04xQnVmIiwiZG1wMSIsImRtcTEiLCJpcW1wIiwid3JpdGVJbnQiLCJjb2RlIiwiRnVuY3Rpb24iLCJCaWdJbnQiLCJibiIsImhleCIsInNpZ2JpdCIsInBiaSIsInFiaSIsImRiaSIsImRtcDFiaSIsImRtcTFiaSIsImdlbk9wZW5TU0xEU0FQdWIiLCJnZW5PcGVuU1NIRFNBUHViIiwiZ2VuT3BlblNTTERTQVByaXYiLCJnZW5PcGVuU1NMRWRQdWIiLCJwdWIiLCJfZW5zdXJlIiwiX2J1ZiIsIl9vZmZzZXQiLCJnZW5PcGVuU1NIRWRQdWIiLCJnZW5PcGVuU1NMRUNEU0FQdWIiLCJvaWQiLCJRIiwiZ2VuT3BlblNTSEVDRFNBUHViIiwiY3VydmVOYW1lIiwiZ2VuT3BlblNTTEVDRFNBUHJpdiIsInByaXYiLCJPY3RldFN0cmluZyIsInJlZ2V4cCIsIkJhc2VLZXkiLCJwZW0iLCJFcnJvciIsInNpZ25hdHVyZSIsInVwZGF0ZSIsInByaXZLZXkiLCJ0cnlTaWduIiwidmVyaWZpZXIiLCJwdWJLZXkiLCJ0cnlWZXJpZnkiLCJnZXRQcml2YXRlUEVNIiwiZ2V0UHVibGljUEVNIiwiZ2V0UHVibGljU1NIIiwiT3BlblNTSF9Qcml2YXRlIiwiY29tbWVudCIsInByaXZQRU0iLCJwdWJQRU0iLCJwdWJTU0giLCJhbGdvIiwiZGVjcnlwdGVkIiwiT3BlblNTSF9PbGRfUHJpdmF0ZSIsIlBQS19Qcml2YXRlIiwicGFyc2VERVIiLCJiYXNlVHlwZSIsImZ1bGxUeXBlIiwicmVhZFN0cmluZyIsImVkcHViIiwidW5kZWZpbmVkIiwiZWNwdWIiLCJPcGVuU1NIX1B1YmxpYyIsIlJGQzQ3MTZfUHVibGljIiwicGFyc2UiLCJwYXNzcGhyYXNlIiwicmV0IiwiZXhlYyIsIm1hZ2ljIiwiaW5kZXhPZiIsImVuY0luZm8iLCJjaXBoZXJLZXkiLCJjaXBoZXJJViIsImtkZk5hbWUiLCJrZGZPcHRpb25zIiwic2FsdCIsInJvdW5kcyIsImdlbiIsImtleUNvdW50IiwicmVhZEludCIsInB1YkRhdGEiLCJwcml2QmxvYiIsIm9wdGlvbnMiLCJhdXRoVGFnTGVuZ3RoIiwiZGVjaXBoZXIiLCJzZXRBdXRoVGFnIiwiZmluYWwiLCJua2V5cyIsImVkcHJpdiIsImVjcHJpdiIsInByaXZDb21tZW50IiwicHVzaCIsImNudCIsInBhcnNlT3BlblNTSFByaXZLZXlzIiwicmVhZGVyIiwiaGVhZGVycyIsInNwbGl0IiwiaGVhZGVyIiwic2VwSWR4IiwidmFsIiwidG9Mb3dlckNhc2UiLCJpdlNsaWNlIiwiZGlnZXN0Iiwic2V0QXV0b1BhZGRpbmciLCJ0ZW1wRUNESCIsImVyck1zZyIsIlJlYWRlciIsInJlYWRTZXF1ZW5jZSIsImVjU1NMTmFtZSIsImVjUHJpdiIsInJlYWRCeXRlIiwicmVhZExlbmd0aCIsInJlYWRPSUQiLCJwdWJCbG9iIiwiY3JlYXRlRUNESCIsInNldFByaXZhdGVLZXkiLCJnZXRQdWJsaWNLZXkiLCJFTVBUWV9QQVNTUEhSQVNFIiwiYWxsb2MiLCJQUEtfSVYiLCJQUEtfUFAxIiwiUFBLX1BQMiIsImVuY3J5cHRlZCIsIm1hYyIsInR5cGVMZW4iLCJjaXBoZXJOYW1lTGVuIiwiY29tbWVudExlbiIsImJ5dGVMZW5ndGgiLCJwdWJMZW4iLCJwcml2TGVuIiwibWFjRGF0YSIsIlJFX0hFQURFUiIsIlJFX0hFQURFUl9FTkRTIiwicGFyc2VERVJLZXkiLCJwYXJzZUtleSIsInRyaW0iLCJpbnNwZWN0IiwiYXNzZXJ0IiwibWVzc2FnZSIsIkVSUl9JTlRFUk5BTF9BU1NFUlRJT04iLCJhZGROdW1lcmljYWxTZXBhcmF0b3IiLCJyZXMiLCJvbmVPZiIsImV4cGVjdGVkIiwidGhpbmciLCJpc0FycmF5IiwibWFwIiwiZmFpbCIsImNvbnN0cnVjdG9yIiwic3VwZXIiLCJjYXB0dXJlU3RhY2tUcmFjZSIsInN1ZmZpeCIsIk1BWF8zMkJJVF9JTlQiLCJNQVhfMzJCSVRfQklHSU5UIiwiZW1pdEVycm9yQW5kQ2xvc2VOVCIsInNlbGYiLCJlcnIiLCJlbWl0RXJyb3JOVCIsImVtaXRDbG9zZU5UIiwiX3dyaXRhYmxlU3RhdGUiLCJlbWl0Q2xvc2UiLCJfcmVhZGFibGVTdGF0ZSIsImVtaXQiLCJFUlJfT1VUX09GX1JBTkdFIiwiUmFuZ2VFcnJvciIsInJhbmdlIiwiaW5wdXQiLCJyZXBsYWNlRGVmYXVsdEJvb2xlYW4iLCJyZWNlaXZlZCIsIm1zZyIsIk51bWJlciIsImlzSW50ZWdlciIsIkVSUl9JTlZBTElEX0FSR19UWVBFIiwiVHlwZUVycm9yIiwibmFtZSIsImFjdHVhbCIsImRldGVybWluZXIiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJpbmNsdWRlcyIsInZhbGlkYXRlTnVtYmVyIiwiZGVzdHJveUltcGwiLCJjYiIsInJlYWRhYmxlRGVzdHJveWVkIiwiZGVzdHJveWVkIiwid3JpdGFibGVEZXN0cm95ZWQiLCJlcnJvckVtaXR0ZWQiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJfZGVzdHJveSIsIlRyYW5zZm9ybVN0cmVhbSIsIlJlYWRhYmxlU3RyZWFtIiwiV3JpdGFibGVTdHJlYW0iLCJiaW5kaW5nIiwidXRpbCIsImluaGVyaXRzIiwiaXNEYXRlIiwibGlzdGVuZXJDb3VudCIsImZzIiwiU1RBVFVTX0NPREUiLCJPSyIsIkVPRiIsIk5PX1NVQ0hfRklMRSIsIlBFUk1JU1NJT05fREVOSUVEIiwiRkFJTFVSRSIsIkJBRF9NRVNTQUdFIiwiTk9fQ09OTkVDVElPTiIsIk9QX1VOU1VQUE9SVEVEIiwiZm9yRWFjaCIsIlNUQVRVU19DT0RFX1NUUiIsIlJFUVVFU1QiLCJJTklUIiwiT1BFTiIsIkNMT1NFIiwiUkVBRCIsIldSSVRFIiwiTFNUQVQiLCJGU1RBVCIsIlNFVFNUQVQiLCJGU0VUU1RBVCIsIk9QRU5ESVIiLCJSRUFERElSIiwiUkVNT1ZFIiwiTUtESVIiLCJSTURJUiIsIlJFQUxQQVRIIiwiU1RBVCIsIlJFTkFNRSIsIlJFQURMSU5LIiwiU1lNTElOSyIsIkVYVEVOREVEIiwiUkVTUE9OU0UiLCJWRVJTSU9OIiwiU1RBVFVTIiwiSEFORExFIiwiREFUQSIsIk5BTUUiLCJBVFRSUyIsIk9QRU5fTU9ERSIsIkFQUEVORCIsIkNSRUFUIiwiVFJVTkMiLCJFWENMIiwiTUFYX1JFUUlEIiwiQ0xJRU5UX1ZFUlNJT05fQlVGRkVSIiwiU0VSVkVSX1ZFUlNJT05fQlVGRkVSIiwiUkVfT1BFTlNTSCIsIk9QRU5TU0hfTUFYX0RBVEFfTEVOIiwiREVCVUdfTk9PUCIsImNmZyIsInJlbW90ZUlkZW50UmF3IiwiY2FsbCIsImhpZ2hXYXRlck1hcmsiLCJkZWJ1ZyIsInNlcnZlciIsIl9pc09wZW5TU0giLCJ0ZXN0IiwiX25lZWRDb250aW51ZSIsIl9zdGF0ZSIsInN0YXR1cyIsIndyaXRlUmVxaWQiLCJwa3RMZWZ0IiwicGt0SGRyQnVmIiwicGt0QnVmIiwicGt0VHlwZSIsInZlcnNpb24iLCJleHRlbnNpb25zIiwibWF4RGF0YUxlbiIsInJlcXVlc3RzIiwib25GaW5pc2giLCJ3cml0YWJsZSIsIl9jbGVhbnVwIiwib24iLCJyZWFkYWJsZSIsImZhc3RYZmVyIiwic3JjIiwiZHN0Iiwic3JjUGF0aCIsImRzdFBhdGgiLCJvcHRzIiwib25zdGVwIiwibW9kZSIsImZpbGVTaXplIiwiZnNpemUiLCJjb25jdXJyZW5jeSIsImlzTmFOIiwic3RlcCIsIm1vZGVOdW0iLCJzcmNIYW5kbGUiLCJkc3RIYW5kbGUiLCJyZWFkYnVmIiwicGRzdCIsInRvdGFsIiwiaGFkRXJyb3IiLCJidWZzaXplIiwib25lcnJvciIsImNiZmluYWwiLCJjbG9zZSIsIm9wZW4iLCJzb3VyY2VIYW5kbGUiLCJ0cnlTdGF0IiwiYXR0cnMiLCJzdGF0IiwiZXJyXyIsImF0dHJzXyIsInNpemUiLCJkZXN0SGFuZGxlIiwidHJ5Q3JlYXRlQnVmZmVyIiwib25yZWFkIiwibmIiLCJkc3Rwb3MiLCJkYXRhcG9zIiwib3JpZ0NodW5rTGVuIiwid3JpdGVDYiIsInNpbmdsZVJlYWQiLCJjaHVuayIsIndyaXRlRGF0YSIsIm1ha2VDYiIsInBzcmMiLCJyZWFkIiwicmVhZERhdGEiLCJzdGFydFJlYWRzIiwicmVhZHMiLCJmY2htb2QiLCJ0cnlBZ2FpbiIsImNobW9kIiwiZnN0YXQiLCJ3cml0ZUFsbCIsImhhbmRsZSIsInBvc2l0aW9uIiwiY2FsbGJhY2tfIiwiY2FsbGJhY2siLCJ3cml0ZUVyciIsIndyaXR0ZW4iLCJyZWFkQXR0cnMiLCJmbGFncyIsIlN0YXRzIiwicmVhZFVJbnQ2NEJFIiwidWlkIiwiZ2lkIiwicGVybWlzc2lvbnMiLCJhdGltZSIsIm10aW1lIiwiZXh0Y291bnQiLCJhdHRyc1RvQnl0ZXMiLCJhdHRyQnl0ZXMiLCJuYnl0ZXMiLCJieXRlcyIsInNpemVCeXRlcyIsInRvVW5peFRpbWVzdGFtcCIsInRpbWUiLCJwYXJzZUludCIsImdldFRpbWUiLCJfX3JlYWQiLCJfcmVhZCIsIl9fcHVzaCIsImVuY29kaW5nIiwic3RhdGUiLCJlbmRFbWl0dGVkIiwiZmxvd2luZyIsInJlc3VtZSIsIl90cmFuc2Zvcm0iLCJjaHVua0xlZnQiLCJpZCIsImNodW5rTGVuIiwiY2h1bmtQb3MiLCJleHRuYW1lIiwiZXh0ZGF0YSIsImJ1ZmxlbiIsImZpbGVuYW1lIiwicGF0aCIsImV2TmFtZSIsInBmbGFncyIsInN0cjEiLCJzdHIyIiwicmVxIiwibGFuZyIsImRhdGFMZW4iLCJyZXFCdWZMZW4iLCJuYW1lc0xlbiIsImxvbmduYW1lIiwibmFtZXMiLCJleHRlbmRlZCIsInN0YXRzIiwiZl9ic2l6ZSIsImZfZnJzaXplIiwiZl9ibG9ja3MiLCJmX2JmcmVlIiwiZl9iYXZhaWwiLCJmX2ZpbGVzIiwiZl9mZnJlZSIsImZfZmF2YWlsIiwiZl9zaWQiLCJmX2ZsYWciLCJmX25hbWVtYXgiLCJlcnJDb2RlIiwiY3JlYXRlUmVhZFN0cmVhbSIsIlJlYWRTdHJlYW0iLCJjcmVhdGVXcml0ZVN0cmVhbSIsIldyaXRlU3RyZWFtIiwiZmxhZ3NfIiwic3RyaW5nVG9GbGFncyIsImF0dHJGbGFncyIsInBhdGhsZW4iLCJyZXFpZCIsImxlbjIiLCJoYW5kbGVsZW4iLCJvZmYiLCJvdXQiLCJfd2FudEVPRkVycm9yIiwib3ZlcmZsb3ciLCJvcmlnUG9zaXRpb24iLCJmYXN0R2V0IiwicmVtb3RlUGF0aCIsImxvY2FsUGF0aCIsImZhc3RQdXQiLCJyZWFkRmlsZSIsImZsYWciLCJidWZmZXJzIiwiaXNFbmNvZGluZyIsImJ5dGVzUmVhZCIsImFmdGVyUmVhZCIsImVyIiwiZW9mIiwiaGFuZGxlXyIsInN0IiwiZXJfIiwic3RfIiwid3JpdGVGaWxlIiwib3BlbkVyciIsImFwcGVuZEZpbGUiLCJfZXh0ZW5kIiwiZXhpc3RzIiwidW5saW5rIiwiZm5hbWVsZW4iLCJyZW5hbWUiLCJvbGRQYXRoIiwibmV3UGF0aCIsIm9sZGxlbiIsIm5ld2xlbiIsIm1rZGlyIiwicm1kaXIiLCJyZWFkZGlyIiwid2hlcmUiLCJkb0ZpbHRlciIsImZ1bGwiLCJlbnRyaWVzIiwib3BlbmRpciIsInJlcmVhZCIsImxpc3QiLCJzcGxpY2UiLCJsc3RhdCIsInNldHN0YXQiLCJmc2V0c3RhdCIsImZ1dGltZXMiLCJ1dGltZXMiLCJmY2hvd24iLCJjaG93biIsInJlYWRsaW5rIiwic3ltbGluayIsInRhcmdldFBhdGgiLCJsaW5rUGF0aCIsImxpbmtsZW4iLCJ0YXJnZXRsZW4iLCJyZWFscGF0aCIsImV4dF9vcGVuc3NoX3JlbmFtZSIsImV4dF9vcGVuc3NoX3N0YXR2ZnMiLCJleHRfb3BlbnNzaF9mc3RhdHZmcyIsImV4dF9vcGVuc3NoX2hhcmRsaW5rIiwiZXh0X29wZW5zc2hfZnN5bmMiLCJtc2dMZW4iLCJsYW5nTGVuIiwiaGFuZGxlTGVuIiwibmFtZUF0dHJzIiwiYXR0ciIsImNvdW50IiwiaW5mbyIsInN0cmluZ0ZsYWdNYXAiLCJzdHJpbmdGbGFnTWFwS2V5cyIsImluaXRpYWwiLCJmbGFnc1RvU3RyaW5nIiwiX2NoZWNrTW9kZVByb3BlcnR5IiwicHJvcGVydHkiLCJTX0lGTVQiLCJpc0RpcmVjdG9yeSIsIlNfSUZESVIiLCJpc0ZpbGUiLCJTX0lGUkVHIiwiaXNCbG9ja0RldmljZSIsIlNfSUZCTEsiLCJpc0NoYXJhY3RlckRldmljZSIsIlNfSUZDSFIiLCJpc1N5bWJvbGljTGluayIsIlNfSUZMTksiLCJpc0ZJRk8iLCJTX0lGSUZPIiwiaXNTb2NrZXQiLCJTX0lGU09DSyIsInBvb2wiLCJmc0NvbXBhdCIsInBvb2xGcmFnbWVudHMiLCJjaGVja1Bvc2l0aW9uIiwiaXNTYWZlSW50ZWdlciIsInJvdW5kVXBUb011bHRpcGxlT2Y4Iiwic2Z0cCIsImVuZCIsImF1dG9DbG9zZSIsImNsb3NlZCIsIl9vcGVuaW5nIiwiSW5maW5pdHkiLCJkZXN0cm95IiwiY2xvc2VTdHJlYW0iLCJvbmNsb3NlIiwiYnl0ZXNXcml0dGVuIiwic2V0RGVmYXVsdEVuY29kaW5nIiwiZmluYWxDYWxsZWQiLCJvbmNlIiwicG9vbFNpemUiLCJ1c2VkIiwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIiwicG9wIiwidGhpc1Bvb2wiLCJ0b1JlYWQiLCJuZXdVc2VkIiwiYWxpZ25lZEVuZCIsImFsaWduZWRTdGFydCIsImJpbmQiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImNvbmZpZ3VyYWJsZSIsIl9maW5hbCIsIl93cml0ZSIsIl93cml0ZXYiLCJ3cml0ZXNMZWZ0Iiwib253cml0ZSIsImRlc3Ryb3lTb29uIiwiemxpYiIsIlN0cmVhbVNlYXJjaCIsImNvbnN0cyIsIml2X2luYyIsIkRTQVNpZ0JFUlRvQmFyZSIsIkVDRFNBU2lnQVNOMVRvU1NIIiwic2lnU1NIVG9BU04xIiwiQlVHR1lfSU1QTFNfTEVOIiwiTU9EVUxFX1ZFUiIsIkkiLCJJTl9JTklUIiwiSU5fR1JFRVRJTkciLCJJTl9IRUFERVIiLCJJTl9QQUNLRVRCRUZPUkUiLCJJTl9QQUNLRVQiLCJJTl9QQUNLRVREQVRBIiwiSU5fUEFDS0VUREFUQVZFUklGWSIsIklOX1BBQ0tFVERBVEFBRlRFUiIsIk9VVF9JTklUIiwiT1VUX1JFQURZIiwiT1VUX1JFS0VZSU5HIiwiTUFYX1NFUU5PIiwiRVhQX1RZUEVfQllURVMiLCJaX1BBUlRJQUxfRkxVU0giLCJaTElCX09QVFMiLCJmbHVzaCIsIlJFX05VTEwiLCJJREVOVF9QUkVGSVhfQlVGRkVSIiwiRU1QVFlfQlVGRkVSIiwiSE1BQ19DT01QVVRFIiwiUElOR19QQUNLRVQiLCJORVdLRVlTX1BBQ0tFVCIsIlVTRVJBVVRIX1NVQ0NFU1NfUEFDS0VUIiwiUkVRVUVTVF9TVUNDRVNTX1BBQ0tFVCIsIlJFUVVFU1RfRkFJTFVSRV9QQUNLRVQiLCJOT19URVJNSU5BTF9NT0RFU19CVUZGRVIiLCJLRVhESF9HRVhfUkVRX1BBQ0tFVCIsImJ5dGVzU2VudCIsImJ5dGVzUmVjZWl2ZWQiLCJtYXhQYWNrZXRTaXplIiwicmVtb3RlQnVncyIsImhvc3RLZXlzIiwiY29uZmlnIiwiaWRlbnQiLCJhbGdvcml0aG1zIiwia2V4Iiwia2V4QnVmIiwic2VydmVySG9zdEtleSIsInNlcnZlckhvc3RLZXlCdWYiLCJjaXBoZXIiLCJjaXBoZXJCdWYiLCJobWFjIiwiaG1hY0J1ZiIsImNvbXByZXNzIiwiY29tcHJlc3NCdWYiLCJhbGdvcyIsInJlc2V0Iiwib3V0Z29pbmciLCJidWZTZXFubyIsInJlYXNvbiIsImRlc2MiLCJvbkRJU0NPTk5FQ1QiLCJpbml0IiwiZmlyc3RGb2xsb3dzIiwib3V0c3RhdGUiLCJjaGVjayIsInNlcnZlckxpc3QiLCJjbGllbnRMaXN0IiwiaW5zdGF0ZSIsImluY29taW5nIiwia2V4TGlzdCIsImNvcGllZCIsImxldmVsIiwiZGlzY29ubmVjdCIsImtleF9hbGdvcml0aG0iLCJpZ25vcmVOZXh0Iiwic3J2SG9zdEtleSIsImhvc3RrZXlGb3JtYXQiLCJlbmNyeXB0IiwiZGVjcnlwdCIsInNjIiwiZGVjb21wcmVzcyIsIktleUV4Y2hhbmdlIiwiZ2VuZXJhdGVLZXlzIiwicHVia2V5IiwiY2hlY2tfS0VYSU5JVCIsImV4cGVjdGVkUGFja2V0IiwicGt0SW5pdCIsInNlbmQiLCJLRVhESF9HRVhfUkVRIiwia2V4aW5pdCIsIm9uS0VYSU5JVCIsIm9uTkVXS0VZUyIsImN1ckhvc3RLZXkiLCJob3N0a2V5IiwiaG9zdGtleUFsZ28iLCJjb252ZXJ0UHVibGljS2V5Iiwic2VjcmV0IiwiY29tcHV0ZVNlY3JldCIsImxlbl9nZXhfcHJpbWUiLCJsZW5fZ2V4X2dlbiIsImdleF9wcmltZSIsImdleF9nZW4iLCJoYXNoIiwibGVuX2lkZW50IiwiaWRlbnRSYXciLCJsZW5fc2lkZW50IiwibGVuX2luaXQiLCJsZW5fc2luaXQiLCJsZW5faG9zdGtleSIsImxlbl9wdWJrZXkiLCJsZW5fc3B1YmtleSIsImxlbl9zZWNyZXQiLCJleGNoYW5nZUJ1ZkxlbiIsImRoUGFyYW1zIiwiZ2V0REhQYXJhbXMiLCJwcmltZSIsImdlbmVyYXRvciIsImJwIiwiZXhjaGFuZ2VCdWYiLCJleGNoYW5nZUhhc2giLCJzZXNzaW9uSWQiLCJrZXhzZWNyZXQiLCJjb252ZXJ0U2lnbmF0dXJlIiwic2lnbGVuIiwicGt0UmVwbHkiLCJzZW50TkVXS0VZUyIsIm9uS0VYREhfSU5JVCIsIm9uS0VYREhfUkVQTFkiLCJzZXRESFBhcmFtcyIsIm9uS0VYREhfR0VYX0dST1VQIiwiZ3JlZXRpbmciLCJiYW5uZXIiLCJ2ZXJpZmllZEhvc3QiLCJob3N0a2V5X2Zvcm1hdCIsInNpZ19mb3JtYXQiLCJzeW5jIiwiZW1pdHRlZCIsInBlcm1pdHRlZCIsInJhd3NpZyIsImhvc3RQdWJLZXkiLCJpdiIsIm91dENpcGhlckluZm8iLCJkaEhhc2hBbGdvIiwiYXV0aHNRdWV1ZSIsImluc3RhbmNlIiwiY2lwaGVyQWxnbyIsImNyZWF0ZUNpcGhlcml2IiwiaW5DaXBoZXJJbmZvIiwiZW1wdHlCdWYiLCJkZWNpcGhlckFsZ28iLCJvdXRITUFDSW5mbyIsImluSE1BQ0luZm8iLCJpbkhNQUNTaXplIiwiY3JlYXRlRGVmbGF0ZSIsInF1ZXVlIiwiY3JlYXRlSW5mbGF0ZSIsInJla2V5UXVldWUiLCJxbGVuIiwiY3VyU2Vxbm8iLCJzZXFubyIsInBheWxvYWQiLCJwYXJzZVBhY2tldCIsImV4cGVjdERhdGEiLCJnZXRQYWNrZXRUeXBlIiwic2VydmljZU5hbWUiLCJjaGFuIiwic3JjSVAiLCJzcmNQb3J0Iiwic2VuZGVyIiwid2luZG93IiwicGFja2V0U2l6ZSIsInJlY2lwaWVudCIsImRlc2NyaXB0aW9uIiwic29ja2V0UGF0aCIsImRhdGFUeXBlIiwiYnl0ZXNUb0FkZCIsImNoYW5uZWwiLCJjaGFuVHlwZSIsImRlc3RJUCIsImRlc3RQb3J0IiwicmVhc29uQ29kZSIsInJlYXNvblRleHQiLCJ1c2VybmFtZSIsInN2Y05hbWUiLCJtZXRob2REYXRhIiwibWV0aG9kRGVzYyIsIm1ldGhvZCIsInBrU2lnbmVkIiwia2V5QWxnbyIsImJsb2IiLCJob3N0bmFtZSIsInVzZXJsb2NhbCIsImJsb2JFbmQiLCJsb2NhbEhvc3RuYW1lIiwibG9jYWxVc2VybmFtZSIsInNraXBMZW4iLCJzaGlmdCIsImF1dGhzIiwicGFydFN1Y2Nlc3MiLCJyZXF1ZXN0IiwicmVxRGF0YSIsIndhbnRSZXBseSIsImJpbmRBZGRyIiwiYmluZFBvcnQiLCJsYW5ndWFnZXMiLCJyZWFkTGlzdCIsInBhcnNlX0tFWElOSVQiLCJjb2xzIiwicm93cyIsIndpZHRoIiwiaGVpZ2h0Iiwic2lnbmFsIiwiY29yZWR1bXAiLCJ0ZXJtIiwibW9kZXMiLCJvcGNvZGUiLCJieXRlc1RvTW9kZXMiLCJzaW5nbGUiLCJwcm90b2NvbCIsImNvb2tpZSIsInNjcmVlbiIsImNvbW1hbmQiLCJzdWJzeXN0ZW0iLCJjbGllbnRDb250cm9sIiwicGFyc2VfQ0hBTk5FTF9SRVFVRVNUIiwicGFyc2VfS0VYREhfUkVQTFkiLCJwYXJzZV9LRVgiLCJ0ZXh0IiwiYXV0aE1ldGhvZCIsImluc3RyIiwibnByb21wdHMiLCJwcm9tcHRzIiwicHJvbXB0IiwiZWNobyIsIm5yZXNwb25zZXMiLCJyZXNwb25zZXMiLCJyZXNwb25zZSIsInBhcnNlX1VTRVJBVVRIIiwidW5pbXBsIiwiaG1hY1ZlcmlmeSIsInBhY2tldCIsImNhbGNIbWFjIiwicGt0TGVuIiwicGFkTGVuIiwidGltaW5nU2FmZUVxdWFsIiwiZGVjcnlwdERhdGEiLCJhbW91bnQiLCJleHBlY3QiLCJwdHIiLCJyYW5kb21CeXRlcyIsInJldHJ5IiwicmFuZEJ5dGVzIiwibXlDb29raWUiLCJob3N0S2V5QnVmIiwia2V4SW5pdFNpemUiLCJmaWxsIiwiY29tcHJlc3NQYXlsb2FkIiwiY29tcHJlc3NGbHVzaENiIiwiZW5kZWQiLCJzZW5kXyIsImJ5cGFzcyIsInB0bGVuIiwiY29weVJhbmRQYWRCeXRlcyIsImVuY0RhdGEiLCJlbmNyeXB0ZXIiLCJsZW5idWYiLCJzZXRBQUQiLCJhdXRoVGFnIiwiZ2V0QXV0aFRhZyIsImRlY29tcCIsInNraXBEZWNyeXB0IiwiZGVjcnlwdEF1dGhNb2RlIiwiY2hsZW4iLCJjaGxlZnQiLCJzZWFyY2giLCJzcyIsIm9uSW5mbyIsIm1hdGNoZWQiLCJyZW1vdmVMaXN0ZW5lciIsIm1heE1hdGNoZXMiLCJpZHhEYXNoIiwiaWR4U3BhY2UiLCJ2ZXJzaW9ucyIsInNvZnR3YXJlIiwic3Vic3RyaW5nIiwiY29tbWVudHMiLCJydWxlIiwibWFjU2l6ZSIsImhtYWNJbmZvIiwiZnVsbFBhY2tldExlbiIsIm1heFBheWxvYWRMZW4iLCJyZW1haW5MZW4iLCJwa3RFeHRyYSIsInBhZFN0YXJ0IiwiZGVjb21wQnVmIiwiZGVjb21wQnVmTGVuIiwibmV4dFNsaWNlIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicHR5cGUiLCJtc2dQYWNrZXQiLCJtc2dQa3RUeXBlIiwibm9lbmQiLCJwaW5nIiwicmVrZXkiLCJyZXF1ZXN0U3VjY2VzcyIsInJlcXVlc3RGYWlsdXJlIiwiY2hhbm5lbFN1Y2Nlc3MiLCJjaGFubmVsRmFpbHVyZSIsImNoYW5uZWxFT0YiLCJjaGFubmVsQ2xvc2UiLCJjaGFubmVsV2luZG93QWRqdXN0IiwiY2hhbm5lbERhdGEiLCJkYXRhSXNCdWZmZXIiLCJjaGFubmVsRXh0RGF0YSIsImNoYW5uZWxPcGVuQ29uZmlybSIsInJlbW90ZUNoYW4iLCJsb2NhbENoYW4iLCJpbml0V2luZG93IiwibWF4UGFja2V0IiwiY2hhbm5lbE9wZW5GYWlsIiwiZGVzY0xlbiIsInNlcnZpY2UiLCJzdmNOYW1lTGVuIiwidGNwaXBGb3J3YXJkIiwiYWRkcmxlbiIsImNhbmNlbFRjcGlwRm9yd2FyZCIsIm9wZW5zc2hfc3RyZWFtTG9jYWxGb3J3YXJkIiwib3BlbnNzaF9jYW5jZWxTdHJlYW1Mb2NhbEZvcndhcmQiLCJkaXJlY3RUY3BpcCIsInNyY2xlbiIsImRzdGxlbiIsImRzdElQIiwiZHN0UG9ydCIsIm9wZW5zc2hfZGlyZWN0U3RyZWFtTG9jYWwiLCJvcGVuc3NoX25vTW9yZVNlc3Npb25zIiwic2Vzc2lvbiIsIndpbmRvd0NoYW5nZSIsInB0eSIsIlJFX0lTX05VTSIsIm1vZGVzVG9CeXRlcyIsInRlcm1MZW4iLCJtb2Rlc0xlbiIsInNoZWxsIiwiY21kIiwiY21kbGVuIiwidG9VcHBlckNhc2UiLCJzaWduYWxMZW4iLCJlbnYiLCJ2YWxMZW4iLCJ4MTFGb3J3YXJkIiwicHJvdG9sZW4iLCJjb29raWVsZW4iLCJuYW1lTGVuIiwib3BlbnNzaF9hZ2VudEZvcndhcmQiLCJhdXRoUGFzc3dvcmQiLCJwYXNzd29yZCIsInVzZXJMZW4iLCJwYXNzTGVuIiwiYXV0aFBLIiwiY2JTaWduIiwia2V5VHlwZSIsImFsZ29MZW4iLCJwdWJLZXlMZW4iLCJzZXNMZW4iLCJzaWdMZW4iLCJzaWdidWYiLCJhdXRoSG9zdGJhc2VkIiwiaG9zdG5hbWVMZW4iLCJ1c2VybG9jYWxMZW4iLCJhdXRoS2V5Ym9hcmQiLCJhdXRoTm9uZSIsImF1dGhJbmZvUmVzIiwicmVzTGVuIiwicmVzcG9uc2VzTGVuIiwic2VydmljZUFjY2VwdCIsImJhbm5lckxlbiIsInBhY2tldExlbiIsImZvcndhcmRlZFRjcGlwIiwiYm91bmRBZGRyTGVuIiwiYm91bmRBZGRyIiwicmVtb3RlQWRkckxlbiIsInJlbW90ZUFkZHIiLCJib3VuZFBvcnQiLCJyZW1vdGVQb3J0IiwieDExIiwiYWRkckxlbiIsIm9yaWdpbkFkZHIiLCJvcmlnaW5Qb3J0Iiwib3BlbnNzaF9hdXRoQWdlbnQiLCJvcGVuc3NoX2ZvcndhcmRlZFN0cmVhbUxvY2FsIiwiZXhpdFN0YXR1cyIsImV4aXRTaWduYWwiLCJjb3JlRHVtcGVkIiwiYXV0aEZhaWx1cmUiLCJhdXRoTWV0aG9kcyIsImlzUGFydGlhbCIsIm1ldGhvZHMiLCJtZXRob2RzTGVuIiwiYXV0aFN1Y2Nlc3MiLCJhdXRoUEtPSyIsImtleUFsZ29MZW4iLCJhdXRoUGFzc3dkQ2hnIiwicHJvbXB0TGVuIiwiYXV0aEluZm9SZXEiLCJpbnN0cnVjdGlvbnMiLCJwcm9tcHRzTGVuIiwiaW5zdHJMZW4iLCJyYW5kb21GaWxsU3luYyIsIl9wcmltZSIsIl9nZW5lcmF0b3IiLCJjb252ZXJ0VG9NcGludCIsIm5ld0J1ZiIsImlkeCIsIl9rZXgiLCJnZXRQcmltZSIsImdldEdlbmVyYXRvciIsIl9rZXlzIiwiX3B1YmxpYyIsImNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCIsImNyZWF0ZURpZmZpZUhlbGxtYW4iLCJleHBvcnQiLCJmb3JtYXQiLCJuZXdLZXkiLCJvdGhlclB1YmxpY0tleSIsInByaXZhdGVLZXkiLCJfc2VuZCIsIm1heExlbiIsImJ1ZmZlckxlbiIsInJOZXciLCJzTmV3IiwiYXNuUmVhZGVyIiwick9mZnNldCIsInNPZmZzZXQiLCJuZXdTaWciLCJEdXBsZXhTdHJlYW0iLCJNQVhfV0lORE9XIiwiV0lORE9XX1RIUkVTSE9MRCIsIkNVU1RPTV9FVkVOVFMiLCJDVVNUT01fRVZFTlRTX0xFTiIsIkNoYW5uZWwiLCJjbGllbnQiLCJzdHJlYW1PcHRzIiwiYWxsb3dIYWxmT3BlbiIsInN1YnR5cGUiLCJleGl0Q29kZSIsImV4aXREdW1wIiwiZXhpdERlc2MiLCJleGl0TGFuZyIsImluY29taW5nSWQiLCJjYWxsYmFja3MiLCJfY2FsbGJhY2tzIiwiX2NsaWVudCIsIl9oYXNYMTEiLCJjaGFubmVscyIsIl9jaGFubmVscyIsInNzaHN0cmVhbSIsIl9zc2hzdHJlYW0iLCJvbmRyYWluIiwiX3dhaXRDbGllbnREcmFpbiIsIl93YWl0V2luZG93IiwiX2NodW5rIiwiX2NodW5rY2IiLCJfY2h1bmtFcnIiLCJzdGRlcnIiLCJfY2h1bmtjYkVyciIsIm9uRW5kIiwiX3NvY2siLCJlbmRpbmciLCJmaW5pc2hlZCIsIndpbmRvd0FkanVzdCIsIl93YWl0Q2hhbkRyYWluIiwiYW10IiwiX2thbGFzdCIsIkRhdGUiLCJub3ciLCJfa2FjbnQiLCJfcmVzZXRLQSIsInN0ZGluIiwic3Rkb3V0IiwiU2VydmVyU3RkZXJyIiwiX2NoYW5uZWwiLCJzbGljZUxlbiIsInNldFdpbmRvdyIsInNpZ25hbE5hbWUiLCJleGl0IiwiUEFDS0VUX1NJWkUiLCJFdmVudEVtaXR0ZXIiLCJTRlRQV3JhcHBlciIsIl9zdHJlYW0iLCJTb2NrZXQiLCJjcCIsIlJFX0NZR1dJTl9TT0NLIiwiV0lORE9XU19QSVBFX1JFR0VYIiwic29ja1BhdGgiLCJzb2NrIiwiZXJyb3IiLCJkYXRhbGVuIiwiYWNjZXB0IiwicmVqZWN0Iiwia2V5bGVuIiwiaXNTaWduaW5nIiwiY29tbGVuIiwib25jb25uZWN0Iiwib25kYXRhIiwicGxhdGZvcm0iLCJ0cmllZEN5Z3BhdGgiLCJyZWFkQ3lnc29ja2V0IiwicG9ydCIsInNlY3JldGJ1ZiIsImJjIiwiaXNSZXRyeWluZyIsImluYnVmIiwiY3JlZHNidWYiLCJfb25jb25uZWN0IiwiX29uZGF0YSIsIl9vbmNsb3NlIiwiYWRkU29ja0xpc3RlbmVycyIsInBpZCIsInRyeUNvbm5lY3QiLCJjb25uZWN0IiwiUGFnZWFudFNvY2siLCJpc0RvbmUiLCJvbkRvbmUiLCJFUlJPUiIsIkVYRVBBVEgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwicHJvYyIsInNwYXduIiwia2lsbCIsImRuc0xvb2t1cCIsIkhBU0hFUyIsImdldEhhc2hlcyIsInNzaDJfc3RyZWFtcyIsIkhUVFBBZ2VudHMiLCJhZ2VudFF1ZXJ5IiwiTUFYX0NIQU5ORUwiLCJDbGllbnQiLCJob3N0IiwibG9jYWxBZGRyZXNzIiwibG9jYWxQb3J0IiwiZm9yY2VJUHY0IiwiZm9yY2VJUHY2Iiwia2VlcGFsaXZlQ291bnRNYXgiLCJrZWVwYWxpdmVJbnRlcnZhbCIsInJlYWR5VGltZW91dCIsInRyeUtleWJvYXJkIiwiYWdlbnQiLCJhbGxvd0FnZW50RndkIiwiYXV0aEhhbmRsZXIiLCJob3N0SGFzaEFsZ28iLCJob3N0SGFzaENiIiwic3RyaWN0VmVuZG9yIiwiX3JlYWR5VGltZW91dCIsIl9mb3J3YXJkaW5nIiwiX2ZvcndhcmRpbmdVbml4IiwiX2FjY2VwdFgxMSIsIl9hZ2VudEZ3ZEVuYWJsZWQiLCJfY3VyQ2hhbiIsIl9yZW1vdGVWZXIiLCJvcGVuQ2hhbm5lbCIsIm5leHRDaGFubmVsIiwib25TdWNjZXNzIiwib25GYWlsdXJlIiwiY2hhbmluZm8iLCJyZXFYMTEiLCJyYW5kb21Db29raWUiLCJoYWRfZXJyIiwicmVxUHR5IiwicmVxQWdlbnRGd2QiLCJyZXFFbnYiLCJyZXFTdWJzeXN0ZW0iLCJhbGdvc1N1cHBvcnRlZCIsImFsZ29MaXN0IiwidXNlciIsImFnZW50Rm9yd2FyZCIsImthdGltZXIiLCJjdXJBdXRoIiwia2FpbnRlcnZhbCIsImthY291bnRtYXgiLCJrYWNvdW50Iiwic2VuZEtBIiwiY2xlYXJJbnRlcnZhbCIsInJlc2V0S0EiLCJzZXRJbnRlcnZhbCIsInBpcGUiLCJjbGVhclRpbWVvdXQiLCJ1bnBpcGUiLCJjYWxsYmFja3NfIiwiY2hhbk5vcyIsImVhcmx5Q2IiLCJldjEiLCJldjIiLCJob3N0VmVyaWZpZXIiLCJob3N0SGFzaCIsImhhc2hDYiIsImhhc2hlciIsImFnZW50S2V5cyIsImN1clBhcnRpYWwiLCJjdXJBdXRoc0xlZnQiLCJhZ2VudEtleVBvcyIsImF1dGhzQWxsb3dlZCIsImF1dGhQb3MiLCJhdXRoc0xlZnQiLCJwYXJ0aWFsIiwiaGFzU2VudEF1dGgiLCJkb05leHRBdXRoIiwiYXV0aE5hbWUiLCJvblVTRVJBVVRIX0ZBSUxVUkUiLCJvblVTRVJBVVRIX1BLX09LIiwidHJ5TmV4dEF1dGgiLCJvblVTRVJBVVRIX0lORk9fUkVRVUVTVCIsImF1dGgiLCJ0cnlOZXh0QWdlbnRLZXkiLCJhbnN3ZXJzIiwiYWdlbnRLZXkiLCJwdWJLZXlGdWxsVHlwZSIsInB1YktleVR5cGUiLCJzaWduZWQiLCJzaWdGdWxsVHlwZUxlbiIsInJlamVjdENvbm4iLCJvbkNIQU5ORUxfT1BFTiIsInN0YXJ0VGltZW91dCIsImRvQ29ubmVjdCIsInNldE5vRGVsYXkiLCJzZXRNYXhMaXN0ZW5lcnMiLCJzZXRUaW1lb3V0IiwidGltZW91dCIsImFkZHJlc3MiLCJmYW1pbHkiLCJ0b2RvIiwicmVxQ2IiLCJyZXFFeGVjIiwid25kb3B0cyIsInJlcVNoZWxsIiwic3Vic3lzIiwic2VydmVySWRlbnRSYXciLCJvbkVycm9yIiwib25SZWFkeSIsIm9uRXhpdCIsImZvcndhcmRJbiIsInJlYWxQb3J0IiwidW5mb3J3YXJkSW4iLCJmb3J3YXJkT3V0Iiwib3BlbnNzaF9mb3J3YXJkSW5TdHJlYW1Mb2NhbCIsIm9wZW5zc2hfdW5mb3J3YXJkSW5TdHJlYW1Mb2NhbCIsIm9wZW5zc2hfZm9yd2FyZE91dFN0cmVhbUxvY2FsIiwiU2VydmVyIiwiU0ZUUF9TVEFUVVNfQ09ERSIsIlNGVFBfT1BFTl9NT0RFIiwiSFRUUEFnZW50IiwiU1NIVFRQQWdlbnQiLCJIVFRQU0FnZW50IiwiU1NIVFRQU0FnZW50IiwiSHR0cEFnZW50IiwiSHR0cHNBZ2VudCIsImNyZWF0ZUNvbm5lY3Rpb24iLCJfZGVmYXVsdFNyY0lQIiwidHJpZWRGb3J3YXJkIiwic2V0S2VlcEFsaXZlIiwibm9vcCIsInJlZiIsInVucmVmIiwiZGVjb3JhdGVTdHJlYW0iLCJfY29ubmVjdENmZyIsImN0b3IiLCJTU0hBZ2VudCIsImNvbm5lY3RDZmciLCJhZ2VudE9wdGlvbnMiLCJzcGxpY2VPbmUiLCJpbmRleCIsIk1hbmFnZXIiLCJpbnRlcnZhbCIsInN0cmVhbUludGVydmFsIiwia2FDb3VudE1heCIsInN0cmVhbXMiLCJfc3RyZWFtcyIsIl90aW1lciIsIl90aW1lckludGVydmFsIiwiX3RpbWVyZm4iLCJsYXN0Iiwic3RvcCIsInJlbW92ZSIsImthTWdyIiwibmV0IiwiS2VlcGFsaXZlTWFuYWdlciIsIk1BWF9QRU5ESU5HX0FVVEhTIiwibGlzdGVuZXIiLCJob3N0S2V5c18iLCJob3N0S2V5QWxnb3MiLCJLRUVQQUxJVkVfSU5URVJWQUwiLCJLRUVQQUxJVkVfQ0xJRU5UX0lOVEVSVkFMIiwiS0VFUEFMSVZFX0NMSUVOVF9DT1VOVF9NQVgiLCJzdHJlYW1jZmciLCJvbGREZWJ1ZyIsImNmZ0tleXMiLCJfc3J2Iiwic29ja2V0IiwiX2Nvbm5lY3Rpb25zIiwibWF4Q29ubmVjdGlvbnMiLCJjb25uY2ZnIiwiZGVidWdQcmVmaXgiLCJocnRpbWUiLCJvbkNsaWVudFByZUhlYWRlckVycm9yIiwiaXAiLCJyZW1vdGVBZGRyZXNzIiwicmVtb3RlRmFtaWx5Iiwibm9Nb3JlU2Vzc2lvbnMiLCJhdXRoZW50aWNhdGVkIiwiaGFzRXJyIiwiYXV0aEN0eCIsImV4Y2hhbmdlcyIsImFjY2VwdGVkQXV0aFN2YyIsInBlbmRpbmdBdXRocyIsIm9uVVNFUkFVVEhfUkVRVUVTVCIsImN0eCIsIktleWJvYXJkQXV0aENvbnRleHQiLCJvbkF1dGhEZWNpZGUiLCJQS0F1dGhDb250ZXh0IiwiSG9zdGJhc2VkQXV0aENvbnRleHQiLCJQd2RBdXRoQ29udGV4dCIsIkF1dGhDb250ZXh0IiwiX2luaXRpYWxSZXNwb25zZSIsIl9tdWx0aXN0ZXAiLCJfZmluYWxSZXNwb25zZSIsImFsbG93ZWQiLCJtZXRob2RzTGVmdCIsInVuc2VudEdsb2JhbFJlcXVlc3RzUmVwbGllcyIsInJlcGx5Iiwic2V0UmVwbHkiLCJzZW5kUmVwbGllcyIsInJlcGxpZWQiLCJjaG9zZW5Qb3J0IiwiYnVmUG9ydCIsIlNlc3Npb24iLCJvdXRnb2luZ0lkIiwiX2NiZmluYWwiLCJsaXN0ZW4iLCJhcHBseSIsImFyZ3VtZW50cyIsImdldENvbm5lY3Rpb25zIiwiUkVfS0JJTlRfU1VCTUVUSE9EUyIsInN1Ym1ldGhvZHMiLCJfY2IiLCJfb25JbmZvUmVzcG9uc2UiLCJwa0luZm8iLCJzaWdBbGdvIiwidGl0bGUiLCJjcmVhdGVTZXJ2ZXIiLCJJbmNvbWluZ0NsaWVudCIsIm5ld0ludmFsaWRBc24xRXJyb3IiLCJlcnJvcnMiLCJ0eXBlcyIsImhhc093blByb3BlcnR5IiwiQVNOMSIsIl9zaXplIiwiX2xlbiIsImVudW1lcmFibGUiLCJwZWVrIiwibGVuQiIsInRhZyIsInNlcSIsIm8iLCJfcmVhZFRhZyIsInJlYWRCb29sZWFuIiwiQm9vbGVhbiIsInJlYWRFbnVtZXJhdGlvbiIsIkVudW1lcmF0aW9uIiwicmV0YnVmIiwiT0lEIiwidmFsdWVzIiwiYnl0ZSIsIm9rIiwiZmIiLCJFT0MiLCJOdWxsIiwiT2JqZWN0RGVzY3JpcHRvciIsIkV4dGVybmFsIiwiUmVhbCIsIlBEViIsIlV0ZjhTdHJpbmciLCJSZWxhdGl2ZU9JRCIsIlNlcXVlbmNlIiwiU2V0IiwiTnVtZXJpY1N0cmluZyIsIlByaW50YWJsZVN0cmluZyIsIlQ2MVN0cmluZyIsIlZpZGVvdGV4U3RyaW5nIiwiSUE1U3RyaW5nIiwiVVRDVGltZSIsIkdlbmVyYWxpemVkVGltZSIsIkdyYXBoaWNTdHJpbmciLCJWaXNpYmxlU3RyaW5nIiwiR2VuZXJhbFN0cmluZyIsIlVuaXZlcnNhbFN0cmluZyIsIkNoYXJhY3RlclN0cmluZyIsIkJNUFN0cmluZyIsIkNvbnN0cnVjdG9yIiwiQ29udGV4dCIsIkRFRkFVTFRfT1BUUyIsImdyb3d0aEZhY3RvciIsInRvIiwiZXF1YWwiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX29wdGlvbnMiLCJfc2VxIiwic3oiLCJ3cml0ZUVudW1lcmF0aW9uIiwid3JpdGVCb29sZWFuIiwid3JpdGVTdHJpbmciLCJ3cml0ZUxlbmd0aCIsIndyaXRlU3RyaW5nQXJyYXkiLCJzdHJpbmdzIiwidG1wIiwib2N0ZXQiLCJlbmNvZGVPY3RldCIsIl9zaGlmdCIsIkJlclJlYWRlciIsIkJlcldyaXRlciIsImZzXzEiLCJwYXRoXzEiLCJ0bHNfMSIsInV0aWxfMSIsIkZ0cENvbnRleHRfMSIsInBhcnNlTGlzdF8xIiwiUHJvZ3Jlc3NUcmFja2VyXzEiLCJTdHJpbmdXcml0ZXJfMSIsInBhcnNlTGlzdE1MU0RfMSIsIm5ldFV0aWxzXzEiLCJ0cmFuc2Zlcl8xIiwicGFyc2VDb250cm9sUmVzcG9uc2VfMSIsImZzUmVhZERpciIsInByb21pc2lmeSIsImZzTWtEaXIiLCJmc1N0YXQiLCJmc09wZW4iLCJmc0Nsb3NlIiwiZnNVbmxpbmsiLCJhc3luYyIsImlnbm9yZUVycm9yIiwiZnVuYyIsImF2YWlsYWJsZUxpc3RDb21tYW5kcyIsImZ0cCIsIkZUUENvbnRleHQiLCJwcmVwYXJlVHJhbnNmZXIiLCJfZW50ZXJGaXJzdENvbXBhdGlibGVNb2RlIiwiZW50ZXJQYXNzaXZlTW9kZUlQdjYiLCJlbnRlclBhc3NpdmVNb2RlSVB2NCIsInBhcnNlTGlzdCIsIl9wcm9ncmVzc1RyYWNrZXIiLCJQcm9ncmVzc1RyYWNrZXIiLCJpcEZhbWlseSIsImRlc2NyaWJlQWRkcmVzcyIsImRlc2NyaWJlVExTIiwiX2hhbmRsZUNvbm5lY3RSZXNwb25zZSIsImNvbm5lY3RJbXBsaWNpdFRMUyIsInRsc09wdGlvbnMiLCJ0YXNrIiwicG9zaXRpdmVDb21wbGV0aW9uIiwiRlRQRXJyb3IiLCJpZ25vcmVFcnJvckNvZGVzREVQUkVDQVRFRCIsInNlbmRJZ25vcmluZ0Vycm9yIiwidXNlVExTIiwidXBncmFkZVNvY2tldCIsImxvZ2luIiwidXNlRGVmYXVsdFNldHRpbmdzIiwiaGFzVExTIiwiYWNjZXNzIiwidXNlRXhwbGljaXRUTFMiLCJzZWN1cmUiLCJ3ZWxjb21lIiwic2VjdXJlT3B0aW9ucyIsInB3ZCIsInBhcnNlZCIsIm1hdGNoIiwiZmVhdHVyZXMiLCJNYXAiLCJpc011bHRpbGluZSIsImxpbmUiLCJlbnRyeSIsInNldCIsImNkIiwidmFsaWRQYXRoIiwicHJvdGVjdFdoaXRlc3BhY2UiLCJjZHVwIiwibGFzdE1vZCIsImRhdGUiLCJwYXJzZU1MU3hEYXRlIiwiZGVzdFBhdGgiLCJ2YWxpZFNyYyIsInZhbGlkRGVzdCIsImlnbm9yZUVycm9yQ29kZXMiLCJ0cmFja1Byb2dyZXNzIiwiaGFuZGxlciIsImJ5dGVzT3ZlcmFsbCIsInJlcG9ydFRvIiwidXBsb2FkRnJvbSIsInNvdXJjZSIsInRvUmVtb3RlUGF0aCIsIl91cGxvYWRXaXRoQ29tbWFuZCIsImFwcGVuZEZyb20iLCJfdXBsb2FkTG9jYWxGaWxlIiwiX3VwbG9hZEZyb21TdHJlYW0iLCJmZCIsImxvY2FsU3RhcnQiLCJsb2NhbEVuZEluY2x1c2l2ZSIsImNsb3NlV2l0aEVycm9yIiwidHJhY2tlciIsImRvd25sb2FkVG8iLCJkZXN0aW5hdGlvbiIsImZyb21SZW1vdGVQYXRoIiwic3RhcnRBdCIsIl9kb3dubG9hZFRvRmlsZSIsIl9kb3dubG9hZFRvU3RyZWFtIiwiYXBwZW5kaW5nVG9Mb2NhbEZpbGUiLCJmaWxlU3lzdGVtRmxhZ3MiLCJsb2NhbEZpbGVTdGF0cyIsImhhc0Rvd25sb2FkZWREYXRhIiwibGFzdEVycm9yIiwiY2FuZGlkYXRlIiwicGFyc2VkTGlzdCIsIl9yZXF1ZXN0TGlzdFdpdGhDb21tYW5kIiwiU3RyaW5nV3JpdGVyIiwiZ2V0VGV4dCIsInJlbW92ZURpciIsInJlbW90ZURpclBhdGgiLCJfZXhpdEF0Q3VycmVudERpcmVjdG9yeSIsImNsZWFyV29ya2luZ0RpciIsInJlbW92ZUVtcHR5RGlyIiwiZmlsZSIsInVwbG9hZEZyb21EaXIiLCJsb2NhbERpclBhdGgiLCJlbnN1cmVEaXIiLCJfdXBsb2FkVG9Xb3JraW5nRGlyIiwiZmlsZXMiLCJmdWxsUGF0aCIsIl9vcGVuRGlyIiwiZG93bmxvYWRUb0RpciIsIl9kb3dubG9hZEZyb21Xb3JraW5nRGlyIiwicmVjdXJzaXZlIiwiZW5zdXJlTG9jYWxEaXJlY3RvcnkiLCJmaWx0ZXIiLCJkaXJOYW1lIiwidXNlckRpciIsInN0cmF0ZWdpZXMiLCJzdHJhdGVneSIsInVwbG9hZCIsImFwcGVuZCIsImRvd25sb2FkIiwidXBsb2FkRGlyIiwiZG93bmxvYWREaXIiLCJGaWxlVHlwZSIsIkZpbGVJbmZvIiwiVW5rbm93biIsInJhd01vZGlmaWVkQXQiLCJtb2RpZmllZEF0IiwiaGFyZExpbmtDb3VudCIsImxpbmsiLCJncm91cCIsInVuaXF1ZUlEIiwiRGlyZWN0b3J5IiwiU3ltYm9saWNMaW5rIiwiRmlsZSIsIlVuaXhQZXJtaXNzaW9uIiwiUmVhZCIsIldyaXRlIiwiRXhlY3V0ZSIsIm5ldF8xIiwidmVyYm9zZSIsIl9wYXJ0aWFsUmVzcG9uc2UiLCJfZW5jb2RpbmciLCJfc29ja2V0IiwiX25ld1NvY2tldCIsIl9kYXRhU29ja2V0IiwiX3Rhc2siLCJfY2xvc2luZ0Vycm9yIiwiX2Nsb3NlU29ja2V0IiwiX3Bhc3NUb0hhbmRsZXIiLCJfc3RvcFRyYWNraW5nVGFzayIsImRhdGFTb2NrZXQiLCJfcmVtb3ZlU29ja2V0TGlzdGVuZXJzIiwic2V0RW5jb2RpbmciLCJfb25Db250cm9sU29ja2V0RGF0YSIsIl9zZXR1cERlZmF1bHRFcnJvckhhbmRsZXJzIiwicmVzcG9uc2VIYW5kbGVyIiwic3RhY2siLCJQcm9taXNlIiwicmVzb2x2ZVByb21pc2UiLCJyZWplY3RQcm9taXNlIiwicmVzb2x2ZXIiLCJhcmdzIiwiY29uc29sZSIsInRyaW1tZWRDaHVuayIsImNvbXBsZXRlUmVzcG9uc2UiLCJwYXJzZUNvbnRyb2xSZXNwb25zZSIsInJlc3QiLCJtZXNzYWdlcyIsImlkZW50aWZpZXIiLCJpbnRlcnZhbE1zIiwib25TdG9wIiwib25IYW5kbGUiLCJsYXN0Qnl0ZXMiLCJ1cGRhdGVGdW5jIiwic3RvcFdpdGhVcGRhdGUiLCJwb2xsIiwidXBkYXRlQW5kU3RvcCIsInN0cmVhbV8xIiwiV3JpdGFibGUiLCJfIiwiX19jcmVhdGVCaW5kaW5nIiwiazIiLCJfX2V4cG9ydFN0YXIiLCJpcElzUHJpdmF0ZVY0QWRkcmVzcyIsIlRMU1NvY2tldCIsImdldFByb3RvY29sIiwiYXNzaWduIiwidGxzU29ja2V0IiwicmVqZWN0VW5hdXRob3JpemVkIiwiYXV0aG9yaXplZCIsImF1dGhvcml6YXRpb25FcnJvciIsIm9jdGV0cyIsImlzU2luZ2xlTGluZSIsInBvc2l0aXZlSW50ZXJtZWRpYXRlIiwibGluZXMiLCJ0b2tlblJlZ2V4IiwidG9rZW4iLCJSZWdFeHAiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJfX2ltcG9ydFN0YXIiLCJfX2VzTW9kdWxlIiwiYXZhaWxhYmxlUGFyc2VycyIsInN0cmluZ0lzTm90QmxhbmsiLCJSRUdFWF9ORVdMSU5FIiwicmF3TGlzdCIsInRlc3RMaW5lIiwicGFyc2VyIiwiZmluZCIsInBhcnNlTGluZSIsInRyYW5zZm9ybUxpc3QiLCJGaWxlSW5mb18xIiwiUkVfTElORSIsImdyb3VwcyIsInBhcnNlU2l6ZSIsImZhY3RIYW5kbGVyc0J5TmFtZSIsInRvSVNPU3RyaW5nIiwiZGlnaXRzIiwid29ybGQiLCJzcGxpdFN0cmluZ09uY2UiLCJkZWxpbWl0ZXIiLCJmYWN0IiwiVVRDIiwicGFja2VkRmFjdHMiLCJmYWN0cyIsImZhY3ROYW1lIiwiZmFjdFZhbHVlIiwiZmFjdEhhbmRsZXIiLCJub25MaW5rc0J5SUQiLCJyZXNvbHZlZEZpbGVzIiwidGFyZ2V0IiwicGFyc2VNb2RlIiwiZXhlY1Rva2VuIiwiY29ubmVjdEZvclBhc3NpdmVUcmFuc2ZlciIsInBhcnNlUGFzdlJlc3BvbnNlIiwicGFyc2VFcHN2UmVzcG9uc2UiLCJoYW5kbGVDb25uRXJyIiwiZ2V0U2Vzc2lvbiIsImNvbnRyb2xIb3N0IiwiVHJhbnNmZXJSZXNvbHZlciIsInByb2dyZXNzIiwiZGF0YVRyYW5zZmVyRG9uZSIsIm9uRGF0YVN0YXJ0Iiwib25EYXRhRG9uZSIsInRyeVJlc29sdmUiLCJvbkNvbnRyb2xEb25lIiwib25VbmV4cGVjdGVkUmVxdWVzdCIsIm9uQ29uZGl0aW9uT3JFdmVudCIsImNvbmRpdGlvbiIsImVtaXR0ZXIiLCJldmVudE5hbWUiLCJhY3Rpb24iLCJmdWxsQ29tbWFuZCIsImdldENpcGhlciIsIndyaXRhYmxlRmluaXNoZWQiLCJ3U3RhdGUiLCJlcnJvcmVkIiwiaXNXcml0YWJsZUZpbmlzaGVkIiwiY3J5cHRvX2hhc2hfc2hhNTEyIiwiY3J5cHRvX2hhc2giLCJCTEZfSiIsIkJsb3dmaXNoIiwiUyIsIlVpbnQzMkFycmF5IiwiUCIsIkYiLCJ4OCIsInN0cmVhbTJ3b3JkIiwiZGF0YWJ5dGVzIiwidGVtcCIsImVuY2lwaGVyIiwiVWludDhBcnJheSIsImJ5dGVPZmZzZXQiLCJzdWJhcnJheSIsImV4cGFuZDBzdGF0ZSIsImtleWJ5dGVzIiwiZDgiLCJleHBhbmRzdGF0ZSIsImVuYyIsImJsb2NrcyIsImRlYyIsImJjcnlwdF9oYXNoIiwic2hhMnBhc3MiLCJzaGEyc2FsdCIsImNkYXRhIiwiY2lwaGVydGV4dCIsIkJMT0NLUyIsIkhBU0hTSVpFIiwicGJrZGYiLCJwYXNzIiwicGFzc2xlbiIsInNhbHRsZW4iLCJzdHJpZGUiLCJkZXN0IiwidG1wb3V0IiwiY291bnRzYWx0Iiwib3JpZ2tleWxlbiIsInNhZmVyIiwiU2FmZXIiLCJlbmNvZGluZ09yT2Zmc2V0Iiwia1N0cmluZ01heExlbmd0aCIsIk1BWF9MRU5HVEgiLCJrTWF4TGVuZ3RoIiwiTUFYX1NUUklOR19MRU5HVEgiLCJqc21lbWNtcCIsInBvczEiLCJwb3MyIiwibnVtIiwiU0JNSCIsIm5lZWRsZSIsIm5lZWRsZV9sZW4iLCJtYXRjaGVzIiwiX29jYyIsIl9sb29rYmVoaW5kX3NpemUiLCJfbmVlZGxlIiwiX2J1ZnBvcyIsIl9sb29rYmVoaW5kIiwiX3NibWhfZmVlZCIsImxhc3RfbmVlZGxlX2NoYXIiLCJvY2MiLCJsb29rYmVoaW5kIiwiY2giLCJfc2JtaF9sb29rdXBfY2hhciIsIl9zYm1oX21lbWNtcCIsImJ5dGVzVG9DdXRPZmYiLCJfY29uZmlnIiwid29ya2VycyIsInRhc2tzIiwiVGFza3NNYW5hZ2VyIiwidHJhbnNmZXJzIiwiRnRwU3RyYXRlZ3kiLCJmdHBzIiwiU2Z0cFN0cmF0ZWd5IiwiaGFuZGxlV29ya2VyRXZlbnRzIiwib25Db25uZWN0Iiwib25EaXNjb25uZWN0Iiwib25Qcm9ncmVzcyIsImNsZWFyV29ya2VyRXZlbnRzIiwiZ2V0V29ya2VySW5zdGFuY2UiLCJ3b3JrZXJGaWx0ZXIiLCJ3b3JrZXIiLCJyZWdpc3RlclByb3RvY29sIiwidW5yZWdpc3RlclByb3RvY29sIiwiY3JlYXRlV29ya2VyIiwiX2Nvbm5lY3Rpb25PcHRpb25zIiwic2V0V29ya2VycyIsInNldFdvcmtlckdyb3VwcyIsInRyYW5zZmVyUG9vbCIsInJlcGVhdCIsImFsbCIsImFib3J0IiwiZGVsZXRlQWxsVGFza3MiLCJhYm9ydFRyYW5zZmVyIiwidHJhbnNmZXJJZHMiLCJ3b3JrZXJJbmRleGVzIiwiaW5zdGFuY2VzIiwid29ya2VySW5kZXgiLCJkZWxldGVUYXNrcyIsInBhdXNlV29ya2VycyIsInJlc3VtZVdvcmtlcnMiLCJnZXRQYXRoRnJvbVN0cmVhbSIsImhhbmRsZVRyYW5zZmVyIiwidGFza0lkIiwidG90YWxCeXRlcyIsImdldEZpbGVTaXplIiwibW92ZSIsInJlbW92ZUZpbGUiLCJyZW1vdmVFbXB0eUZvbGRlciIsInJlbW92ZUZvbGRlciIsImNyZWF0ZUZvbGRlciIsImNyZWF0ZUVtcHR5RmlsZSIsImZuIiwiZGlyZWN0aW9uIiwiY3JlYXRlVGFza0lkIiwidHJhbnNmZXIiLCJkZWxldGUiLCJTdHJhdGVneSIsImNvbm5lY3RlZCIsImlzRlRQUyIsInRoZW4iLCJmb3JtYXRGaWxlIiwiUmVhZGFibGUiLCJxdWlldCIsIkZ0cFV0aWxzIiwibGFzdE1vZGlmaWVkIiwiZ2V0VmFsaWREYXRlIiwiZmluaXNoVHJhbnNmZXIiLCJjbGVhbiIsIm9uS2V5Ym9hcmRJbnRlcmFjdGl2ZSIsIndyYXBwZXIiLCJnZXRXcmFwcGVyIiwiaW5zdHJ1Y3Rpb25zTGFuZyIsImZpbmlzaCIsIl9saXN0IiwiZ2V0RGF0ZUZyb21Vbml4VGltZSIsIl9zdGF0IiwiZmlsZVBhdGgiLCJfb3BlbiIsIl9jbG9zZSIsImhhbmRsZU5ldHdvcmsiLCJidWZmZXJlZCIsIlRyYW5zZmVyIiwiaGFuZGxlUHJvZ3Jlc3MiLCJvbkNsZWFuIiwib25SZXNvbHZlIiwib25SZWplY3QiLCJERUZBVUxUX0dST1VQX0ZJTFRFUiIsInRhc2tDb3VudGVyIiwidW5hdmFpbGFibGVXb3JrZXJzIiwiZ2V0V29ya2VyIiwiYnVzeSIsImV4ZWNGdW5jdGlvbiIsImZpbmlzaFRhc2siLCJwcm9jZXNzTmV4dCIsInBhdXNlZCIsImdldFdvcmtlcnMiLCJpbmRleGVzIiwid29ya2Vyc0NoZWNrIiwiaWRzIiwic3BlZWQiLCJldGEiLCJwZXJjZW50Iiwic3RhcnRUaW1lIiwiZWxhcHNlZCIsInJvdW5kIiwicmF0ZSIsIk1TRE9TX0RBVEVfUkVHRVgiLCJnZXRGaWxlVHlwZSIsIm93bmVyIiwibW9udGgiLCJkYXkiLCJ5ZWFyIiwiX2hvdXIiLCJtaW51dGVzIiwiaG91ciIsIm5hY2wiLCJnZiIsIkZsb2F0NjRBcnJheSIsInJhbmRvbWJ5dGVzIiwiXzAiLCJfOSIsImdmMCIsImdmMSIsIl8xMjE2NjUiLCJEIiwiRDIiLCJYIiwiWSIsInRzNjQiLCJ2biIsInhpIiwieWkiLCJjcnlwdG9fdmVyaWZ5XzE2IiwiY3J5cHRvX3ZlcmlmeV8zMiIsImNyeXB0b19jb3JlX3NhbHNhMjAiLCJpbnAiLCJqMCIsImoxIiwiajIiLCJqMyIsImo0IiwiajUiLCJqNiIsImo3IiwiajgiLCJqOSIsImoxMCIsImoxMSIsImoxMiIsImoxMyIsImoxNCIsImoxNSIsIngwIiwieDEiLCJ4MiIsIngzIiwieDQiLCJ4NSIsIng2IiwieDciLCJ4OSIsIngxMCIsIngxMiIsIngxMyIsIngxNCIsIngxNSIsImNvcmVfc2Fsc2EyMCIsImNyeXB0b19jb3JlX2hzYWxzYTIwIiwiY29yZV9oc2Fsc2EyMCIsInNpZ21hIiwiY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvciIsImNwb3MiLCJtcG9zIiwiY3J5cHRvX3N0cmVhbV9zYWxzYTIwIiwiY3J5cHRvX3N0cmVhbSIsInNuIiwiY3J5cHRvX3N0cmVhbV94b3IiLCJwb2x5MTMwNSIsInQwIiwidDEiLCJ0MiIsInQzIiwidDQiLCJ0NSIsInQ2IiwidDciLCJVaW50MTZBcnJheSIsInBhZCIsImxlZnRvdmVyIiwiZmluIiwiY3J5cHRvX29uZXRpbWVhdXRoIiwib3V0cG9zIiwiY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeSIsImhwb3MiLCJjcnlwdG9fc2VjcmV0Ym94IiwiY3J5cHRvX3NlY3JldGJveF9vcGVuIiwic2V0MjU1MTkiLCJjYXIyNTUxOSIsInNlbDI1NTE5IiwicGFjazI1NTE5IiwibmVxMjU1MTkiLCJwYXIyNTUxOSIsInVucGFjazI1NTE5IiwiQSIsIloiLCJNIiwidDgiLCJ0OSIsInQxMCIsInQxMSIsInQxMiIsInQxMyIsInQxNCIsInQxNSIsInQxNiIsInQxNyIsInQxOCIsInQxOSIsInQyMCIsInQyMSIsInQyMiIsInQyMyIsInQyNCIsInQyNSIsInQyNiIsInQyNyIsInQyOCIsInQyOSIsInQzMCIsImIwIiwiYjEiLCJiMiIsImIzIiwiYjQiLCJiNSIsImI2IiwiYjciLCJiOCIsImI5IiwiYjEwIiwiYjExIiwiYjEyIiwiYjEzIiwiYjE0IiwiYjE1IiwiaW52MjU1MTkiLCJjcnlwdG9fc2NhbGFybXVsdCIsIngzMiIsIngxNiIsImNyeXB0b19zY2FsYXJtdWx0X2Jhc2UiLCJjcnlwdG9fYm94X2tleXBhaXIiLCJjcnlwdG9fYm94X2JlZm9yZW5tIiwiZDAiLCJkMyIsImQ0IiwiZDUiLCJkNiIsImQ3IiwiZDkiLCJoaWJpdCIsImgwIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaDciLCJoOCIsImg5IiwicjAiLCJyMSIsInIzIiwicjQiLCJyNSIsInI2IiwicjciLCJyOCIsInI5IiwibWFjcG9zIiwibWFzayIsIndhbnQiLCJjcnlwdG9fYm94X2FmdGVybm0iLCJjcnlwdG9fYm94X29wZW5fYWZ0ZXJubSIsIksiLCJjcnlwdG9faGFzaGJsb2Nrc19obCIsImhoIiwiaGwiLCJiaDAiLCJiaDEiLCJiaDIiLCJiaDMiLCJiaDQiLCJiaDUiLCJiaDYiLCJiaDciLCJibDAiLCJibDEiLCJibDIiLCJibDMiLCJibDQiLCJibDUiLCJibDYiLCJibDciLCJ0aCIsInRsIiwid2giLCJJbnQzMkFycmF5Iiwid2wiLCJhaDAiLCJhaDEiLCJhaDIiLCJhaDMiLCJhaDQiLCJhaDUiLCJhaDYiLCJhaDciLCJhbDAiLCJhbDEiLCJhbDIiLCJhbDMiLCJhbDQiLCJhbDUiLCJhbDYiLCJhbDciLCJjc3dhcCIsInBhY2siLCJ0eCIsInR5IiwiemkiLCJzY2FsYXJtdWx0Iiwic2NhbGFyYmFzZSIsImNyeXB0b19zaWduX2tleXBhaXIiLCJwayIsInNrIiwic2VlZGVkIiwiTCIsIm1vZEwiLCJjYXJyeSIsImNyeXB0b19zaWduIiwic20iLCJzbWxlbiIsImNyeXB0b19zaWduX29wZW4iLCJjaGsiLCJkZW4iLCJkZW4yIiwiZGVuNCIsImRlbjYiLCJwb3cyNTIzIiwidW5wYWNrbmVnIiwiY3J5cHRvX3NpZ25fQllURVMiLCJjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyIsImNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTIiwiY2hlY2tMZW5ndGhzIiwiY2hlY2tBcnJheVR5cGVzIiwiY2xlYW51cCIsImFyciIsImxvd2xldmVsIiwiY3J5cHRvX2JveCIsImNyeXB0b19ib3hfb3BlbiIsImNyeXB0b19zZWNyZXRib3hfS0VZQllURVMiLCJjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMiLCJjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyIsImNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTIiwiY3J5cHRvX3NjYWxhcm11bHRfQllURVMiLCJjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUyIsImNyeXB0b19ib3hfUFVCTElDS0VZQllURVMiLCJjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTIiwiY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTIiwiY3J5cHRvX2JveF9OT05DRUJZVEVTIiwiY3J5cHRvX2JveF9aRVJPQllURVMiLCJjcnlwdG9fYm94X0JPWFpFUk9CWVRFUyIsImNyeXB0b19zaWduX1NFRURCWVRFUyIsImNyeXB0b19oYXNoX0JZVEVTIiwiZGVjb2RlVVRGOCIsImVuY29kZVVURjgiLCJlbmNvZGVCYXNlNjQiLCJkZWNvZGVCYXNlNjQiLCJzZWNyZXRib3giLCJub25jZSIsImJveCIsImtleUxlbmd0aCIsIm5vbmNlTGVuZ3RoIiwib3ZlcmhlYWRMZW5ndGgiLCJzY2FsYXJNdWx0IiwiYmFzZSIsInNjYWxhckxlbmd0aCIsImdyb3VwRWxlbWVudExlbmd0aCIsInNlY3JldEtleSIsImJlZm9yZSIsImNoZWNrQm94TGVuZ3RocyIsImFmdGVyIiwia2V5UGFpciIsImZyb21TZWNyZXRLZXkiLCJwdWJsaWNLZXlMZW5ndGgiLCJzZWNyZXRLZXlMZW5ndGgiLCJzaGFyZWRLZXlMZW5ndGgiLCJzaWduZWRNc2ciLCJtbGVuIiwiZGV0YWNoZWQiLCJmcm9tU2VlZCIsInNlZWQiLCJzZWVkTGVuZ3RoIiwic2lnbmF0dXJlTGVuZ3RoIiwiaGFzaExlbmd0aCIsInNldFBSTkciLCJtc0NyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsInJlcXVpcmUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sInNvdXJjZVJvb3QiOiIifQ== /***/ }), @@ -6783,33 +6783,44 @@ var __importStar = (this && this.__importStar) || function (mod) { __setModuleDefault(result, mod); return result; }; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(2186)); const ftp_deploy_1 = __nccwpck_require__(157); const parse_1 = __nccwpck_require__(6089); -async function runDeployment() { - try { - const args = { - server: core.getInput("server", { required: true }), - username: core.getInput("username", { required: true }), - password: core.getInput("password", { required: true }), - port: (0, parse_1.optionalInt)("port", core.getInput("port")), - protocol: (0, parse_1.optionalProtocol)("protocol", core.getInput("protocol")), - "local-dir": (0, parse_1.optionalString)(core.getInput("local-dir")), - "server-dir": (0, parse_1.optionalString)(core.getInput("server-dir")), - "state-name": (0, parse_1.optionalString)(core.getInput("state-name")), - "dry-run": (0, parse_1.optionalBoolean)("dry-run", core.getInput("dry-run")), - "dangerous-clean-slate": (0, parse_1.optionalBoolean)("dangerous-clean-slate", core.getInput("dangerous-clean-slate")), - "exclude": (0, parse_1.optionalStringArray)("exclude", core.getMultilineInput("exclude")), - "log-level": (0, parse_1.optionalLogLevel)("log-level", core.getInput("log-level")), - "security": (0, parse_1.optionalSecurity)("security", core.getInput("security")), - "timeout": (0, parse_1.optionalInt)("timeout", core.getInput("timeout")) - }; - await (0, ftp_deploy_1.deploy)(args); - } - catch (error) { - core.setFailed(error); - } +function runDeployment() { + return __awaiter(this, void 0, void 0, function* () { + try { + const args = { + server: core.getInput("server", { required: true }), + username: core.getInput("username", { required: true }), + password: core.getInput("password", { required: true }), + port: (0, parse_1.optionalInt)("port", core.getInput("port")), + protocol: (0, parse_1.optionalProtocol)("protocol", core.getInput("protocol")), + "local-dir": (0, parse_1.optionalString)(core.getInput("local-dir")), + "server-dir": (0, parse_1.optionalString)(core.getInput("server-dir")), + "state-name": (0, parse_1.optionalString)(core.getInput("state-name")), + "dry-run": (0, parse_1.optionalBoolean)("dry-run", core.getInput("dry-run")), + "dangerous-clean-slate": (0, parse_1.optionalBoolean)("dangerous-clean-slate", core.getInput("dangerous-clean-slate")), + "exclude": (0, parse_1.optionalStringArray)("exclude", core.getMultilineInput("exclude")), + "log-level": (0, parse_1.optionalLogLevel)("log-level", core.getInput("log-level")), + "security": (0, parse_1.optionalSecurity)("security", core.getInput("security")), + "timeout": (0, parse_1.optionalInt)("timeout", core.getInput("timeout")) + }; + yield (0, ftp_deploy_1.deploy)(args); + } + catch (error) { + core.setFailed(error); + } + }); } runDeployment(); diff --git a/package-lock.json b/package-lock.json index caeb6a1..22cc761 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@actions/core": "^1.10.1", - "@olzie-12/ftp-deploy": "1.2.42", + "@olzie-12/ftp-deploy": "1.2.43", "@types/jest": "^28.1.7", "jest": "^28.1.3", "ts-jest": "^28.0.8", @@ -1126,11 +1126,11 @@ } }, "node_modules/@olzie-12/ftp-deploy": { - "version": "1.2.42", - "resolved": "https://registry.npmjs.org/@olzie-12/ftp-deploy/-/ftp-deploy-1.2.42.tgz", - "integrity": "sha512-SkT7FvcjajRINNuEEMi6TUXNEA+kO1AqyGWoEtmmLDxZ2qA8kz7VGwgZ/+qt4pZRyh1xNujS4M9dcnefxmNBPg==", + "version": "1.2.43", + "resolved": "https://registry.npmjs.org/@olzie-12/ftp-deploy/-/ftp-deploy-1.2.43.tgz", + "integrity": "sha512-4sKz7MCLXHTr3su8NYHqX2Cc+0tS8V8l9mTKdmcy3EMteuNIuCpz8scydwOcEUsFEBBwOuWGGks0WLHHiCMu9A==", "dependencies": { - "@olzie-12/qusly-core": "^4.0.27", + "@olzie-12/qusly-core": "^4.0.28", "fix": "^0.0.6", "lodash": "^4.17.21", "multimatch": "^5.0.0", @@ -1144,20 +1144,20 @@ } }, "node_modules/@olzie-12/qusly-core": { - "version": "4.0.27", - "resolved": "https://registry.npmjs.org/@olzie-12/qusly-core/-/qusly-core-4.0.27.tgz", - "integrity": "sha512-f5jInT83Je7/of2wzwym4N9yGPxoOUgdfiUlsUhahoU3GY5k3AlxrWD+6XynUG+juiinXA4//vxjmsQuzAxxkw==", + "version": "4.0.28", + "resolved": "https://registry.npmjs.org/@olzie-12/qusly-core/-/qusly-core-4.0.28.tgz", + "integrity": "sha512-L6iQ3BygC5v7wiqJk2CkzMroymAGG/dOQP0b/kgzDGQD8FvO0SZxi9ht+Meoc+0IDu18JYz529hPnSIqxOYdUA==", "dependencies": { - "@olzie-12/ssh2": "0.8.52", + "@olzie-12/ssh2": "0.8.53", "basic-ftp": "4.6.1" } }, "node_modules/@olzie-12/ssh2": { - "version": "0.8.52", - "resolved": "https://registry.npmjs.org/@olzie-12/ssh2/-/ssh2-0.8.52.tgz", - "integrity": "sha512-PAD+YDfEwLpdngTbz/SFtUrkWafasU1zKHhx8rTyaq0vfmu/+nKl95vyaeBtGz2p1fug9FYacWapEGfxO1i4tg==", + "version": "0.8.53", + "resolved": "https://registry.npmjs.org/@olzie-12/ssh2/-/ssh2-0.8.53.tgz", + "integrity": "sha512-ThT3OIHREGQlT/tp4HGxJUpe9TlTr8G93pkpjKVRY5Gypk2L+CFCIIGtws7TzWqe2DmCGH98kqydd6BDyGc9KA==", "dependencies": { - "@olzie-12/ssh2-streams": "~0.4.33", + "@olzie-12/ssh2-streams": "~0.4.34", "@types/node": "^18.11.18" }, "engines": { @@ -1165,9 +1165,9 @@ } }, "node_modules/@olzie-12/ssh2-streams": { - "version": "0.4.33", - "resolved": "https://registry.npmjs.org/@olzie-12/ssh2-streams/-/ssh2-streams-0.4.33.tgz", - "integrity": "sha512-Jo2KtRcZ9p0YEsXvZ1HzNiAO3gExcUTkC2ihxscKHdqR9oxCB4inxHHrQDReClmZ7ozSqgzVMDGBWs6V2ZuvLA==", + "version": "0.4.34", + "resolved": "https://registry.npmjs.org/@olzie-12/ssh2-streams/-/ssh2-streams-0.4.34.tgz", + "integrity": "sha512-UCGltD77qlYC8b2ynx40m6PHTh5CCcdrxygn3dxqPOuuUu7r24MVJ8oWxLtG+YOP84R0gGqLx3WKuNKm6bmNlA==", "dependencies": { "@types/node": "^18.11.18", "asn1": "~0.2.0", @@ -5903,11 +5903,11 @@ } }, "@olzie-12/ftp-deploy": { - "version": "1.2.42", - "resolved": "https://registry.npmjs.org/@olzie-12/ftp-deploy/-/ftp-deploy-1.2.42.tgz", - "integrity": "sha512-SkT7FvcjajRINNuEEMi6TUXNEA+kO1AqyGWoEtmmLDxZ2qA8kz7VGwgZ/+qt4pZRyh1xNujS4M9dcnefxmNBPg==", + "version": "1.2.43", + "resolved": "https://registry.npmjs.org/@olzie-12/ftp-deploy/-/ftp-deploy-1.2.43.tgz", + "integrity": "sha512-4sKz7MCLXHTr3su8NYHqX2Cc+0tS8V8l9mTKdmcy3EMteuNIuCpz8scydwOcEUsFEBBwOuWGGks0WLHHiCMu9A==", "requires": { - "@olzie-12/qusly-core": "^4.0.27", + "@olzie-12/qusly-core": "^4.0.28", "fix": "^0.0.6", "lodash": "^4.17.21", "multimatch": "^5.0.0", @@ -5918,27 +5918,27 @@ } }, "@olzie-12/qusly-core": { - "version": "4.0.27", - "resolved": "https://registry.npmjs.org/@olzie-12/qusly-core/-/qusly-core-4.0.27.tgz", - "integrity": "sha512-f5jInT83Je7/of2wzwym4N9yGPxoOUgdfiUlsUhahoU3GY5k3AlxrWD+6XynUG+juiinXA4//vxjmsQuzAxxkw==", + "version": "4.0.28", + "resolved": "https://registry.npmjs.org/@olzie-12/qusly-core/-/qusly-core-4.0.28.tgz", + "integrity": "sha512-L6iQ3BygC5v7wiqJk2CkzMroymAGG/dOQP0b/kgzDGQD8FvO0SZxi9ht+Meoc+0IDu18JYz529hPnSIqxOYdUA==", "requires": { - "@olzie-12/ssh2": "0.8.52", + "@olzie-12/ssh2": "0.8.53", "basic-ftp": "4.6.1" } }, "@olzie-12/ssh2": { - "version": "0.8.52", - "resolved": "https://registry.npmjs.org/@olzie-12/ssh2/-/ssh2-0.8.52.tgz", - "integrity": "sha512-PAD+YDfEwLpdngTbz/SFtUrkWafasU1zKHhx8rTyaq0vfmu/+nKl95vyaeBtGz2p1fug9FYacWapEGfxO1i4tg==", + "version": "0.8.53", + "resolved": "https://registry.npmjs.org/@olzie-12/ssh2/-/ssh2-0.8.53.tgz", + "integrity": "sha512-ThT3OIHREGQlT/tp4HGxJUpe9TlTr8G93pkpjKVRY5Gypk2L+CFCIIGtws7TzWqe2DmCGH98kqydd6BDyGc9KA==", "requires": { - "@olzie-12/ssh2-streams": "~0.4.33", + "@olzie-12/ssh2-streams": "~0.4.34", "@types/node": "^18.11.18" } }, "@olzie-12/ssh2-streams": { - "version": "0.4.33", - "resolved": "https://registry.npmjs.org/@olzie-12/ssh2-streams/-/ssh2-streams-0.4.33.tgz", - "integrity": "sha512-Jo2KtRcZ9p0YEsXvZ1HzNiAO3gExcUTkC2ihxscKHdqR9oxCB4inxHHrQDReClmZ7ozSqgzVMDGBWs6V2ZuvLA==", + "version": "0.4.34", + "resolved": "https://registry.npmjs.org/@olzie-12/ssh2-streams/-/ssh2-streams-0.4.34.tgz", + "integrity": "sha512-UCGltD77qlYC8b2ynx40m6PHTh5CCcdrxygn3dxqPOuuUu7r24MVJ8oWxLtG+YOP84R0gGqLx3WKuNKm6bmNlA==", "requires": { "@types/node": "^18.11.18", "asn1": "~0.2.0", diff --git a/package.json b/package.json index d3da9e7..d8af692 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "license": "MIT", "dependencies": { "@actions/core": "^1.10.1", - "@olzie-12/ftp-deploy": "1.2.42", + "@olzie-12/ftp-deploy": "1.2.43", "@types/jest": "^28.1.7", "jest": "^28.1.3", "ts-jest": "^28.0.8", diff --git a/tsconfig.json b/tsconfig.json index 0e01d89..ae67784 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "moduleResolution": "Node", - "target": "ES2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "outDir": "./dist", /* Redirect output structure to the directory. */ "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */