/* ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. *****************************************************************************/ 'use strict';var WasmTerminal=function(Jc){function Kc(d){return d&&d.__esModule&&Object.prototype.hasOwnProperty.call(d,"default")?d["default"]:d}function Lc(d,a){return a={exports:{}},d(a,a.exports),a.exports}function mg(d,a,b,c){return new (b||(b=Promise))(function(e,f){function h(a){try{k(c.next(a))}catch(t){f(t)}}function g(a){try{k(c["throw"](a))}catch(t){f(t)}}function k(a){a.done?e(a.value):(new b(function(b){b(a.value)})).then(h,g)}k((c=c.apply(d,a||[])).next())})}function ng(d,a){function b(a){return function(b){return c([a, b])}}function c(b){if(f)throw new TypeError("Generator is already executing.");for(;e;)try{if(f=1,h&&(g=b[0]&2?h["return"]:b[0]?h["throw"]||((g=h["return"])&&g.call(h),0):h.next)&&!(g=g.call(h,b[1])).done)return g;if(h=0,g)b=[b[0]&2,g.value];switch(b[0]){case 0:case 1:g=b;break;case 4:return e.label++,{value:b[1],done:!1};case 5:e.label++;h=b[1];b=[0];continue;case 7:b=e.ops.pop();e.trys.pop();continue;default:if(!(g=e.trys,g=0g[0]&&b[1]=d.length&&(d=void 0);return{value:d&&d[b++],done:!d}}}}function og(d,a){var b="function"===typeof Symbol&&d[Symbol.iterator];if(!b)return d;d=b.call(d);var c,e=[];try{for(;(void 0===a||0d;++d)oa[d]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d],ia["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(d)]=d;ia[45]=62;ia[95]=63}function qg(d,a,b){for(var c=[],e=a;e>18&63]+oa[a>>12&63]+oa[a>>6&63]+oa[a&63]);return c.join("")}function Sd(d){Nc||Rd();for(var a=d.length,b=a%3,c="",e=[],f=0,h=a-b;fh?h:f+16383));1===b?(d=d[a-1],c+=oa[d>>2],c+=oa[d<<4&63],c+="=="):2===b&&(d=(d[a-2]<<8)+d[a-1],c+=oa[d>>10],c+=oa[d>>4&63],c+=oa[d<<2&63],c+="=");e.push(c);return e.join("")}function Wb(d,a,b,c,e){var f=8*e-c-1,h=(1<>1,k=-7;e=b?e-1:0;var q=b?-1:1,t=d[a+e];e+=q;b=t&(1<<-k)-1;t>>=-k;for(k+=f;0>=-k;for(k+=c;0>1,t=23===e?Math.pow(2,-24)-Math.pow(2,-77):0;f=c?0:f-1;var p=c?1:-1,v=0>a||0===a&&0>1/a?1:0;a=Math.abs(a);for(isNaN(a)||Infinity===a?(a=isNaN(a)?1:0,c=k):(c=Math.floor(Math.log(a)/Math.LN2),1>a*(h=Math.pow(2,-c))&&(c--,h*=2),a=1<=c+q?a+t/h:a+t*Math.pow(2,1-q),2<= a*h&&(c++,h/=2),c+q>=k?(a=0,c=k):1<=c+q?(a=(a*h-1)*Math.pow(2,e),c+=q):(a=a*Math.pow(2,q-1)*Math.pow(2,e),c=0));8<=e;d[b+f]=a&255,f+=p,a/=256,e-=8);c=c<b||a.byteLengthd)throw new RangeError('"size" argument must not be negative');}function Oc(d,a){Vd(a);d=ta(d,0>a?0:Qc(a)|0);if(!u.TYPED_ARRAY_SUPPORT)for(var b=0;ba.length?0:Qc(a.length)|0;d=ta(d,b);for(var c=0;c=(u.TYPED_ARRAY_SUPPORT?2147483647:1073741823))throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+(u.TYPED_ARRAY_SUPPORT?2147483647:1073741823).toString(16)+" bytes");return d|0}function ja(d){return!(null==d||!d._isBuffer)}function Ud(d,a){if(ja(d))return d.length; if("undefined"!==typeof ArrayBuffer&&"function"===typeof ArrayBuffer.isView&&(ArrayBuffer.isView(d)||d instanceof ArrayBuffer))return d.byteLength;"string"!==typeof d&&(d=""+d);var b=d.length;if(0===b)return 0;for(var c=!1;;)switch(a){case "ascii":case "latin1":case "binary":return b;case "utf8":case "utf-8":case void 0:return nc(d).length;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":return 2*b;case "hex":return b>>>1;case "base64":return Xd(d).length;default:if(c)return nc(d).length;a= (""+a).toLowerCase();c=!0}}function sg(d,a,b){var c=!1;if(void 0===a||0>a)a=0;if(a>this.length)return"";if(void 0===b||b>this.length)b=this.length;if(0>=b)return"";b>>>=0;a>>>=0;if(b<=a)return"";for(d||(d="utf8");;)switch(d){case "hex":d=a;a=b;b=this.length;if(!d||0>d)d=0;if(!a||0>a||a>b)a=b;c="";for(b=d;bc?"0"+c.toString(16):c.toString(16),c=d+c;return c;case "utf8":case "utf-8":return Yd(this,a,b);case "ascii":d="";for(b=Math.min(this.length,b);ab&&(b=-2147483648);b=+b;isNaN(b)&&(b=e?0:d.length-1);0>b&&(b=d.length+b);if(b>=d.length){if(e)return-1;b=d.length-1}else if(0>b)if(e)b=0;else return-1;"string"===typeof a&&(a=u.from(a,c));if(ja(a))return 0===a.length?-1:$d(d,a,b,c,e);if("number"===typeof a)return a&=255,u.TYPED_ARRAY_SUPPORT&&"function"===typeof Uint8Array.prototype.indexOf?e?Uint8Array.prototype.indexOf.call(d,a,b):Uint8Array.prototype.lastIndexOf.call(d, a,b):$d(d,[a],b,c,e);throw new TypeError("val must be string, number or Buffer");}function $d(d,a,b,c,e){function f(a,b){return 1===h?a[b]:a.readUInt16BE(b*h)}var h=1,g=d.length,k=a.length;if(void 0!==c&&(c=String(c).toLowerCase(),"ucs2"===c||"ucs-2"===c||"utf16le"===c||"utf-16le"===c)){if(2>d.length||2>a.length)return-1;h=2;g/=2;k/=2;b/=2}if(e)for(c=-1;bg&&(b=g-k);0<=b;b--){g=!0;for(c= 0;ce&&(f=e);break;case 2:var g=d[a+1];128===(g&192)&&(e=(e&31)<<6|g&63,127e||57343e&&(f=e))}null===f?(f=65533,h=1):65535>>10&1023|55296),f=56320|f&1023);c.push(f);a+=h}d=c.length;if(d<=ae)c=String.fromCharCode.apply(String,c);else{b="";for(a=0;ad)throw new RangeError("offset is not uint");if(d+a>b)throw new RangeError("Trying to access beyond buffer length");}function V(d,a,b,c,e,f){if(!ja(d))throw new TypeError('"buffer" argument must be a Buffer instance'); if(a>e||ad.length)throw new RangeError("Index out of range");}function oc(d,a,b,c){0>a&&(a=65535+a+1);for(var e=0,f=Math.min(d.length-b,2);e>>8*(c?e:1-e)}function pc(d,a,b,c){0>a&&(a=4294967295+a+1);for(var e=0,f=Math.min(d.length-b,4);e>>8*(c?e:3-e)&255}function Xb(d,a,b,c){if(b+c>d.length)throw new RangeError("Index out of range");if(0>b)throw new RangeError("Index out of range"); }function nc(d,a){a=a||Infinity;for(var b,c=d.length,e=null,f=[],h=0;hb){if(!e){if(56319b){-1<(a-=3)&&f.push(239,191,189);e=b;continue}b=(e-55296<<10|b-56320)+65536}else e&&-1<(a-=3)&&f.push(239,191,189);e=null;if(128>b){if(0>--a)break;f.push(b)}else if(2048>b){if(0>(a-=2))break;f.push(b>>6|192,b&63|128)}else if(65536>b){if(0>(a-=3))break; f.push(b>>12|224,b>>6&63|128,b&63|128)}else if(1114112>b){if(0>(a-=4))break;f.push(b>>18|240,b>>12&63|128,b>>6&63|128,b&63|128)}else throw Error("Invalid code point");}return f}function be(d){for(var a=[],b=0;bd.length)d="";else for(;0!==d.length%4;)d+="=";Nc||Rd();var a=d.length;if(0=e)return a;switch(a){case "%s":return String(c[b++]); case "%d":return Number(c[b++]);case "%j":try{return JSON.stringify(c[b++])}catch(g){return"[Circular]"}default:return a}});for(var f=c[b];bb)return ub(a)?d.stylize(RegExp.prototype.toString.call(a),"regexp"):d.stylize("[Object]","special");d.seen.push(a);e=h?Cg(d,a,b,f,e):e.map(function(c){return Wc(d,a,b,f,c,h)});d.seen.pop();return Dg(e,c,g)}function Bg(d,a){if(va(a))return d.stylize("undefined","undefined");if(eb(a))return a="'"+JSON.stringify(a).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'",d.stylize(a,"string");if(le(a))return d.stylize(""+ a,"number");if(Uc(a))return d.stylize(""+a,"boolean");if(null===a)return d.stylize("null","null")}function Vc(d){return"["+Error.prototype.toString.call(d)+"]"}function Cg(d,a,b,c,e){for(var f=[],h=0,g=a.length;hd.seen.indexOf(a.value)?(g=null===b?rc(d,a.value,null):rc(d,a.value,b-1),-1d?"0"+d.toString(10):d.toString(10)}function Eg(){var d=new Date,a=[Yc(d.getHours()),Yc(d.getMinutes()),Yc(d.getSeconds())].join(":");return[d.getDate(),Fg[d.getMonth()],a].join(" ")}function je(d,a){if(!a||!Oa(a))return d;for(var b=Object.keys(a),c=b.length;c--;)d[b[c]]=a[b[c]];return d}function me(d,a){if(d===a)return 0;for(var b=d.length,c=a.length,e=0,f=Math.min(b,c);ec?[]:a.slice(b,c-b+1)}d=bd(d).substr(1);a=bd(a).substr(1);d=b(d.split("/"));a=b(a.split("/"));for(var c=Math.min(d.length,a.length),e=c,f=0;fb&&(f.warned=!0,b=Error("Possible EventEmitter memory leak detected. "+f.length+" "+a+" listeners added. Use emitter.setMaxListeners() to increase limit"),b.name="MaxListenersExceededWarning",b.emitter= d,b.type=a,b.count=f.length,"function"===typeof console.warn?console.warn(b):console.log(b))):(e[a]=b,++d._eventsCount);return d}function Fe(d,a,b){function c(){d.removeListener(a,c);e||(e=!0,b.apply(d,arguments))}var e=!1;c.listener=b;return c}function Ge(d){var a=this._events;if(a){d=a[d];if("function"===typeof d)return 1;if(d)return d.length}return 0}function Mb(d,a){for(var b=Array(a);a--;)b[a]=d[a];return b}function Pa(){this.tail=this.head=null;this.length=0}function $b(d){this.encoding=(d|| "utf8").toLowerCase().replace(/[-_]/,"");if(d&&!Kg(d))throw Error("Unknown encoding: "+d);switch(this.encoding){case "utf8":this.surrogateSize=3;break;case "ucs2":case "utf16le":this.surrogateSize=2;this.detectIncompleteChar=Lg;break;case "base64":this.surrogateSize=3;this.detectIncompleteChar=Mg;break;default:this.write=Ng;return}this.charBuffer=new u(6);this.charLength=this.charReceived=0}function Ng(d){return d.toString(this.encoding)}function Lg(d){this.charLength=(this.charReceived=d.length% 2)?2:0}function Mg(d){this.charLength=(this.charReceived=d.length%3)?3:0}function Og(d,a,b){if("function"===typeof d.prependListener)return d.prependListener(a,b);if(d._events&&d._events[a])Array.isArray(d._events[a])?d._events[a].unshift(b):d._events[a]=[b,d._events[a]];else d.on(a,b)}function He(d,a){d=d||{};this.objectMode=!!d.objectMode;a instanceof ka&&(this.objectMode=this.objectMode||!!d.readableObjectMode);a=d.highWaterMark;var b=this.objectMode?16:16384;this.highWaterMark=a||0===a?a:b;this.highWaterMark= ~~this.highWaterMark;this.buffer=new Pa;this.length=0;this.pipes=null;this.pipesCount=0;this.flowing=null;this.reading=this.endEmitted=this.ended=!1;this.sync=!0;this.resumeScheduled=this.readableListening=this.emittedReadable=this.needReadable=!1;this.defaultEncoding=d.defaultEncoding||"utf8";this.ranOut=!1;this.awaitDrain=0;this.readingMore=!1;this.encoding=this.decoder=null;d.encoding&&(this.decoder=new $b(d.encoding),this.encoding=d.encoding)}function R(d){if(!(this instanceof R))return new R(d); this._readableState=new He(d,this);this.readable=!0;d&&"function"===typeof d.read&&(this._read=d.read);J.call(this)}function Ie(d,a,b,c,e){var f=b,h=null;pa(f)||"string"===typeof f||null===f||void 0===f||a.objectMode||(h=new TypeError("Invalid non-string/buffer chunk"));if(f=h)d.emit("error",f);else if(null===b)a.reading=!1,a.ended||(a.decoder&&(b=a.decoder.end())&&b.length&&(a.buffer.push(b),a.length+=a.objectMode?1:b.length),a.ended=!0,sc(d));else if(a.objectMode||b&&0=d||0===a.length&&a.ended)return 0;if(a.objectMode)return 1;if(d!==d)return a.flowing&&a.length?a.buffer.head.data.length:a.length;if(d>a.highWaterMark){var b=d;8388608<=b?b=8388608:(b--,b|=b>>>1,b|=b>>>2,b|=b>>>4,b|=b>>>8,b|=b>>>16,b++);a.highWaterMark=b}return d<=a.length?d:a.ended?a.length:(a.needReadable=!0,0)}function sc(d){var a=d._readableState;a.needReadable=!1;a.emittedReadable||(G("emitReadable",a.flowing),a.emittedReadable=!0,a.sync?ea(Ke,d):Ke(d))}function Ke(d){G("emit readable"); d.emit("readable");cd(d)}function Pg(d,a){for(var b=a.length;!a.reading&&!a.flowing&&!a.ended&&a.length=a.length)b=a.decoder?a.buffer.join(""):1===a.buffer.length?a.buffer.head.data:a.buffer.concat(a.length),a.buffer.clear();else{b=a.buffer;a=a.decoder;if(df.length?f.length:d;e=h===f.length?e+f:e+f.slice(0,d);d-=h;if(0===d){h===f.length?(++c,b.head=a.next?a.next:b.tail=null):(b.head=a,a.data=f.slice(h));break}++c}b.length-=c;b=e}else{a=u.allocUnsafe(d);c=b.head;e=1;c.data.copy(a);for(d-=c.data.length;c=c.next;){f=c.data;h=d>f.length?f.length:d;f.copy(a,a.length-d,0,h);d-=h;if(0===d){h===f.length?(++e,b.head=c.next?c.next:b.tail=null):(b.head= c,c.data=f.slice(h));break}++e}b.length-=e;b=a}a=b}b=a}return b}function dd(d){var a=d._readableState;if(0d)-((0!=a)<<5)}function bh(d){return $g(d,function(a){if(ch.test(a)){var b,c=[],d=[],f=0;for(b= a.length;f=h&&ft&&c.push(gd(t))}for((f=b=c.length)&&c.push("-");f=d&&tQa((2147483647-k)/v))throw new RangeError(Ue.overflow);k+=(p-d)*v;d=p;for(h=0;h=q+26?26:p-q;if(n>1;for(k+=Qa(k/q);455a&&(c=a);for(a=0;aih?"":d.hostname.toLowerCase();h||(d.hostname=bh(d.hostname));c=d.port?":"+ d.port:"";d.host=(d.hostname||"")+c;d.href+=d.host;h&&(d.hostname=d.hostname.substr(1,d.hostname.length-2),"/"!==e[0]&&(e="/"+e))}if(!jh[f])for(c=0,a=id.length;cg[0]&&b[1]b&&(e=0,c+=1));return{row:c,col:e}}function mh(d,a,b){var c=d.match(/((?:\|\||\&\&|;;|\|\&|\<\(|>>|>\&|[&;()|<>]))|((\\['"|&;()<> \t]|[^\s'"|&;()<> \t])+|"((\\"|[^"])*?)"|'((\\'|[^'])*?)')*/g).filter(Boolean),e=!1;if(!c)return[]; a||(a={});b||(b={});return c.map(function(d,h){function f(){n+=1;if("{"===d.charAt(n)){n+=1;if("}"===d.charAt(n))throw Error("Bad substitution: "+d.substr(n-2,3));var b=d.indexOf("}",n);if(0>b)throw Error("Bad substitution: "+d.substr(n));var c=d.substr(n,b-n);n=b}else/[*@#?$!_\-]/.test(d.charAt(n))?(c=d.charAt(n),n+=1):(b=d.substr(n).match(/[^\w\d_]/))?(c=d.substr(n,b.index),n+=b.index-1):(c=d.substr(n),n=d.length);b=c;c="function"===typeof a?a(b):a[b];void 0===c&&""!=b?c="":void 0===c&&(c="$"); b="object"===typeof c?""+Ga+JSON.stringify(c)+Ga:""+c;return b}if(!e){if(/^(?:\|\||\&\&|;;|\|\&|\<\(|>>|>\&|[&;()|<>])$/.test(d))return{op:d};for(var k=b.escape||"\\",q=!1,t=!1,p="",v=!1,n=0,r=d.length;n>|>\&|[&;()|<>])$/.test(x))return{op:d};if(/^#$/.test(x))return e= !0,p.length?[p,{comment:d.slice(n+1)+c.slice(h+1).join(" ")}]:[{comment:d.slice(n+1)+c.slice(h+1).join(" ")}];x===k?t=!0:p="$"===x?p+f():p+x}}return v?{op:"glob",pattern:p}:p}}).reduce(function(a,b){return void 0===b?a:a.concat(b)},[])}function df(d,a){void 0===a&&(a=!0);var b,c=[],e=/\w+/g;for(b=e.exec(d);b;)a?c.push(b.index):c.push(b.index+b[0].length),b=e.exec(d);return c}function ef(d,a){d=df(d,!0).reverse().find(function(b){return b a});return void 0===b?d.length:b}function oh(d){return""===d.trim()?!1:0!==(d.match(/'/g)||[]).length%2||0!==(d.match(/"/g)||[]).length%2||""===d.split(/(\|\||\||&&)/g).pop().trim()||d.endsWith("\\")&&!d.endsWith("\\\\")?!0:!1}function md(d){return null!==d.match(/[^\\][ \t]$/m)}function ph(d){return""===d.trim()||md(d)?"":ff(d).pop()||""}function qh(d,a){var b=ff(a),c=b.length-1,e=b[c]||"";""===a.trim()?(c=0,e=""):md(a)&&(c+=1,e="");return d.reduce(function(a,d){try{var f=d(c,b);return a.concat(f)}catch(k){return console.error("Auto-complete error:", k),a}},[]).filter(function(a){return a.startsWith(e)})}function gf(d,a=self){a.addEventListener("message",function e(c){if(c&&c.data){var {id:f,type:h,path:g}=Object.assign({path:[]},c.data),k=(c.data.argumentList||[]).map(Ha);try{let a=g.slice(0,-1).reduce((a,c)=>a[c],d),f=g.reduce((a,c)=>a[c],d);switch(h){case 0:var q=f;break;case 1:a[g.slice(-1)[0]]=Ha(c.data.value);q=!0;break;case 2:q=f.apply(a,k);break;case 3:{let a=new f(...k);q=Nb(a)}break;case 4:{let {port1:a,port2:c}=new MessageChannel;gf(d, c);q=rh(a,[a])}break;case 5:q=void 0}}catch(t){q=t,nd.add(t)}Promise.resolve(q).catch(a=>{nd.add(a);return a}).then(c=>{let [d,g]=od(c);a.postMessage(Object.assign(Object.assign({},d),{id:f}),g);5===h&&(a.removeEventListener("message",e),"MessagePort"===a.constructor.name&&a.close())})}});a.start&&a.start()}function tc(d){if(d)throw Error("Proxy has been released and is not useable");}function dc(d,a=[],b=function(){}){let c=!1,e=new Proxy(b,{get(b,h){tc(c);if(h===sh)return()=>Ta(d,{type:5,path:a.map(a=> a.toString())}).then(()=>{"MessagePort"===d.constructor.name&&d.close();c=!0});if("then"===h){if(0===a.length)return{then:()=>e};b=Ta(d,{type:0,path:a.map(a=>a.toString())}).then(Ha);return b.then.bind(b)}return dc(d,[...a,h])},set(b,e,g){tc(c);const [f,h]=od(g);return Ta(d,{type:1,path:[...a,e].map(a=>a.toString()),value:f},h).then(Ha)},apply(b,e,g){tc(c);b=a[a.length-1];if(b===th)return Ta(d,{type:4}).then(Ha);if("bind"===b)return dc(d,a.slice(0,-1));const [f,h]=hf(g);return Ta(d,{type:2,path:a.map(a=> a.toString()),argumentList:f},h).then(Ha)},construct(b,e){tc(c);const [f,h]=hf(e);return Ta(d,{type:3,path:a.map(a=>a.toString()),argumentList:f},h).then(Ha)}});return e}function hf(d){d=d.map(od);return[d.map(a=>a[0]),Array.prototype.concat.apply([],d.map(a=>a[1]))]}function rh(d,a){jf.set(d,a);return d}function Nb(d){return Object.assign(d,{[kf]:!0})}function od(d){for(let [a,b]of lf)if(b.canHandle(d)){let [c,e]=b.serialize(d);return[{type:3,name:a,value:c},e]}return[{type:0,value:d},jf.get(d)|| []]}function Ha(d){switch(d.type){case 3:return lf.get(d.name).deserialize(d.value);case 0:return d.value}}function Ta(d,a,b){return new Promise(c=>{let e=uh();d.addEventListener("message",function g(a){a.data&&a.data.id&&a.data.id===e&&(d.removeEventListener("message",g),c(a.data))});d.start&&d.start();d.postMessage(Object.assign({id:e},a),b)})}function uh(){return Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}function pd(d,a){pd=Object.setPrototypeOf|| {__proto__:[]}instanceof Array&&function(a,c){a.__proto__=c}||function(a,c){for(var b in c)c.hasOwnProperty(b)&&(a[b]=c[b])};return pd(d,a)}function qd(d,a){function b(){this.constructor=d}pd(d,a);d.prototype=null===a?Object.create(a):(b.prototype=a.prototype,new b)}function ec(d){var a="function"===typeof Symbol&&d[Symbol.iterator],b=0;return a?a.call(d):{next:function(){d&&b>=d.length&&(d=void 0);return{value:d&&d[b++],done:!d}}}}function uc(d,a){var b="function"===typeof Symbol&&d[Symbol.iterator]; if(!b)return d;d=b.call(d);var c,e=[];try{for(;(void 0===a||0d;++d)fa[d]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d],ma["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(d)]= d;ma[45]=62;ma[95]=63}function vh(d,a,b){for(var c=[],e=a;e>18&63]+fa[a>>12&63]+fa[a>>6&63]+fa[a&63]);return c.join("")}function nf(d){rd||mf();for(var a=d.length,b=a%3,c="",e=[],f=0,h=a-b;fh?h:f+16383));1===b?(d=d[a-1],c+=fa[d>>2],c+=fa[d<<4&63],c+="=="):2===b&&(d=(d[a-2]<<8)+d[a-1],c+=fa[d>>10],c+=fa[d>>4&63],c+=fa[d<<2&63],c+="=");e.push(c);return e.join("")}function wc(d,a,b,c,e){var f=8*e-c-1,h=(1<> 1,k=-7;e=b?e-1:0;var q=b?-1:1,t=d[a+e];e+=q;b=t&(1<<-k)-1;t>>=-k;for(k+=f;0>=-k;for(k+=c;0>1,t=23===e?Math.pow(2,-24)-Math.pow(2,-77):0;f=c?0:f-1;var p=c?1:-1,v=0>a||0===a&&0>1/a?1:0;a=Math.abs(a);for(isNaN(a)||Infinity===a?(a=isNaN(a)?1:0,c=k):(c=Math.floor(Math.log(a)/ Math.LN2),1>a*(h=Math.pow(2,-c))&&(c--,h*=2),a=1<=c+q?a+t/h:a+t*Math.pow(2,1-q),2<=a*h&&(c++,h/=2),c+q>=k?(a=0,c=k):1<=c+q?(a=(a*h-1)*Math.pow(2,e),c+=q):(a=a*Math.pow(2,q-1)*Math.pow(2,e),c=0));8<=e;d[b+f]=a&255,f+=p,a/=256,e-=8);c=c<b||a.byteLengthd)throw new RangeError('"size" argument must not be negative');}function sd(d,a){qf(a);d=Ia(d,0>a?0:ud(a)|0);if(!z.TYPED_ARRAY_SUPPORT)for(var b=0;ba.length?0:ud(a.length)|0;d=Ia(d,b);for(var c=0;c=(z.TYPED_ARRAY_SUPPORT?2147483647:1073741823))throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+(z.TYPED_ARRAY_SUPPORT?2147483647:1073741823).toString(16)+" bytes");return d|0}function ra(d){return!(null== d||!d._isBuffer)}function pf(d,a){if(ra(d))return d.length;if("undefined"!==typeof ArrayBuffer&&"function"===typeof ArrayBuffer.isView&&(ArrayBuffer.isView(d)||d instanceof ArrayBuffer))return d.byteLength;"string"!==typeof d&&(d=""+d);var b=d.length;if(0===b)return 0;for(var c=!1;;)switch(a){case "ascii":case "latin1":case "binary":return b;case "utf8":case "utf-8":case void 0:return fc(d).length;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":return 2*b;case "hex":return b>>>1;case "base64":return sf(d).length; default:if(c)return fc(d).length;a=(""+a).toLowerCase();c=!0}}function xh(d,a,b){var c=!1;if(void 0===a||0>a)a=0;if(a>this.length)return"";if(void 0===b||b>this.length)b=this.length;if(0>=b)return"";b>>>=0;a>>>=0;if(b<=a)return"";for(d||(d="utf8");;)switch(d){case "hex":d=a;a=b;b=this.length;if(!d||0>d)d=0;if(!a||0>a||a>b)a=b;c="";for(b=d;bc?"0"+c.toString(16):c.toString(16),c=d+c;return c;case "utf8":case "utf-8":return tf(this,a,b);case "ascii":d="";for(b=Math.min(this.length, b);ab&&(b=-2147483648);b=+b;isNaN(b)&&(b=e?0:d.length-1);0>b&&(b=d.length+b);if(b>=d.length){if(e)return-1;b=d.length-1}else if(0>b)if(e)b=0;else return-1;"string"===typeof a&&(a=z.from(a,c));if(ra(a))return 0===a.length?-1:vf(d,a,b,c,e);if("number"===typeof a)return a&=255,z.TYPED_ARRAY_SUPPORT&&"function"===typeof Uint8Array.prototype.indexOf?e?Uint8Array.prototype.indexOf.call(d, a,b):Uint8Array.prototype.lastIndexOf.call(d,a,b):vf(d,[a],b,c,e);throw new TypeError("val must be string, number or Buffer");}function vf(d,a,b,c,e){function f(a,b){return 1===h?a[b]:a.readUInt16BE(b*h)}var h=1,g=d.length,k=a.length;if(void 0!==c&&(c=String(c).toLowerCase(),"ucs2"===c||"ucs-2"===c||"utf16le"===c||"utf-16le"===c)){if(2>d.length||2>a.length)return-1;h=2;g/=2;k/=2;b/=2}if(e)for(c=-1;bg&&(b=g-k);0<=b;b--){g=!0;for(c=0;ce&&(f=e);break;case 2:var g=d[a+1];128===(g&192)&&(e=(e&31)<<6|g&63,127e||57343e&&(f=e))}null===f?(f=65533,h=1):65535>>10&1023|55296),f=56320|f&1023);c.push(f);a+=h}d=c.length;if(d<=wf)c=String.fromCharCode.apply(String,c);else{b="";for(a=0;ad)throw new RangeError("offset is not uint");if(d+a>b)throw new RangeError("Trying to access beyond buffer length"); }function ca(d,a,b,c,e,f){if(!ra(d))throw new TypeError('"buffer" argument must be a Buffer instance');if(a>e||ad.length)throw new RangeError("Index out of range");}function yc(d,a,b,c){0>a&&(a=65535+a+1);for(var e=0,f=Math.min(d.length-b,2);e>>8*(c?e:1-e)}function gc(d,a,b,c){0>a&&(a=4294967295+a+1);for(var e=0,f=Math.min(d.length-b,4);e>>8*(c?e:3-e)&255}function zc(d,a,b,c){if(b+ c>d.length)throw new RangeError("Index out of range");if(0>b)throw new RangeError("Index out of range");}function fc(d,a){a=a||Infinity;for(var b,c=d.length,e=null,f=[],h=0;hb){if(!e){if(56319b){-1<(a-=3)&&f.push(239,191,189);e=b;continue}b=(e-55296<<10|b-56320)+65536}else e&&-1<(a-=3)&&f.push(239,191,189);e=null;if(128>b){if(0>--a)break; f.push(b)}else if(2048>b){if(0>(a-=2))break;f.push(b>>6|192,b&63|128)}else if(65536>b){if(0>(a-=3))break;f.push(b>>12|224,b>>6&63|128,b&63|128)}else if(1114112>b){if(0>(a-=4))break;f.push(b>>18|240,b>>12&63|128,b>>6&63|128,b&63|128)}else throw Error("Invalid code point");}return f}function xf(d){for(var a=[],b=0;bd.length)d="";else for(;0!==d.length%4;)d+="=";rd||mf(); var a=d.length;if(0>16&255;c[f++]=h>>8&255;c[f++]=h&255}2===b?(h=ma[d.charCodeAt(a)]<<2|ma[d.charCodeAt(a+1)]>>4,c[f++]=h&255):1===b&&(h=ma[d.charCodeAt(a)]<<10|ma[d.charCodeAt(a+1)]<<4|ma[d.charCodeAt(a+2)]>>2,c[f++]=h>>8&255,c[f++]= h&255);return c}function Ob(d,a,b,c){for(var e=0;e=a.length||e>=d.length);++e)a[e+b]=d[e];return e}function yf(d){return null!=d&&(!!d._isBuffer||zf(d)||"function"===typeof d.readFloatLE&&"function"===typeof d.slice&&zf(d.slice(0,0)))}function zf(d){return!!d.constructor&&"function"===typeof d.constructor.isBuffer&&d.constructor.isBuffer(d)}function vd(d,a){return a={exports:{}},d(a,a.exports),a.exports}function Af(){throw Error("setTimeout has not been defined");}function Bf(){throw Error("clearTimeout has not been defined"); }function Cf(d){if(jb===setTimeout)return setTimeout(d,0);if((jb===Af||!jb)&&setTimeout)return jb=setTimeout,setTimeout(d,0);try{return jb(d,0)}catch(a){try{return jb.call(null,d,0)}catch(b){return jb.call(this,d,0)}}}function Ah(d){if(kb===clearTimeout)return clearTimeout(d);if((kb===Bf||!kb)&&clearTimeout)return kb=clearTimeout,clearTimeout(d);try{return kb(d)}catch(a){try{return kb.call(null,d)}catch(b){return kb.call(this,d)}}}function Bh(){xb&&yb&&(xb=!1,yb.length?Aa=yb.concat(Aa):hc=-1,Aa.length&& Df())}function Df(){if(!xb){var d=Cf(Bh);xb=!0;for(var a=Aa.length;a;){yb=Aa;for(Aa=[];++hcb.length||2!==c||46!==b.charCodeAt(b.length-1)||46!==b.charCodeAt(b.length-2))if(2>22},b.prototype.getChars=function(){return 2097152&this.content?this.combinedData:2097151&this.content? g.stringFromCodePoint(2097151&this.content):""},b.prototype.getCode=function(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content},b.prototype.setFromCharData=function(a){this.fg=a[k.CHAR_DATA_ATTR_INDEX];this.bg=0;var b=!1;if(2=c){var d=a[k.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=d&&57343>=d?this.content= 1024*(c-55296)+d-56320+65536|a[k.CHAR_DATA_WIDTH_INDEX]<<22:b=!0}else b=!0}else this.content=a[k.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|a[k.CHAR_DATA_WIDTH_INDEX]<<22;b&&(this.combinedData=a[k.CHAR_DATA_CHAR_INDEX],this.content=2097152|a[k.CHAR_DATA_WIDTH_INDEX]<<22)},b.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},b}(d(6).AttributeData);c.CellData=a},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});a=function(){function a(){this.bg= this.fg=0}return a.toColorRGB=function(a){return[a>>>16&255,a>>>8&255,255&a]},a.fromColorRGB=function(a){return(255&a[0])<<16|(255&a[1])<<8|255&a[2]},a.prototype.clone=function(){var b=new a;return b.fg=this.fg,b.bg=this.bg,b},a.prototype.isInverse=function(){return 67108864&this.fg},a.prototype.isBold=function(){return 134217728&this.fg},a.prototype.isUnderline=function(){return 268435456&this.fg},a.prototype.isBlink=function(){return 536870912&this.fg},a.prototype.isInvisible=function(){return 1073741824& this.fg},a.prototype.isItalic=function(){return 67108864&this.bg},a.prototype.isDim=function(){return 134217728&this.bg},a.prototype.getFgColorMode=function(){return 50331648&this.fg},a.prototype.getBgColorMode=function(){return 50331648&this.bg},a.prototype.isFgRGB=function(){return 50331648==(50331648&this.fg)},a.prototype.isBgRGB=function(){return 50331648==(50331648&this.bg)},a.prototype.isFgPalette=function(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)},a.prototype.isBgPalette= function(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)},a.prototype.isFgDefault=function(){return 0==(50331648&this.fg)},a.prototype.isBgDefault=function(){return 0==(50331648&this.bg)},a.prototype.getFgColor=function(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}},a.prototype.getBgColor=function(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215& this.bg;default:return-1}},a}();c.AttributeData=a},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});c.addDisposableDomListener=function(a,b,c,d){return a.addEventListener(b,c,d),{dispose:function(){c&&a.removeEventListener(b,c,d)}}}},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});c.stringFromCodePoint=function(a){return 65535>10))+String.fromCharCode(a%1024+56320)):String.fromCharCode(a)};c.utf32ToString=function(a,b,c){void 0=== b&&(b=0);void 0===c&&(c=a.length);for(var d="";b>10))+String.fromCharCode(e%1024+56320)):d+=String.fromCharCode(e)}return d};a=function(){function a(){this._interim=0}return a.prototype.clear=function(){this._interim=0},a.prototype.decode=function(a,b){var c=a.length;if(!c)return 0;var d=0,e=0;for(this._interim&&(56320<=(h=a.charCodeAt(e++))&&57343>=h?b[d++]=1024*(this._interim-55296)+h-56320+65536:(b[d++]=this._interim,b[d++]=h), this._interim=0);e=f){if(++e>=c)return this._interim=f,d;var h;56320<=(h=a.charCodeAt(e))&&57343>=h?b[d++]=1024*(f-55296)+h-56320+65536:(b[d++]=f,b[d++]=h)}else b[d++]=f}return d},a}();c.StringToUtf32=a;a=function(){function a(){this.interim=new Uint8Array(3)}return a.prototype.clear=function(){this.interim.fill(0)},a.prototype.decode=function(a,b){var c=a.length;if(!c)return 0;var d,e,f,h,g=0,r=0,x=0;if(this.interim[0]){var D=!1,H=this.interim[0]; H&=192==(224&H)?31:224==(240&H)?15:7;for(var La=0,Da;(Da=63&this.interim[++La])&&4>La;)H<<=6,H|=Da;for(var Pb=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,Dc=Pb-La;x=c)return 0;if(128!=(192&(Da=a[x++]))){x--;D=!0;break}this.interim[La++]=Da;H<<=6;H|=63&Da}D||(2===Pb?128>H?x--:b[g++]=H:3===Pb?2048>H||55296<=H&&57343>=H||(b[g++]=H):65536>H||1114111(d=a[x++]))b[g++]=d;else if(192==(224&d)){if(x>=c)return this.interim[0]=d,g;128!=(192&(e=a[x++]))?x--:128>(r=(31&d)<<6|63&e)?x--:b[g++]=r}else if(224==(240&d)){if(x>=c)return this.interim[0]=d,g;if(128!=(192&(e=a[x++])))x--;else{if(x>=c)return this.interim[0]=d,this.interim[1]=e,g;128!=(192&(f=a[x++]))?x--:2048>(r=(15&d)<<12|(63&e)<<6|63&f)||55296<=r&&57343>=r||(b[g++]=r)}}else if(240==(248&d)){if(x>=c)return this.interim[0]=d,g;if(128!=(192&(e=a[x++])))x--; else{if(x>=c)return this.interim[0]=d,this.interim[1]=e,g;if(128!=(192&(f=a[x++])))x--;else{if(x>=c)return this.interim[0]=d,this.interim[1]=e,this.interim[2]=f,g;128!=(192&(h=a[x++]))?x--:65536>(r=(7&d)<<18|(63&e)<<12|(63&f)<<6|63&h)||1114111a.length?"0"+ a:a}function e(a,c,d,e){return void 0!==e?"#"+b(a)+b(c)+b(d)+b(e):"#"+b(a)+b(c)+b(d)}function g(a,b,c,d){return void 0===d&&(d=255),(a<<24|b<<16|c<<8|d)>>>0}function k(a){return[a>>24&255,a>>16&255,a>>8&255,255&a]}function q(a){return t(a>>16&255,a>>8&255,255&a)}function t(a,b,c){a/=255;b/=255;c/=255;return.2126*(.03928>=a?a/12.92:Math.pow((a+.055)/1.055,2.4))+.7152*(.03928>=b?b/12.92:Math.pow((b+.055)/1.055,2.4))+.0722*(.03928>=c?c/12.92:Math.pow((c+.055)/1.055,2.4))}function p(a,b){return a>8),e=q(b>>8);if(p(d,e)>24&255,e=a>>16&255;a=a>>8&255;var f=b>>24&255,h=b>>16&255;b=b>>8&255;for(var g=p(t(f,b,h),t(d,e,a));g>>0}function x(a,b,c){var d=a>>24&255,e=a>>16& 255;a=a>>8&255;var f=b>>24&255,h=b>>16&255;b=b>>8&255;for(var g=p(t(f,b,h),t(d,e,a));gf||255>h||255>b);)f=Math.min(255,f+Math.ceil(.1*(255-f))),h=Math.min(255,h+Math.ceil(.1*(255-h))),g=p(t(f,b=Math.min(255,b+Math.ceil(.1*(255-b))),h),t(d,e,a));return(f<<24|h<<16|b<<8|255)>>>0}Object.defineProperty(c,"__esModule",{value:!0});c.blend=function(a,b){var c=(255&b.rgba)/255;if(1===c)return{css:b.css,rgba:b.rgba};var d=a.rgba>>24&255,f=a.rgba>>16&255;a=a.rgba>>8&255;d+=Math.round(((b.rgba>>24& 255)-d)*c);f+=Math.round(((b.rgba>>16&255)-f)*c);b=a+Math.round(((b.rgba>>8&255)-a)*c);return{css:e(d,f,b),rgba:g(d,f,b)}};c.fromCss=function(a){return{css:a,rgba:(parseInt(a.slice(1),16)<<8|255)>>>0}};c.toPaddedHex=b;c.toCss=e;c.toRgba=g;c.fromRgba=k;c.opaque=function(a){a=(255|a.rgba)>>>0;var b=k(a);return{css:e(b[0],b[1],b[2]),rgba:a}};c.rgbRelativeLuminance=q;c.rgbRelativeLuminance2=t;c.contrastRatio=p;c.rgbaToColor=v;c.ensureContrastRatioRgba=n;c.ensureContrastRatio=function(a,b,c){if(a=n(a.rgba, b.rgba,c))return v(a>>24&255,a>>16&255,a>>8&255)};c.reduceLuminance=r;c.increaseLuminance=x},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});d=(a="undefined"==typeof navigator)?"node":navigator.userAgent;a=a?"node":navigator.platform;c.isFirefox=!!~d.indexOf("Firefox");c.isSafari=/^((?!chrome|android).)*safari/i.test(d);d=0<=["Macintosh","MacIntel","MacPPC","Mac68K"].indexOf(a);c.isMac=d;c.isIpad="iPad"===a;c.isIphone="iPhone"===a;d=0<=["Windows","Win16","Win32","WinCE"].indexOf(a); c.isWindows=d;c.isLinux=0<=a.indexOf("Linux")},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});(function(a){a.NUL="\x00";a.SOH="\u0001";a.STX="\u0002";a.ETX="\u0003";a.EOT="\u0004";a.ENQ="\u0005";a.ACK="\u0006";a.BEL="\u0007";a.BS="\b";a.HT="\t";a.LF="\n";a.VT="\v";a.FF="\f";a.CR="\r";a.SO="\u000e";a.SI="\u000f";a.DLE="\u0010";a.DC1="\u0011";a.DC2="\u0012";a.DC3="\u0013";a.DC4="\u0014";a.NAK="\u0015";a.SYN="\u0016";a.ETB="\u0017";a.CAN="\u0018";a.EM="\u0019";a.SUB="\u001a";a.ESC= "\u001b";a.FS="\u001c";a.GS="\u001d";a.RS="\u001e";a.US="\u001f";a.SP=" ";a.DEL="\u007f"})(c.C0||(c.C0={}));(function(a){a.PAD="\u0080";a.HOP="\u0081";a.BPH="\u0082";a.NBH="\u0083";a.IND="\u0084";a.NEL="\u0085";a.SSA="\u0086";a.ESA="\u0087";a.HTS="\u0088";a.HTJ="\u0089";a.VTS="\u008a";a.PLD="\u008b";a.PLU="\u008c";a.RI="\u008d";a.SS2="\u008e";a.SS3="\u008f";a.DCS="\u0090";a.PU1="\u0091";a.PU2="\u0092";a.STS="\u0093";a.CCH="\u0094";a.MW="\u0095";a.SPA="\u0096";a.EPA="\u0097";a.SOS="\u0098";a.SGCI= "\u0099";a.SCI="\u009a";a.CSI="\u009b";a.ST="\u009c";a.OSC="\u009d";a.PM="\u009e";a.APC="\u009f"})(c.C1||(c.C1={}))},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});var b=d(3),e=d(9),g=d(24),k=d(6),q=d(27),t=d(10);a=function(){function a(a,b,c,d,e,f,h,g){this._container=a;this._alpha=d;this._colors=e;this._rendererId=f;this._bufferService=h;this._optionsService=g;this._scaledCharTop=this._scaledCharLeft=this._scaledCellHeight=this._scaledCellWidth=this._scaledCharHeight=this._scaledCharWidth= 0;this._currentGlyphIdentifier={chars:"",code:0,bg:0,fg:0,bold:!1,dim:!1,italic:!1};this._canvas=document.createElement("canvas");this._canvas.classList.add("xterm-"+b+"-layer");this._canvas.style.zIndex=c.toString();this._initCanvas();this._container.appendChild(this._canvas)}return a.prototype.dispose=function(){var a;this._container.removeChild(this._canvas);null===(a=this._charAtlas)||void 0===a||a.dispose()},a.prototype._initCanvas=function(){this._ctx=q.throwIfFalsy(this._canvas.getContext("2d", {alpha:this._alpha}));this._alpha||this._clearAll()},a.prototype.onOptionsChanged=function(){},a.prototype.onBlur=function(){},a.prototype.onFocus=function(){},a.prototype.onCursorMove=function(){},a.prototype.onGridChanged=function(a,b){},a.prototype.onSelectionChanged=function(a,b,c){},a.prototype.setColors=function(a){this._refreshCharAtlas(a)},a.prototype._setTransparency=function(a){if(a!==this._alpha){var b=this._canvas;this._alpha=a;this._canvas=this._canvas.cloneNode();this._initCanvas(); this._container.replaceChild(this._canvas,b);this._refreshCharAtlas(this._colors);this.onGridChanged(0,this._bufferService.rows-1)}},a.prototype._refreshCharAtlas=function(a){0>=this._scaledCharWidth&&0>=this._scaledCharHeight||(this._charAtlas=g.acquireCharAtlas(this._optionsService.options,this._rendererId,a,this._scaledCharWidth,this._scaledCharHeight),this._charAtlas.warmUp())},a.prototype.resize=function(a){this._scaledCellWidth=a.scaledCellWidth;this._scaledCellHeight=a.scaledCellHeight;this._scaledCharWidth= a.scaledCharWidth;this._scaledCharHeight=a.scaledCharHeight;this._scaledCharLeft=a.scaledCharLeft;this._scaledCharTop=a.scaledCharTop;this._canvas.width=a.scaledCanvasWidth;this._canvas.height=a.scaledCanvasHeight;this._canvas.style.width=a.canvasWidth+"px";this._canvas.style.height=a.canvasHeight+"px";this._alpha||this._clearAll();this._refreshCharAtlas(this._colors)},a.prototype._fillCells=function(a,b,c,d){this._ctx.fillRect(a*this._scaledCellWidth,b*this._scaledCellHeight,c*this._scaledCellWidth, d*this._scaledCellHeight)},a.prototype._fillBottomLineAtCells=function(a,b,c){void 0===c&&(c=1);this._ctx.fillRect(a*this._scaledCellWidth,(b+1)*this._scaledCellHeight-window.devicePixelRatio-1,c*this._scaledCellWidth,window.devicePixelRatio)},a.prototype._fillLeftLineAtCell=function(a,b){this._ctx.fillRect(a*this._scaledCellWidth,b*this._scaledCellHeight,window.devicePixelRatio,this._scaledCellHeight)},a.prototype._strokeRectAtCell=function(a,b,c,d){this._ctx.lineWidth=window.devicePixelRatio;this._ctx.strokeRect(a* this._scaledCellWidth+window.devicePixelRatio/2,b*this._scaledCellHeight+window.devicePixelRatio/2,c*this._scaledCellWidth-window.devicePixelRatio,d*this._scaledCellHeight-window.devicePixelRatio)},a.prototype._clearAll=function(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))},a.prototype._clearCells=function(a,b,c,d){this._alpha?this._ctx.clearRect(a*this._scaledCellWidth, b*this._scaledCellHeight,c*this._scaledCellWidth,d*this._scaledCellHeight):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(a*this._scaledCellWidth,b*this._scaledCellHeight,c*this._scaledCellWidth,d*this._scaledCellHeight))},a.prototype._fillCharTrueColor=function(a,b,c){this._ctx.font=this._getFont(!1,!1);this._ctx.textBaseline="middle";this._clipRow(c);this._ctx.fillText(a.getChars(),b*this._scaledCellWidth+this._scaledCharLeft,c*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight/ 2)},a.prototype._drawChars=function(a,c,d){var f,h,g=this._getContrastColor(a);g||a.isFgRGB()||a.isBgRGB()?this._drawUncachedChars(a,c,d,g):(a.isInverse()?(f=a.isBgDefault()?e.INVERTED_DEFAULT_COLOR:a.getBgColor(),h=a.isFgDefault()?e.INVERTED_DEFAULT_COLOR:a.getFgColor()):(h=a.isBgDefault()?b.DEFAULT_COLOR:a.getBgColor(),f=a.isFgDefault()?b.DEFAULT_COLOR:a.getFgColor()),f+=this._optionsService.options.drawBoldTextInBrightColors&&a.isBold()&&8>f?8:0,this._currentGlyphIdentifier.chars=a.getChars()|| b.WHITESPACE_CELL_CHAR,this._currentGlyphIdentifier.code=a.getCode()||b.WHITESPACE_CELL_CODE,this._currentGlyphIdentifier.bg=h,this._currentGlyphIdentifier.fg=f,this._currentGlyphIdentifier.bold=!!a.isBold(),this._currentGlyphIdentifier.dim=!!a.isDim(),this._currentGlyphIdentifier.italic=!!a.isItalic(),this._charAtlas&&this._charAtlas.draw(this._ctx,this._currentGlyphIdentifier,c*this._scaledCellWidth+this._scaledCharLeft,d*this._scaledCellHeight+this._scaledCharTop)||this._drawUncachedChars(a,c, d))},a.prototype._drawUncachedChars=function(a,b,c,d){(this._ctx.save(),this._ctx.font=this._getFont(!!a.isBold(),!!a.isItalic()),this._ctx.textBaseline="middle",a.isInverse())?d?this._ctx.fillStyle=d.css:a.isBgDefault()?this._ctx.fillStyle=t.opaque(this._colors.background).css:a.isBgRGB()?this._ctx.fillStyle="rgb("+k.AttributeData.toColorRGB(a.getBgColor()).join(",")+")":(d=a.getBgColor(),this._optionsService.options.drawBoldTextInBrightColors&&a.isBold()&&8>d&&(d+=8),this._ctx.fillStyle=this._colors.ansi[d].css): d?this._ctx.fillStyle=d.css:a.isFgDefault()?this._ctx.fillStyle=this._colors.foreground.css:a.isFgRGB()?this._ctx.fillStyle="rgb("+k.AttributeData.toColorRGB(a.getFgColor()).join(",")+")":(d=a.getFgColor(),this._optionsService.options.drawBoldTextInBrightColors&&a.isBold()&&8>d&&(d+=8),this._ctx.fillStyle=this._colors.ansi[d].css);this._clipRow(c);a.isDim()&&(this._ctx.globalAlpha=e.DIM_OPACITY);this._ctx.fillText(a.getChars(),b*this._scaledCellWidth+this._scaledCharLeft,c*this._scaledCellHeight+ this._scaledCharTop+this._scaledCharHeight/2);this._ctx.restore()},a.prototype._clipRow=function(a){this._ctx.beginPath();this._ctx.rect(0,a*this._scaledCellHeight,this._bufferService.cols*this._scaledCellWidth,this._scaledCellHeight);this._ctx.clip()},a.prototype._getFont=function(a,b){return(b?"italic":"")+" "+(a?this._optionsService.options.fontWeightBold:this._optionsService.options.fontWeight)+" "+this._optionsService.options.fontSize*window.devicePixelRatio+"px "+this._optionsService.options.fontFamily}, a.prototype._getContrastColor=function(a){if(1!==this._optionsService.options.minimumContrastRatio){var b=this._colors.contrastCache.getColor(a.bg,a.fg);if(void 0!==b)return b||void 0;b=a.getFgColor();var c=a.getFgColorMode(),d=a.getBgColor(),e=a.getBgColorMode(),f=!!a.isInverse(),h=!!a.isInverse();if(f){var g=b;b=d;d=g;g=c;c=e;e=g}d=this._resolveBackgroundRgba(e,d,f);b=this._resolveForegroundRgba(c,b,f,h);if(b=t.ensureContrastRatioRgba(d,b,this._optionsService.options.minimumContrastRatio))return b= {css:t.toCss(b>>24&255,b>>16&255,b>>8&255),rgba:b},this._colors.contrastCache.setColor(a.bg,a.fg,b),b;this._colors.contrastCache.setColor(a.bg,a.fg,null)}},a.prototype._resolveBackgroundRgba=function(a,b,c){switch(a){case 16777216:case 33554432:return this._colors.ansi[b].rgba;case 50331648:return b<<8;default:return c?this._colors.foreground.rgba:this._colors.background.rgba}},a.prototype._resolveForegroundRgba=function(a,b,c,d){switch(a){case 16777216:case 33554432:return this._optionsService.options.drawBoldTextInBrightColors&& d&&8>b&&(b+=8),this._colors.ansi[b].rgba;case 50331648:return b<<8;default:return c?this._colors.background.rgba:this._colors.foreground.rgba}},a}();c.BaseRenderLayer=a},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});c.serviceRegistry=new Map;c.getServiceDependencies=function(a){return a.di$dependencies||[]};c.createDecorator=function(a){if(c.serviceRegistry.has(a))return c.serviceRegistry.get(a);var b=function(a,c,d){if(3!==arguments.length)throw Error("@IServiceName-decorator can only be used to decorate a parameter"); var e=b;a.di$target===a?a.di$dependencies.push({id:e,index:d}):(a.di$dependencies=[{id:e,index:d}],a.di$target=a)};return b.toString=function(){return a},c.serviceRegistry.set(a,b),b}},function(a,c,d){function b(a,b,c,d){if(void 0===c&&(c=0),void 0===d&&(d=a.length),c>=a.length)return a;c=(a.length+c)%a.length;for(d=d>=a.length?a.length:(a.length+d)%a.length;c>22,2097152&c?this._combined[a].charCodeAt(this._combined[a].length-1):d]},a.prototype.set=function(a,b){this._data[3*a+1]=b[e.CHAR_DATA_ATTR_INDEX];1>22},a.prototype.hasWidth=function(a){return 12582912&this._data[3*a]},a.prototype.getFg=function(a){return this._data[3*a+1]},a.prototype.getBg=function(a){return this._data[3*a+2]},a.prototype.hasContent=function(a){return 4194303&this._data[3*a]},a.prototype.getCodePoint=function(a){var b=this._data[3*a];return 2097152&b?this._combined[a].charCodeAt(this._combined[a].length-1):2097151&b},a.prototype.isCombined=function(a){return 2097152& this._data[3*a]},a.prototype.getString=function(a){var c=this._data[3*a];return 2097152&c?this._combined[a]:2097151&c?b.stringFromCodePoint(2097151&c):""},a.prototype.loadCell=function(a,b){var c=3*a;return b.content=this._data[c+0],b.fg=this._data[c+1],b.bg=this._data[c+2],2097152&b.content&&(b.combinedData=this._combined[a]),b},a.prototype.setCell=function(a,b){2097152&b.content&&(this._combined[a]=b.combinedData);this._data[3*a]=b.content;this._data[3*a+1]=b.fg;this._data[3*a+2]=b.bg},a.prototype.setCellFromCodePoint= function(a,b,c,d,e){this._data[3*a]=b|c<<22;this._data[3*a+1]=d;this._data[3*a+2]=e},a.prototype.addCodepointToCell=function(a,c){var d=this._data[3*a];2097152&d?this._combined[a]+=b.stringFromCodePoint(c):(2097151&d?(this._combined[a]=b.stringFromCodePoint(2097151&d)+b.stringFromCodePoint(c),d&=-2097152,d|=2097152):d=c|4194304,this._data[3*a]=d)},a.prototype.insertCells=function(a,b,c){if(a%=this.length,bthis.length){var c=new Uint32Array(3* a);this.length&&(3*a=a&&delete this._combined[d]}else this._data=new Uint32Array(0),this._combined={};this.length=a}},a.prototype.fill=function(a){this._combined={};for(var b=0;b>22);return 0},a.prototype.copyCellsFrom=function(a,b,c,d,e){var f=a._data;if(e)for(var g=d-1;0<=g;g--)for(e=0;3>e;e++)this._data[3*(c+g)+e]=f[3*(b+g)+e];else for(g=0;ge;e++)this._data[3*(c+g)+e]=f[3*(b+g)+e];d=Object.keys(a._combined);for(e=0;e=b&&(this._combined[f-b+c]=a._combined[f])},a.prototype.translateToString=function(a,c,d){void 0===a&&(a=!1);void 0===c&&(c=0);void 0===d&&(d=this.length); a&&(d=Math.min(d,this.getTrimmedLength()));for(a="";c>22||1}return a},a}();c.BufferLine=a},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});c.promptLabel="Terminal input";c.tooMuchOutput="Too much output to announce, navigate to rows manually to read"},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});c.CHARSETS={};c.DEFAULT_CHARSET=c.CHARSETS.B; c.CHARSETS[0]={"`":"\u25c6",a:"\u2592",b:"\t",c:"\f",d:"\r",e:"\n",f:"\u00b0",g:"\u00b1",h:"\u2424",i:"\v",j:"\u2518",k:"\u2510",l:"\u250c",m:"\u2514",n:"\u253c",o:"\u23ba",p:"\u23bb",q:"\u2500",r:"\u23bc",s:"\u23bd",t:"\u251c",u:"\u2524",v:"\u2534",w:"\u252c",x:"\u2502",y:"\u2264",z:"\u2265","{":"\u03c0","|":"\u2260","}":"\u00a3","~":"\u00b7"};c.CHARSETS.A={"#":"\u00a3"};c.CHARSETS.B=null;c.CHARSETS[4]={"#":"\u00a3","@":"\u00be","[":"ij","\\":"\u00bd","]":"|","{":"\u00a8","|":"f","}":"\u00bc","~":"\u00b4"}; c.CHARSETS.C=c.CHARSETS[5]={"[":"\u00c4","\\":"\u00d6","]":"\u00c5","^":"\u00dc","`":"\u00e9","{":"\u00e4","|":"\u00f6","}":"\u00e5","~":"\u00fc"};c.CHARSETS.R={"#":"\u00a3","@":"\u00e0","[":"\u00b0","\\":"\u00e7","]":"\u00a7","{":"\u00e9","|":"\u00f9","}":"\u00e8","~":"\u00a8"};c.CHARSETS.Q={"@":"\u00e0","[":"\u00e2","\\":"\u00e7","]":"\u00ea","^":"\u00ee","`":"\u00f4","{":"\u00e9","|":"\u00f9","}":"\u00e8","~":"\u00fb"};c.CHARSETS.K={"@":"\u00a7","[":"\u00c4","\\":"\u00d6","]":"\u00dc","{":"\u00e4", "|":"\u00f6","}":"\u00fc","~":"\u00df"};c.CHARSETS.Y={"#":"\u00a3","@":"\u00a7","[":"\u00b0","\\":"\u00e7","]":"\u00e9","`":"\u00f9","{":"\u00e0","|":"\u00f2","}":"\u00e8","~":"\u00ec"};c.CHARSETS.E=c.CHARSETS[6]={"@":"\u00c4","[":"\u00c6","\\":"\u00d8","]":"\u00c5","^":"\u00dc","`":"\u00e4","{":"\u00e6","|":"\u00f8","}":"\u00e5","~":"\u00fc"};c.CHARSETS.Z={"#":"\u00a3","@":"\u00a7","[":"\u00a1","\\":"\u00d1","]":"\u00bf","{":"\u00b0","|":"\u00f1","}":"\u00e7"};c.CHARSETS.H=c.CHARSETS[7]={"@":"\u00c9", "[":"\u00c4","\\":"\u00d6","]":"\u00c5","^":"\u00dc","`":"\u00e9","{":"\u00e4","|":"\u00f6","}":"\u00e5","~":"\u00fc"};c.CHARSETS["="]={"#":"\u00f9","@":"\u00e0","[":"\u00e9","\\":"\u00e7","]":"\u00ea","^":"\u00ee",_:"\u00e8","`":"\u00f4","{":"\u00e4","|":"\u00f6","}":"\u00fc","~":"\u00fb"}},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});var b=d(15);c.wcwidth=function(a){var c=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539], [1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008], [3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971], [6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],d=[[68097,68099],[68101,68102],[68108,68111],[68152, 68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],e=0|a.control,f=new Uint8Array(65536);b.fill(f,1);f[0]=a.nul;b.fill(f,a.control,1,32);b.fill(f,a.control,127,160);b.fill(f,2,4352,4448);f[9001]=2;f[9002]=2;b.fill(f,2,11904,42192);f[12351]=1;b.fill(f,2,44032,55204);b.fill(f,2,63744,64256);b.fill(f,2,65040,65050);b.fill(f,2,65072,65136);b.fill(f,2,65280,65377);b.fill(f,2,65504,65511);for(a=0;aa)a=0|e;else if(127>a)a=1;else if(65536>a)a=f[a];else{a:{var b=a;var c,g=0,h=d.length-1;if(!(bd[h][1]))for(;h>=g;)if(b>d[c=g+h>>1][1])g=c+1;else{if(!(b=a||196608<=a&&262141>=a?2:1}return a}}({nul:0,control:0});c.getStringCellWidth=function(a){for(var b=0,d=a.length,e=0;e=f){if(++e>=d)return b+c.wcwidth(f);var h=a.charCodeAt(e);56320<= h&&57343>=h?f=1024*(f-55296)+h-56320+65536:b+=c.wcwidth(h)}b+=c.wcwidth(f)}return b}},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});a=function(){function a(a,b){if(void 0===a&&(a=32),void 0===b&&(b=32),this.maxLength=a,this.maxSubParamsLength=b,256>8,d=255&this._subParamsIdx[b];0= this.maxLength)this._rejectDigits=!0;else{if(-1>a)throw Error("values lesser than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength;this.params[this.length++]=2147483647=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(-1>a)throw Error("values lesser than -1 are not allowed");this._subParams[this._subParamsLength++]= 2147483647>8)},a.prototype.getSubParams=function(a){var b=this._subParamsIdx[a]>>8;a=255&this._subParamsIdx[a];return 0>8,d=255&this._subParamsIdx[b];0d||57b.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))},a.prototype.end=function(a){var b;return this._hitLimit?b=!1:a&&(b=this._handler(this._data)),this._data="",this._hitLimit=!1,b},a}();c.OscHandler=a},function(a,c,d){Object.defineProperty(c,"__esModule", {value:!0});c.PAYLOAD_LIMIT=1E7},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});var b=d(8),e=d(20),g=d(22),k=[];a=function(){function a(){this._handlers=Object.create(null);this._active=k;this._ident=0;this._handlerFb=function(){}}return a.prototype.dispose=function(){this._handlers=Object.create(null);this._handlerFb=function(){}},a.prototype.addHandler=function(a,b){void 0===this._handlers[a]&&(this._handlers[a]=[]);var c=this._handlers[a];return c.push(b),{dispose:function(){var a= c.indexOf(b);-1!==a&&c.splice(a,1)}}},a.prototype.setHandler=function(a,b){this._handlers[a]=[b]},a.prototype.clearHandler=function(a){this._handlers[a]&&delete this._handlers[a]},a.prototype.setHandlerFallback=function(a){this._handlerFb=a},a.prototype.reset=function(){this._active.length&&this.unhook(!1);this._active=k;this._ident=0},a.prototype.hook=function(a,b){if(this.reset(),this._ident=a,this._active=this._handlers[a]||k,this._active.length)for(a=this._active.length-1;0<=a;a--)this._active[a].hook(b); else this._handlerFb(this._ident,"HOOK",b)},a.prototype.put=function(a,c,d){if(this._active.length)for(var e=this._active.length-1;0<=e;e--)this._active[e].put(a,c,d);else this._handlerFb(this._ident,"PUT",b.utf32ToString(a,c,d))},a.prototype.unhook=function(a){if(this._active.length){for(var b=this._active.length-1;0<=b&&!1===this._active[b].unhook(a);b--);for(b--;0<=b;b--)this._active[b].unhook(!1)}else this._handlerFb(this._ident,"UNHOOK",a);this._active=k;this._ident=0},a}();c.DcsParser=a;a=function(){function a(a){this._handler= a;this._data="";this._hitLimit=!1}return a.prototype.hook=function(a){this._params=a.clone();this._data="";this._hitLimit=!1},a.prototype.put=function(a,c,d){this._hitLimit||(this._data+=b.utf32ToString(a,c,d),this._data.length>g.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))},a.prototype.unhook=function(a){var b;return this._hitLimit?b=!1:a&&(b=this._handler(this._data,this._params?this._params:new e.Params)),this._params=void 0,this._data="",this._hitLimit=!1,b},a}();c.DcsHandler=a},function(a, c,d){Object.defineProperty(c,"__esModule",{value:!0});var b=d(25),e=d(43),g=[];c.acquireCharAtlas=function(a,c,d,f,h){a=b.generateConfig(f,h,a,d);for(d=0;dd;d++){var e=c[d/36%6|0],f=c[d/6%6|0],g=c[d%6];a.push({css:b.toCss(e,f,g),rgba:b.toRgba(e,f,g)})}for(d=0;24>d;d++)c=8+10*d,a.push({css:b.toCss(c,c,c),rgba:b.toRgba(c, c,c)});return a}();a=function(){function a(a,d){this.allowTransparency=d;a=a.createElement("canvas");a.width=1;a.height=1;a=a.getContext("2d");if(!a)throw Error("Could not get rendering context");this._ctx=a;this._ctx.globalCompositeOperation="copy";this._litmusColor=this._ctx.createLinearGradient(0,0,1,1);this._contrastCache=new e.ColorContrastCache;this.colors={foreground:g,background:k,cursor:q,cursorAccent:t,selection:p,selectionOpaque:b.blend(k,p),ansi:c.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache}} return a.prototype.onOptionsChange=function(a){"minimumContrastRatio"===a&&this._contrastCache.clear()},a.prototype.setTheme=function(a){void 0===a&&(a={});this.colors.foreground=this._parseColor(a.foreground,g);this.colors.background=this._parseColor(a.background,k);this.colors.cursor=this._parseColor(a.cursor,q,!0);this.colors.cursorAccent=this._parseColor(a.cursorAccent,t,!0);this.colors.selection=this._parseColor(a.selection,p,!0);this.colors.selectionOpaque=b.blend(this.colors.background,this.colors.selection); this.colors.ansi[0]=this._parseColor(a.black,c.DEFAULT_ANSI_COLORS[0]);this.colors.ansi[1]=this._parseColor(a.red,c.DEFAULT_ANSI_COLORS[1]);this.colors.ansi[2]=this._parseColor(a.green,c.DEFAULT_ANSI_COLORS[2]);this.colors.ansi[3]=this._parseColor(a.yellow,c.DEFAULT_ANSI_COLORS[3]);this.colors.ansi[4]=this._parseColor(a.blue,c.DEFAULT_ANSI_COLORS[4]);this.colors.ansi[5]=this._parseColor(a.magenta,c.DEFAULT_ANSI_COLORS[5]);this.colors.ansi[6]=this._parseColor(a.cyan,c.DEFAULT_ANSI_COLORS[6]);this.colors.ansi[7]= this._parseColor(a.white,c.DEFAULT_ANSI_COLORS[7]);this.colors.ansi[8]=this._parseColor(a.brightBlack,c.DEFAULT_ANSI_COLORS[8]);this.colors.ansi[9]=this._parseColor(a.brightRed,c.DEFAULT_ANSI_COLORS[9]);this.colors.ansi[10]=this._parseColor(a.brightGreen,c.DEFAULT_ANSI_COLORS[10]);this.colors.ansi[11]=this._parseColor(a.brightYellow,c.DEFAULT_ANSI_COLORS[11]);this.colors.ansi[12]=this._parseColor(a.brightBlue,c.DEFAULT_ANSI_COLORS[12]);this.colors.ansi[13]=this._parseColor(a.brightMagenta,c.DEFAULT_ANSI_COLORS[13]); this.colors.ansi[14]=this._parseColor(a.brightCyan,c.DEFAULT_ANSI_COLORS[14]);this.colors.ansi[15]=this._parseColor(a.brightWhite,c.DEFAULT_ANSI_COLORS[15]);this._contrastCache.clear()},a.prototype._parseColor=function(a,c,d){if(void 0===d&&(d=this.allowTransparency),void 0===a)return c;if(this._ctx.fillStyle=this._litmusColor,this._ctx.fillStyle=a,"string"!=typeof this._ctx.fillStyle)return console.warn("Color: "+a+" is invalid using fallback "+c.css),c;this._ctx.fillRect(0,0,1,1);var e=this._ctx.getImageData(0, 0,1,1).data;if(255!==e[3]){if(!d)return console.warn("Color: "+a+" is using transparency, but allowTransparency is false. Using fallback "+c.css+"."),c;if(5===a.length){e=parseInt(a.substr(1),16);a=16*(e>>12&15);c=16*(e>>8&15);d=16*(e>>4&15);e=16*(15&e);var f=b.toRgba(a,c,d,e)}else a=(f=parseInt(a.substr(1),16))>>24&255,c=f>>16&255,d=f>>8&255,e=255&f;return{rgba:f,css:b.toCss(a,c,d,e)}}return{css:a,rgba:b.toRgba(e[0],e[1],e[2],e[3])}},a}();c.ColorManager=a},function(a,c,d){Object.defineProperty(c, "__esModule",{value:!0});c.throwIfFalsy=function(a){if(!a)throw Error("value must not be falsy");return a}},function(a,c,d){var b,e=this&&this.__extends||(b=function(a,c){return(b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a,c)},function(a,c){function d(){this.constructor=a}b(a,c);a.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)});Object.defineProperty(c,"__esModule",{value:!0}); a=d(6);var g=d(3),k=d(5);d=function(a){function b(b,c,d){var e=a.call(this)||this;return e.content=0,e.fg=b.fg,e.bg=b.bg,e.combinedData=c,e._width=d,e}return e(b,a),b.prototype.isCombined=function(){return 2097152},b.prototype.getWidth=function(){return this._width},b.prototype.getChars=function(){return this.combinedData},b.prototype.getCode=function(){return 2097151},b.prototype.setFromCharData=function(a){throw Error("not implemented");},b.prototype.getAsCharData=function(){return[this.fg,this.getChars(), this.getWidth(),this.getCode()]},b}(a.AttributeData);c.JoinedCellData=d;d=function(){function a(a){this._bufferService=a;this._characterJoiners=[];this._nextCharacterJoinerId=0;this._workCell=new k.CellData}return a.prototype.registerCharacterJoiner=function(a){a={id:this._nextCharacterJoinerId++,handler:a};return this._characterJoiners.push(a),a.id},a.prototype.deregisterCharacterJoiner=function(a){for(var b=0;b=b?a[d]:a[d]?k(a[d],b-1):a[d];return c}},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});var b=d(34),e=d(17),g=d(78);a=function(){function a(a){this._core=new b.Terminal(a); this._addonManager=new g.AddonManager}return Object.defineProperty(a.prototype,"onCursorMove",{get:function(){return this._core.onCursorMove},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onLineFeed",{get:function(){return this._core.onLineFeed},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onSelectionChange",{get:function(){return this._core.onSelectionChange},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onData",{get:function(){return this._core.onData}, enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onBinary",{get:function(){return this._core.onBinary},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onTitleChange",{get:function(){return this._core.onTitleChange},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onScroll",{get:function(){return this._core.onScroll},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onKey",{get:function(){return this._core.onKey},enumerable:!0, configurable:!0}),Object.defineProperty(a.prototype,"onRender",{get:function(){return this._core.onRender},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onResize",{get:function(){return this._core.onResize},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"element",{get:function(){return this._core.element},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"parser",{get:function(){return this._parser||(this._parser=new p(this._core)),this._parser}, enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"textarea",{get:function(){return this._core.textarea},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"rows",{get:function(){return this._core.rows},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"cols",{get:function(){return this._core.cols},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"buffer",{get:function(){return new k(this._core.buffer)},enumerable:!0,configurable:!0}), Object.defineProperty(a.prototype,"markers",{get:function(){return this._core.markers},enumerable:!0,configurable:!0}),a.prototype.blur=function(){this._core.blur()},a.prototype.focus=function(){this._core.focus()},a.prototype.resize=function(a,b){this._verifyIntegers(a,b);this._core.resize(a,b)},a.prototype.open=function(a){this._core.open(a)},a.prototype.attachCustomKeyEventHandler=function(a){this._core.attachCustomKeyEventHandler(a)},a.prototype.registerLinkMatcher=function(a,b,c){return this._core.registerLinkMatcher(a, b,c)},a.prototype.deregisterLinkMatcher=function(a){this._core.deregisterLinkMatcher(a)},a.prototype.registerCharacterJoiner=function(a){return this._core.registerCharacterJoiner(a)},a.prototype.deregisterCharacterJoiner=function(a){this._core.deregisterCharacterJoiner(a)},a.prototype.addMarker=function(a){return this._verifyIntegers(a),this._core.addMarker(a)},a.prototype.hasSelection=function(){return this._core.hasSelection()},a.prototype.select=function(a,b,c){this._verifyIntegers(a,b,c);this._core.select(a, b,c)},a.prototype.getSelection=function(){return this._core.getSelection()},a.prototype.getSelectionPosition=function(){return this._core.getSelectionPosition()},a.prototype.clearSelection=function(){this._core.clearSelection()},a.prototype.selectAll=function(){this._core.selectAll()},a.prototype.selectLines=function(a,b){this._verifyIntegers(a,b);this._core.selectLines(a,b)},a.prototype.dispose=function(){this._addonManager.dispose();this._core.dispose()},a.prototype.scrollLines=function(a){this._verifyIntegers(a); this._core.scrollLines(a)},a.prototype.scrollPages=function(a){this._verifyIntegers(a);this._core.scrollPages(a)},a.prototype.scrollToTop=function(){this._core.scrollToTop()},a.prototype.scrollToBottom=function(){this._core.scrollToBottom()},a.prototype.scrollToLine=function(a){this._verifyIntegers(a);this._core.scrollToLine(a)},a.prototype.clear=function(){this._core.clear()},a.prototype.write=function(a,b){this._core.write(a,b)},a.prototype.writeUtf8=function(a,b){this._core.write(a,b)},a.prototype.writeln= function(a,b){this._core.write(a);this._core.write("\r\n",b)},a.prototype.paste=function(a){this._core.paste(a)},a.prototype.getOption=function(a){return this._core.optionsService.getOption(a)},a.prototype.setOption=function(a,b){this._core.optionsService.setOption(a,b)},a.prototype.refresh=function(a,b){this._verifyIntegers(a,b);this._core.refresh(a,b)},a.prototype.reset=function(){this._core.reset()},a.prototype.loadAddon=function(a){return this._addonManager.loadAddon(this,a)},Object.defineProperty(a, "strings",{get:function(){return e},enumerable:!0,configurable:!0}),a.prototype._verifyIntegers=function(){for(var a=[],b=0;ba||a>=this._line.length))return new t(this._line,a)},a.prototype.translateToString=function(a,b,c){return this._line.translateToString(a,b,c)},a}(),t=function(){function a(a,b){this._line=a;this._x=b}return Object.defineProperty(a.prototype,"char",{get:function(){return this._line.getString(this._x)},enumerable:!0,configurable:!0}), Object.defineProperty(a.prototype,"width",{get:function(){return this._line.getWidth(this._x)},enumerable:!0,configurable:!0}),a}(),p=function(){function a(a){this._core=a}return a.prototype.addCsiHandler=function(a,b){return this._core.addCsiHandler(a,function(a){return b(a.toArray())})},a.prototype.addDcsHandler=function(a,b){return this._core.addDcsHandler(a,function(a,c){return b(a,c.toArray())})},a.prototype.addEscHandler=function(a,b){return this._core.addEscHandler(a,b)},a.prototype.addOscHandler= function(a,b){return this._core.addOscHandler(a,b)},a}()},function(a,c,d){var b,e=this&&this.__extends||(b=function(a,c){return(b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a,c)},function(a,c){function d(){this.constructor=a}b(a,c);a.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)});Object.defineProperty(c,"__esModule",{value:!0});var g=d(35),k=d(36),q=d(37),t=d(12),p=d(38), v=d(40),n=d(50),r=d(51),x=d(11),D=d(7),H=d(17),La=d(54),Da=d(55),Pb=d(56),Dc=d(57),Gh=d(59),B=d(1),X=d(16),Ma=d(60),sa=d(26),Ac=d(61),T=d(0),Wa=d(62),u=d(4),z=d(63),lb=d(64);a=d(2);var A=d(70),Qb=d(71),M=d(72),C=d(73),I=d(74),J=d(75),E=d(76),G=d(77),F="undefined"!=typeof window?window.document:null;d=function(a){function b(b){void 0===b&&(b={});var c=a.call(this)||this;return c.browser=x,c.mouseEvents=0,c._keyDownHandled=!1,c._blankLine=null,c._onCursorMove=new B.EventEmitter,c._onData=new B.EventEmitter, c._onBinary=new B.EventEmitter,c._onKey=new B.EventEmitter,c._onLineFeed=new B.EventEmitter,c._onRender=new B.EventEmitter,c._onResize=new B.EventEmitter,c._onScroll=new B.EventEmitter,c._onSelectionChange=new B.EventEmitter,c._onTitleChange=new B.EventEmitter,c._onFocus=new B.EventEmitter,c._onBlur=new B.EventEmitter,c.onA11yCharEmitter=new B.EventEmitter,c.onA11yTabEmitter=new B.EventEmitter,c._instantiationService=new I.InstantiationService,c.optionsService=new Wa.OptionsService(b),c._instantiationService.setService(T.IOptionsService, c.optionsService),c._bufferService=c._instantiationService.createInstance(lb.BufferService),c._instantiationService.setService(T.IBufferService,c._bufferService),c._logService=c._instantiationService.createInstance(M.LogService),c._instantiationService.setService(T.ILogService,c._logService),c._coreService=c._instantiationService.createInstance(Qb.CoreService,function(){return c.scrollToBottom()}),c._instantiationService.setService(T.ICoreService,c._coreService),c._coreService.onData(function(a){return c._onData.fire(a)}), c._coreService.onBinary(function(a){return c._onBinary.fire(a)}),c._coreMouseService=c._instantiationService.createInstance(J.CoreMouseService),c._instantiationService.setService(T.ICoreMouseService,c._coreMouseService),c._dirtyRowService=c._instantiationService.createInstance(C.DirtyRowService),c._instantiationService.setService(T.IDirtyRowService,c._dirtyRowService),c._setupOptionsListeners(),c._setup(),c._writeBuffer=new E.WriteBuffer(function(a){return c._inputHandler.parse(a)}),c}return e(b, a),Object.defineProperty(b.prototype,"options",{get:function(){return this.optionsService.options},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"cols",{get:function(){return this._bufferService.cols},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"rows",{get:function(){return this._bufferService.rows},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onCursorMove",{get:function(){return this._onCursorMove.event},enumerable:!0,configurable:!0}), Object.defineProperty(b.prototype,"onData",{get:function(){return this._onData.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onBinary",{get:function(){return this._onBinary.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onKey",{get:function(){return this._onKey.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onLineFeed",{get:function(){return this._onLineFeed.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype, "onRender",{get:function(){return this._onRender.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onResize",{get:function(){return this._onResize.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onScroll",{get:function(){return this._onScroll.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onSelectionChange",{get:function(){return this._onSelectionChange.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype, "onTitleChange",{get:function(){return this._onTitleChange.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onFocus",{get:function(){return this._onFocus.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onBlur",{get:function(){return this._onBlur.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onA11yChar",{get:function(){return this.onA11yCharEmitter.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype, "onA11yTab",{get:function(){return this.onA11yTabEmitter.event},enumerable:!0,configurable:!0}),b.prototype.dispose=function(){var b,c,d,e;this._isDisposed||(a.prototype.dispose.call(this),null===(b=this._windowsMode)||void 0===b||b.dispose(),this._windowsMode=void 0,null===(c=this._renderService)||void 0===c||c.dispose(),this._customKeyEventHandler=null,this.write=function(){},null===(e=null===(d=this.element)||void 0===d?void 0:d.parentNode)||void 0===e||e.removeChild(this.element))},b.prototype._setup= function(){var a=this;this._parent=F?F.body:null;this._customKeyEventHandler=null;this.insertMode=this.originMode=this.applicationKeypad=!1;this.wraparoundMode=!0;this.bracketedPasteMode=!1;this.gcharset=this.charset=null;this.glevel=0;this.charsets=[null];this.curAttrData=X.DEFAULT_ATTR_DATA.clone();this._eraseAttrData=X.DEFAULT_ATTR_DATA.clone();this.params=[];this.currentParam=0;this._userScrolling=!1;this._inputHandler=new p.InputHandler(this,this._bufferService,this._coreService,this._dirtyRowService, this._logService,this.optionsService,this._coreMouseService);this._inputHandler.onCursorMove(function(){return a._onCursorMove.fire()});this._inputHandler.onLineFeed(function(){return a._onLineFeed.fire()});this.register(this._inputHandler);this.linkifier=this.linkifier||new n.Linkifier(this._bufferService,this._logService);this.options.windowsMode&&this._enableWindowsMode()},b.prototype._enableWindowsMode=function(){this._windowsMode||(this._windowsMode=this.onLineFeed(Ma.handleWindowsModeLineFeed.bind(null, this._bufferService)))},Object.defineProperty(b.prototype,"buffer",{get:function(){return this.buffers.active},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"buffers",{get:function(){return this._bufferService.buffers},enumerable:!0,configurable:!0}),b.prototype.eraseAttrData=function(){return this._eraseAttrData.bg&=-67108864,this._eraseAttrData.bg|=67108863&this.curAttrData.bg,this._eraseAttrData},b.prototype.focus=function(){this.textarea&&this.textarea.focus({preventScroll:!0})}, b.prototype._setupOptionsListeners=function(){var a=this;this.optionsService.onOptionChange(function(b){var c,d,e,f,g;switch(b){case "fontFamily":case "fontSize":null===(c=a._renderService)||void 0===c||c.clear();null===(d=a._charSizeService)||void 0===d||d.measure();break;case "drawBoldTextInBrightColors":case "letterSpacing":case "lineHeight":case "fontWeight":case "fontWeightBold":case "minimumContrastRatio":a._renderService&&(a._renderService.clear(),a._renderService.onResize(a.cols,a.rows),a.refresh(0, a.rows-1));break;case "rendererType":a._renderService&&(a._renderService.setRenderer(a._createRenderer()),a._renderService.onResize(a.cols,a.rows));break;case "scrollback":a.buffers.resize(a.cols,a.rows);null===(e=a.viewport)||void 0===e||e.syncScrollArea();break;case "screenReaderMode":a.optionsService.options.screenReaderMode?!a._accessibilityManager&&a._renderService&&(a._accessibilityManager=new Pb.AccessibilityManager(a,a._renderService)):(null===(f=a._accessibilityManager)||void 0===f||f.dispose(), a._accessibilityManager=null);break;case "tabStopWidth":a.buffers.setupTabStops();break;case "theme":a._setTheme(a.optionsService.options.theme);break;case "windowsMode":a.optionsService.options.windowsMode?a._enableWindowsMode():(null===(g=a._windowsMode)||void 0===g||g.dispose(),a._windowsMode=void 0)}})},b.prototype._onTextAreaFocus=function(a){this.sendFocus&&this._coreService.triggerDataEvent(t.C0.ESC+"[I");this.updateCursorStyle(a);this.element.classList.add("focus");this.showCursor();this._onFocus.fire()}, b.prototype.blur=function(){return this.textarea.blur()},b.prototype._onTextAreaBlur=function(){this.textarea.value="";this.refresh(this.buffer.y,this.buffer.y);this.sendFocus&&this._coreService.triggerDataEvent(t.C0.ESC+"[O");this.element.classList.remove("focus");this._onBlur.fire()},b.prototype._initGlobal=function(){var a=this;this._bindKeys();this.register(D.addDisposableDomListener(this.element,"copy",function(b){a.hasSelection()&&q.copyHandler(b,a._selectionService)}));var b=function(b){return q.handlePasteEvent(b, a.textarea,a.bracketedPasteMode,a._coreService)};this.register(D.addDisposableDomListener(this.textarea,"paste",b));this.register(D.addDisposableDomListener(this.element,"paste",b));x.isFirefox?this.register(D.addDisposableDomListener(this.element,"mousedown",function(b){2===b.button&&q.rightClickHandler(b,a.textarea,a.screenElement,a._selectionService,a.options.rightClickSelectsWord)})):this.register(D.addDisposableDomListener(this.element,"contextmenu",function(b){q.rightClickHandler(b,a.textarea, a.screenElement,a._selectionService,a.options.rightClickSelectsWord)}));x.isLinux&&this.register(D.addDisposableDomListener(this.element,"auxclick",function(b){1===b.button&&q.moveTextAreaUnderMouseCursor(b,a.textarea,a.screenElement)}))},b.prototype._bindKeys=function(){var a=this;this.register(D.addDisposableDomListener(this.textarea,"keyup",function(b){return a._keyUp(b)},!0));this.register(D.addDisposableDomListener(this.textarea,"keydown",function(b){return a._keyDown(b)},!0));this.register(D.addDisposableDomListener(this.textarea, "keypress",function(b){return a._keyPress(b)},!0));this.register(D.addDisposableDomListener(this.textarea,"compositionstart",function(){return a._compositionHelper.compositionstart()}));this.register(D.addDisposableDomListener(this.textarea,"compositionupdate",function(b){return a._compositionHelper.compositionupdate(b)}));this.register(D.addDisposableDomListener(this.textarea,"compositionend",function(){return a._compositionHelper.compositionend()}));this.register(this.onRender(function(){return a._compositionHelper.updateCompositionElements()})); this.register(this.onRender(function(b){return a._queueLinkification(b.start,b.end)}))},b.prototype.open=function(a){var b=this;if(this._parent=a||this._parent,!this._parent)throw Error("Terminal requires a parent element.");F.body.contains(a)||this._logService.warn("Terminal.open was called on an element that was not attached to the DOM");this._document=this._parent.ownerDocument;this.element=this._document.createElement("div");this.element.dir="ltr";this.element.classList.add("terminal");this.element.classList.add("xterm"); this.element.setAttribute("tabindex","0");this._parent.appendChild(this.element);a=F.createDocumentFragment();this._viewportElement=F.createElement("div");this._viewportElement.classList.add("xterm-viewport");a.appendChild(this._viewportElement);this._viewportScrollArea=F.createElement("div");this._viewportScrollArea.classList.add("xterm-scroll-area");this._viewportElement.appendChild(this._viewportScrollArea);this.screenElement=F.createElement("div");this.screenElement.classList.add("xterm-screen"); this._helperContainer=F.createElement("div");this._helperContainer.classList.add("xterm-helpers");this.screenElement.appendChild(this._helperContainer);a.appendChild(this.screenElement);this.textarea=F.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea");this.textarea.setAttribute("aria-label",H.promptLabel);this.textarea.setAttribute("aria-multiline","false");this.textarea.setAttribute("autocorrect","off");this.textarea.setAttribute("autocapitalize","off");this.textarea.setAttribute("spellcheck", "false");this.textarea.tabIndex=0;this.register(D.addDisposableDomListener(this.textarea,"focus",function(a){return b._onTextAreaFocus(a)}));this.register(D.addDisposableDomListener(this.textarea,"blur",function(){return b._onTextAreaBlur()}));this._helperContainer.appendChild(this.textarea);var c=this._instantiationService.createInstance(G.CoreBrowserService,this.textarea);this._instantiationService.setService(u.ICoreBrowserService,c);this._charSizeService=this._instantiationService.createInstance(z.CharSizeService, this._document,this._helperContainer);this._instantiationService.setService(u.ICharSizeService,this._charSizeService);this._compositionView=F.createElement("div");this._compositionView.classList.add("composition-view");this._compositionHelper=this._instantiationService.createInstance(g.CompositionHelper,this.textarea,this._compositionView);this._helperContainer.appendChild(this._compositionView);this.element.appendChild(a);this._theme=this.options.theme||this._theme;this.options.theme=void 0;this._colorManager= new sa.ColorManager(F,this.options.allowTransparency);this.optionsService.onOptionChange(function(a){return b._colorManager.onOptionsChange(a)});this._colorManager.setTheme(this._theme);a=this._createRenderer();this._renderService=this._instantiationService.createInstance(Ac.RenderService,a,this.rows,this.screenElement);this._instantiationService.setService(u.IRenderService,this._renderService);this._renderService.onRender(function(a){return b._onRender.fire(a)});this.onResize(function(a){return b._renderService.resize(a.cols, a.rows)});this._soundService=this._instantiationService.createInstance(La.SoundService);this._instantiationService.setService(u.ISoundService,this._soundService);this._mouseService=this._instantiationService.createInstance(A.MouseService);this._instantiationService.setService(u.IMouseService,this._mouseService);this.viewport=this._instantiationService.createInstance(k.Viewport,function(a,c){return b.scrollLines(a,c)},this._viewportElement,this._viewportScrollArea);this.viewport.onThemeChange(this._colorManager.colors); this.register(this.viewport);this.register(this.onCursorMove(function(){return b._renderService.onCursorMove()}));this.register(this.onResize(function(){return b._renderService.onResize(b.cols,b.rows)}));this.register(this.onBlur(function(){return b._renderService.onBlur()}));this.register(this.onFocus(function(){return b._renderService.onFocus()}));this.register(this._renderService.onDimensionsChange(function(){return b.viewport.syncScrollArea()}));this._selectionService=this._instantiationService.createInstance(r.SelectionService, function(a,c){return b.scrollLines(a,c)},this.element,this.screenElement);this._instantiationService.setService(u.ISelectionService,this._selectionService);this.register(this._selectionService.onSelectionChange(function(){return b._onSelectionChange.fire()}));this.register(this._selectionService.onRedrawRequest(function(a){return b._renderService.onSelectionChanged(a.start,a.end,a.columnSelectMode)}));this.register(this._selectionService.onLinuxMouseSelection(function(a){b.textarea.value=a;b.textarea.focus(); b.textarea.select()}));this.register(this.onScroll(function(){b.viewport.syncScrollArea();b._selectionService.refresh()}));this.register(D.addDisposableDomListener(this._viewportElement,"scroll",function(){return b._selectionService.refresh()}));this._mouseZoneManager=this._instantiationService.createInstance(Da.MouseZoneManager,this.element,this.screenElement);this.register(this._mouseZoneManager);this.register(this.onScroll(function(){return b._mouseZoneManager.clearAll()}));this.linkifier.attachToDom(this.element, this._mouseZoneManager);this.register(D.addDisposableDomListener(this.element,"mousedown",function(a){return b._selectionService.onMouseDown(a)}));this.mouseEvents?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):this._selectionService.enable();this.options.screenReaderMode&&(this._accessibilityManager=new Pb.AccessibilityManager(this,this._renderService));this._charSizeService.measure();this.refresh(0,this.rows-1);this._initGlobal();this.bindMouse()},b.prototype._createRenderer= function(){switch(this.options.rendererType){case "canvas":return this._instantiationService.createInstance(v.Renderer,this._colorManager.colors,this.screenElement,this.linkifier);case "dom":return this._instantiationService.createInstance(Dc.DomRenderer,this._colorManager.colors,this.element,this.screenElement,this._viewportElement,this.linkifier);default:throw Error('Unrecognized rendererType "'+this.options.rendererType+'"');}},b.prototype._setTheme=function(a){var b,c,d;this._theme=a;null===(b= this._colorManager)||void 0===b||b.setTheme(a);null===(c=this._renderService)||void 0===c||c.setColors(this._colorManager.colors);null===(d=this.viewport)||void 0===d||d.onThemeChange(this._colorManager.colors)},b.prototype.bindMouse=function(){function a(a){var b,d;if(!(b=c._mouseService.getRawByteCoords(a,c.screenElement,c.cols,c.rows)))return!1;switch(a.overrideType||a.type){case "mousemove":var e=32;void 0===a.buttons?(d=3,void 0!==a.button&&(d=3>a.button?a.button:3)):d=1&a.buttons?0:4&a.buttons? 1:2&a.buttons?2:3;break;case "mouseup":e=0;d=3>a.button?a.button:3;break;case "mousedown":e=1;d=3>a.button?a.button:3;break;case "wheel":0!==a.deltaY&&(e=0>a.deltaY?0:1);d=4;break;default:return!1}return!(void 0===e||void 0===d||4a.deltaY?"A":"B");for(var d="",e=0;ea){if(0===this.buffer.ydisp)return; this._userScrolling=!0}else a+this.buffer.ydisp>=this.buffer.ybase&&(this._userScrolling=!1);var c=this.buffer.ydisp;this.buffer.ydisp=Math.max(Math.min(this.buffer.ydisp+a,this.buffer.ybase),0);c!==this.buffer.ydisp&&(b||this._onScroll.fire(this.buffer.ydisp),this.refresh(0,this.rows-1))},b.prototype.scrollPages=function(a){this.scrollLines(a*(this.rows-1))},b.prototype.scrollToTop=function(){this.scrollLines(-this.buffer.ydisp)},b.prototype.scrollToBottom=function(){this.scrollLines(this.buffer.ybase- this.buffer.ydisp)},b.prototype.scrollToLine=function(a){a-=this.buffer.ydisp;0!==a&&this.scrollLines(a)},b.prototype.paste=function(a){q.paste(a,this.textarea,this.bracketedPasteMode,this._coreService)},b.prototype.attachCustomKeyEventHandler=function(a){this._customKeyEventHandler=a},b.prototype.addEscHandler=function(a,b){return this._inputHandler.addEscHandler(a,b)},b.prototype.addDcsHandler=function(a,b){return this._inputHandler.addDcsHandler(a,b)},b.prototype.addCsiHandler=function(a,b){return this._inputHandler.addCsiHandler(a, b)},b.prototype.addOscHandler=function(a,b){return this._inputHandler.addOscHandler(a,b)},b.prototype.registerLinkMatcher=function(a,b,c){a=this.linkifier.registerLinkMatcher(a,b,c);return this.refresh(0,this.rows-1),a},b.prototype.deregisterLinkMatcher=function(a){this.linkifier.deregisterLinkMatcher(a)&&this.refresh(0,this.rows-1)},b.prototype.registerCharacterJoiner=function(a){a=this._renderService.registerCharacterJoiner(a);return this.refresh(0,this.rows-1),a},b.prototype.deregisterCharacterJoiner= function(a){this._renderService.deregisterCharacterJoiner(a)&&this.refresh(0,this.rows-1)},Object.defineProperty(b.prototype,"markers",{get:function(){return this.buffer.markers},enumerable:!0,configurable:!0}),b.prototype.addMarker=function(a){if(this.buffer===this.buffers.normal)return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+a)},b.prototype.hasSelection=function(){return!!this._selectionService&&this._selectionService.hasSelection},b.prototype.select=function(a,b,c){this._selectionService.setSelection(a, b,c)},b.prototype.getSelection=function(){return this._selectionService?this._selectionService.selectionText:""},b.prototype.getSelectionPosition=function(){if(this._selectionService.hasSelection)return{startColumn:this._selectionService.selectionStart[0],startRow:this._selectionService.selectionStart[1],endColumn:this._selectionService.selectionEnd[0],endRow:this._selectionService.selectionEnd[1]}},b.prototype.clearSelection=function(){var a;null===(a=this._selectionService)||void 0===a||a.clearSelection()}, b.prototype.selectAll=function(){var a;null===(a=this._selectionService)||void 0===a||a.selectAll()},b.prototype.selectLines=function(a,b){var c;null===(c=this._selectionService)||void 0===c||c.selectLines(a,b)},b.prototype._keyDown=function(a){if(this._keyDownHandled=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(a))return!1;if(!this._compositionHelper.keydown(a))return this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(),!1;var b=Gh.evaluateKeyboardEvent(a,this._coreService.decPrivateModes.applicationCursorKeys, this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(a),3===b.type||2===b.type){var c=this.rows-1;return this.scrollLines(2===b.type?-c:c),this.cancel(a,!0)}return 1===b.type&&this.selectAll(),!!this._isThirdLevelShift(this.browser,a)||(b.cancel&&this.cancel(a,!0),!b.key||(b.key!==t.C0.ETX&&b.key!==t.C0.CR||(this.textarea.value=""),this._onKey.fire({key:b.key,domEvent:a}),this.showCursor(),this._coreService.triggerDataEvent(b.key,!0),this.optionsService.options.screenReaderMode? void(this._keyDownHandled=!0):this.cancel(a,!0)))},b.prototype._isThirdLevelShift=function(a,b){a=a.isMac&&!this.options.macOptionIsMeta&&b.altKey&&!b.ctrlKey&&!b.metaKey||a.isWindows&&b.altKey&&b.ctrlKey&&!b.metaKey;return"keypress"===b.type?a:a&&(!b.keyCode||47f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g= Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3b&&0!==this._viewportElement.scrollTop||0",final:"c"},function(a){return n.sendDeviceAttributesSecondary(a)});n._parser.setCsiHandler({final:"d"}, function(a){return n.linePosAbsolute(a)});n._parser.setCsiHandler({final:"e"},function(a){return n.vPositionRelative(a)});n._parser.setCsiHandler({final:"f"},function(a){return n.hVPosition(a)});n._parser.setCsiHandler({final:"g"},function(a){return n.tabClear(a)});n._parser.setCsiHandler({final:"h"},function(a){return n.setMode(a)});n._parser.setCsiHandler({prefix:"?",final:"h"},function(a){return n.setModePrivate(a)});n._parser.setCsiHandler({final:"l"},function(a){return n.resetMode(a)});n._parser.setCsiHandler({prefix:"?", final:"l"},function(a){return n.resetModePrivate(a)});n._parser.setCsiHandler({final:"m"},function(a){return n.charAttributes(a)});n._parser.setCsiHandler({final:"n"},function(a){return n.deviceStatus(a)});n._parser.setCsiHandler({prefix:"?",final:"n"},function(a){return n.deviceStatusPrivate(a)});n._parser.setCsiHandler({intermediates:"!",final:"p"},function(a){return n.softReset(a)});n._parser.setCsiHandler({intermediates:" ",final:"q"},function(a){return n.setCursorStyle(a)});n._parser.setCsiHandler({final:"r"}, function(a){return n.setScrollRegion(a)});n._parser.setCsiHandler({final:"s"},function(a){return n.saveCursor(a)});n._parser.setCsiHandler({final:"u"},function(a){return n.restoreCursor(a)});n._parser.setCsiHandler({intermediates:"'",final:"}"},function(a){return n.insertColumns(a)});n._parser.setCsiHandler({intermediates:"'",final:"~"},function(a){return n.deleteColumns(a)});n._parser.setExecuteHandler(g.C0.BEL,function(){return n.bell()});n._parser.setExecuteHandler(g.C0.LF,function(){return n.lineFeed()}); n._parser.setExecuteHandler(g.C0.VT,function(){return n.lineFeed()});n._parser.setExecuteHandler(g.C0.FF,function(){return n.lineFeed()});n._parser.setExecuteHandler(g.C0.CR,function(){return n.carriageReturn()});n._parser.setExecuteHandler(g.C0.BS,function(){return n.backspace()});n._parser.setExecuteHandler(g.C0.HT,function(){return n.tab()});n._parser.setExecuteHandler(g.C0.SO,function(){return n.shiftOut()});n._parser.setExecuteHandler(g.C0.SI,function(){return n.shiftIn()});n._parser.setExecuteHandler(g.C1.IND, function(){return n.index()});n._parser.setExecuteHandler(g.C1.NEL,function(){return n.nextLine()});n._parser.setExecuteHandler(g.C1.HTS,function(){return n.tabSet()});n._parser.setOscHandler(0,new La.OscHandler(function(a){return n.setTitle(a)}));n._parser.setOscHandler(2,new La.OscHandler(function(a){return n.setTitle(a)}));n._parser.setEscHandler({final:"7"},function(){return n.saveCursor()});n._parser.setEscHandler({final:"8"},function(){return n.restoreCursor()});n._parser.setEscHandler({final:"D"}, function(){return n.index()});n._parser.setEscHandler({final:"E"},function(){return n.nextLine()});n._parser.setEscHandler({final:"H"},function(){return n.tabSet()});n._parser.setEscHandler({final:"M"},function(){return n.reverseIndex()});n._parser.setEscHandler({final:"="},function(){return n.keypadApplicationMode()});n._parser.setEscHandler({final:">"},function(){return n.keypadNumericMode()});n._parser.setEscHandler({final:"c"},function(){return n.reset()});n._parser.setEscHandler({final:"n"}, function(){return n.setgLevel(2)});n._parser.setEscHandler({final:"o"},function(){return n.setgLevel(3)});n._parser.setEscHandler({final:"|"},function(){return n.setgLevel(3)});n._parser.setEscHandler({final:"}"},function(){return n.setgLevel(2)});n._parser.setEscHandler({final:"~"},function(){return n.setgLevel(1)});n._parser.setEscHandler({intermediates:"%",final:"@"},function(){return n.selectDefaultCharset()});n._parser.setEscHandler({intermediates:"%",final:"G"},function(){return n.selectDefaultCharset()}); b=function(a){H._parser.setEscHandler({intermediates:"(",final:a},function(){return n.selectCharset("("+a)});H._parser.setEscHandler({intermediates:")",final:a},function(){return n.selectCharset(")"+a)});H._parser.setEscHandler({intermediates:"*",final:a},function(){return n.selectCharset("*"+a)});H._parser.setEscHandler({intermediates:"+",final:a},function(){return n.selectCharset("+"+a)});H._parser.setEscHandler({intermediates:"-",final:a},function(){return n.selectCharset("-"+a)});H._parser.setEscHandler({intermediates:".", final:a},function(){return n.selectCharset("."+a)});H._parser.setEscHandler({intermediates:"/",final:a},function(){return n.selectCharset("/"+a)})};var H=this,x;for(x in k.CHARSETS)b(x);return n._parser.setEscHandler({intermediates:"#",final:"8"},function(){return n.screenAlignmentPattern()}),n._parser.setErrorHandler(function(a){return n._logService.error("Parsing error: ",a),a}),n._parser.setDcsHandler({intermediates:"$",final:"q"},new Dc(n._bufferService,n._coreService,n._logService,n._optionsService)), n}return e(b,a),Object.defineProperty(b.prototype,"onCursorMove",{get:function(){return this._onCursorMove.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onLineFeed",{get:function(){return this._onLineFeed.event},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onScroll",{get:function(){return this._onScroll.event},enumerable:!0,configurable:!0}),b.prototype.dispose=function(){a.prototype.dispose.call(this)},b.prototype.parse=function(a){var b=this._bufferService.buffer, c=b.x,d=b.y;if(this._logService.debug("parsing data",a),this._parseBuffer.lengththis._parseBuffer.length&&(this._parseBuffer=new Uint32Array(Math.min(a.length,131072))),this._dirtyRowService.clearRange(),131072d&&f){var D=f[String.fromCharCode(d)];D&&(d=D.charCodeAt(0))}if(g&&this._terminal.onA11yCharEmitter.fire(v.stringFromCodePoint(d)),b||!e.x){if(e.x+b-1>=h)if(r)e.x=0,e.y++,e.y===e.scrollBottom+1?(e.y--,this._terminal.scroll(!0)):(e.y>=this._bufferService.rows&&(e.y=this._bufferService.rows-1),e.lines.get(e.y).isWrapped=!0),p=e.lines.get(e.y+ e.ybase);else if(e.x=h-1,2===b)continue;if(n&&(p.insertCells(e.x,b,e.getNullCell(k)),2===p.getWidth(h-1)&&p.setCellFromCodePoint(h-1,x.NULL_CELL_CODE,x.NULL_CELL_WIDTH,k.fg,k.bg)),p.setCellFromCodePoint(e.x++,d,b,k.fg,k.bg),0=this._bufferService.rows&&(a.y=this._bufferService.rows-1);a.x>=this._bufferService.cols&&a.x--;this._dirtyRowService.markDirty(a.y);this._onLineFeed.fire()},b.prototype.carriageReturn=function(){this._bufferService.buffer.x= 0},b.prototype.backspace=function(){this._restrictCursor();0=this._bufferService.cols)){var a=this._bufferService.buffer.x;this._bufferService.buffer.x=this._bufferService.buffer.nextStop();this._optionsService.options.screenReaderMode&&this._terminal.onA11yTabEmitter.fire(this._bufferService.buffer.x-a)}},b.prototype.shiftOut=function(){this._terminal.setgLevel(1)},b.prototype.shiftIn= function(){this._terminal.setgLevel(0)},b.prototype._restrictCursor=function(){this._bufferService.buffer.x=Math.min(this._bufferService.cols-1,Math.max(0,this._bufferService.buffer.x));this._bufferService.buffer.y=this._terminal.originMode?Math.min(this._bufferService.buffer.scrollBottom,Math.max(this._bufferService.buffer.scrollTop,this._bufferService.buffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._bufferService.buffer.y));this._dirtyRowService.markDirty(this._bufferService.buffer.y)}, b.prototype._setCursor=function(a,b){this._dirtyRowService.markDirty(this._bufferService.buffer.y);this._terminal.originMode?(this._bufferService.buffer.x=a,this._bufferService.buffer.y=this._bufferService.buffer.scrollTop+b):(this._bufferService.buffer.x=a,this._bufferService.buffer.y=b);this._restrictCursor();this._dirtyRowService.markDirty(this._bufferService.buffer.y)},b.prototype._moveCursor=function(a,b){this._restrictCursor();this._setCursor(this._bufferService.buffer.x+a,this._bufferService.buffer.y+ b)},b.prototype.cursorUp=function(a){var b=this._bufferService.buffer.y-this._bufferService.buffer.scrollTop;0<=b?this._moveCursor(0,-Math.min(b,a.params[0]||1)):this._moveCursor(0,-(a.params[0]||1))},b.prototype.cursorDown=function(a){var b=this._bufferService.buffer.scrollBottom-this._bufferService.buffer.y;0<=b?this._moveCursor(0,Math.min(b,a.params[0]||1)):this._moveCursor(0,a.params[0]||1)},b.prototype.cursorForward=function(a){this._moveCursor(a.params[0]||1,0)},b.prototype.cursorBackward=function(a){this._moveCursor(-(a.params[0]|| 1),0)},b.prototype.cursorNextLine=function(a){this.cursorDown(a);this._bufferService.buffer.x=0},b.prototype.cursorPrecedingLine=function(a){this.cursorUp(a);this._bufferService.buffer.x=0},b.prototype.cursorCharAbsolute=function(a){this._setCursor((a.params[0]||1)-1,this._bufferService.buffer.y)},b.prototype.cursorPosition=function(a){this._setCursor(2<=a.length?(a.params[1]||1)-1:0,(a.params[0]||1)-1)},b.prototype.charPosAbsolute=function(a){this._setCursor((a.params[0]||1)-1,this._bufferService.buffer.y)}, b.prototype.hPositionRelative=function(a){this._moveCursor(a.params[0]||1,0)},b.prototype.linePosAbsolute=function(a){this._setCursor(this._bufferService.buffer.x,(a.params[0]||1)-1)},b.prototype.vPositionRelative=function(a){this._moveCursor(0,a.params[0]||1)},b.prototype.hVPosition=function(a){this.cursorPosition(a)},b.prototype.tabClear=function(a){a=a.params[0];0===a?delete this._bufferService.buffer.tabs[this._bufferService.buffer.x]:3===a&&(this._bufferService.buffer.tabs={})},b.prototype.cursorForwardTab= function(a){if(!(this._bufferService.buffer.x>=this._bufferService.cols))for(a=a.params[0]||1;a--;)this._bufferService.buffer.x=this._bufferService.buffer.nextStop()},b.prototype.cursorBackwardTab=function(a){if(!(this._bufferService.buffer.x>=this._bufferService.cols)){a=a.params[0]||1;for(var b=this._bufferService.buffer;a--;)b.x=b.prevStop()}},b.prototype._eraseInBufferLine=function(a,b,c,d){void 0===d&&(d=!1);a=this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase+a);a.replaceCells(b, c,this._bufferService.buffer.getNullCell(this._terminal.eraseAttrData()));d&&(a.isWrapped=!1)},b.prototype._resetBufferLine=function(a){a=this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase+a);a.fill(this._bufferService.buffer.getNullCell(this._terminal.eraseAttrData()));a.isWrapped=!1},b.prototype.eraseInDisplay=function(a){switch(this._restrictCursor(),a.params[0]){case 0:a=this._bufferService.buffer.y;this._dirtyRowService.markDirty(a);for(this._eraseInBufferLine(a++,this._bufferService.buffer.x, this._bufferService.cols,0===this._bufferService.buffer.x);a=this._bufferService.cols&&(this._bufferService.buffer.lines.get(a+1).isWrapped=!1);a--;)this._resetBufferLine(a);this._dirtyRowService.markDirty(0);break;case 2:a=this._bufferService.rows; for(this._dirtyRowService.markDirty(a-1);a--;)this._resetBufferLine(a);this._dirtyRowService.markDirty(0);break;case 3:a=this._bufferService.buffer.lines.length-this._bufferService.rows,0b.scrollBottom||b.yb.scrollBottom||b.yb.scrollBottom||b.yb.scrollBottom||b.yb.scrollBottom||b.yb.scrollBottom||b.y0;276;0c"):this._terminal.is("rxvt-unicode")?this._coreService.triggerDataEvent(g.C0.ESC+"[>85;95;0c"):this._terminal.is("linux")?this._coreService.triggerDataEvent(a.params[0]+"c"):this._terminal.is("screen")&& this._coreService.triggerDataEvent(g.C0.ESC+"[>83;40003;0c"))},b.prototype.setMode=function(a){for(var b=0;b=b?(d.fg&=-50331904,d.fg=d.fg|16777216|b-30):40<=b&&47>=b?(d.bg&=-50331904,d.bg=d.bg|16777216|b-40):90<=b&&97>=b?(d.fg&=-50331904,d.fg=d.fg|16777224|b-90):100<=b&&107>=b?(d.bg&= -50331904,d.bg=d.bg|16777224|b-100):0===b?(d.fg=n.DEFAULT_ATTR_DATA.fg,d.bg=n.DEFAULT_ATTR_DATA.bg):1===b?d.fg|=134217728:3===b?d.bg|=67108864:4===b?d.fg|=268435456:5===b?d.fg|=536870912:7===b?d.fg|=67108864:8===b?d.fg|=1073741824:2===b?d.bg|=134217728:22===b?(d.fg&=-134217729,d.bg&=-134217729):23===b?d.bg&=-67108865:24===b?d.fg&=-268435457:25===b?d.fg&=-536870913:27===b?d.fg&=-67108865:28===b?d.fg&=-1073741825:39===b?(d.fg&=-67108864,d.fg|=16777215&n.DEFAULT_ATTR_DATA.fg):49===b?(d.bg&=-67108864, d.bg|=16777215&n.DEFAULT_ATTR_DATA.bg):38===b||48===b?e+=this._extractColor(a,e,d):100===b?(d.fg&=-67108864,d.fg|=16777215&n.DEFAULT_ATTR_DATA.fg,d.bg&=-67108864,d.bg|=16777215&n.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",b)},b.prototype.deviceStatus=function(a){switch(a.params[0]){case 5:this._coreService.triggerDataEvent(g.C0.ESC+"[0n");break;case 6:this._coreService.triggerDataEvent(g.C0.ESC+"["+(this._bufferService.buffer.y+1)+";"+(this._bufferService.buffer.x+1)+ "R")}},b.prototype.deviceStatusPrivate=function(a){switch(a.params[0]){case 6:this._coreService.triggerDataEvent(g.C0.ESC+"[?"+(this._bufferService.buffer.y+1)+";"+(this._bufferService.buffer.x+1)+"R")}},b.prototype.softReset=function(a){this._coreService.isCursorHidden=!1;this._terminal.insertMode=!1;this._terminal.originMode=!1;this._terminal.wraparoundMode=!0;this._terminal.applicationKeypad=!1;this._terminal.viewport&&this._terminal.viewport.syncScrollArea();this._coreService.decPrivateModes.applicationCursorKeys= !1;this._bufferService.buffer.scrollTop=0;this._bufferService.buffer.scrollBottom=this._bufferService.rows-1;this._terminal.curAttrData=n.DEFAULT_ATTR_DATA.clone();this._bufferService.buffer.x=this._bufferService.buffer.y=0;this._terminal.charset=null;this._terminal.glevel=0;this._terminal.charsets=[null]},b.prototype.setCursorStyle=function(a){a=a.params[0]||1;switch(a){case 1:case 2:this._optionsService.options.cursorStyle="block";break;case 3:case 4:this._optionsService.options.cursorStyle="underline"; break;case 5:case 6:this._optionsService.options.cursorStyle="bar"}this._optionsService.options.cursorBlink=1==a%2},b.prototype.setScrollRegion=function(a){var b,c=a.params[0]||1;(2>a.length||(b=a.params[1])>this._bufferService.rows||0===b)&&(b=this._bufferService.rows);b>c&&(this._bufferService.buffer.scrollTop=c-1,this._bufferService.buffer.scrollBottom=b-1,this._setCursor(0,0))},b.prototype.saveCursor=function(a){this._bufferService.buffer.savedX=this._bufferService.buffer.x;this._bufferService.buffer.savedY= this._bufferService.buffer.ybase+this._bufferService.buffer.y;this._bufferService.buffer.savedCurAttrData.fg=this._terminal.curAttrData.fg;this._bufferService.buffer.savedCurAttrData.bg=this._terminal.curAttrData.bg;this._bufferService.buffer.savedCharset=this._terminal.charset},b.prototype.restoreCursor=function(a){this._bufferService.buffer.x=this._bufferService.buffer.savedX||0;this._bufferService.buffer.y=Math.max(this._bufferService.buffer.savedY-this._bufferService.buffer.ybase,0);this._terminal.curAttrData.fg= this._bufferService.buffer.savedCurAttrData.fg;this._terminal.curAttrData.bg=this._bufferService.buffer.savedCurAttrData.bg;this._terminal.charset=this._savedCharset;this._bufferService.buffer.savedCharset&&(this._terminal.charset=this._bufferService.buffer.savedCharset);this._restrictCursor()},b.prototype.setTitle=function(a){this._terminal.handleTitle(a)},b.prototype.nextLine=function(){this._bufferService.buffer.x=0;this.index()},b.prototype.keypadApplicationMode=function(){this._logService.debug("Serial port requested application keypad."); this._terminal.applicationKeypad=!0;this._terminal.viewport&&this._terminal.viewport.syncScrollArea()},b.prototype.keypadNumericMode=function(){this._logService.debug("Switching back to normal keypad.");this._terminal.applicationKeypad=!1;this._terminal.viewport&&this._terminal.viewport.syncScrollArea()},b.prototype.selectDefaultCharset=function(){this._terminal.setgLevel(0);this._terminal.setgCharset(0,k.DEFAULT_CHARSET)},b.prototype.selectCharset=function(a){2===a.length?"/"!==a[0]&&this._terminal.setgCharset(Pb[a[0]], k.CHARSETS[a[1]]||k.DEFAULT_CHARSET):this.selectDefaultCharset()},b.prototype.index=function(){this._restrictCursor();var a=this._bufferService.buffer;this._bufferService.buffer.y++;a.y===a.scrollBottom+1?(a.y--,this._terminal.scroll()):a.y>=this._bufferService.rows&&(a.y=this._bufferService.rows-1);this._restrictCursor()},b.prototype.tabSet=function(){this._bufferService.buffer.tabs[this._bufferService.buffer.x]=!0},b.prototype.reverseIndex=function(){this._restrictCursor();var a=this._bufferService.buffer; a.y===a.scrollTop?(a.lines.shiftElements(a.y+a.ybase,a.scrollBottom-a.scrollTop,1),a.lines.set(a.y+a.ybase,a.getBlankLine(this._terminal.eraseAttrData())),this._dirtyRowService.markRangeDirty(a.scrollTop,a.scrollBottom)):(a.y--,this._restrictCursor())},b.prototype.reset=function(){this._parser.reset();this._terminal.reset()},b.prototype.setgLevel=function(a){this._terminal.setgLevel(a)},b.prototype.screenAlignmentPattern=function(){var a=new D.CellData;a.content=4194373;a.fg=this._terminal.curAttrData.fg; a.bg=this._terminal.curAttrData.bg;var b=this._bufferService.buffer;this._setCursor(0,0);for(var c=0;cc||63e||47a||a>b[1])throw Error("final must be in range "+b[0]+" .. "+b[1]);return c<<=8,c|a},b.prototype.identToString=function(a){for(var b=[];a;)b.push(String.fromCharCode(255&a)),a>>=8;return b.reverse().join("")},b.prototype.dispose=function(){this._csiHandlers=Object.create(null);this._executeHandlers=Object.create(null);this._escHandlers=Object.create(null);this._oscParser.dispose();this._dcsParser.dispose()}, b.prototype.setPrintHandler=function(a){this._printHandler=a},b.prototype.clearPrintHandler=function(){this._printHandler=this._printHandlerFb},b.prototype.addEscHandler=function(a,b){a=this._identifier(a,[48,126]);void 0===this._escHandlers[a]&&(this._escHandlers[a]=[]);var c=this._escHandlers[a];return c.push(b),{dispose:function(){var a=c.indexOf(b);-1!==a&&c.splice(a,1)}}},b.prototype.setEscHandler=function(a,b){this._escHandlers[this._identifier(a,[48,126])]=[b]},b.prototype.clearEscHandler= function(a){this._escHandlers[this._identifier(a,[48,126])]&&delete this._escHandlers[this._identifier(a,[48,126])]},b.prototype.setEscHandlerFallback=function(a){this._escHandlerFb=a},b.prototype.setExecuteHandler=function(a,b){this._executeHandlers[a.charCodeAt(0)]=b},b.prototype.clearExecuteHandler=function(a){this._executeHandlers[a.charCodeAt(0)]&&delete this._executeHandlers[a.charCodeAt(0)]},b.prototype.setExecuteHandlerFallback=function(a){this._executeHandlerFb=a},b.prototype.addCsiHandler= function(a,b){a=this._identifier(a);void 0===this._csiHandlers[a]&&(this._csiHandlers[a]=[]);var c=this._csiHandlers[a];return c.push(b),{dispose:function(){var a=c.indexOf(b);-1!==a&&c.splice(a,1)}}},b.prototype.setCsiHandler=function(a,b){this._csiHandlers[this._identifier(a)]=[b]},b.prototype.clearCsiHandler=function(a){this._csiHandlers[this._identifier(a)]&&delete this._csiHandlers[this._identifier(a)]},b.prototype.setCsiHandlerFallback=function(a){this._csiHandlerFb=a},b.prototype.addDcsHandler= function(a,b){return this._dcsParser.addHandler(this._identifier(a),b)},b.prototype.setDcsHandler=function(a,b){this._dcsParser.setHandler(this._identifier(a),b)},b.prototype.clearDcsHandler=function(a){this._dcsParser.clearHandler(this._identifier(a))},b.prototype.setDcsHandlerFallback=function(a){this._dcsParser.setHandlerFallback(a)},b.prototype.addOscHandler=function(a,b){return this._oscParser.addHandler(a,b)},b.prototype.setOscHandler=function(a,b){this._oscParser.setHandler(a,b)},b.prototype.clearOscHandler= function(a){this._oscParser.clearHandler(a)},b.prototype.setOscHandlerFallback=function(a){this._oscParser.setHandlerFallback(a)},b.prototype.setErrorHandler=function(a){this._errorHandler=a},b.prototype.clearErrorHandler=function(){this._errorHandler=this._errorHandlerFb},b.prototype.reset=function(){this.currentState=this.initialState;this._oscParser.reset();this._dcsParser.reset();this._params.reset();this._params.addParam(0);this.precedingCodepoint=this._collect=0},b.prototype.parse=function(a, b){for(var c=0,d,e=this.currentState,f=this._oscParser,g=this._dcsParser,h=this._collect,k=this._params,n=this.TRANSITIONS.table,p=0;p(c=a[p])?c:160)])>>4){case 2:for(e=p+1;;++e){if(e>=b||32>(c=a[e])||126c){this._printHandler(a,p,e);p=e-1;break}if(++e>=b||32>(c=a[e])||126c){this._printHandler(a,p,e);p=e-1;break}if(++e>=b||32>(c=a[e])||126c){this._printHandler(a,p,e);p=e-1;break}if(++e>=b||32>(c=a[e])||126c){this._printHandler(a,p,e);p= e-1;break}}break;case 3:this._executeHandlers[c]?this._executeHandlers[c]():this._executeHandlerFb(c);this.precedingCodepoint=0;break;case 1:if(this._errorHandler({position:p,code:c,currentState:e,collect:h,params:k,abort:!1}).abort)return;break;case 7:for(var r=(e=this._csiHandlers[h<<8|c])?e.length-1:-1;0<=r&&!1===e[r](k);r--);0>r&&this._csiHandlerFb(h<<8|c,k);this.precedingCodepoint=0;break;case 8:do switch(c){case 59:k.addParam(0);break;case 58:k.addSubParam(-1);break;default:k.addDigit(c-48)}while(++p< b&&47<(c=a[p])&&60>c);p--;break;case 9:h<<=8;h|=c;break;case 10:for(r=(e=this._escHandlers[h<<8|c])?e.length-1:-1;0<=r&&!1===e[r]();r--);0>r&&this._escHandlerFb(h<<8|c);this.precedingCodepoint=0;break;case 11:k.reset();k.addParam(0);h=0;break;case 12:g.hook(h<<8|c,k);break;case 13:for(e=p+1;;++e)if(e>=b||24===(c=a[e])||26===c||27===c||127c){g.put(a,p,e);p=e-1;break}break;case 14:g.unhook(24!==c&&26!==c);27===c&&(d|=1);k.reset();k.addParam(0);this.precedingCodepoint=h=0;break;case 4:f.start(); break;case 5:for(e=p+1;;e++)if(e>=b||32>(c=a[e])||127=c){f.put(a,p,e);p=e-1;break}break;case 6:f.end(24!==c&&26!==c),27===c&&(d|=1),k.reset(),k.addParam(0),this.precedingCodepoint=h=0}e=15&d}this._collect=h;this.currentState=e},b}(a.Disposable);c.EscapeSequenceParser=d},function(a,c,d){var b,e=this&&this.__extends||(b=function(a,c){return(b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a, c)},function(a,c){function d(){this.constructor=a}b(a,c);a.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)}),g=this&&this.__decorate||function(a,b,c,d){var e,f=arguments.length,g=3>f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3e&&(e+=8);c._ctx.fillStyle= c._colors.ansi[e].css}else a.isFgDefault()?c._ctx.fillStyle=c._colors.foreground.css:a.isFgRGB()?c._ctx.fillStyle="rgb("+k.AttributeData.toColorRGB(a.getFgColor()).join(",")+")":(e=a.getFgColor(),c._optionsService.options.drawBoldTextInBrightColors&&a.isBold()&&8>e&&(e+=8),c._ctx.fillStyle=c._colors.ansi[e].css);c._fillBottomLineAtCells(b,d,a.getWidth());c._ctx.restore()}})},b.prototype.onGridChanged=function(a,b){0!==this._state.cache.length&&(this._charAtlas&&this._charAtlas.beginFrame(),this._clearCells(0, a,this._bufferService.cols,b-a+1),this._drawBackground(a,b),this._drawForeground(a,b))},b.prototype.onOptionsChanged=function(){this._setTransparency(this._optionsService.options.allowTransparency)},b.prototype._isOverlapping=function(a){if(1!==a.getWidth()||256>a.getCode())return!1;a=a.getChars();if(this._characterOverlapCache.hasOwnProperty(a))return this._characterOverlapCache[a];this._ctx.save();this._ctx.font=this._characterFont;var b=Math.floor(this._ctx.measureText(a).width)>this._characterWidth; return this._ctx.restore(),this._characterOverlapCache[a]=b,b},b}(a.BaseRenderLayer);c.TextRenderLayer=d},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});a=function(){function a(){this.cache=[]}return a.prototype.resize=function(a,b){for(var c=0;cthis._drawToCacheCount?(g=this._cacheMap.sizea.code}, c.prototype._toCoordinateX=function(a){return a%this._width*this._config.scaledCharWidth},c.prototype._toCoordinateY=function(a){return Math.floor(a/this._width)*this._config.scaledCharHeight},c.prototype._drawFromCache=function(a,b,c,d){if(!b.isEmpty){var e=this._toCoordinateX(b.index),f=this._toCoordinateY(b.index);a.drawImage(b.inBitmap?this._bitmap:this._cacheCanvas,e,f,this._config.scaledCharWidth,this._config.scaledCharHeight,c,d,this._config.scaledCharWidth,this._config.scaledCharHeight)}}, c.prototype._getColorFromAnsiIndex=function(a){return aa.bg?this._getColorFromAnsiIndex(a.bg):this._config.colors.background},c.prototype._getForegroundColor=function(a){return a.fg===k.INVERTED_DEFAULT_COLOR?n.opaque(this._config.colors.background):256>a.fg?this._getColorFromAnsiIndex(a.fg): this._config.colors.foreground},c.prototype._drawToCache=function(a,b){this._drawToCacheCount++;this._tmpCtx.save();var c=this._getBackgroundColor(a);this._tmpCtx.globalCompositeOperation="copy";this._tmpCtx.fillStyle=c.css;this._tmpCtx.fillRect(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight);this._tmpCtx.globalCompositeOperation="source-over";this._tmpCtx.font=(a.italic?"italic":"")+" "+(a.bold?this._config.fontWeightBold:this._config.fontWeight)+" "+this._config.fontSize*this._config.devicePixelRatio+ "px "+this._config.fontFamily;this._tmpCtx.textBaseline="middle";this._tmpCtx.fillStyle=this._getForegroundColor(a).css;a.dim&&(this._tmpCtx.globalAlpha=k.DIM_OPACITY);this._tmpCtx.fillText(a.chars,0,this._config.scaledCharHeight/2);this._tmpCtx.restore();a=this._tmpCtx.getImageData(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight);var d=!1;if(!this._config.allowTransparency){d=!0;var e=c.rgba>>>24,f=c.rgba>>>16&255;c=c.rgba>>>8&255;for(var g=0;g=this.capacity)c=this._head,this._unlinkNode(c),delete this._map[c.key],c.key=a,c.value=b,this._map[a]=c;else{var d=this._nodePool;0=this._bufferService.rows||0>g||((this._ctx.fillStyle=this._colors.selection.css,c)?(d=a[0],this._fillCells(d,f,b[0]-d,g-f+1)):(d=d===f?a[0]:0,this._fillCells(d,f,(f===g?b[0]:this._bufferService.cols)-d,1),(this._fillCells(0,f+1,this._bufferService.cols,Math.max(g-f-1,0)),f!==g)&&this._fillCells(0,g,e===g?b[0]:this._bufferService.cols,1)),this._state.start= [a[0],a[1]],this._state.end=[b[0],b[1]],this._state.columnSelectMode=c,this._state.ydisp=this._bufferService.buffer.ydisp)}else this._clearState()},b.prototype._didStateChange=function(a,b,c,d){return!this._areCoordinatesEqual(a,this._state.start)||!this._areCoordinatesEqual(b,this._state.end)||c!==this._state.columnSelectMode||d!==this._state.ydisp},b.prototype._areCoordinatesEqual=function(a,b){return!(!a||!b)&&a[0]===b[0]&&a[1]===b[1]},b}(d(13).BaseRenderLayer);c.SelectionRenderLayer=a},function(a, c,d){var b,e=this&&this.__extends||(b=function(a,c){return(b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a,c)},function(a,c){function d(){this.constructor=a}b(a,c);a.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)});Object.defineProperty(c,"__esModule",{value:!0});a=d(13);var g=d(5);d=function(a){function b(b,c,d,e,f,h,k,q,t){b=a.call(this,b,"cursor",c,!0,d,e,h,k)||this;return b._onRequestRefreshRowsEvent= f,b.bufferService=h,b.optionsService=k,b._coreService=q,b._coreBrowserService=t,b._cell=new g.CellData,b._state={x:0,y:0,isFocused:!1,style:"",width:0},b._cursorRenderers={bar:b._renderBarCursor.bind(b),block:b._renderBlockCursor.bind(b),underline:b._renderUnderlineCursor.bind(b)},b}return e(b,a),b.prototype.resize=function(b){a.prototype.resize.call(this,b);this._state={x:0,y:0,isFocused:!1,style:"",width:0}},b.prototype.reset=function(){this._clearCursor();this._cursorBlinkStateManager&&(this._cursorBlinkStateManager.dispose(), this._cursorBlinkStateManager=void 0,this.onOptionsChanged())},b.prototype.onBlur=function(){this._cursorBlinkStateManager&&this._cursorBlinkStateManager.pause();this._onRequestRefreshRowsEvent.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},b.prototype.onFocus=function(){this._cursorBlinkStateManager?this._cursorBlinkStateManager.resume():this._onRequestRefreshRowsEvent.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},b.prototype.onOptionsChanged= function(){var a,b=this;this._optionsService.options.cursorBlink?this._cursorBlinkStateManager||(this._cursorBlinkStateManager=new k(this._coreBrowserService.isFocused,function(){b._render(!0)})):(null===(a=this._cursorBlinkStateManager)||void 0===a||a.dispose(),this._cursorBlinkStateManager=void 0);this._onRequestRefreshRowsEvent.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},b.prototype.onCursorMove=function(){this._cursorBlinkStateManager&&this._cursorBlinkStateManager.restartBlinkAnimation()}, b.prototype.onGridChanged=function(a,b){!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isPaused?this._render(!1):this._cursorBlinkStateManager.restartBlinkAnimation()},b.prototype._render=function(a){if(this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden){var b=this._bufferService.buffer.ybase+this._bufferService.buffer.y;a=b-this._bufferService.buffer.ydisp;if(0>a||a>=this._bufferService.rows)this._clearCursor();else if(this._bufferService.buffer.lines.get(b).loadCell(this._bufferService.buffer.x, this._cell),void 0!==this._cell.content){if(!this._coreBrowserService.isFocused)return this._clearCursor(),this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,b=this._optionsService.options.cursorStyle,b&&"block"!==b?this._cursorRenderers[b](this._bufferService.buffer.x,a,this._cell):this._renderBlurCursor(this._bufferService.buffer.x,a,this._cell),this._ctx.restore(),this._state.x=this._bufferService.buffer.x,this._state.y=a,this._state.isFocused=!1,this._state.style=b,void(this._state.width= this._cell.getWidth());if(!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isCursorVisible){if(this._state){if(this._state.x===this._bufferService.buffer.x&&this._state.y===a&&this._state.isFocused===this._coreBrowserService.isFocused&&this._state.style===this._optionsService.options.cursorStyle&&this._state.width===this._cell.getWidth())return;this._clearCursor()}this._ctx.save();this._cursorRenderers[this._optionsService.options.cursorStyle||"block"](this._bufferService.buffer.x,a, this._cell);this._ctx.restore();this._state.x=this._bufferService.buffer.x;this._state.y=a;this._state.isFocused=!1;this._state.style=this._optionsService.options.cursorStyle;this._state.width=this._cell.getWidth()}else this._clearCursor()}}else this._clearCursor()},b.prototype._clearCursor=function(){this._state&&(this._clearCells(this._state.x,this._state.y,this._state.width,1),this._state={x:0,y:0,isFocused:!1,style:"",width:0})},b.prototype._renderBarCursor=function(a,b,c){this._ctx.save();this._ctx.fillStyle= this._colors.cursor.css;this._fillLeftLineAtCell(a,b);this._ctx.restore()},b.prototype._renderBlockCursor=function(a,b,c){this._ctx.save();this._ctx.fillStyle=this._colors.cursor.css;this._fillCells(a,b,c.getWidth(),1);this._ctx.fillStyle=this._colors.cursorAccent.css;this._fillCharTrueColor(c,a,b);this._ctx.restore()},b.prototype._renderUnderlineCursor=function(a,b,c){this._ctx.save();this._ctx.fillStyle=this._colors.cursor.css;this._fillBottomLineAtCells(a,b);this._ctx.restore()},b.prototype._renderBlurCursor= function(a,b,c){this._ctx.save();this._ctx.strokeStyle=this._colors.cursor.css;this._strokeRectAtCell(a,b,c.getWidth(),1);this._ctx.restore()},b}(a.BaseRenderLayer);c.CursorRenderLayer=d;var k=function(){function a(a,b){this._renderCallback=b;this.isCursorVisible=!0;a&&this._restartInterval()}return Object.defineProperty(a.prototype,"isPaused",{get:function(){return!(this._blinkStartTimeout||this._blinkInterval)},enumerable:!0,configurable:!0}),a.prototype.dispose=function(){this._blinkInterval&& (window.clearInterval(this._blinkInterval),this._blinkInterval=void 0);this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0);this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},a.prototype.restartBlinkAnimation=function(){var a=this;this.isPaused||(this._animationTimeRestarted=Date.now(),this.isCursorVisible=!0,this._animationFrame||(this._animationFrame=window.requestAnimationFrame(function(){a._renderCallback(); a._animationFrame=void 0})))},a.prototype._restartInterval=function(a){var b=this;void 0===a&&(a=600);this._blinkInterval&&window.clearInterval(this._blinkInterval);this._blinkStartTimeout=setTimeout(function(){if(b._animationTimeRestarted){var a=600-(Date.now()-b._animationTimeRestarted);if(b._animationTimeRestarted=void 0,0=a.lines.length)){var c=Math.ceil(2E3/ this._bufferService.cols);for(a=this._bufferService.buffer.iterator(!1,b,a.ydisp+Math.min(this._rowsToLinkify.end,this._bufferService.rows)+1,c,c);a.hasNext();)for(b=a.next(),c=0;cg)return"break";var n=k._bufferService.buffer.stringIndexToBufferIndex(a,g);if(0>n[0])return"break";var r=k._bufferService.buffer.lines.get(n[0]);if(!r)return"break";var p=(r=r.getFg(n[1]))?r>>9&511:void 0;c.validationCallback?c.validationCallback(h,function(a){e._rowsTimeoutId||a&&e._addLink(n[1],n[0]-e._bufferService.buffer.ydisp,h,c,p)}):k._addLink(n[1],n[0]-k._bufferService.buffer.ydisp,h,c,p)},k=this;null!==(d=f.exec(b))&&"break"!== h(););},a.prototype._addLink=function(a,c,d,e,f){var h=this;if(this._mouseZoneManager&&this._element){var k=b.getStringCellWidth(d),n=a%this._bufferService.cols,p=c+Math.floor(a/this._bufferService.cols),q=(n+k)%this._bufferService.cols,t=p+Math.floor((n+k)/this._bufferService.cols);0===q&&(q=this._bufferService.cols,t--);this._mouseZoneManager.add(new g(n+1,p+1,q+1,t+1,function(a){if(e.handler)return e.handler(a,d);window.open(d,"_blank")},function(){h._onLinkHover.fire(h._createLinkHoverEvent(n, p,q,t,f));h._element.classList.add("xterm-cursor-pointer")},function(a){h._onLinkTooltip.fire(h._createLinkHoverEvent(n,p,q,t,f));e.hoverTooltipCallback&&e.hoverTooltipCallback(a,d,{start:{x:n,y:p},end:{x:q,y:t}})},function(){h._onLinkLeave.fire(h._createLinkHoverEvent(n,p,q,t,f));h._element.classList.remove("xterm-cursor-pointer");e.hoverLeaveCallback&&e.hoverLeaveCallback()},function(a){return!e.willLinkActivate||e.willLinkActivate(a,d)}))}},a.prototype._createLinkHoverEvent=function(a,b,c,d,e){return{x1:a, y1:b,x2:c,y2:d,cols:this._bufferService.cols,fg:e}},a._timeBeforeLatency=200,a}();c.Linkifier=a;var g=function(a,b,c,d,e,f,g,h,D){this.x1=a;this.y1=b;this.x2=c;this.y2=d;this.clickCallback=e;this.hoverCallback=f;this.tooltipCallback=g;this.leaveCallback=h;this.willLinkActivate=D};c.MouseZone=g},function(a,c,d){var b=this&&this.__decorate||function(a,b,c,d){var e,f=arguments.length,g=3>f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g= Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3b[1]&&a[1]=b[0]&&a[0]=b[0]},a.prototype.selectWordAtCursor=function(a){(a=this._getMouseBufferCoords(a))&&(this._selectWordAt(a,!1),this._model.selectionEnd=void 0,this.refresh(!0))},a.prototype.selectAll=function(){this._model.isSelectAllActive=!0;this.refresh();this._onSelectionChange.fire()},a.prototype.selectLines=function(a,b){this._model.clearSelection();a= Math.max(a,0);b=Math.min(b,this._bufferService.buffer.lines.length-1);this._model.selectionStart=[0,a];this._model.selectionEnd=[this._bufferService.cols,b];this.refresh();this._onSelectionChange.fire()},a.prototype._onTrim=function(a){this._model.onTrim(a)&&this.refresh()},a.prototype._getMouseBufferCoords=function(a){if(a=this._mouseService.getCoords(a,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0))return a[0]--,a[1]--,a[1]+=this._bufferService.buffer.ydisp,a},a.prototype._getMouseEventScrollAmount= function(a){a=n.getCoordsRelativeToElement(a,this._screenElement)[1];var b=this._bufferService.rows*Math.ceil(this._charSizeService.height*this._optionsService.options.lineHeight);return 0<=a&&a<=b?0:(a>b&&(a-=b),a=Math.min(Math.max(a,-50),50),(a/=50)/Math.abs(a)+Math.round(14*a))},a.prototype.shouldForceSelection=function(a){return g.isMac?a.altKey&&this._optionsService.options.macOptionClickForcesSelection:a.shiftKey},a.prototype.onMouseDown=function(a){if(this._mouseDownTimeStamp=a.timeStamp,(2!== a.button||!this.hasSelection)&&0===a.button){if(!this._enabled){if(!this.shouldForceSelection(a))return;a.stopPropagation()}a.preventDefault();this._dragScrollAmount=0;this._enabled&&a.shiftKey?this._onIncrementalClick(a):1===a.detail?this._onSingleClick(a):2===a.detail?this._onDoubleClick(a):3===a.detail&&this._onTripleClick(a);this._addMouseDownListeners();this.refresh(!0)}},a.prototype._addMouseDownListeners=function(){var a=this;this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove", this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener));this._dragScrollIntervalTimer=window.setInterval(function(){return a._dragScroll()},50)},a.prototype._removeMouseDownListeners=function(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener));clearInterval(this._dragScrollIntervalTimer); this._dragScrollIntervalTimer=void 0},a.prototype._onIncrementalClick=function(a){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(a))},a.prototype._onSingleClick=function(a){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(a)?3:0,this._model.selectionStart=this._getMouseBufferCoords(a),this._model.selectionStart)this._model.selectionEnd=void 0,(a=this._bufferService.buffer.lines.get(this._model.selectionStart[1]))&& a.length!==this._model.selectionStart[0]&&0===a.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++},a.prototype._onDoubleClick=function(a){(a=this._getMouseBufferCoords(a))&&(this._activeSelectionMode=1,this._selectWordAt(a,!0))},a.prototype._onTripleClick=function(a){(a=this._getMouseBufferCoords(a))&&(this._activeSelectionMode=2,this._selectLineAt(a[1]))},a.prototype.shouldColumnSelect=function(a){return a.altKey&&!(g.isMac&&this._optionsService.options.macOptionClickForcesSelection)}, a.prototype._onMouseMove=function(a){if(a.stopImmediatePropagation(),this._model.selectionStart){var b=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;(this._model.selectionEnd=this._getMouseBufferCoords(a),this._model.selectionEnd)?(2===this._activeSelectionMode?this._model.selectionEnd[1]this._dragScrollAmount&&(this._model.selectionEnd[0]=0)),a=this._bufferService.buffer,this._model.selectionEnd[1]=this.selectionText.length&&500>b)?a.altKey&&this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp&&(a=this._mouseService.getCoords(a,this._element,this._bufferService.cols,this._bufferService.rows,!1))&&void 0!==a[0]&&void 0!==a[1]&&(a=r.moveToCellSequence(a[0]-1,a[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys), this._coreService.triggerDataEvent(a,!0)):this.hasSelection&&this._onSelectionChange.fire()},a.prototype._onBufferActivate=function(a){var b=this;this.clearSelection();this._trimListener.dispose();this._trimListener=a.activeBuffer.lines.onTrim(function(a){return b._onTrim(a)})},a.prototype._convertViewportColToCharacterIndex=function(a,b){for(var c=b[0],d=0;b[0]>=d;d++){var e=a.loadCell(d,this._workCell).getChars().length;0===this._workCell.getWidth()?c--:1=this._bufferService.cols)){var e=this._bufferService.buffer,f=e.lines.get(a[1]);if(f){var g=e.translateBufferLineToString(a[1],!1),h=this._convertViewportColToCharacterIndex(f,a),n=h,k=a[0]-h,r=0,p=0,q=0,t=0;if(" "===g.charAt(h)){for(;0b.start;)b.start+=this._bufferService.cols,a[1]--;this._model.selectionStart=[b.start,a[1]];this._model.selectionStartLength=b.length}},a.prototype._selectToWordAt=function(a){var b=this._getWordAt(a,!0);if(b){for(a=a[1];0>b.start;)b.start+=this._bufferService.cols,a--;if(!this._model.areSelectionValuesReversed())for(;b.start+ b.length>this._bufferService.cols;)b.length-=this._bufferService.cols,a++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?b.start:b.start+b.length,a]}},a.prototype._isCharWordSeparator=function(a){return 0!==a.getWidth()&&0<=this._optionsService.options.wordSeparator.indexOf(a.getChars())},a.prototype._selectLineAt=function(a){a=this._bufferService.buffer.getWrappedRangeForLine(a);this._model.selectionStart=[0,a.first];this._model.selectionEnd=[this._bufferService.cols,a.last]; this._model.selectionStartLength=0},a=b([e(3,p.ICharSizeService),e(4,v.IBufferService),e(5,v.ICoreService),e(6,p.IMouseService),e(7,v.IOptionsService)],a)}();c.SelectionService=a},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});a=function(){function a(a){this._bufferService=a;this.isSelectAllActive=!1;this.selectionStartLength=0}return a.prototype.clearSelection=function(){this.selectionEnd=this.selectionStart=void 0;this.isSelectAllActive=!1;this.selectionStartLength=0},Object.defineProperty(a.prototype, "finalSelectionStart",{get:function(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"finalSelectionEnd",{get:function(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){var a=this.selectionStart[0]+ this.selectionStartLength;return a>this._bufferService.cols?[a%this._bufferService.cols,this.selectionStart[1]+Math.floor(a/this._bufferService.cols)]:[a,this.selectionStart[1]]}return this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]?[Math.max(this.selectionStart[0]+this.selectionStartLength,this.selectionEnd[0]),this.selectionEnd[1]]:this.selectionEnd}},enumerable:!0,configurable:!0}),a.prototype.areSelectionValuesReversed=function(){var a=this.selectionStart,b=this.selectionEnd; return!(!a||!b)&&(a[1]>b[1]||a[1]===b[1]&&a[0]>b[0])},a.prototype.onTrim=function(a){return this.selectionStart&&(this.selectionStart[1]-=a),this.selectionEnd&&(this.selectionEnd[1]-=a),this.selectionEnd&&0>this.selectionEnd[1]?(this.clearSelection(),!0):(this.selectionStart&&0>this.selectionStart[1]&&(this.selectionStart[1]=0),!1)},a}();c.SelectionModel=a},function(a,c,d){function b(a,b,c,d){var f=a-e(c,a),g=b-e(c,b);f=Math.abs(f-g);g=0;for(var h=a-e(c,a),n=b-e(c,b),k=0;kb?"A":"B")?-1:1)*k);r&&r.isWrapped&&g++}return t(f-g,q(a>b?"A":"B",d))}function e(a,b){for(var c=0,d=a.buffer.lines.get(b),e=d&&d.isWrapped;e&&0<=b&&b=d&&kf.cols-1?(h+=f.buffer.translateBufferLineToString(b,!1,a,g),g=0,a=0,b++):!e&&0>g&&(h+= f.buffer.translateBufferLineToString(b,!1,0,a+1),a=g=f.cols-1,b--);return h+f.buffer.translateBufferLineToString(b,!1,a,g)}function q(a,b){return p.C0.ESC+(b?"O":"[")+a}function t(a,b){a=Math.floor(a);for(var c="",d=0;df?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length- 1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3a&&d.y1<=b+1||d.y2>a&&d.y2<=b+1||d.y1b+1)&&(this._currentZone&&this._currentZone===d&&(this._currentZone.leaveCallback(),this._currentZone=void 0),this._zones.splice(c--,1))}0===this._zones.length&&this._deactivate()}}, b.prototype._activate=function(){this._areZonesActive||(this._areZonesActive=!0,this._element.addEventListener("mousemove",this._mouseMoveListener),this._element.addEventListener("mouseleave",this._mouseLeaveListener),this._element.addEventListener("click",this._clickListener))},b.prototype._deactivate=function(){this._areZonesActive&&(this._areZonesActive=!1,this._element.removeEventListener("mousemove",this._mouseMoveListener),this._element.removeEventListener("mouseleave",this._mouseLeaveListener), this._element.removeEventListener("click",this._clickListener))},b.prototype._onMouseMove=function(a){this._lastHoverCoords[0]===a.pageX&&this._lastHoverCoords[1]===a.pageY||(this._onHover(a),this._lastHoverCoords=[a.pageX,a.pageY])},b.prototype._onHover=function(a){var b=this,c=this._findZoneEventAt(a);c!==this._currentZone&&(this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout)),c&&(this._currentZone=c,c.hoverCallback&& c.hoverCallback(a),this._tooltipTimeout=setTimeout(function(){return b._onTooltip(a)},500)))},b.prototype._onTooltip=function(a){this._tooltipTimeout=void 0;var b=this._findZoneEventAt(a);b&&b.tooltipCallback&&b.tooltipCallback(a)},b.prototype._onMouseDown=function(a){var b;(this._initialSelectionLength=this._getSelectionLength(),this._areZonesActive)&&(null===(b=this._findZoneEventAt(a))||void 0===b?0:b.willLinkActivate(a))&&(a.preventDefault(),a.stopImmediatePropagation())},b.prototype._onMouseLeave= function(a){this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout))},b.prototype._onClick=function(a){var b=this._findZoneEventAt(a),c=this._getSelectionLength();b&&c===this._initialSelectionLength&&(b.clickCallback(a),a.preventDefault(),a.stopImmediatePropagation())},b.prototype._getSelectionLength=function(){var a=this._selectionService.selectionText;return a?a.length:0},b.prototype._findZoneEventAt=function(a){var b= this._mouseService.getCoords(a,this._screenElement,this._bufferService.cols,this._bufferService.rows);if(b){a=b[0];b=b[1];for(var c=0;c=d.x1&&a=d.x1||b===d.y2&&ad.y1&&ba;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener);this._refreshRowsDimensions()},b.prototype._createAccessibilityTreeNode=function(){var a=document.createElement("div");return a.setAttribute("role","listitem"),a.tabIndex=-1,this._refreshRowDimensions(a),a},b.prototype._onTab=function(a){for(var b=0;bthis._liveRegionLineCount&&(0f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3b;)this._rowContainer.removeChild(this._rowElements.pop())},b.prototype.onResize=function(a,b){this._refreshRowElements(a,b);this._updateDimensions()},b.prototype.onCharSizeChanged=function(){this._updateDimensions()},b.prototype.onBlur=function(){this._rowContainer.classList.remove("xterm-focus")}, b.prototype.onFocus=function(){this._rowContainer.classList.add("xterm-focus")},b.prototype.onSelectionChanged=function(a,b,c){for(;this._selectionContainer.children.length;)this._selectionContainer.removeChild(this._selectionContainer.children[0]);if(a&&b){var d=a[1]-this._bufferService.buffer.ydisp,e=b[1]-this._bufferService.buffer.ydisp,f=Math.max(d,0),g=Math.min(e,this._bufferService.rows-1);if(!(f>=this._bufferService.rows||0>g)){var h=document.createDocumentFragment();c?h.appendChild(this._createSelectionElement(f, a[0],b[0],g-f+1)):(h.appendChild(this._createSelectionElement(f,d===f?a[0]:0,f===g?b[0]:this._bufferService.cols)),(h.appendChild(this._createSelectionElement(f+1,0,this._bufferService.cols,g-f-1)),f!==g)&&h.appendChild(this._createSelectionElement(g,0,e===g?b[0]:this._bufferService.cols)));this._selectionContainer.appendChild(h)}}},b.prototype._createSelectionElement=function(a,b,c,d){void 0===d&&(d=1);var e=document.createElement("div");return e.style.height=d*this.dimensions.actualCellHeight+"px", e.style.top=a*this.dimensions.actualCellHeight+"px",e.style.left=b*this.dimensions.actualCellWidth+"px",e.style.width=this.dimensions.actualCellWidth*(c-b)+"px",e},b.prototype.onCursorMove=function(){},b.prototype.onOptionsChanged=function(){this._updateDimensions();this._injectCss()},b.prototype.clear=function(){this._rowElements.forEach(function(a){return a.innerHTML=""})},b.prototype.renderRows=function(a,b){for(var c=this._bufferService.buffer.ybase+this._bufferService.buffer.y,d=this._bufferService.buffer.x, e=this._optionsService.options.cursorBlink;a<=b;a++){var f=this._rowElements[a];f.innerHTML="";var g=a+this._bufferService.buffer.ydisp,h=this._bufferService.buffer.lines.get(g);f.appendChild(this._rowFactory.createRow(h,g===c,this._optionsService.options.cursorStyle,d,e,this.dimensions.actualCellWidth,this._bufferService.cols))}},Object.defineProperty(b.prototype,"_terminalSelector",{get:function(){return".xterm-dom-renderer-owner-"+this._terminalClass},enumerable:!0,configurable:!0}),b.prototype.registerCharacterJoiner= function(a){return-1},b.prototype.deregisterCharacterJoiner=function(a){return!1},b.prototype._onLinkHover=function(a){this._setCellUnderline(a.x1,a.x2,a.y1,a.y2,a.cols,!0)},b.prototype._onLinkLeave=function(a){this._setCellUnderline(a.x1,a.x2,a.y1,a.y2,a.cols,!1)},b.prototype._setCellUnderline=function(a,b,c,d,e,f){for(;a!==b||c!==d;){var g=this._rowElements[c];if(!g)break;(g=g.children[a])&&(g.style.textDecoration=f?"underline":"none");++a>=e&&(a=0,c++)}},b=g([k(5,p.ICharSizeService),k(6,v.IOptionsService), k(7,v.IBufferService)],b)}(a.Disposable);c.DomRenderer=d},function(a,c,d){function b(a,b,c){for(;a.lengthr&&this._optionsService.options.drawBoldTextInBrightColors&&(r+=8);this._applyMinimumContrast(v,this._colors.background, this._colors.ansi[r])||v.classList.add("xterm-fg-"+r);break;case 50331648:x=q.rgbaToColor(r>>16&255,r>>8&255,255&r);this._applyMinimumContrast(v,this._colors.background,x)||this._addStyle(v,"color:#"+b(r.toString(16),"0",6));break;default:this._applyMinimumContrast(v,this._colors.background,this._colors.foreground)||Ma&&v.classList.add("xterm-fg-"+e.INVERTED_DEFAULT_COLOR)}switch(D){case 16777216:case 33554432:v.classList.add("xterm-bg-"+B);break;case 50331648:this._addStyle(v,"background-color:#"+ b(B.toString(16),"0",6));break;default:Ma&&v.classList.add("xterm-bg-"+e.INVERTED_DEFAULT_COLOR)}n.appendChild(v)}}return n},a.prototype._applyMinimumContrast=function(a,b,c){if(1===this._optionsService.options.minimumContrastRatio)return!1;var d=this._colors.contrastCache.getColor(this._workCell.bg,this._workCell.fg);return void 0===d&&(d=q.ensureContrastRatio(b,c,this._optionsService.options.minimumContrastRatio),this._colors.contrastCache.setColor(this._workCell.bg,this._workCell.fg,null!=d?d: null)),!!d&&(this._addStyle(a,"color:"+d.css),!0)},a.prototype._addStyle=function(a,b){a.setAttribute("style",""+(a.getAttribute("style")||"")+b+";")},a}();c.DomRendererRowFactory=a},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});var b=d(12),e={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"], 220:["\\","|"],221:["]","}"],222:["'",'"']};c.evaluateKeyboardEvent=function(a,c,d,f){var g={type:0,cancel:!1,key:void 0},h=(a.shiftKey?1:0)|(a.altKey?2:0)|(a.ctrlKey?4:0)|(a.metaKey?8:0);switch(a.keyCode){case 0:"UIKeyInputUpArrow"===a.key?g.key=c?b.C0.ESC+"OA":b.C0.ESC+"[A":"UIKeyInputLeftArrow"===a.key?g.key=c?b.C0.ESC+"OD":b.C0.ESC+"[D":"UIKeyInputRightArrow"===a.key?g.key=c?b.C0.ESC+"OC":b.C0.ESC+"[C":"UIKeyInputDownArrow"===a.key&&(g.key=c?b.C0.ESC+"OB":b.C0.ESC+"[B");break;case 8:if(a.shiftKey){g.key= b.C0.BS;break}if(a.altKey){g.key=b.C0.ESC+b.C0.DEL;break}g.key=b.C0.DEL;break;case 9:if(a.shiftKey){g.key=b.C0.ESC+"[Z";break}g.key=b.C0.HT;g.cancel=!0;break;case 13:g.key=b.C0.CR;g.cancel=!0;break;case 27:g.key=b.C0.ESC;g.cancel=!0;break;case 37:if(a.metaKey)break;h?(g.key=b.C0.ESC+"[1;"+(h+1)+"D",g.key===b.C0.ESC+"[1;3D"&&(g.key=b.C0.ESC+(d?"b":"[1;5D"))):g.key=c?b.C0.ESC+"OD":b.C0.ESC+"[D";break;case 39:if(a.metaKey)break;h?(g.key=b.C0.ESC+"[1;"+(h+1)+"C",g.key===b.C0.ESC+"[1;3C"&&(g.key=b.C0.ESC+ (d?"f":"[1;5C"))):g.key=c?b.C0.ESC+"OC":b.C0.ESC+"[C";break;case 38:if(a.metaKey)break;h?(g.key=b.C0.ESC+"[1;"+(h+1)+"A",d||g.key!==b.C0.ESC+"[1;3A"||(g.key=b.C0.ESC+"[1;5A")):g.key=c?b.C0.ESC+"OA":b.C0.ESC+"[A";break;case 40:if(a.metaKey)break;h?(g.key=b.C0.ESC+"[1;"+(h+1)+"B",d||g.key!==b.C0.ESC+"[1;3B"||(g.key=b.C0.ESC+"[1;5B")):g.key=c?b.C0.ESC+"OB":b.C0.ESC+"[B";break;case 45:a.shiftKey||a.ctrlKey||(g.key=b.C0.ESC+"[2~");break;case 46:g.key=h?b.C0.ESC+"[3;"+(h+1)+"~":b.C0.ESC+"[3~";break;case 36:g.key= h?b.C0.ESC+"[1;"+(h+1)+"H":c?b.C0.ESC+"OH":b.C0.ESC+"[H";break;case 35:g.key=h?b.C0.ESC+"[1;"+(h+1)+"F":c?b.C0.ESC+"OF":b.C0.ESC+"[F";break;case 33:a.shiftKey?g.type=2:g.key=b.C0.ESC+"[5~";break;case 34:a.shiftKey?g.type=3:g.key=b.C0.ESC+"[6~";break;case 112:g.key=h?b.C0.ESC+"[1;"+(h+1)+"P":b.C0.ESC+"OP";break;case 113:g.key=h?b.C0.ESC+"[1;"+(h+1)+"Q":b.C0.ESC+"OQ";break;case 114:g.key=h?b.C0.ESC+"[1;"+(h+1)+"R":b.C0.ESC+"OR";break;case 115:g.key=h?b.C0.ESC+"[1;"+(h+1)+"S":b.C0.ESC+"OS";break;case 116:g.key= h?b.C0.ESC+"[15;"+(h+1)+"~":b.C0.ESC+"[15~";break;case 117:g.key=h?b.C0.ESC+"[17;"+(h+1)+"~":b.C0.ESC+"[17~";break;case 118:g.key=h?b.C0.ESC+"[18;"+(h+1)+"~":b.C0.ESC+"[18~";break;case 119:g.key=h?b.C0.ESC+"[19;"+(h+1)+"~":b.C0.ESC+"[19~";break;case 120:g.key=h?b.C0.ESC+"[20;"+(h+1)+"~":b.C0.ESC+"[20~";break;case 121:g.key=h?b.C0.ESC+"[21;"+(h+1)+"~":b.C0.ESC+"[21~";break;case 122:g.key=h?b.C0.ESC+"[23;"+(h+1)+"~":b.C0.ESC+"[23~";break;case 123:g.key=h?b.C0.ESC+"[24;"+(h+1)+"~":b.C0.ESC+"[24~";break; default:!a.ctrlKey||a.shiftKey||a.altKey||a.metaKey?d&&!f||!a.altKey||a.metaKey?d&&!a.altKey&&!a.ctrlKey&&a.metaKey?65===a.keyCode&&(g.type=1):a.key&&!a.ctrlKey&&!a.altKey&&!a.metaKey&&48<=a.keyCode&&1===a.key.length?g.key=a.key:a.key&&a.ctrlKey&&"_"===a.key&&(g.key=b.C0.US):(c=(c=e[a.keyCode])&&c[a.shiftKey?1:0])?g.key=b.C0.ESC+c:65<=a.keyCode&&90>=a.keyCode&&(g.key=b.C0.ESC+String.fromCharCode(a.ctrlKey?a.keyCode-64:a.keyCode+32)):65<=a.keyCode&&90>=a.keyCode?g.key=String.fromCharCode(a.keyCode- 64):32===a.keyCode?g.key=b.C0.NUL:51<=a.keyCode&&55>=a.keyCode?g.key=String.fromCharCode(a.keyCode-51+27):56===a.keyCode?g.key=b.C0.DEL:219===a.keyCode?g.key=b.C0.ESC:220===a.keyCode?g.key=b.C0.FS:221===a.keyCode&&(g.key=b.C0.GS)}return g}},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});var b=d(3);c.handleWindowsModeLineFeed=function(a){var c,d=null===(c=a.buffer.lines.get(a.buffer.ybase+a.buffer.y-1))||void 0===c?void 0:c.get(a.cols-1);(a=a.buffer.lines.get(a.buffer.ybase+a.buffer.y))&& d&&(a.isWrapped=d[b.CHAR_DATA_CODE_INDEX]!==b.NULL_CELL_CODE&&d[b.CHAR_DATA_CODE_INDEX]!==b.WHITESPACE_CELL_CODE)}},function(a,c,d){var b,e=this&&this.__extends||(b=function(a,c){return(b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a,c)},function(a,c){function d(){this.constructor=a}b(a,c);a.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)}),g=this&&this.__decorate||function(a, b,c,d){var e,f=arguments.length,g=3>f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3b)throw Error(a+" cannot be less than 1, value: "+b);break;case "minimumContrastRatio":b=Math.max(1,Math.min(21,Math.round(10*b)/10));case "scrollback":if(0>(b=Math.min(b,4294967295)))throw Error(a+" cannot be less than 0, value: "+b);break;case "fastScrollSensitivity":case "scrollSensitivity":if(0>=b)throw Error(a+" cannot be less than or equal to 0, value: "+b);}return b},a.prototype.getOption=function(a){if(!(a in c.DEFAULT_OPTIONS))throw Error('No option with key "'+ a+'"');return this.options[a]},a}();c.OptionsService=d},function(a,c,d){var b=this&&this.__decorate||function(a,b,c,d){var e,f=arguments.length,g=3>f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3 this._rows},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"isCursorInViewport",{get:function(){var a=this.ybase+this.y-this.ydisp;return 0<=a&&ac.MAX_BUFFER_SIZE?c.MAX_BUFFER_SIZE:a},a.prototype.fillViewportRows=function(a){if(0===this.lines.length){void 0===a&&(a=e.DEFAULT_ATTR_DATA);for(var b=this._rows;b--;)this.lines.push(this.getBlankLine(a))}}, a.prototype.clear=function(){this.x=this.y=this.ybase=this.ydisp=0;this.lines=new b.CircularList(this._getCorrectBufferLength(this._rows));this.scrollTop=0;this.scrollBottom=this._rows-1;this.setupTabStops()},a.prototype.resize=function(a,b){var c=this.getNullCell(e.DEFAULT_ATTR_DATA),d=this._getCorrectBufferLength(b);if(d>this.lines.maxLength&&(this.lines.maxLength=d),0b;g--)this.lines.length>b+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));da))for(f=0;fthis._cols?this._reflowLarger(a,b):this._reflowSmaller(a,b))},a.prototype._reflowLarger=function(a,b){var c=q.reflowLargerGetLinesToRemove(this.lines,this._cols,a,this.ybase+this.y,this.getNullCell(e.DEFAULT_ATTR_DATA));0=g&&hg+p){for(r=t.newLines.length-1;0<=r;r--)this.lines.set(h--,t.newLines[r]);h++;a.push({index:g+1,amount:t.newLines.length});p+=t.newLines.length;t=d[++k]}else this.lines.set(h, c[g--]);d=0;for(h=a.length-1;0<=h;h--)a[h].index+=d,this.lines.onInsertEmitter.fire(a[h]),d+=a[h].amount;f=Math.max(0,b+f-this.lines.maxLength);0b)return[a,f];a++}return[a,0]},a.prototype.translateBufferLineToString= function(a,b,c,d){void 0===c&&(c=0);return(a=this.lines.get(a))?a.translateToString(b,c,d):""},a.prototype.getWrappedRangeForLine=function(a){for(var b=a;0=this._cols?this._cols-1:0>a?0:a},a.prototype.nextStop=function(a){for(null==a&&(a=this.x);!this.tabs[++a]&&a=this._cols?this._cols-1:0>a?0:a},a.prototype.addMarker=function(a){var b=this,c=new t.Marker(a);return this.markers.push(c),c.register(this.lines.onTrim(function(a){c.line-=a;0>c.line&&c.dispose()})),c.register(this.lines.onInsert(function(a){c.line>=a.index&&(c.line+=a.amount)})),c.register(this.lines.onDelete(function(a){c.line>= a.index&&c.linea.index&&(c.line-=a.amount)})),c.register(c.onDispose(function(){return b._removeMarker(c)})),c},a.prototype._removeMarker=function(a){this.markers.splice(this.markers.indexOf(a),1)},a.prototype.iterator=function(a,b,c,d,e){return new v(this,a,b,c,d,e)},a}();c.Buffer=a;var v=function(){function a(a,b,c,d,e,f){void 0===c&&(c=0);void 0===d&&(d=a.lines.length);void 0===e&&(e=0);void 0===f&&(f=0);this._buffer=a;this._trimRight=b;this._startIndex=c; this._endIndex=d;this._startOverscan=e;this._endOverscan=f;0>this._startIndex&&(this._startIndex=0);this._endIndex>this._buffer.lines.length&&(this._endIndex=this._buffer.lines.length);this._current=this._startIndex}return a.prototype.hasNext=function(){return this._currentthis._endIndex+this._endOverscan&& (a.last=this._endIndex+this._endOverscan);a.first=Math.max(a.first,0);a.last=Math.min(a.last,this._buffer.lines.length);for(var b="",c=a.first;c<=a.last;++c)b+=this._buffer.translateBufferLineToString(c,this._trimRight);return this._current=a.last+1,{range:a,content:b}},a}();c.BufferStringIterator=v},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});var b=d(1);a=function(){function a(a){this._maxLength=a;this.onDeleteEmitter=new b.EventEmitter;this.onInsertEmitter=new b.EventEmitter; this.onTrimEmitter=new b.EventEmitter;this._array=Array(this._maxLength);this._length=this._startIndex=0}return Object.defineProperty(a.prototype,"onDelete",{get:function(){return this.onDeleteEmitter.event},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onInsert",{get:function(){return this.onInsertEmitter.event},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onTrim",{get:function(){return this.onTrimEmitter.event},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype, "maxLength",{get:function(){return this._maxLength},set:function(a){if(this._maxLength!==a){for(var b=Array(a),c=0;cthis._length)for(var b=this._length;b=a;d--)this._array[this._getCyclicIndex(d+c.length)]=this._array[this._getCyclicIndex(d)];for(d=0;dthis._maxLength?(c=this._length+c.length-this._maxLength,this._startIndex+=c,this._length=this._maxLength,this.onTrimEmitter.fire(c)):this._length+=c.length},a.prototype.trimStart=function(a){a>this._length&&(a=this._length);this._startIndex+=a;this._length-=a;this.onTrimEmitter.fire(a)},a.prototype.shiftElements= function(a,b,c){if(!(0>=b)){if(0>a||a>=this._length)throw Error("start argument out of range");if(0>a+c)throw Error("Cannot shift elements in list beyond index 0");if(0this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(d=0;d=h&&ek||0===t[u].getTrimmedLength());u--)q++;0r&&(g-=r,h++);(r=2===a[h].getWidth(g-1))&&g--;r=r?d-1:d;e.push(r);k+= r}return e};c.getWrappedLineTrimmedLength=b},function(a,c,d){var b,e=this&&this.__extends||(b=function(a,c){return(b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])})(a,c)},function(a,c){function d(){this.constructor=a}b(a,c);a.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)});Object.defineProperty(c,"__esModule",{value:!0});var g=d(1);a=function(a){function b(c){var d=a.call(this)|| this;return d.line=c,d._id=b._nextId++,d.isDisposed=!1,d._onDispose=new g.EventEmitter,d}return e(b,a),Object.defineProperty(b.prototype,"id",{get:function(){return this._id},enumerable:!0,configurable:!0}),Object.defineProperty(b.prototype,"onDispose",{get:function(){return this._onDispose.event},enumerable:!0,configurable:!0}),b.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire())},b._nextId=1,b}(d(2).Disposable);c.Marker=a},function(a,c,d){var b= this&&this.__decorate||function(a,b,c,d){var e,f=arguments.length,g=3>f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"== typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3f?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"== typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3this._end&&(this._end=a)},a.prototype.markRangeDirty=function(a,b){if(a>b){var c=a;a=b;b=c}athis._end&&(this._end=b)},a.prototype.markAllDirty=function(){this.markRangeDirty(0,this._bufferService.rows- 1)},a=b([e(0,g.IBufferService)],a)}();c.DirtyRowService=a},function(a,c,d){var b=this&&this.__spreadArrays||function(){for(var a=0,b=0,c=arguments.length;bf?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a, b,c,d);else for(var h=a.length-1;0<=h;h--)(e=a[h])&&(g=(3>f?e(g):3a.col||a.col>=this._bufferService.cols||0>a.row||a.row>=this._bufferService.rows||4===a.button&&32===a.action||3===a.button&&32!==a.action||4!==a.button&&(2===a.action||3===a.action)||(a.col++,a.row++,32===a.action&&this._lastEvent&&this._compareEvents(this._lastEvent,a))||!this._protocols[this._activeProtocol].restrict(a))return!1;var b=this._encodings[this._activeEncoding](a); return b&&("DEFAULT"===this._activeEncoding?this._coreService.triggerBinaryEvent(b):this._coreService.triggerDataEvent(b,!0)),this._lastEvent=a,!0},a.prototype.explainEvents=function(a){return{DOWN:!!(1&a),UP:!!(2&a),DRAG:!!(4&a),MOVE:!!(8&a),WHEEL:!!(16&a)}},a.prototype._compareEvents=function(a,b){return a.col===b.col&&a.row===b.row&&a.button===b.button&&a.action===b.action&&a.ctrl===b.ctrl&&a.alt===b.alt&&a.shift===b.shift},a=e([g(0,k.IBufferService),g(1,k.ICoreService)],a)}();c.CoreMouseService= a},function(a,c,d){Object.defineProperty(c,"__esModule",{value:!0});a=function(){function a(a){this._action=a;this._writeBuffer=[];this._callbacks=[];this._bufferOffset=this._pendingData=0}return a.prototype.writeSync=function(a){if(this._writeBuffer.length){for(var b=this._bufferOffset;bthis._bufferOffset;){var c=this._writeBuffer[this._bufferOffset],d=this._callbacks[this._bufferOffset];if(this._bufferOffset++, this._action(c),this._pendingData-=c.length,d&&d(),12<=Date.now()-b)break}this._writeBuffer.length>this._bufferOffset?(50=d?ta(null,d):void 0!==a?"string"===typeof b?ta(null,d).fill(a,b):ta(null,d).fill(a):ta(null,d)};u.allocUnsafe=function(d){return Oc(null, d)};u.allocUnsafeSlow=function(d){return Oc(null,d)};u.isBuffer=pa;u.compare=function(d,a){if(!ja(d)||!ja(a))throw new TypeError("Arguments must be Buffers");if(d===a)return 0;for(var b=d.length,c=a.length,e=0,f=Math.min(b,c);e"};u.prototype.compare=function(d,a,b,c,e){if(!ja(d))throw new TypeError("Argument must be a Buffer");void 0===a&&(a=0); void 0===b&&(b=d?d.length:0);void 0===c&&(c=0);void 0===e&&(e=this.length);if(0>a||b>d.length||0>c||e>this.length)throw new RangeError("out of range index");if(c>=e&&a>=b)return 0;if(c>=e)return-1;if(a>=b)return 1;a>>>=0;b>>>=0;c>>>=0;e>>>=0;if(this===d)return 0;var f=e-c,h=b-a,g=Math.min(f,h);c=this.slice(c,e);d=d.slice(a,b);for(a=0;ae)b=e;if(0b||0>a)||a>this.length)throw new RangeError("Attempt to write outside buffer bounds"); c||(c="utf8");for(e=!1;;)switch(c){case "hex":a:{a=Number(a)||0;c=this.length-a;b?(b=Number(b),b>c&&(b=c)):b=c;c=d.length;if(0!==c%2)throw new TypeError("Invalid hex string");b>c/2&&(b=c/2);for(c=0;c(e-=2));++h){var g=c.charCodeAt(h);d=g>>8;g%=256;f.push(g);f.push(d)}return Jb(f,this,a,b);default:if(e)throw new TypeError("Unknown encoding: "+c);c=(""+c).toLowerCase();e=!0}};u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var ae=4096;u.prototype.slice=function(d,a){var b=this.length;d=~~d;a=void 0===a?b:~~a;0>d?(d+=b,0>d&&(d=0)):d>b&&(d=b);0>a?(a+=b,0>a&&(a=0)):a>b&&(a=b);a=128*c&&(b-=Math.pow(2,8*a));return b};u.prototype.readIntBE=function(d,a,b){d|=0;a|=0;b||Q(d,a,this.length);b=a;for(var c=1,e=this[d+--b];0=128*c&&(e-=Math.pow(2,8*a));return e};u.prototype.readInt8=function(d,a){a||Q(d,1,this.length);return this[d]&128?-1*(255-this[d]+1):this[d]};u.prototype.readInt16LE=function(d,a){a||Q(d,2,this.length);d=this[d]|this[d+1]<<8;return d&32768?d|4294901760:d};u.prototype.readInt16BE=function(d,a){a||Q(d,2,this.length); d=this[d+1]|this[d]<<8;return d&32768?d|4294901760:d};u.prototype.readInt32LE=function(d,a){a||Q(d,4,this.length);return this[d]|this[d+1]<<8|this[d+2]<<16|this[d+3]<<24};u.prototype.readInt32BE=function(d,a){a||Q(d,4,this.length);return this[d]<<24|this[d+1]<<16|this[d+2]<<8|this[d+3]};u.prototype.readFloatLE=function(d,a){a||Q(d,4,this.length);return Wb(this,d,!0,23,4)};u.prototype.readFloatBE=function(d,a){a||Q(d,4,this.length);return Wb(this,d,!1,23,4)};u.prototype.readDoubleLE=function(d,a){a|| Q(d,8,this.length);return Wb(this,d,!0,52,8)};u.prototype.readDoubleBE=function(d,a){a||Q(d,8,this.length);return Wb(this,d,!1,52,8)};u.prototype.writeUIntLE=function(d,a,b,c){d=+d;a|=0;b|=0;c||V(this,d,a,b,Math.pow(2,8*b)-1,0);c=1;var e=0;for(this[a]=d&255;++e>>8):oc(this,d,a,!0);return a+2};u.prototype.writeUInt16BE=function(d,a,b){d=+d;a|=0;b||V(this,d,a,2,65535,0);u.TYPED_ARRAY_SUPPORT?(this[a]=d>>>8,this[a+1]=d&255):oc(this,d,a,!1);return a+2};u.prototype.writeUInt32LE=function(d,a,b){d=+d;a|=0;b||V(this,d,a,4, 4294967295,0);u.TYPED_ARRAY_SUPPORT?(this[a+3]=d>>>24,this[a+2]=d>>>16,this[a+1]=d>>>8,this[a]=d&255):pc(this,d,a,!0);return a+4};u.prototype.writeUInt32BE=function(d,a,b){d=+d;a|=0;b||V(this,d,a,4,4294967295,0);u.TYPED_ARRAY_SUPPORT?(this[a]=d>>>24,this[a+1]=d>>>16,this[a+2]=d>>>8,this[a+3]=d&255):pc(this,d,a,!1);return a+4};u.prototype.writeIntLE=function(d,a,b,c){d=+d;a|=0;c||(c=Math.pow(2,8*b-1),V(this,d,a,b,c-1,-c));c=0;var e=1,f=0;for(this[a]=d&255;++cd&&0===f&&0!==this[a+c- 1]&&(f=1),this[a+c]=(d/e>>0)-f&255;return a+b};u.prototype.writeIntBE=function(d,a,b,c){d=+d;a|=0;c||(c=Math.pow(2,8*b-1),V(this,d,a,b,c-1,-c));c=b-1;var e=1,f=0;for(this[a+c]=d&255;0<=--c&&(e*=256);)0>d&&0===f&&0!==this[a+c+1]&&(f=1),this[a+c]=(d/e>>0)-f&255;return a+b};u.prototype.writeInt8=function(d,a,b){d=+d;a|=0;b||V(this,d,a,1,127,-128);u.TYPED_ARRAY_SUPPORT||(d=Math.floor(d));0>d&&(d=255+d+1);this[a]=d&255;return a+1};u.prototype.writeInt16LE=function(d,a,b){d=+d;a|=0;b||V(this,d,a,2,32767, -32768);u.TYPED_ARRAY_SUPPORT?(this[a]=d&255,this[a+1]=d>>>8):oc(this,d,a,!0);return a+2};u.prototype.writeInt16BE=function(d,a,b){d=+d;a|=0;b||V(this,d,a,2,32767,-32768);u.TYPED_ARRAY_SUPPORT?(this[a]=d>>>8,this[a+1]=d&255):oc(this,d,a,!1);return a+2};u.prototype.writeInt32LE=function(d,a,b){d=+d;a|=0;b||V(this,d,a,4,2147483647,-2147483648);u.TYPED_ARRAY_SUPPORT?(this[a]=d&255,this[a+1]=d>>>8,this[a+2]=d>>>16,this[a+3]=d>>>24):pc(this,d,a,!0);return a+4};u.prototype.writeInt32BE=function(d,a,b){d= +d;a|=0;b||V(this,d,a,4,2147483647,-2147483648);0>d&&(d=4294967295+d+1);u.TYPED_ARRAY_SUPPORT?(this[a]=d>>>24,this[a+1]=d>>>16,this[a+2]=d>>>8,this[a+3]=d&255):pc(this,d,a,!1);return a+4};u.prototype.writeFloatLE=function(d,a,b){b||Xb(this,d,a,4);mc(this,d,a,!0,23,4);return a+4};u.prototype.writeFloatBE=function(d,a,b){b||Xb(this,d,a,4);mc(this,d,a,!1,23,4);return a+4};u.prototype.writeDoubleLE=function(d,a,b){b||Xb(this,d,a,8);mc(this,d,a,!0,52,8);return a+8};u.prototype.writeDoubleBE=function(d, a,b){b||Xb(this,d,a,8);mc(this,d,a,!1,52,8);return a+8};u.prototype.copy=function(d,a,b,c){b||(b=0);c||0===c||(c=this.length);a>=d.length&&(a=d.length);a||(a=0);0a)throw new RangeError("targetStart out of bounds");if(0>b||b>=this.length)throw new RangeError("sourceStart out of bounds");if(0>c)throw new RangeError("sourceEnd out of bounds");c>this.length&&(c=this.length);d.length-ae||!u.TYPED_ARRAY_SUPPORT)for(c=0;ce&&(d=e)}if(void 0!==c&&"string"!==typeof c)throw new TypeError("encoding must be a string");if("string"===typeof c&&!u.isEncoding(c))throw new TypeError("Unknown encoding: "+ c);}else"number"===typeof d&&(d&=255);if(0>a||this.length>>=0;b=void 0===b?this.length:b>>>0;d||(d=0);if("number"===typeof d)for(c=a;ca&&(b--,a+=1E9));return[b,a]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-Ph)/1E3}},Xa="function"===typeof Object.create?function(d,a){d.super_=a;d.prototype=Object.create(a.prototype, {constructor:{value:d,enumerable:!1,writable:!0,configurable:!0}})}:function(d,a){function b(){}d.super_=a;b.prototype=a.prototype;d.prototype=new b;d.prototype.constructor=d},xg=/%[sdj%]/g,Yb={},Tc;qa.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};qa.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta", regexp:"red"};var Fg="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),jc={inherits:Xa,_extend:je,log:function(){console.log("%s - %s",Eg(),Rc.apply(null,arguments))},isBuffer:function(d){return pa(d)},isPrimitive:Xc,isFunction:hb,isError:Kb,isDate:Lb,isObject:Oa,isRegExp:ub,isUndefined:va,isSymbol:function(d){return"symbol"===typeof d},isString:eb,isNumber:le,isNullOrUndefined:function(d){return null==d},isNull:function(d){return null===d},isBoolean:Uc,isArray:ke,inspect:qa,deprecate:Sc, format:Rc,debuglog:ie},Qh=Object.prototype.hasOwnProperty,xe=Object.keys||function(d){var a=[],b;for(b in d)Qh.call(d,b)&&a.push(b);return a},we=Array.prototype.slice,Zc,Gg=/\s*function\s+([^\(\s]*)\s*/;L.AssertionError=ad;Xa(ad,Error);L.fail=aa;L.ok=$c;L.equal=se;L.notEqual=te;L.deepEqual=ue;L.deepStrictEqual=ve;L.notDeepEqual=ye;L.notDeepStrictEqual=ze;L.strictEqual=Ae;L.notStrictEqual=Be;L.throws=function(d,a,b){De(!0,d,a,b)};L.doesNotThrow=function(d,a,b){De(!1,d,a,b)};L.ifError=function(d){if(d)throw d; };var kc=ba(function(d,a){function b(a){return function(a){function b(b){for(var d=[],e=1;e 0 and < 65536");e("ERR_SOCKET_BAD_TYPE","Bad socket type specified. Valid types are: udp4, udp6"); e("ERR_SOCKET_CANNOT_SEND","Unable to send data");e("ERR_SOCKET_CLOSED","Socket is closed");e("ERR_SOCKET_DGRAM_NOT_RUNNING","Not running");e("ERR_STDERR_CLOSE","process.stderr cannot be closed");e("ERR_STDOUT_CLOSE","process.stdout cannot be closed");e("ERR_STREAM_WRAP","Stream has StringDecoder set or is in objectMode");e("ERR_TLS_CERT_ALTNAME_INVALID","Hostname/IP does not match certificate's altnames: %s");e("ERR_TLS_DH_PARAM_SIZE",function(a){return"DH parameter size "+a+" is less than 2048"}); e("ERR_TLS_HANDSHAKE_TIMEOUT","TLS handshake timeout");e("ERR_TLS_RENEGOTIATION_FAILED","Failed to renegotiate");e("ERR_TLS_REQUIRED_SERVER_NAME",'"servername" is required parameter for Server.addContext');e("ERR_TLS_SESSION_ATTACK","TSL session renegotiation attack detected");e("ERR_TRANSFORM_ALREADY_TRANSFORMING","Calling transform done when still transforming");e("ERR_TRANSFORM_WITH_LENGTH_0","Calling transform done when writableState.length != 0");e("ERR_UNKNOWN_ENCODING","Unknown encoding: %s"); e("ERR_UNKNOWN_SIGNAL","Unknown signal: %s");e("ERR_UNKNOWN_STDIN_TYPE","Unknown stdin file type");e("ERR_UNKNOWN_STREAM_TYPE","Unknown stream file type");e("ERR_V8BREAKITERATOR","Full ICU data not installed. See https://github.com/nodejs/node/wiki/Intl")});P(kc);var da=ba(function(d,a){Object.defineProperty(a,"__esModule",{value:!0});a.ENCODING_UTF8="utf8";a.assertEncoding=function(a){if(a&&!U.Buffer.isEncoding(a))throw new kc.TypeError("ERR_INVALID_OPT_VALUE_ENCODING",a);};a.strToEncoding=function(b, c){return c&&c!==a.ENCODING_UTF8?"buffer"===c?new U.Buffer(b):(new U.Buffer(b)).toString(c):b}});P(da);var yd=ba(function(d,a){Object.defineProperty(a,"__esModule",{value:!0});var b=I.constants.S_IFMT,c=I.constants.S_IFDIR,e=I.constants.S_IFREG,f=I.constants.S_IFBLK,h=I.constants.S_IFCHR,g=I.constants.S_IFLNK,k=I.constants.S_IFIFO,q=I.constants.S_IFSOCK;d=function(){function a(){this.name="";this.mode=0}a.build=function(b,c){var d=new a,e=b.getNode().mode;d.name=da.strToEncoding(b.getName(),c);d.mode= e;return d};a.prototype._checkModeProperty=function(a){return(this.mode&b)===a};a.prototype.isDirectory=function(){return this._checkModeProperty(c)};a.prototype.isFile=function(){return this._checkModeProperty(e)};a.prototype.isBlockDevice=function(){return this._checkModeProperty(f)};a.prototype.isCharacterDevice=function(){return this._checkModeProperty(h)};a.prototype.isSymbolicLink=function(){return this._checkModeProperty(g)};a.prototype.isFIFO=function(){return this._checkModeProperty(k)}; a.prototype.isSocket=function(){return this._checkModeProperty(q)};return a}();a.Dirent=d;a.default=d});P(yd);"ab".substr(-1);var Ya=ba(function(d,a){Object.defineProperty(a,"__esModule",{value:!0});d="function"===typeof setImmediate?setImmediate.bind(S):setTimeout.bind(S);a.default=d});P(Ya);var na=ba(function(d,a){function b(){var a=gb||{};a.getuid||(a.getuid=function(){return 0});a.getgid||(a.getgid=function(){return 0});a.cwd||(a.cwd=function(){return"/"});a.nextTick||(a.nextTick=Ya.default); a.emitWarning||(a.emitWarning=function(a,b){console.warn(""+b+(b?": ":"")+a)});a.env||(a.env={});return a}Object.defineProperty(a,"__esModule",{value:!0});a.createProcess=b;a.default=b()});P(na);ib.prototype=Object.create(null);J.EventEmitter=J;J.usingDomains=!1;J.prototype.domain=void 0;J.prototype._events=void 0;J.prototype._maxListeners=void 0;J.defaultMaxListeners=10;J.init=function(){this.domain=null;this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new ib,this._eventsCount= 0);this._maxListeners=this._maxListeners||void 0};J.prototype.setMaxListeners=function(d){if("number"!==typeof d||0>d||isNaN(d))throw new TypeError('"n" argument must be a positive number');this._maxListeners=d;return this};J.prototype.getMaxListeners=function(){return void 0===this._maxListeners?J.defaultMaxListeners:this._maxListeners};J.prototype.emit=function(d){var a,b,c="error"===d;if(a=this._events)c=c&&null==a.error;else if(!c)return!1;var e=this.domain;if(c){a=arguments[1];if(e)a||(a=Error('Uncaught, unspecified "error" event')), a.domainEmitter=this,a.domain=e,a.domainThrown=!1,e.emit("error",a);else{if(a instanceof Error)throw a;e=Error('Uncaught, unspecified "error" event. ('+a+")");e.context=a;throw e;}return!1}e=a[d];if(!e)return!1;a="function"===typeof e;var f=arguments.length;switch(f){case 1:if(a)e.call(this);else for(a=e.length,e=Mb(e,a),c=0;cf)return this;if(1===e.length){e[0]=void 0;if(0===--this._eventsCount)return this._events=new ib,this;delete c[d]}else{b=f+1;for(var g= e.length;bthis.buf.length){var e=U.bufferAllocUnsafe(d+c);this.buf.copy(e,0,0,this.buf.length); this.buf=e}a.copy(this.buf,d,b,b+c);this.touch();return c};d.prototype.read=function(a,b,c,d){void 0===b&&(b=0);void 0===c&&(c=a.byteLength);void 0===d&&(d=0);this.buf||(this.buf=U.bufferAllocUnsafe(0));c>a.byteLength&&(c=a.byteLength);c+d>this.buf.length&&(c=this.buf.length-d);this.buf.copy(a,b,d,d+c);return c};d.prototype.truncate=function(a){void 0===a&&(a=0);if(a)if(this.buf||(this.buf=U.bufferAllocUnsafe(0)),a<=this.buf.length)this.buf=this.buf.slice(0,a);else{var b=U.bufferAllocUnsafe(0);this.buf.copy(b); b.fill(0,a)}else this.buf=U.bufferAllocUnsafe(0);this.touch()};d.prototype.chmod=function(a){this.perm=a;this.mode=this.mode&-512|a;this.touch()};d.prototype.chown=function(a,b){this.uid=a;this.gid=b;this.touch()};d.prototype.touch=function(){this.mtime=new Date;this.emit("change",this)};d.prototype.canRead=function(a,b){void 0===a&&(a=na.default.getuid());void 0===b&&(b=na.default.getgid());return this.perm&4||b===this.gid&&this.perm&32||a===this.uid&&this.perm&256?!0:!1};d.prototype.canWrite=function(a, b){void 0===a&&(a=na.default.getuid());void 0===b&&(b=na.default.getgid());return this.perm&2||b===this.gid&&this.perm&16||a===this.uid&&this.perm&128?!0:!1};d.prototype.del=function(){this.emit("delete",this)};d.prototype.toJSON=function(){return{ino:this.ino,uid:this.uid,gid:this.gid,atime:this.atime.getTime(),mtime:this.mtime.getTime(),ctime:this.ctime.getTime(),perm:this.perm,mode:this.mode,nlink:this.nlink,symlink:this.symlink,data:this.getString()}};return d}(J.EventEmitter);a.Node=d;d=function(c){function d(a, b,d){var e=c.call(this)||this;e.children={};e.steps=[];e.ino=0;e.length=0;e.vol=a;e.parent=b;e.steps=b?b.steps.concat([d]):[d];return e}b(d,c);d.prototype.setNode=function(a){this.node=a;this.ino=a.ino};d.prototype.getNode=function(){return this.node};d.prototype.createChild=function(a,b){void 0===b&&(b=this.vol.createNode());var c=new d(this.vol,this,a);c.setNode(b);b.isDirectory();this.setChild(a,c);return c};d.prototype.setChild=function(a,b){void 0===b&&(b=new d(this.vol,this,a));this.children[a]= b;b.parent=this;this.length++;this.emit("child:add",b,this);return b};d.prototype.deleteChild=function(a){delete this.children[a.getName()];this.length--;this.emit("child:delete",a,this)};d.prototype.getChild=function(a){if(Object.hasOwnProperty.call(this.children,a))return this.children[a]};d.prototype.getPath=function(){return this.steps.join(a.SEP)};d.prototype.getName=function(){return this.steps[this.steps.length-1]};d.prototype.walk=function(a,b,c){void 0===b&&(b=a.length);void 0===c&&(c=0); if(c>=a.length||c>=b)return this;var d=this.getChild(a[c]);return d?d.walk(a,b,c+1):null};d.prototype.toJSON=function(){return{steps:this.steps,ino:this.ino,children:Object.keys(this.children)}};return d}(J.EventEmitter);a.Link=d;d=function(){function a(a,b,c,d){this.position=0;this.link=a;this.node=b;this.flags=c;this.fd=d}a.prototype.getString=function(){return this.node.getString()};a.prototype.setString=function(a){this.node.setString(a)};a.prototype.getBuffer=function(){return this.node.getBuffer()}; a.prototype.setBuffer=function(a){this.node.setBuffer(a)};a.prototype.getSize=function(){return this.node.getSize()};a.prototype.truncate=function(a){this.node.truncate(a)};a.prototype.seekTo=function(a){this.position=a};a.prototype.stats=function(){return zb.default.build(this.node)};a.prototype.write=function(a,b,c,d){void 0===b&&(b=0);void 0===c&&(c=a.length);"number"!==typeof d&&(d=this.position);this.flags&g&&(d=this.getSize());a=this.node.write(a,b,c,d);this.position=d+a;return a};a.prototype.read= function(a,b,c,d){void 0===b&&(b=0);void 0===c&&(c=a.byteLength);"number"!==typeof d&&(d=this.position);a=this.node.read(a,b,c,d);this.position=d+a;return a};a.prototype.chmod=function(a){this.node.chmod(a)};a.prototype.chown=function(a,b){this.node.chown(a,b)};return a}();a.File=d});P(nb);var Rh=nb.Node,Pf=ba(function(d,a){Object.defineProperty(a,"__esModule",{value:!0});a.default=function(a,c,d){var b=setTimeout.apply(null,arguments);b&&"object"===typeof b&&"function"===typeof b.unref&&b.unref(); return b}});P(Pf);Pa.prototype.push=function(d){d={data:d,next:null};0>>0);for(var a=this.head,b=0;a;)a.data.copy(d,b),b+=a.data.length,a=a.next;return d};var Kg=u.isEncoding||function(d){switch(d&&d.toLowerCase()){case "hex":case "utf8":case "utf-8":case "ascii":case "binary":case "base64":case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":case "raw":return!0; default:return!1}};$b.prototype.write=function(d){for(var a="";this.charLength;){a=d.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:d.length;d.copy(this.charBuffer,this.charReceived,0,a);this.charReceived+=a;if(this.charReceived=b)this.charLength+=this.surrogateSize,a="";else{this.charReceived=this.charLength= 0;if(0===d.length)return a;break}}this.detectIncompleteChar(d);var c=d.length;this.charLength&&(d.copy(this.charBuffer,0,d.length-this.charReceived,c),c-=this.charReceived);a+=d.toString(this.encoding,0,c);c=a.length-1;b=a.charCodeAt(c);return 55296<=b&&56319>=b?(b=this.surrogateSize,this.charLength+=b,this.charReceived+=b,this.charBuffer.copy(this.charBuffer,b,0,b),d.copy(this.charBuffer,0,0,b),a.substring(0,c)):a};$b.prototype.detectIncompleteChar=function(d){for(var a=3<=d.length?3:d.length;0< a;a--){var b=d[d.length-a];if(1==a&&6==b>>5){this.charLength=2;break}if(2>=a&&14==b>>4){this.charLength=3;break}if(3>=a&&30==b>>3){this.charLength=4;break}}this.charReceived=a};$b.prototype.end=function(d){var a="";d&&d.length&&(a=this.write(d));this.charReceived&&(d=this.encoding,a+=this.charBuffer.slice(0,this.charReceived).toString(d));return a};R.ReadableState=He;var G=ie("stream");Xa(R,J);R.prototype.push=function(d,a){var b=this._readableState;b.objectMode||"string"!==typeof d||(a=a||b.defaultEncoding, a!==b.encoding&&(d=u.from(d,a),a=""));return Ie(this,b,d,a,!1)};R.prototype.unshift=function(d){return Ie(this,this._readableState,d,"",!0)};R.prototype.isPaused=function(){return!1===this._readableState.flowing};R.prototype.setEncoding=function(d){this._readableState.decoder=new $b(d);this._readableState.encoding=d;return this};R.prototype.read=function(d){G("read",d);d=parseInt(d,10);var a=this._readableState,b=d;0!==d&&(a.emittedReadable=!1);if(0===d&&a.needReadable&&(a.length>=a.highWaterMark|| a.ended))return G("read: emitReadable",a.length,a.ended),0===a.length&&a.ended?dd(this):sc(this),null;d=Je(d,a);if(0===d&&a.ended)return 0===a.length&&dd(this),null;var c=a.needReadable;G("need readable",c);if(0===a.length||a.length-darguments.length?a:c.apply(null,[a].concat(Sh.call(arguments,2)))},Rf=ba(function(a,b){function c(a,b,c){void 0===c&&(c=function(a){return a});return function(){for(var f=[],g=0;g= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Qa=Math.floor,gd=String.fromCharCode,We=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},eh=Object.keys|| function(a){var b=[],c;for(c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b},Uh={parse:cc,resolve:function(a,b){return cc(a,!1,!0).resolve(b)},resolveObject:function(a,b){return a?cc(a,!1,!0).resolveObject(b):b},format:function(a){eb(a)&&(a=Ye({},a));return jd(a)},Url:xa},gh=/^([a-z0-9.+-]+:)/i,kh=/:[0-9]*$/,fh=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,Vh="{}|\\^`".split("").concat('<>"` \r\n\t'.split("")),id=["'"].concat(Vh),$e=["%","/","?",";","#"].concat(id),Ze=["/","?","#"],ih= 255,bf=/^[+a-z0-9A-Z_-]{0,63}$/,hh=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,jh={javascript:!0,"javascript:":!0},hd={javascript:!0,"javascript:":!0},Ra={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};xa.prototype.parse=function(a,b,c){return Ye(this,a,b,c)};xa.prototype.format=function(){return jd(this)};xa.prototype.resolve=function(a){return this.resolveObject(cc(a,!1,!0)).format()};xa.prototype.resolveObject=function(a){if(eb(a)){var b=new xa;b.parse(a, !1,!0);a=b}b=new xa;for(var c=Object.keys(this),e=0;eh.length&&h.unshift("");b.pathname=h.join("/")}b.search=a.search;b.query=a.query;b.host=a.host||"";b.auth=a.auth;b.hostname=a.hostname||a.host;b.port=a.port;if(b.pathname||b.search)b.path=(b.pathname||"")+(b.search||"");b.slashes=b.slashes||a.slashes;b.href=b.format();return b}c=b.pathname&&"/"=== b.pathname.charAt(0);var g=a.host||a.pathname&&"/"===a.pathname.charAt(0),k=c=g||c||b.host&&a.pathname;e=b.pathname&&b.pathname.split("/")||[];f=b.protocol&&!Ra[b.protocol];h=a.pathname&&a.pathname.split("/")||[];f&&(b.hostname="",b.port=null,b.host&&(""===e[0]?e[0]=b.host:e.unshift(b.host)),b.host="",a.protocol&&(a.hostname=null,a.port=null,a.host&&(""===h[0]?h[0]=a.host:h.unshift(a.host)),a.host=null),c=c&&(""===h[0]||""===e[0]));if(g)b.host=a.host||""===a.host?a.host:b.host,b.hostname=a.hostname|| ""===a.hostname?a.hostname:b.hostname,b.search=a.search,b.query=a.query,e=h;else if(h.length)e||(e=[]),e.pop(),e=e.concat(h),b.search=a.search,b.query=a.query;else if(null!=a.search){f&&(b.hostname=b.host=e.shift(),f=b.host&&0e)e=b;else{for(;c(b,e);)e--;e=b.substr(0,e+1)}return e.replace(/^([a-zA-Z]+:|\.\/)/,"")}return a}Object.defineProperty(b,"__esModule",{value:!0});b.unixify=e;b.correctPath=function(a){return e(a.replace(/^\\\\\?\\.:\\/,"\\"))};var f="win32"===gb.platform});P(Sf);var Bb=ba(function(a,b){function c(a,b){void 0=== b&&(b=na.default.cwd());return lb(b,a)}function e(a,b){return"function"===typeof a?[f(),a]:[f(a),v(b)]}function f(a){void 0===a&&(a={});return Ba({},za,a)}function h(a){return"number"===typeof a?Ba({},xa,{mode:a}):Ba({},xa,a)}function g(a,b,c,e){void 0===b&&(b="");void 0===c&&(c="");void 0===e&&(e="");var f="";c&&(f=" '"+c+"'");e&&(f+=" -> '"+e+"'");switch(a){case "ENOENT":return"ENOENT: no such file or directory, "+b+f;case "EBADF":return"EBADF: bad file descriptor, "+b+f;case "EINVAL":return"EINVAL: invalid argument, "+ b+f;case "EPERM":return"EPERM: operation not permitted, "+b+f;case "EPROTO":return"EPROTO: protocol error, "+b+f;case "EEXIST":return"EEXIST: file already exists, "+b+f;case "ENOTDIR":return"ENOTDIR: not a directory, "+b+f;case "EISDIR":return"EISDIR: illegal operation on a directory, "+b+f;case "EACCES":return"EACCES: permission denied, "+b+f;case "ENOTEMPTY":return"ENOTEMPTY: directory not empty, "+b+f;case "EMFILE":return"EMFILE: too many open files, "+b+f;case "ENOSYS":return"ENOSYS: function not implemented, "+ b+f;default:return a+": error occurred, "+b+f}}function k(a,b,c,e,f){void 0===b&&(b="");void 0===c&&(c="");void 0===e&&(e="");void 0===f&&(f=Error);b=new f(g(a,b,c,e));b.code=a;return b}function q(a){if("number"===typeof a)return a;if("string"===typeof a){var b=V[a];if("undefined"!==typeof b)return b}throw new kc.TypeError("ERR_INVALID_OPT_VALUE","flags",a);}function t(a,b){if(b){var c=typeof b;switch(c){case "string":a=Ba({},a,{encoding:b});break;case "object":a=Ba({},a,b);break;default:throw TypeError("Expected options to be either an object or a string, but got "+ c+" instead");}}else return a;"buffer"!==a.encoding&&da.assertEncoding(a.encoding);return a}function p(a){return function(b){return t(a,b)}}function v(a){if("function"!==typeof a)throw TypeError(P.CB);return a}function n(a){return function(b,c){return"function"===typeof b?[a(),b]:[a(b),v(c)]}}function r(a){if("string"!==typeof a&&!U.Buffer.isBuffer(a)){try{if(!(a instanceof Uh.URL))throw new TypeError(P.PATH_STR);}catch(Bc){throw new TypeError(P.PATH_STR);}if(""!==a.hostname)throw new kc.TypeError("ERR_INVALID_FILE_URL_HOST", na.default.platform);a=a.pathname;for(var b=0;b>>0!==a)throw TypeError(P.FD);}function L(a){if("string"===typeof a&&+a== a)return+a;if(a instanceof Date)return a.getTime()/1E3;if(isFinite(a))return 0>a?Date.now()/1E3:a;throw Error("Cannot parse time: "+a);}function B(a){if("number"!==typeof a)throw TypeError(P.UID);}function X(a){if("number"!==typeof a)throw TypeError(P.GID);}function Ma(a){a.emit("stop")}function sa(a,b,c){if(!(this instanceof sa))return new sa(a,b,c);this._vol=a;c=Ba({},t(c,{}));void 0===c.highWaterMark&&(c.highWaterMark=65536);wa.Readable.call(this,c);this.path=r(b);this.fd=void 0===c.fd?null:c.fd; this.flags=void 0===c.flags?"r":c.flags;this.mode=void 0===c.mode?438:c.mode;this.start=c.start;this.end=c.end;this.autoClose=void 0===c.autoClose?!0:c.autoClose;this.pos=void 0;this.bytesRead=0;if(void 0!==this.start){if("number"!==typeof this.start)throw new TypeError('"start" option must be a Number');if(void 0===this.end)this.end=Infinity;else if("number"!==typeof this.end)throw new TypeError('"end" option must be a Number');if(this.start>this.end)throw Error('"start" option must be <= "end" option'); this.pos=this.start}"number"!==typeof this.fd&&this.open();this.on("end",function(){this.autoClose&&this.destroy&&this.destroy()})}function Ac(){this.close()}function T(a,b,c){if(!(this instanceof T))return new T(a,b,c);this._vol=a;c=Ba({},t(c,{}));wa.Writable.call(this,c);this.path=r(b);this.fd=void 0===c.fd?null:c.fd;this.flags=void 0===c.flags?"w":c.flags;this.mode=void 0===c.mode?438:c.mode;this.start=c.start;this.autoClose=void 0===c.autoClose?!0:!!c.autoClose;this.pos=void 0;this.bytesWritten= 0;if(void 0!==this.start){if("number"!==typeof this.start)throw new TypeError('"start" option must be a Number');if(0>this.start)throw Error('"start" must be >= zero');this.pos=this.start}c.encoding&&this.setDefaultEncoding(c.encoding);"number"!==typeof this.fd&&this.open();this.once("finish",function(){this.autoClose&&this.close()})}var Wa=S&&S.__extends||function(){function a(b,c){a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&& (a[c]=b[c])};return a(b,c)}return function(b,c){function e(){this.constructor=b}a(b,c);b.prototype=null===c?Object.create(c):(e.prototype=c.prototype,new e)}}(),ic=S&&S.__spreadArrays||function(){for(var a=0,b=0,c=arguments.length;b>>0!==a)throw TypeError(P.FD);a=this.getFileByFd(a);if(!a)throw k("EBADF",b);return a}; a.prototype.getNodeByIdOrCreate=function(a,b,c){if("number"===typeof a){a=this.getFileByFd(a);if(!a)throw Error("File nto found");return a.node}var e=u(a),f=this.getLink(e);if(f)return f.getNode();if(b&C&&(b=this.getLinkParent(e)))return f=this.createLink(b,e[e.length-1],!1,c),f.getNode();throw k("ENOENT","getNodeByIdOrCreate",r(a));};a.prototype.wrapAsync=function(a,b,c){var e=this;v(c);Ya.default(function(){try{c(null,a.apply(e,b))}catch(Ec){c(Ec)}})};a.prototype._toJSON=function(a,b,c){var e;void 0=== a&&(a=this.root);void 0===b&&(b={});var f=!0,g=a.children;a.getNode().isFile()&&(g=(e={},e[a.getName()]=a.parent.getChild(a.getName()),e),a=a.parent);for(var h in g){f=!1;g=a.getChild(h);if(!g)throw Error("_toJSON: unexpected undefined");e=g.getNode();e.isFile()?(g=g.getPath(),c&&(g=Zb(c,g)),b[g]=e.getString()):e.isDirectory()&&this._toJSON(g,b,c)}a=a.getPath();c&&(a=Zb(c,a));a&&f&&(b[a]=null);return b};a.prototype.toJSON=function(a,b,c){void 0===b&&(b={});void 0===c&&(c=!1);var e=[];if(a){a instanceof Array||(a=[a]);for(var f=0;f=this.maxFiles)throw k("EMFILE","open",a.getPath());var e=a;c&&(e=this.resolveSymlinks(a));if(!e)throw k("ENOENT","open",a.getPath());c=e.getNode();if(c.isDirectory()){if((b&(mb|M|Qb))!==mb)throw k("EISDIR","open",a.getPath()); }else if(b&Y)throw k("ENOTDIR","open",a.getPath());if(!(b&Qb||c.canRead()))throw k("EACCES","open",a.getPath());a=new this.props.File(a,c,b,this.newFdNumber());this.fds[a.fd]=a;this.openFiles++;b&O&&a.truncate();return a};a.prototype.openFile=function(a,b,c,e){void 0===e&&(e=!0);var f=x(a),g=e?this.getResolvedLink(f):this.getLink(f);if(!g&&b&C){var h=this.getResolvedLink(f.slice(0,f.length-1));if(!h)throw k("ENOENT","open",N+f.join(N));b&C&&"number"===typeof c&&(g=this.createLink(h,f[f.length-1], !1,c))}if(g)return this.openLink(g,b,e);throw k("ENOENT","open",a);};a.prototype.openBase=function(a,b,c,e){void 0===e&&(e=!0);b=this.openFile(a,b,c,e);if(!b)throw k("ENOENT","open",a);return b.fd};a.prototype.openSync=function(a,b,c){void 0===c&&(c=438);c=E(c);a=r(a);b=q(b);return this.openBase(a,b,c)};a.prototype.open=function(a,b,c,e){var f=c;"function"===typeof c&&(f=438,e=c);c=E(f||438);a=r(a);b=q(b);this.wrapAsync(this.openBase,[a,b,c],e)};a.prototype.closeFile=function(a){this.fds[a.fd]&&(this.openFiles--, delete this.fds[a.fd],this.releasedFds.push(a.fd))};a.prototype.closeSync=function(a){G(a);a=this.getFileByFdOrThrow(a,"close");this.closeFile(a)};a.prototype.close=function(a,b){G(a);this.wrapAsync(this.closeSync,[a],b)};a.prototype.openFileOrGetById=function(a,b,c){if("number"===typeof a){a=this.fds[a];if(!a)throw k("ENOENT");return a}return this.openFile(r(a),b,c)};a.prototype.readBase=function(a,b,c,e,f){return this.getFileByFdOrThrow(a).read(b,Number(c),Number(e),f)};a.prototype.readSync=function(a, b,c,e,f){G(a);return this.readBase(a,b,c,e,f)};a.prototype.read=function(a,b,c,e,f,g){var h=this;v(g);if(0===e)return na.default.nextTick(function(){g&&g(null,0,b)});Ya.default(function(){try{var k=h.readBase(a,b,c,e,f);g(null,k,b)}catch(Wh){g(Wh)}})};a.prototype.readFileBase=function(a,b,c){var e="number"===typeof a&&a>>>0===a;if(!e){var f=r(a);f=x(f);if((f=this.getResolvedLink(f))&&f.getNode().isDirectory())throw k("EISDIR","open",f.getPath());a=this.openSync(a,b)}try{var g=A(this.getFileByFdOrThrow(a).getBuffer(), c)}finally{e||this.closeSync(a)}return g};a.prototype.readFileSync=function(a,b){b=ea(b);var c=q(b.flag);return this.readFileBase(a,c,b.encoding)};a.prototype.readFile=function(a,b,c){c=n(ea)(b,c);b=c[0];c=c[1];var e=q(b.flag);this.wrapAsync(this.readFileBase,[a,e,b.encoding],c)};a.prototype.writeBase=function(a,b,c,e,f){return this.getFileByFdOrThrow(a,"write").write(b,c,e,f)};a.prototype.writeSync=function(a,b,c,e,f){G(a);var g="string"!==typeof b;if(g){var h=(c||0)|0,k=e;c=f}else var n=e;b=z(b, n);g?"undefined"===typeof k&&(k=b.length):(h=0,k=b.length);return this.writeBase(a,b,h,k,c)};a.prototype.write=function(a,b,c,e,f,g){var h=this;G(a);var k=typeof b,n=typeof c,m=typeof e,Tf=typeof f;if("string"!==k)if("function"===n)var Ea=c;else if("function"===m){var p=c|0;Ea=e}else if("function"===Tf){p=c|0;var Bc=e;Ea=f}else{p=c|0;Bc=e;var r=f;Ea=g}else if("function"===n)Ea=c;else if("function"===m)r=c,Ea=e;else if("function"===Tf){r=c;var t=e;Ea=f}var q=z(b,t);"string"!==k?"undefined"===typeof Bc&& (Bc=q.length):(p=0,Bc=q.length);var B=v(Ea);Ya.default(function(){try{var c=h.writeBase(a,q,p,Bc,r);"string"!==k?B(null,c,q):B(null,c,b)}catch(Xh){B(Xh)}})};a.prototype.writeFileBase=function(a,b,c,e){var f="number"===typeof a;a=f?a:this.openBase(r(a),c,e);e=0;var g=b.length;c=c&Q?void 0:0;try{for(;0=a.nlink&&this.deleteNode(a)};a.prototype.unlinkSync=function(a){a=r(a);this.unlinkBase(a)};a.prototype.unlink=function(a,b){a=r(a);this.wrapAsync(this.unlinkBase,[a],b)};a.prototype.symlinkBase=function(a,b){var c=x(b),e=this.getLinkParent(c);if(!e)throw k("ENOENT", "symlink",a,b);c=c[c.length-1];if(e.getChild(c))throw k("EEXIST","symlink",a,b);b=e.createChild(c);b.getNode().makeSymlink(x(a));return b};a.prototype.symlinkSync=function(a,b){a=r(a);b=r(b);this.symlinkBase(a,b)};a.prototype.symlink=function(a,b,c,e){c=v("function"===typeof c?c:e);a=r(a);b=r(b);this.wrapAsync(this.symlinkBase,[a,b],c)};a.prototype.realpathBase=function(a,b){var c=x(a);c=this.getResolvedLink(c);if(!c)throw k("ENOENT","realpath",a);return da.strToEncoding(c.getPath(),b)};a.prototype.realpathSync= function(a,b){return this.realpathBase(r(a),qa(b).encoding)};a.prototype.realpath=function(a,b,c){c=la(b,c);b=c[0];c=c[1];a=r(a);this.wrapAsync(this.realpathBase,[a,b.encoding],c)};a.prototype.lstatBase=function(a,b){void 0===b&&(b=!1);var c=this.getLink(x(a));if(!c)throw k("ENOENT","lstat",a);return zb.default.build(c.getNode(),b)};a.prototype.lstatSync=function(a,b){return this.lstatBase(r(a),f(b).bigint)};a.prototype.lstat=function(a,b,c){c=e(b,c);b=c[0];c=c[1];this.wrapAsync(this.lstatBase,[r(a), b.bigint],c)};a.prototype.statBase=function(a,b){void 0===b&&(b=!1);var c=this.getResolvedLink(x(a));if(!c)throw k("ENOENT","stat",a);return zb.default.build(c.getNode(),b)};a.prototype.statSync=function(a,b){return this.statBase(r(a),f(b).bigint)};a.prototype.stat=function(a,b,c){c=e(b,c);b=c[0];c=c[1];this.wrapAsync(this.statBase,[r(a),b.bigint],c)};a.prototype.fstatBase=function(a,b){void 0===b&&(b=!1);a=this.getFileByFd(a);if(!a)throw k("EBADF","fstat");return zb.default.build(a.node,b)};a.prototype.fstatSync= function(a,b){return this.fstatBase(a,f(b).bigint)};a.prototype.fstat=function(a,b,c){b=e(b,c);this.wrapAsync(this.fstatBase,[a,b[0].bigint],b[1])};a.prototype.renameBase=function(a,b){var c=this.getLink(x(a));if(!c)throw k("ENOENT","rename",a,b);var e=x(b),f=this.getLinkParent(e);if(!f)throw k("ENOENT","rename",a,b);(a=c.parent)&&a.deleteChild(c);c.steps=ic(f.steps,[e[e.length-1]]);f.setChild(c.getName(),c)};a.prototype.renameSync=function(a,b){a=r(a);b=r(b);this.renameBase(a,b)};a.prototype.rename= function(a,b,c){a=r(a);b=r(b);this.wrapAsync(this.renameBase,[a,b],c)};a.prototype.existsBase=function(a){return!!this.statBase(a)};a.prototype.existsSync=function(a){try{return this.existsBase(r(a))}catch(Ea){return!1}};a.prototype.exists=function(a,b){var c=this,e=r(a);if("function"!==typeof b)throw Error(P.CB);Ya.default(function(){try{b(c.existsBase(e))}catch(Ec){b(!1)}})};a.prototype.accessBase=function(a){this.getLinkOrThrow(a,"access")};a.prototype.accessSync=function(a,b){void 0===b&&(b=Z); a=r(a);this.accessBase(a,b|0)};a.prototype.access=function(a,b,c){var e=Z;"function"!==typeof b&&(e=b|0,b=v(c));a=r(a);this.wrapAsync(this.accessBase,[a,e],b)};a.prototype.appendFileSync=function(a,b,c){void 0===c&&(c=ma);c=oa(c);c.flag&&a>>>0!==a||(c.flag="a");this.writeFileSync(a,b,c)};a.prototype.appendFile=function(a,b,c,e){e=ja(c,e);c=e[0];e=e[1];c.flag&&a>>>0!==a||(c.flag="a");this.writeFile(a,b,c,e)};a.prototype.readdirBase=function(a,b){var c=x(a);c=this.getResolvedLink(c);if(!c)throw k("ENOENT", "readdir",a);if(!c.getNode().isDirectory())throw k("ENOTDIR","scandir",a);if(b.withFileTypes){var e=[];for(f in c.children)(a=c.getChild(f))&&e.push(yd.default.build(a,b.encoding));w||"buffer"===b.encoding||e.sort(function(a,b){return a.nameb.name?1:0});return e}var f=[];for(e in c.children)f.push(da.strToEncoding(e,b.encoding));w||"buffer"===b.encoding||f.sort();return f};a.prototype.readdirSync=function(a,b){b=ra(b);a=r(a);return this.readdirBase(a,b)};a.prototype.readdir=function(a, b,c){c=ya(b,c);b=c[0];c=c[1];a=r(a);this.wrapAsync(this.readdirBase,[a,b],c)};a.prototype.readlinkBase=function(a,b){var c=this.getLinkOrThrow(a,"readlink").getNode();if(!c.isSymlink())throw k("EINVAL","readlink",a);a=N+c.symlink.join(N);return da.strToEncoding(a,b)};a.prototype.readlinkSync=function(a,b){b=aa(b);a=r(a);return this.readlinkBase(a,b.encoding)};a.prototype.readlink=function(a,b,c){c=ca(b,c);b=c[0];c=c[1];a=r(a);this.wrapAsync(this.readlinkBase,[a,b.encoding],c)};a.prototype.fsyncBase= function(a){this.getFileByFdOrThrow(a,"fsync")};a.prototype.fsyncSync=function(a){this.fsyncBase(a)};a.prototype.fsync=function(a,b){this.wrapAsync(this.fsyncBase,[a],b)};a.prototype.fdatasyncBase=function(a){this.getFileByFdOrThrow(a,"fdatasync")};a.prototype.fdatasyncSync=function(a){this.fdatasyncBase(a)};a.prototype.fdatasync=function(a,b){this.wrapAsync(this.fdatasyncBase,[a],b)};a.prototype.ftruncateBase=function(a,b){this.getFileByFdOrThrow(a,"ftruncate").truncate(b)};a.prototype.ftruncateSync= function(a,b){this.ftruncateBase(a,b)};a.prototype.ftruncate=function(a,b,c){var e="number"===typeof b?b:0;b=v("number"===typeof b?c:b);this.wrapAsync(this.ftruncateBase,[a,e],b)};a.prototype.truncateBase=function(a,b){a=this.openSync(a,"r+");try{this.ftruncateSync(a,b)}finally{this.closeSync(a)}};a.prototype.truncateSync=function(a,b){if(a>>>0===a)return this.ftruncateSync(a,b);this.truncateBase(a,b)};a.prototype.truncate=function(a,b,c){var e="number"===typeof b?b:0;b=v("number"===typeof b?c:b); if(a>>>0===a)return this.ftruncate(a,e,b);this.wrapAsync(this.truncateBase,[a,e],b)};a.prototype.futimesBase=function(a,b,c){a=this.getFileByFdOrThrow(a,"futimes").node;a.atime=new Date(1E3*b);a.mtime=new Date(1E3*c)};a.prototype.futimesSync=function(a,b,c){this.futimesBase(a,L(b),L(c))};a.prototype.futimes=function(a,b,c,e){this.wrapAsync(this.futimesBase,[a,L(b),L(c)],e)};a.prototype.utimesBase=function(a,b,c){a=this.openSync(a,"r+");try{this.futimesBase(a,b,c)}finally{this.closeSync(a)}};a.prototype.utimesSync= function(a,b,c){this.utimesBase(r(a),L(b),L(c))};a.prototype.utimes=function(a,b,c,e){this.wrapAsync(this.utimesBase,[r(a),L(b),L(c)],e)};a.prototype.mkdirBase=function(a,b){var c=x(a);if(!c.length)throw k("EISDIR","mkdir",a);var e=this.getLinkParentAsDirOrThrow(a,"mkdir");c=c[c.length-1];if(e.getChild(c))throw k("EEXIST","mkdir",a);e.createChild(c,this.createNode(!0,b))};a.prototype.mkdirpBase=function(a,b){a=x(a);for(var c=this.root,e=0;ethis.prev.mtimeMs||a.nlink!==this.prev.nlink?!0:!1};b.prototype.start=function(a,b,c){void 0===b&&(b=!0);void 0===c&&(c=5007);this.filename=r(a);this.setTimeout=b?setTimeout:Pf.default;this.interval=c;this.prev=this.vol.statSync(this.filename);this.loop()};b.prototype.stop=function(){clearTimeout(this.timeoutRef);na.default.nextTick(Ma,this)}; return b}(J.EventEmitter);b.StatWatcher=ua;var ha;jc.inherits(sa,wa.Readable);b.ReadStream=sa;sa.prototype.open=function(){var a=this;this._vol.open(this.path,this.flags,this.mode,function(b,c){b?(a.autoClose&&a.destroy&&a.destroy(),a.emit("error",b)):(a.fd=c,a.emit("open",c),a.read())})};sa.prototype._read=function(a){if("number"!==typeof this.fd)return this.once("open",function(){this._read(a)});if(!this.destroyed){if(!ha||128>ha.length-ha.used)ha=U.bufferAllocUnsafe(this._readableState.highWaterMark), ha.used=0;var b=ha,c=Math.min(ha.length-ha.used,a),e=ha.used;void 0!==this.pos&&(c=Math.min(this.end-this.pos+1,c));if(0>=c)return this.push(null);var f=this;this._vol.read(this.fd,ha,ha.used,c,this.pos,function(a,c){a?(f.autoClose&&f.destroy&&f.destroy(),f.emit("error",a)):(a=null,0 ");0a.length&&(this._cursor=a.length);var f=this.applyPromptOffset(a,this._cursor);c=Sa(b,b.length,this._termSize.cols).row+1;f=Sa(b,f,this._termSize.cols);b=f.col;c=c-f.row-1;this.xterm.write("\r");for(f=0;f a&&(a=0);a>this._input.length&&(a=this._input.length);this._writeCursorPosition(a)};a.prototype.setCursorDirectly=function(a){this._writeCursorPosition(a)};a.prototype._writeCursorPosition=function(a){var b=this.applyPrompts(this._input);Sa(b,b.length,this._termSize.cols);var e=this.applyPromptOffset(this._input,this._cursor),f=Sa(b,e,this._termSize.cols);e=f.col;f=f.row;var h=this.applyPromptOffset(this._input,a);h=Sa(b,h,this._termSize.cols);b=h.col;h=h.row;if(h>f)for(var g=f;ge)for(g=e;gZf;Zf++)Ga+=(Math.pow(16,8)*Math.random()).toString(16); var ff=function(a,b,c){a=mh(a,b,c);return"function"!==typeof b?a:a.reduce(function(a,b){if("object"===typeof b)return a.concat(b);b=b.split(RegExp("("+Ga+".*?"+Ga+")","g"));return 1===b.length?a.concat(b[0]):a.concat(b.filter(Boolean).map(function(a){return RegExp("^"+Ga).test(a)?JSON.parse(a.split(Ga)[1]):a}))},[])},ai=function(){function a(a){this.size=a;this.entries=[];this.cursor=0}a.prototype.push=function(a){""!==a.trim()&&a!==this.entries[this.entries.length-1]&&(this.entries.push(a),this.entries.length> this.size&&this.entries.pop(),this.cursor=this.entries.length)};a.prototype.includes=function(a){return this.entries.includes(a)};a.prototype.rewind=function(){this.cursor=this.entries.length};a.prototype.getPrevious=function(){var a=Math.max(0,this.cursor-1);this.cursor=a;return this.entries[a]};a.prototype.getNext=function(){var a=Math.min(this.entries.length,this.cursor+1);this.cursor=a;return this.entries[a]};return a}();let kf=Symbol("Comlink.proxy"),th=Symbol("Comlink.endpoint"),sh=Symbol("Comlink.releaseProxy"), nd=new WeakSet,lf=new Map([["proxy",{canHandle:a=>a&&a[kf],serialize(a){const {port1:b,port2:c}=new MessageChannel;gf(a,b);return[c,[c]]},deserialize:a=>{a.start();return dc(a,[],void 0)}}],["throw",{canHandle:a=>nd.has(a),serialize(a){const b=a instanceof Error;let c=a;b&&(c={isError:b,message:a.message,stack:a.stack});return[c,[]]},deserialize(a){if(a.isError)throw Object.assign(Error(),a);throw a;}}]]),jf=new WeakMap;var bi=Array.isArray||function(a){return"[object Array]"==Object.prototype.toString.call(a)}, di=function(a,b){if(a.map)return a.map(b);for(var c=[],e=0;ea&&(Fc=0,Sb={line:1,column:1,seenCR:!1});var b=Sb,e;for(e=Fc;eDb&&(Db=l,Ub=[]),Ub.push(a))}function h(){var a,b;var c=l;var e=[];var f=l;var h=[];for(a=C();a!==m;)h.push(a),a=C();if(h!==m)if(a=g(),a!==m){var k=[];for(b=C();b!==m;)k.push(b),b=C();k!==m?f=h=[h,a,k]:(l=f,f=w)}else l=f,f=w;else l=f,f=w;if(f!==m)for(;f!==m;){e.push(f);f=l;h=[];for(a=C();a!==m;)h.push(a), a=C();if(h!==m)if(a=g(),a!==m){k=[];for(b=C();b!==m;)k.push(b),b=C();k!==m?f=h=[h,a,k]:(l=f,f=w)}else l=f,f=w;else l=f,f=w}else e=w;e!==m&&(K=c,e=W(e));return e}function g(){var a,b;y++;var c=l;var e=k();if(e!==m){var g=[];var h=l;var n=[];for(a=M();a!==m;)n.push(a),a=M();if(n!==m)if(a=q(),a!==m){var p=[];for(b=C();b!==m;)p.push(b),b=C();p!==m?(b=k(),b!==m?h=n=[n,a,p,b]:(l=h,h=w)):(l=h,h=w)}else l=h,h=w;else l=h,h=w;for(;h!==m;){g.push(h);h=l;n=[];for(a=M();a!==m;)n.push(a),a=M();if(n!==m)if(a=q(), a!==m){p=[];for(b=C();b!==m;)p.push(b),b=C();p!==m?(b=k(),b!==m?h=n=[n,a,p,b]:(l=h,h=w)):(l=h,h=w)}else l=h,h=w;else l=h,h=w}if(g!==m){h=l;n=[];for(a=M();a!==m;)n.push(a),a=M();n!==m?(a=q(),a!==m?h=n=[n,a]:(l=h,h=w)):(l=h,h=w);h===m&&(h=S);h!==m?(K=c,c=e=aa(e,g)):(l=c,c=w)}else l=c,c=w}else l=c,c=w;y--;c===m&&0===y&&f(Z);return c}function k(){var a=l;var b=t();if(b===m&&(b=n(),b===m)){var e;var g=l;c.substr(l,5)===fa?(b=fa,l+=5):(b=m,0===y&&f(ra));b===m&&(c.substr(l,5)===ja?(b=ja,l+=5):(b=m,0===y&& f(ua)));if(b!==m){var r=[];var q=C();if(q!==m)for(;q!==m;)r.push(q),q=C();else r=w;if(r!==m)if(q=v(),q!==m){r=[];for(e=C();e!==m;)r.push(e),e=C();r!==m?(c.substr(l,2)===ha?(e=ha,l+=2):(e=m,0===y&&f(va)),e!==m?(r=C(),r!==m?(r=h(),r!==m?(c.substr(l,4)===la?(e=la,l+=4):(e=m,0===y&&f(ya)),e!==m?(K=g,g=b={type:b+"-loop",test:q,body:r}):(l=g,g=w)):(l=g,g=w)):(l=g,g=w)):(l=g,g=w)):(l=g,g=w)}else l=g,g=w;else l=g,g=w}else l=g,g=w;b=g;if(b===m){g=l;c.substr(l,2)===Ea?(b=Ea,l+=2):(b=m,0===y&&f(za));if(b!== m){q=[];b=C();if(b!==m)for(;b!==m;)q.push(b),b=C();else q=w;if(q!==m)if(b=h(),b!==m)if(c.substr(l,4)===da?(q=da,l+=4):(q=m,0===y&&f(ta)),q!==m){r=[];q=C();if(q!==m)for(;q!==m;)r.push(q),q=C();else r=w;if(r!==m)if(q=h(),q!==m){r=[];for(e=p();e!==m;)r.push(e),e=p();if(r!==m){e=l;if(c.substr(l,4)===pa){var B=pa;l+=4}else B=m,0===y&&f(Ia);if(B!==m){var X=h();X!==m?e=B=[B,X]:(l=e,e=w)}else l=e,e=w;e===m&&(e=S);e!==m?(c.substr(l,2)===Aa?(B=Aa,l+=2):(B=m,0===y&&f(Na)),B!==m?(K=g,g=b={type:"ifElse",test:b, body:q,elifBlocks:r.length?r:null,elseBody:e?e[1]:null}):(l=g,g=w)):(l=g,g=w)}else l=g,g=w}else l=g,g=w;else l=g,g=w}else l=g,g=w;else l=g,g=w;else l=g,g=w}else l=g,g=w;b=g}}if(b!==m){g=l;q=[];for(r=M();r!==m;)q.push(r),r=M();if(q!==m){r=l;c.substr(l,2)===Y?(e=Y,l+=2):(e=m,0===y&&f(ba));e===m&&(c.substr(l,2)===ca?(e=ca,l+=2):(e=m,0===y&&f(ea)));if(e!==m){B=[];for(X=C();X!==m;)B.push(X),X=C();B!==m?(X=k(),X!==m?(K=r,r=e=[e,X]):(l=r,r=w)):(l=r,r=w)}else l=r,r=w;r!==m?g=q=[q,r]:(l=g,g=w)}else l=g,g= w;g===m&&(g=S);g!==m?(K=a,a=b,"undefined"!==typeof g&&g?(g=g[1],a.control=g[0],a.next=g[1]):(a.control=";",a.next=null)):(l=a,a=w)}else l=a,a=w;return a}function q(){var a=l;if(38===c.charCodeAt(l)){var b=ia;l++}else b=m,0===y&&f(ka);b===m&&(59===c.charCodeAt(l)?(b=ma,l++):(b=m,0===y&&f(na)),b===m&&(10===c.charCodeAt(l)?(b=oa,l++):(b=m,0===y&&f(qa))));b!==m&&(K=a,b="\n"==b?";":b);return b}function t(){y++;var a=l;var b=[];var e=l;var g=n();g===m&&(g=mb());if(g!==m){var h=[];var k=M();if(k!==m)for(;k!== m;)h.push(k),k=M();else h=w;h!==m?e=g=[g,h]:(l=e,e=w)}else l=e,e=w;for(;e!==m;)if(b.push(e),e=l,g=n(),g===m&&(g=mb()),g!==m){h=[];k=M();if(k!==m)for(;k!==m;)h.push(k),k=M();else h=w;h!==m?e=g=[g,h]:(l=e,e=w)}else l=e,e=w;if(b!==m)if(e=r(),e===m&&(e=x()),e!==m){g=[];h=l;k=[];var p=M();if(p!==m)for(;p!==m;)k.push(p),p=M();else k=w;k!==m?(p=mb(),p===m&&(p=u()),p!==m?h=k=[k,p]:(l=h,h=w)):(l=h,h=w);for(;h!==m;){g.push(h);h=l;k=[];p=M();if(p!==m)for(;p!==m;)k.push(p),p=M();else k=w;k!==m?(p=mb(),p===m&& (p=u()),p!==m?h=k=[k,p]:(l=h,h=w)):(l=h,h=w)}if(g!==m){h=l;k=[];for(p=M();p!==m;)k.push(p),p=M();if(k!==m){var q;p=l;if(124===c.charCodeAt(l)){var B=jc;l++}else B=m,0===y&&f(kc);if(B!==m){B=[];for(q=C();q!==m;)B.push(q),q=C();B!==m?(q=t(),q!==m?(K=p,p=B={type:"pipe",command:q}):(l=p,p=w)):(l=p,p=w)}else l=p,p=w;p!==m?h=k=[k,p]:(l=h,h=w)}else l=h,h=w;h===m&&(h=S);h!==m?(K=a,a=b=xa(b,e,g,h)):(l=a,a=w)}else l=a,a=w}else l=a,a=w;else l=a,a=w;y--;a===m&&0===y&&f(wa);return a}function p(){var a=l;if(c.substr(l, 4)===Ca){var b=Ca;l+=4}else b=m,0===y&&f(Oa);if(b!==m){var e=[];b=C();if(b!==m)for(;b!==m;)e.push(b),b=C();else e=w;if(e!==m)if(b=v(),b!==m)if(c.substr(l,4)===da?(e=da,l+=4):(e=m,0===y&&f(ta)),e!==m){e=[];var g=C();if(g!==m)for(;g!==m;)e.push(g),g=C();else e=w;e!==m?(g=h(),g!==m?(K=a,a=b={type:"ifElse",test:b,body:g}):(l=a,a=w)):(l=a,a=w)}else l=a,a=w;else l=a,a=w;else l=a,a=w}else l=a,a=w;return a}function v(){var a=l;var b=h();b!==m&&(K=a);return b}function n(){var a=l;var b=Wa();if(b!==m){if(61=== c.charCodeAt(l)){var e=ib;l++}else e=m,0===y&&f(jb);e!==m?(e=u(),e!==m?(K=a,a=b={type:"variableAssignment",name:b,value:e}):(l=a,a=w)):(l=a,a=w)}else l=a,a=w;return a}function r(){var a;y++;var b=a=l;y++;var c=mb();y--;c===m?b=Za:(l=b,b=w);if(b!==m)if(c=l,y++,b=L(),y--,b===m?c=Za:(l=c,c=w),c!==m)if(b=l,y++,c=n(),y--,c===m?b=Za:(l=b,b=w),b!==m){c=l;b=[];var e=F();e===m&&(e=z(),e===m&&(e=T(),e===m&&(e=ic(),e===m&&(e=Ba(),e===m&&(e=B(),e===m&&(e=X()))))));if(e!==m)for(;e!==m;)b.push(e),e=F(),e===m&& (e=z(),e===m&&(e=T(),e===m&&(e=ic(),e===m&&(e=Ba(),e===m&&(e=B(),e===m&&(e=X()))))));else b=w;b!==m&&(K=c,b=P(b));c=b;c===m&&(c=x());c!==m?(K=a,a=c):(l=a,a=w)}else l=a,a=w;else l=a,a=w;else l=a,a=w;y--;a===m&&0===y&&f(kb);return a}function x(){if(91===c.charCodeAt(l)){var a=Xa;l++}else a=m,0===y&&f($a);a===m&&(c.substr(l,2)===Fa?(a=Fa,l+=2):(a=m,0===y&&f(ab)));return a}function u(){y++;var a=r();if(a===m){a=l;if(ac.test(c.charAt(l))){var b=c.charAt(l);l++}else b=m,0===y&&f(bc);if(b!==m){if(40===c.charCodeAt(l)){var e= Ob;l++}else e=m,0===y&&f(Rb);if(e!==m)if(e=g(),e!==m){if(41===c.charCodeAt(l)){var h=Kb;l++}else h=m,0===y&&f(Lb);h!==m?(K=a,a=b={type:"processSubstitution",readWrite:b,commands:e}):(l=a,a=w)}else l=a,a=w;else l=a,a=w}else l=a,a=w}y--;a===m&&0===y&&f(pb);return a}function z(){var a=l;var b=[];var c=A();if(c!==m)for(;c!==m;)b.push(c),c=A();else b=w;b!==m&&(K=a,b=N(b));return b}function A(){var a=l;if(92===c.charCodeAt(l)){var b=cb;l++}else b=m,0===y&&f(db);if(b!==m){var e=E();e!==m?(K=a,a=e):(l=a, a=w)}else l=a,a=w;a===m&&(b=a=l,y++,e=E(),y--,e===m?b=Za:(l=b,b=w),b!==m?(c.length>l?(e=c.charAt(l),l++):(e=m,0===y&&f(Cb)),e!==m?(K=a,a=e):(l=a,a=w)):(l=a,a=w));return a}function E(){if(sb.test(c.charAt(l))){var a=c.charAt(l);l++}else a=m,0===y&&f(tb);return a}function F(){var a;var b=l;var e=[];for(a=A();a!==m;)e.push(a),a=A();if(e!==m){a=[];42===c.charCodeAt(l)?(e=eb,l++):(e=m,0===y&&f(fb));e===m&&(63===c.charCodeAt(l)?(e=Pa,l++):(e=m,0===y&&f(Sa)),e===m&&(e=I(),e===m&&(e=J())));if(e!==m)for(;e!== m;)a.push(e),42===c.charCodeAt(l)?(e=eb,l++):(e=m,0===y&&f(fb)),e===m&&(63===c.charCodeAt(l)?(e=Pa,l++):(e=m,0===y&&f(Sa)),e===m&&(e=I(),e===m&&(e=J())));else a=w;if(a!==m){e=[];for(a=A();a!==m;)e.push(a),a=A();e!==m?(K=b,b=e={type:"glob",value:c.substring(K,l)}):(l=b,b=w)}else l=b,b=w}else l=b,b=w;return b}function I(){var a;var b=a=l;if(91===c.charCodeAt(l)){var e=Xa;l++}else e=m,0===y&&f($a);if(e!==m){var g=l;y++;if(45===c.charCodeAt(l)){var h=Ga;l++}else h=m,0===y&&f(Ha);y--;h===m?g=Za:(l=g,g= w);if(g!==m)if(c.length>l?(h=c.charAt(l),l++):(h=m,0===y&&f(Cb)),h!==m){if(45===c.charCodeAt(l)){var k=Ga;l++}else k=m,0===y&&f(Ha);if(k!==m){var n=l;y++;if(45===c.charCodeAt(l)){var p=Ga;l++}else p=m,0===y&&f(Ha);y--;p===m?n=Za:(l=n,n=w);if(n!==m)if(c.length>l?(p=c.charAt(l),l++):(p=m,0===y&&f(Cb)),p!==m){if(93===c.charCodeAt(l)){var r=wb;l++}else r=m,0===y&&f(yb);r!==m?b=e=[e,g,h,k,n,p,r]:(l=b,b=w)}else l=b,b=w;else l=b,b=w}else l=b,b=w}else l=b,b=w;else l=b,b=w}else l=b,b=w;b!==m&&(b=c.substring(a, l));return b}function J(){var a;var b=a=l;if(c.length>l){var e=c.charAt(l);l++}else e=m,0===y&&f(Cb);e===m&&(e=S);if(e!==m){var g=l;y++;if(36===c.charCodeAt(l)){var h=Ua;l++}else h=m,0===y&&f(Va);y--;h===m?g=Za:(l=g,g=w);g!==m?b=e=[e,g]:(l=b,b=w)}else l=b,b=w;if(b!==m)if(123===c.charCodeAt(l)?(e=Bb,l++):(e=m,0===y&&f(Fb)),e!==m){g=[];h=A();if(h!==m)for(;h!==m;)g.push(h),h=A();else g=w;g!==m?(125===c.charCodeAt(l)?(h=qb,l++):(h=m,0===y&&f(rb)),h!==m?a=b=[b,e,g,h]:(l=a,a=w)):(l=a,a=w)}else l=a,a=w; else l=a,a=w;return a}function B(){var a=l;if(39===c.charCodeAt(l)){var b=gb;l++}else b=m,0===y&&f(hb);if(b!==m){b=l;var e=[];if(ub.test(c.charAt(l))){var g=c.charAt(l);l++}else g=m,0===y&&f(vb);for(;g!==m;)e.push(g),ub.test(c.charAt(l))?(g=c.charAt(l),l++):(g=m,0===y&&f(vb));e!==m&&(e=c.substring(b,l));b=e;b!==m?(39===c.charCodeAt(l)?(e=gb,l++):(e=m,0===y&&f(hb)),e!==m?(K=a,a=b=N(b)):(l=a,a=w)):(l=a,a=w)}else l=a,a=w;return a}function X(){var a=l;if(34===c.charCodeAt(l)){var b=Qa;l++}else b=m,0=== y&&f(Ra);if(b!==m){b=[];var e=Ac();if(e===m){e=[];var g=Ma();if(g!==m)for(;g!==m;)e.push(g),g=Ma();else e=w}for(;e!==m;)if(b.push(e),e=Ac(),e===m)if(e=[],g=Ma(),g!==m)for(;g!==m;)e.push(g),g=Ma();else e=w;b!==m?(34===c.charCodeAt(l)?(e=Qa,l++):(e=m,0===y&&f(Ra)),e!==m?(K=a,a=b=Nb(b)):(l=a,a=w)):(l=a,a=w)}else l=a,a=w;return a}function Ma(){var a=l;if(92===c.charCodeAt(l)){var b=cb;l++}else b=m,0===y&&f(db);if(b!==m){var e=sa();e!==m?(K=a,a=e):(l=a,a=w)}else l=a,a=w;a===m&&(a=l,c.substr(l,2)===Ta? (b=Ta,l+=2):(b=m,0===y&&f(xb)),b!==m&&(K=a,b="\\"),a=b,a===m&&(b=a=l,y++,e=sa(),y--,e===m?b=Za:(l=b,b=w),b!==m?(c.length>l?(e=c.charAt(l),l++):(e=m,0===y&&f(Cb)),e!==m?(K=a,a=e):(l=a,a=w)):(l=a,a=w)));return a}function sa(){if(34===c.charCodeAt(l)){var a=Qa;l++}else a=m,0===y&&f(Ra);a===m&&(36===c.charCodeAt(l)?(a=Ua,l++):(a=m,0===y&&f(Va)),a===m&&(96===c.charCodeAt(l)?(a=Ja,l++):(a=m,0===y&&f(Ka))));return a}function Ac(){var a=Ba();a===m&&(a=T(),a===m&&(a=ic()));return a}function T(){var a=l;if(36=== c.charCodeAt(l)){var b=Ua;l++}else b=m,0===y&&f(Va);b!==m?(b=Wa(),b===m&&(63===c.charCodeAt(l)?(b=Pa,l++):(b=m,0===y&&f(Sa))),b!==m?(K=a,a=b={type:"variable",name:b}):(l=a,a=w)):(l=a,a=w);return a}function Wa(){var a=l;var b=[];if(zb.test(c.charAt(l))){var e=c.charAt(l);l++}else e=m,0===y&&f(Ab);if(e!==m)for(;e!==m;)b.push(e),zb.test(c.charAt(l))?(e=c.charAt(l),l++):(e=m,0===y&&f(Ab));else b=w;b!==m&&(K=a,b=c.substring(K,l));return b}function ic(){var a=l;if(c.substr(l,2)===Ya){var b=Ya;l+=2}else b= m,0===y&&f(Eb);if(b!==m){b=[];if(Gb.test(c.charAt(l))){var e=c.charAt(l);l++}else e=m,0===y&&f(Hb);for(;e!==m;)b.push(e),Gb.test(c.charAt(l))?(e=c.charAt(l),l++):(e=m,0===y&&f(Hb));b!==m?(125===c.charCodeAt(l)?(e=qb,l++):(e=m,0===y&&f(rb)),e!==m?(K=a,a=b={type:"variableSubstitution",expression:b.join("")}):(l=a,a=w)):(l=a,a=w)}else l=a,a=w;return a}function Ba(){var a=l;if(c.substr(l,2)===bb){var e=bb;l+=2}else e=m,0===y&&f(Jb);if(e!==m)if(e=g(),e!==m){if(41===c.charCodeAt(l)){var h=Kb;l++}else h= m,0===y&&f(Lb);h!==m?(K=a,a=e={type:"commandSubstitution",commands:e}):(l=a,a=w)}else l=a,a=w;else l=a,a=w;if(a===m)if(a=l,96===c.charCodeAt(l)?(e=Ja,l++):(e=m,0===y&&f(Ka)),e!==m){e=[];h=lb();if(h!==m)for(;h!==m;)e.push(h),h=lb();else e=w;e!==m?(96===c.charCodeAt(l)?(h=Ja,l++):(h=m,0===y&&f(Ka)),h!==m?(K=a,a=e={type:"commandSubstitution",commands:b(e.join(""))}):(l=a,a=w)):(l=a,a=w)}else l=a,a=w;return a}function lb(){var a=l;if(c.substr(l,2)===Mb){var b=Mb;l+=2}else b=m,0===y&&f($b);b!==m&&(K=a, b="`");a=b;if(a===m&&(a=l,c.substr(l,2)===Ta?(b=Ta,l+=2):(b=m,0===y&&f(xb)),b!==m&&(K=a,b="\\"),a=b,a===m)){b=a=l;y++;if(96===c.charCodeAt(l)){var e=Ja;l++}else e=m,0===y&&f(Ka);y--;e===m?b=Za:(l=b,b=w);b!==m?(c.length>l?(e=c.charAt(l),l++):(e=m,0===y&&f(Cb)),e!==m?(K=a,a=e):(l=a,a=w)):(l=a,a=w)}return a}function mb(){var a=l;var b=G();b===m&&(b=S);if(b!==m){if(c.substr(l,2)===nb){var e=nb;l+=2}else e=m,0===y&&f(Tb);e===m&&(c.substr(l,2)===ob?(e=ob,l+=2):(e=m,0===y&&f(Wb)));if(e!==m){var g=G();if(g!== m){if(45===c.charCodeAt(l)){var h=Ga;l++}else h=m,0===y&&f(Ha);h!==m?(K=a,a=b,null==a&&(a="<"==e[0]?0:1),a=b={type:"moveFd",fd:a,op:e,dest:g}):(l=a,a=w)}else l=a,a=w}else l=a,a=w}else l=a,a=w;e=a;if(e===m){a=l;b=G();b===m&&(b=S);if(b!==m)if(c.substr(l,2)===nb?(e=nb,l+=2):(e=m,0===y&&f(Tb)),e===m&&(c.substr(l,2)===ob?(e=ob,l+=2):(e=m,0===y&&f(Wb))),e!==m){h=[];for(g=M();g!==m;)h.push(g),g=M();h!==m?(g=G(),g!==m?(K=a,a=b,null==a&&(a="<"==e[0]?0:1),a=b={type:"duplicateFd",srcFd:a,op:e,destFd:g}):(l= a,a=w)):(l=a,a=w)}else l=a,a=w;else l=a,a=w;e=a;if(e===m)if(e=l,g=G(),g===m&&(g=S),g!==m)if(60===c.charCodeAt(l)?(a=mc,l++):(a=m,0===y&&f(nc)),a===m&&(62===c.charCodeAt(l)?(a=oc,l++):(a=m,0===y&&f(pc)),a===m&&(c.substr(l,2)===Xb?(a=Xb,l+=2):(a=m,0===y&&f(qc)),a===m&&(c.substr(l,2)===Yb?(a=Yb,l+=2):(a=m,0===y&&f(rc)),a===m&&(c.substr(l,2)===Zb?(a=Zb,l+=2):(a=m,0===y&&f(sc)),a===m&&(c.substr(l,3)===cc?(a=cc,l+=3):(a=m,0===y&&f(tc))))))),a!==m){h=[];for(b=M();b!==m;)h.push(b),b=M();h!==m?(b=u(),b!== m?(K=e,e=g,null==e&&(e="<"==a[0]?0:1),e=g={type:"redirectFd",fd:e,op:a,filename:b}):(l=e,e=w)):(l=e,e=w)}else l=e,e=w;else l=e,e=w}return e}function G(){var a=l;var b=[];if(dc.test(c.charAt(l))){var e=c.charAt(l);l++}else e=m,0===y&&f(ec);if(e!==m)for(;e!==m;)b.push(e),dc.test(c.charAt(l))?(e=c.charAt(l),l++):(e=m,0===y&&f(ec));else b=w;b!==m&&(K=a,b=parseInt(b.join(""),10));return b}function M(){if(32===c.charCodeAt(l)){var a=uc;l++}else a=m,0===y&&f(vc);a===m&&(9===c.charCodeAt(l)?(a=wc,l++):(a= m,0===y&&f(xc)));return a}function C(){var a=M();a===m&&(10===c.charCodeAt(l)?(a=oa,l++):(a=m,0===y&&f(qa)));return a}function L(){var a=l;if(c.substr(l,5)===fa){var b=fa;l+=5}else b=m,0===y&&f(ra);b===m&&(c.substr(l,5)===ja?(b=ja,l+=5):(b=m,0===y&&f(ua)),b===m&&(c.substr(l,3)===fc?(b=fc,l+=3):(b=m,0===y&&f(yc)),b===m&&(c.substr(l,4)===la?(b=la,l+=4):(b=m,0===y&&f(ya)),b===m&&(c.substr(l,2)===ha?(b=ha,l+=2):(b=m,0===y&&f(va)),b===m&&(c.substr(l,4)===gc?(b=gc,l+=4):(b=m,0===y&&f(zc)),b===m&&(c.substr(l, 4)===hc?(b=hc,l+=4):(b=m,0===y&&f(Cc)),b===m&&(c.substr(l,2)===Ea?(b=Ea,l+=2):(b=m,0===y&&f(za)),b===m&&(c.substr(l,4)===da?(b=da,l+=4):(b=m,0===y&&f(ta)),b===m&&(c.substr(l,4)===pa?(b=pa,l+=4):(b=m,0===y&&f(Ia)),b===m&&(c.substr(l,4)===Ca?(b=Ca,l+=4):(b=m,0===y&&f(Oa)),b===m&&(c.substr(l,2)===Aa?(b=Aa,l+=2):(b=m,0===y&&f(Na)),b===m&&(c.substr(l,2)===Fa?(b=Fa,l+=2):(b=m,0===y&&f(ab))))))))))))));if(b!==m){var e=[];var g=C();if(g!==m)for(;g!==m;)e.push(g),g=C();else e=w;e===m&&(e=l,y++,c.length>l? (g=c.charAt(l),l++):(g=m,0===y&&f(Cb)),y--,g===m?e=Za:(l=e,e=w));e!==m?a=b=[b,e]:(l=a,a=w)}else l=a,a=w;return a}function N(a){return{type:"literal",value:lc(a)?a.join(""):a}}function O(a){return a[0]}function R(a){return a[1]}function P(a){for(var b=[a[0]],c=a.length,e=a[0],f,g=1;gl){var g=c.charAt(l);l++}else g=m,0===y&&f(Cb);for(;g!==m;)e.push(g),c.length>l?(g=c.charAt(l),l++):(g=m,0===y&&f(Cb));e!==m?a=b=[b,e]:(l=a,a=w)}else l=a,a=w;return a}},V=h,w=m,W=function(a){var b=[];Ib(a,function(a){b=b.concat(a[1])});return b},Z={type:"other",description:"a list of statements"},S=null,aa=function(a,b,c){var e=[a],f=a;Ib(b,function(a,b,c){for(b= f;b.next;)b=b.next;b.control=a[1];e.push(f=a[3])});return e},Y="&&",ba={type:"literal",value:"&&",description:'"&&"'},ca="||",ea={type:"literal",value:"||",description:'"||"'},ia="&",ka={type:"literal",value:"&",description:'"&"'},ma=";",na={type:"literal",value:";",description:'";"'},oa="\n",qa={type:"literal",value:"\n",description:'"\\n"'},wa={type:"other",description:"a single command"},xa=function(a,b,c,e){var f={type:"command",command:b,args:[],redirects:[],env:{},control:";",next:null};Ib(a, O).concat(Ib(c,R)).forEach(function(a){if(a&&a.type)switch(a.type){case "moveFd":case "duplicateFd":case "redirectFd":return f.redirects.push(a);case "variableAssignment":return f.env[a.name]=a.value;default:f.args.push(a)}});e&&f.redirects.push(e[1]);return f},fa="while",ra={type:"literal",value:"while",description:'"while"'},ja="until",ua={type:"literal",value:"until",description:'"until"'},ha="do",va={type:"literal",value:"do",description:'"do"'},la="done",ya={type:"literal",value:"done",description:'"done"'}, Ea="if",za={type:"literal",value:"if",description:'"if"'},da="then",ta={type:"literal",value:"then",description:'"then"'},pa="else",Ia={type:"literal",value:"else",description:'"else"'},Aa="fi",Na={type:"literal",value:"fi",description:'"fi"'},Ca="elif",Oa={type:"literal",value:"elif",description:'"elif"'},ib="=",jb={type:"literal",value:"=",description:'"="'},kb={type:"other",description:"command name"},Za=void 0,Xa="[",$a={type:"literal",value:"[",description:'"["'},Fa="[[",ab={type:"literal",value:"[[", description:'"[["'},pb={type:"other",description:"command argument"},cb="\\",db={type:"literal",value:"\\",description:'"\\\\"'},Cb={type:"any",description:"any character"},sb=/^[$"';&<>\n()[*?|` ]/,tb={type:"class",value:"[$\"';&<>\\n()[*?|` ]",description:"[$\"';&<>\\n()[*?|` ]"},eb="*",fb={type:"literal",value:"*",description:'"*"'},Pa="?",Sa={type:"literal",value:"?",description:'"?"'},Ga="-",Ha={type:"literal",value:"-",description:'"-"'},wb="]",yb={type:"literal",value:"]",description:'"]"'}, Ua="$",Va={type:"literal",value:"$",description:'"$"'},Bb="{",Fb={type:"literal",value:"{",description:'"{"'},qb="}",rb={type:"literal",value:"}",description:'"}"'},gb="'",hb={type:"literal",value:"'",description:'"\'"'},ub=/^[^']/,vb={type:"class",value:"[^']",description:"[^']"},Qa='"',Ra={type:"literal",value:'"',description:'"\\""'},Nb=function(a){a=a.map(function(a){return lc(a)?N(a):a});return P(a)},Ta="\\\\",xb={type:"literal",value:"\\\\",description:'"\\\\\\\\"'},Ja="`",Ka={type:"literal", value:"`",description:'"`"'},zb=/^[a-zA-Z0-9_]/,Ab={type:"class",value:"[a-zA-Z0-9_]",description:"[a-zA-Z0-9_]"},Ya="${",Eb={type:"literal",value:"${",description:'"${"'},Gb=/^[^}]/,Hb={type:"class",value:"[^}]",description:"[^}]"},bb="$(",Jb={type:"literal",value:"$(",description:'"$("'},Kb=")",Lb={type:"literal",value:")",description:'")"'},Mb="\\`",$b={type:"literal",value:"\\`",description:'"\\\\`"'},ac=/^[<>]/,bc={type:"class",value:"[<>]",description:"[<>]"},Ob="(",Rb={type:"literal",value:"(", description:'"("'},jc="|",kc={type:"literal",value:"|",description:'"|"'},nb="<&",Tb={type:"literal",value:"<&",description:'"<&"'},ob=">&",Wb={type:"literal",value:">&",description:'">&"'},mc="<",nc={type:"literal",value:"<",description:'"<"'},oc=">",pc={type:"literal",value:">",description:'">"'},Xb=">|",qc={type:"literal",value:">|",description:'">|"'},Yb="&>",rc={type:"literal",value:"&>",description:'"&>"'},Zb=">>",sc={type:"literal",value:">>",description:'">>"'},cc="&>>",tc={type:"literal", value:"&>>",description:'"&>>"'},dc=/^[0-9]/,ec={type:"class",value:"[0-9]",description:"[0-9]"},uc=" ",vc={type:"literal",value:" ",description:'" "'},wc="\t",xc={type:"literal",value:"\t",description:'"\\t"'},fc="for",yc={type:"literal",value:"for",description:'"for"'},gc="case",zc={type:"literal",value:"case",description:'"case"'},hc="esac",Cc={type:"literal",value:"esac",description:'"esac"'},l=0,K=0,Fc=0,Sb={line:1,column:1,seenCR:!1},Db=0,Ub=[],y=0;if("startRule"in Q){if(!(Q.startRule in U))throw Error("Can't start parsing from rule \""+ Q.startRule+'".');V=U[Q.startRule]}var lc=bi,Ib=di;var Vb=V();if(Vb!==m&&l===c.length)return Vb;Vb!==m&&lb.description?1:0});b=a?Ia(null,a):void 0!==b?"string"===typeof c?Ia(null,a).fill(b,c):Ia(null,a).fill(b):Ia(null,a)};z.allocUnsafe=function(a){return sd(null,a)};z.allocUnsafeSlow= function(a){return sd(null,a)};z.isBuffer=yf;z.compare=function(a,b){if(!ra(a)||!ra(b))throw new TypeError("Arguments must be Buffers");if(a===b)return 0;for(var c=a.length,e=b.length,f=0,h=Math.min(c,e);f"};z.prototype.compare=function(a,b,c,e,f){if(!ra(a))throw new TypeError("Argument must be a Buffer");void 0===b&&(b=0); void 0===c&&(c=a?a.length:0);void 0===e&&(e=0);void 0===f&&(f=this.length);if(0>b||c>a.length||0>e||f>this.length)throw new RangeError("out of range index");if(e>=f&&b>=c)return 0;if(e>=f)return-1;if(b>=c)return 1;b>>>=0;c>>>=0;e>>>=0;f>>>=0;if(this===a)return 0;var h=f-e,g=c-b,k=Math.min(h,g);e=this.slice(e,f);a=a.slice(b,c);for(b=0;bf)c=f;if(0c||0>b)||b>this.length)throw new RangeError("Attempt to write outside buffer bounds"); e||(e="utf8");for(f=!1;;)switch(e){case "hex":a:{b=Number(b)||0;e=this.length-b;c?(c=Number(c),c>e&&(c=e)):c=e;e=a.length;if(0!==e%2)throw new TypeError("Invalid hex string");c>e/2&&(c=e/2);for(e=0;e(f-=2));++g){var k=e.charCodeAt(g);a=k>>8;k%=256;h.push(k);h.push(a)}return Ob(h,this,b,c);default:if(f)throw new TypeError("Unknown encoding: "+e);e=(""+e).toLowerCase();f=!0}};z.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var wf=4096;z.prototype.slice=function(a,b){var c=this.length;a=~~a;b=void 0===b?c:~~b;0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c);0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c);b=128*e&&(c-=Math.pow(2,8*b));return c};z.prototype.readIntBE=function(a,b,c){a|=0;b|=0;c||W(a,b,this.length);c=b;for(var e=1,f=this[a+--c];0=128*e&&(f-=Math.pow(2,8*b));return f};z.prototype.readInt8=function(a,b){b||W(a,1,this.length);return this[a]&128?-1*(255-this[a]+1):this[a]};z.prototype.readInt16LE=function(a,b){b||W(a,2,this.length);a=this[a]|this[a+1]<<8;return a&32768?a|4294901760:a};z.prototype.readInt16BE=function(a,b){b||W(a,2,this.length); a=this[a+1]|this[a]<<8;return a&32768?a|4294901760:a};z.prototype.readInt32LE=function(a,b){b||W(a,4,this.length);return this[a]|this[a+1]<<8|this[a+2]<<16|this[a+3]<<24};z.prototype.readInt32BE=function(a,b){b||W(a,4,this.length);return this[a]<<24|this[a+1]<<16|this[a+2]<<8|this[a+3]};z.prototype.readFloatLE=function(a,b){b||W(a,4,this.length);return wc(this,a,!0,23,4)};z.prototype.readFloatBE=function(a,b){b||W(a,4,this.length);return wc(this,a,!1,23,4)};z.prototype.readDoubleLE=function(a,b){b|| W(a,8,this.length);return wc(this,a,!0,52,8)};z.prototype.readDoubleBE=function(a,b){b||W(a,8,this.length);return wc(this,a,!1,52,8)};z.prototype.writeUIntLE=function(a,b,c,e){a=+a;b|=0;c|=0;e||ca(this,a,b,c,Math.pow(2,8*c)-1,0);e=1;var f=0;for(this[b]=a&255;++f>>8):yc(this,a,b,!0);return b+2};z.prototype.writeUInt16BE=function(a,b,c){a=+a;b|=0;c||ca(this,a,b,2,65535,0);z.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=a&255):yc(this,a,b,!1);return b+2};z.prototype.writeUInt32LE=function(a,b,c){a=+a;b|=0;c||ca(this,a, b,4,4294967295,0);z.TYPED_ARRAY_SUPPORT?(this[b+3]=a>>>24,this[b+2]=a>>>16,this[b+1]=a>>>8,this[b]=a&255):gc(this,a,b,!0);return b+4};z.prototype.writeUInt32BE=function(a,b,c){a=+a;b|=0;c||ca(this,a,b,4,4294967295,0);z.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+2]=a>>>8,this[b+3]=a&255):gc(this,a,b,!1);return b+4};z.prototype.writeIntLE=function(a,b,c,e){a=+a;b|=0;e||(e=Math.pow(2,8*c-1),ca(this,a,b,c,e-1,-e));e=0;var f=1,h=0;for(this[b]=a&255;++ea&&0===h&&0!==this[b+ e-1]&&(h=1),this[b+e]=(a/f>>0)-h&255;return b+c};z.prototype.writeIntBE=function(a,b,c,e){a=+a;b|=0;e||(e=Math.pow(2,8*c-1),ca(this,a,b,c,e-1,-e));e=c-1;var f=1,h=0;for(this[b+e]=a&255;0<=--e&&(f*=256);)0>a&&0===h&&0!==this[b+e+1]&&(h=1),this[b+e]=(a/f>>0)-h&255;return b+c};z.prototype.writeInt8=function(a,b,c){a=+a;b|=0;c||ca(this,a,b,1,127,-128);z.TYPED_ARRAY_SUPPORT||(a=Math.floor(a));0>a&&(a=255+a+1);this[b]=a&255;return b+1};z.prototype.writeInt16LE=function(a,b,c){a=+a;b|=0;c||ca(this,a,b,2, 32767,-32768);z.TYPED_ARRAY_SUPPORT?(this[b]=a&255,this[b+1]=a>>>8):yc(this,a,b,!0);return b+2};z.prototype.writeInt16BE=function(a,b,c){a=+a;b|=0;c||ca(this,a,b,2,32767,-32768);z.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=a&255):yc(this,a,b,!1);return b+2};z.prototype.writeInt32LE=function(a,b,c){a=+a;b|=0;c||ca(this,a,b,4,2147483647,-2147483648);z.TYPED_ARRAY_SUPPORT?(this[b]=a&255,this[b+1]=a>>>8,this[b+2]=a>>>16,this[b+3]=a>>>24):gc(this,a,b,!0);return b+4};z.prototype.writeInt32BE=function(a, b,c){a=+a;b|=0;c||ca(this,a,b,4,2147483647,-2147483648);0>a&&(a=4294967295+a+1);z.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+2]=a>>>8,this[b+3]=a&255):gc(this,a,b,!1);return b+4};z.prototype.writeFloatLE=function(a,b,c){c||zc(this,a,b,4);xc(this,a,b,!0,23,4);return b+4};z.prototype.writeFloatBE=function(a,b,c){c||zc(this,a,b,4);xc(this,a,b,!1,23,4);return b+4};z.prototype.writeDoubleLE=function(a,b,c){c||zc(this,a,b,8);xc(this,a,b,!0,52,8);return b+8};z.prototype.writeDoubleBE=function(a, b,c){c||zc(this,a,b,8);xc(this,a,b,!1,52,8);return b+8};z.prototype.copy=function(a,b,c,e){c||(c=0);e||0===e||(e=this.length);b>=a.length&&(b=a.length);b||(b=0);0b)throw new RangeError("targetStart out of bounds");if(0>c||c>=this.length)throw new RangeError("sourceStart out of bounds");if(0>e)throw new RangeError("sourceEnd out of bounds");e>this.length&&(e=this.length);a.length-bf||!z.TYPED_ARRAY_SUPPORT)for(e=0;ef&&(a=f)}if(void 0!==e&&"string"!==typeof e)throw new TypeError("encoding must be a string");if("string"===typeof e&&!z.isEncoding(e))throw new TypeError("Unknown encoding: "+ e);}else"number"===typeof a&&(a&=255);if(0>b||this.length>>=0;c=void 0===c?this.length:c>>>0;a||(a=0);if("number"===typeof a)for(e=b;eb&&(c--,b+=1E9));return[c,b]},platform:"browser",release:{},config:{},uptime:function(){return(new Date- ji)/1E3}},bg=vd(function(a,b){function c(a,b){for(var c in a)b[c]=a[c]}function e(a,b,c){return f(a,b,c)}var f=Db.Buffer;f.from&&f.alloc&&f.allocUnsafe&&f.allocUnsafeSlow?a.exports=Db:(c(Db,b),b.Buffer=e);e.prototype=Object.create(f.prototype);c(f,e);e.from=function(a,b,c){if("number"===typeof a)throw new TypeError("Argument must not be a number");return f(a,b,c)};e.alloc=function(a,b,c){if("number"!==typeof a)throw new TypeError("Argument must be a number");a=f(a);void 0!==b?"string"===typeof c? a.fill(b,c):a.fill(b):a.fill(0);return a};e.allocUnsafe=function(a){if("number"!==typeof a)throw new TypeError("Argument must be a number");return f(a)};e.allocUnsafeSlow=function(a){if("number"!==typeof a)throw new TypeError("Argument must be a number");return Db.SlowBuffer(a)}}),li=vd(function(a,b){function c(){throw Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11");}function e(a,b){if("number"!==typeof a||a!==a)throw new TypeError("offset must be a number"); if(a>v||0>a)throw new TypeError("offset must be a uint32");if(a>t||a>b)throw new RangeError("offset out of range");}function f(a,b,c){if("number"!==typeof a||a!==a)throw new TypeError("size must be a number");if(a>v||0>a)throw new TypeError("size must be a uint32");if(a+b>c||a>t)throw new RangeError("buffer too small");}function h(a,b,c,h){if(!(q.isBuffer(a)||a instanceof Ub.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"===typeof b)h=b,b=0,c=a.length; else if("function"===typeof c)h=c,c=a.length-b;else if("function"!==typeof h)throw new TypeError('"cb" argument must be a function');e(b,a.length);f(c,b,a.length);return g(a,b,c,h)}function g(a,b,c,e){b=new Uint8Array(a.buffer,b,c);p.getRandomValues(b);if(e)Ef(function(){e(null,a)});else return a}function k(a,b,c){"undefined"===typeof b&&(b=0);if(!(q.isBuffer(a)||a instanceof Ub.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');e(b,a.length);void 0===c&&(c=a.length- b);f(c,b,a.length);return g(a,b,c)}var q=bg.Buffer,t=bg.kMaxLength,p=Ub.crypto||Ub.msCrypto,v=Math.pow(2,32)-1;p&&p.getRandomValues?(b.randomFill=h,b.randomFillSync=k):(b.randomFill=c,b.randomFillSync=c)}),mi=vd(function(a){a.exports=li}).randomFillSync,ni=Math.floor(.001*(Date.now()-performance.now())),ob={resolve:function(){for(var a="",b=!1,c,e=arguments.length-1;-1<=e&&!b;e--){if(0<=e)var f=arguments[e];else void 0===c&&(c=ki.cwd()),f=c;ya(f);0!==f.length&&(a=f+"/"+a,b=47===f.charCodeAt(0))}a= Gf(a,!b);return b?0k){if(47===b.charCodeAt(h+t))return b.slice(h+t+1);if(0===t)return b.slice(h+t)}else f>k&&(47===a.charCodeAt(c+t)?q=t:0===t&&(q=0));break}var p=a.charCodeAt(c+t),v=b.charCodeAt(h+t);if(p!==v)break;else 47===p&&(q=t)}f= "";for(t=c+q+1;t<=e;++t)if(t===e||47===a.charCodeAt(t))f=0===f.length?f+"..":f+"/..";if(0=f;--t)if(c=a.charCodeAt(t),47===c){if(!q){g=t+1;break}}else-1===k&&(q=!1,k=t+1),46===c?-1===h?h=t:1!==p&&(p=1):-1!==h&&(p=-1);-1===h||-1===k||0===p||1===p&&h===k-1&&h===g+1?-1!==k&&(b.base=0===g&&e?b.name=a.slice(1,k):b.name=a.slice(g,k)):(0===g&&e?(b.name=a.slice(1,h),b.base=a.slice(1,k)):(b.name=a.slice(g,h),b.base= a.slice(g,k)),b.ext=a.slice(h,k));0b&&(c--,b+=1E9));return[c,b]}),exit:function(a){throw new dg(a);},kill:function(a){throw new pi(a);},randomFillSync:mi, isTTY:function(){return!0},path:oi,fs:null},F,Fb=A(1),Fa=A(2),Gb=A(4),Hb=A(8),ab=A(16),Dd=A(32),pb=A(64),bb=A(128),lc=A(256),Ed=A(512),Fd=A(1024),Gd=A(2048),Hd=A(4096),Ib=A(8192),Vb=A(16384),Id=A(32768),Jd=A(65536),Kd=A(131072),Ld=A(262144),Md=A(524288),Nd=A(1048576),cb=A(2097152),Gc=A(4194304),Hc=A(8388608),Od=A(16777216),Pd=A(33554432),Qd=A(67108864),qb=A(134217728),fg=A(268435456),Ka=Fb|Fa|Gb|Hb|ab|Dd|pb|bb|lc|Ed|Fd|Gd|Hd|Ib|Vb|Id|Jd|Kd|Ld|Md|Nd|cb|Hc|Gc|Od|Qd|Pd|qb|fg,Lf=Fb|Fa|Gb|Hb|ab|Dd|pb| bb|lc|cb|Gc|Hc|qb,Fh=A(0),xd=Hb|ab|bb|Ed|Fd|Gd|Hd|Ib|Vb|Id|Jd|Kd|Ld|Md|Nd|cb|Hc|Od|Qd|Pd|qb,Jf=xd|Lf,Kf=Fa|Hb|pb|cb|qb|fg,Dh=Fa|Hb|pb|cb|qb,Eh=A(0),Ch={E2BIG:1,EACCES:2,EADDRINUSE:3,EADDRNOTAVAIL:4,EAFNOSUPPORT:5,EALREADY:7,EAGAIN:6,EBADF:8,EBADMSG:9,EBUSY:10,ECANCELED:11,ECHILD:12,ECONNABORTED:13,ECONNREFUSED:14,ECONNRESET:15,EDEADLOCK:16,EDESTADDRREQ:17,EDOM:18,EDQUOT:19,EEXIST:20,EFAULT:21,EFBIG:22,EHOSTDOWN:23,EHOSTUNREACH:23,EIDRM:24,EILSEQ:25,EINPROGRESS:26,EINTR:27,EINVAL:28,EIO:29,EISCONN:30, EISDIR:31,ELOOP:32,EMFILE:33,EMLINK:34,EMSGSIZE:35,EMULTIHOP:36,ENAMETOOLONG:37,ENETDOWN:38,ENETRESET:39,ENETUNREACH:40,ENFILE:41,ENOBUFS:42,ENODEV:43,ENOENT:44,ENOEXEC:45,ENOLCK:46,ENOLINK:47,ENOMEM:48,ENOMSG:49,ENOPROTOOPT:50,ENOSPC:51,ENOSYS:52,ENOTCONN:53,ENOTDIR:54,ENOTEMPTY:55,ENOTRECOVERABLE:56,ENOTSOCK:57,ENOTTY:59,ENXIO:60,EOVERFLOW:61,EOWNERDEAD:62,EPERM:63,EPIPE:64,EPROTO:65,EPROTONOSUPPORT:66,EPROTOTYPE:67,ERANGE:68,EROFS:69,ESPIPE:70,ESRCH:71,ESTALE:72,ETIMEDOUT:73,ETXTBSY:74,EXDEV:75}, gg=(F={},F[6]="SIGHUP",F[8]="SIGINT",F[11]="SIGQUIT",F[7]="SIGILL",F[15]="SIGTRAP",F[0]="SIGABRT",F[2]="SIGBUS",F[5]="SIGFPE",F[9]="SIGKILL",F[20]="SIGUSR1",F[12]="SIGSEGV",F[21]="SIGUSR2",F[10]="SIGPIPE",F[1]="SIGALRM",F[14]="SIGTERM",F[3]="SIGCHLD",F[4]="SIGCONT",F[13]="SIGSTOP",F[16]="SIGTSTP",F[17]="SIGTTIN",F[18]="SIGTTOU",F[19]="SIGURG",F[23]="SIGXCPU",F[24]="SIGXFSZ",F[22]="SIGVTALRM",F),qi=Fb|Fa|ab|bb|cb|qb,hg=Fb|pb|ab|bb|cb|qb,wd=function(a){function b(c){var e=a.call(this)||this;e.errno= c;Object.setPrototypeOf(e,b.prototype);return e}qd(b,a);return b}(Error),dg=function(a){function b(c){var e=a.call(this,"WASI Exit error: "+c)||this;e.code=c;Object.setPrototypeOf(e,b.prototype);return e}qd(b,a);return b}(Error),pi=function(a){function b(c){var e=a.call(this,"WASI Kill signal: "+c)||this;e.signal=c;Object.setPrototypeOf(e,b.prototype);return e}qd(b,a);return b}(Error),ig=function(){function a(a){function b(a){switch(a){case 1:return p.hrtime();case 0:return Va(Date.now());case 2:case 3:return p.hrtime()- L;default:return null}}function e(a,b){a=Hf(g,a);if(b!==A(0)&&(a.rights.base&b)===A(0))throw new wd(63);return a}function f(a,b){g.refreshMemory();return Array.from({length:b},function(b,c){c=a+8*c;b=g.view.getUint32(c,!0);c=g.view.getUint32(c+4,!0);return new Uint8Array(g.memory.buffer,b,c)})}var h,g=this,k={};a&&a.preopens?k=a.preopens:a&&a.preopenDirectories&&(k=a.preopenDirectories);var q={};a&&a.env&&(q=a.env);var t=[];a&&a.args&&(t=a.args);var p=eg;a&&a.bindings&&(p=a.bindings);this.view=this.memory= void 0;this.bindings=p;this.FD_MAP=new Map([[0,{real:0,filetype:2,rights:{base:qi,inheriting:A(0)},path:void 0}],[1,{real:1,filetype:2,rights:{base:hg,inheriting:A(0)},path:void 0}],[2,{real:2,filetype:2,rights:{base:hg,inheriting:A(0)},path:void 0}]]);var v=this.bindings.fs,n=this.bindings.path;try{for(var r=ec(Object.entries(k)),u=r.next();!u.done;u=r.next()){var z=uc(u.value,2),H=z[0],F=z[1],I=v.openSync(F,v.constants.O_RDONLY),J=vc(this.FD_MAP.keys()).reverse()[0]+1;this.FD_MAP.set(J,{real:I, filetype:3,rights:{base:xd,inheriting:Jf},fakePath:H,path:F})}}catch(B){var G={error:B}}finally{try{u&&!u.done&&(h=r.return)&&h.call(r)}finally{if(G)throw G.error;}}var L=p.hrtime();this.wasiImport={args_get:function(a,b){g.refreshMemory();var c=a,e=b;t.forEach(function(a){g.view.setUint32(c,e,!0);c+=4;e+=O.from(g.memory.buffer).write(a+"\x00",e)});return 0},args_sizes_get:function(a,b){g.refreshMemory();g.view.setUint32(a,t.length,!0);a=t.reduce(function(a,b){return a+O.byteLength(b)+1},0);g.view.setUint32(b, a,!0);return 0},environ_get:function(a,b){g.refreshMemory();var c=a,e=b;Object.entries(q).forEach(function(a){var b=uc(a,2);a=b[0];b=b[1];g.view.setUint32(c,e,!0);c+=4;e+=O.from(g.memory.buffer).write(a+"="+b+"\x00",e)});return 0},environ_sizes_get:function(a,b){g.refreshMemory();var c=Object.entries(q).map(function(a){a=uc(a,2);return a[0]+"="+a[1]+"\x00"}),e=c.reduce(function(a,b){return a+O.byteLength(b)},0);g.view.setUint32(a,c.length,!0);g.view.setUint32(b,e,!0);return 0},clock_res_get:function(a, b){switch(a){case 1:case 2:case 3:var c=A(1);break;case 0:c=A(1E3)}g.view.setBigUint64(b,c);return 0},clock_time_get:function(a,c,e){g.refreshMemory();a=b(a);if(null===a)return 28;g.view.setBigUint64(e,A(a),!0);return 0},fd_advise:E(function(a){e(a,bb);return 52}),fd_allocate:E(function(a){e(a,lc);return 52}),fd_close:E(function(a){var b=e(a,A(0));v.closeSync(b.real);g.FD_MAP.delete(a);return 0}),fd_datasync:E(function(a){a=e(a,Fb);v.fdatasyncSync(a.real);return 0}),fd_fdstat_get:E(function(a,b){a= e(a,A(0));g.refreshMemory();g.view.setUint8(b,a.filetype);g.view.setUint16(b+2,0,!0);g.view.setUint16(b+4,0,!0);g.view.setBigUint64(b+8,A(a.rights.base),!0);g.view.setBigUint64(b+8+8,A(a.rights.inheriting),!0);return 0}),fd_fdstat_set_flags:E(function(a){e(a,Hb);return 52}),fd_fdstat_set_rights:E(function(a,b,c){a=e(a,A(0));if((a.rights.base|b)>a.rights.base||(a.rights.inheriting|c)>a.rights.inheriting)return 63;a.rights.base=b;a.rights.inheriting=c;return 0}),fd_filestat_get:E(function(a,b){a=e(a, cb);var c=v.fstatSync(a.real);g.refreshMemory();g.view.setBigUint64(b,A(c.dev),!0);b+=8;g.view.setBigUint64(b,A(c.ino),!0);b+=8;g.view.setUint8(b,a.filetype);b+=8;g.view.setBigUint64(b,A(c.nlink),!0);b+=8;g.view.setBigUint64(b,A(c.size),!0);b+=8;g.view.setBigUint64(b,Va(c.atimeMs),!0);b+=8;g.view.setBigUint64(b,Va(c.mtimeMs),!0);g.view.setBigUint64(b+8,Va(c.ctimeMs),!0);return 0}),fd_filestat_set_size:E(function(a,b){a=e(a,Gc);v.ftruncateSync(a.real,Number(b));return 0}),fd_filestat_set_times:E(function(a, c,f,g){a=e(a,Hc);var h=v.fstatSync(a.real),k=h.atime;h=h.mtime;var n=Ja(b(0));if(3===(g&3)||12===(g&12))return 28;1===(g&1)?k=Ja(c):2===(g&2)&&(k=n);4===(g&4)?h=Ja(f):8===(g&8)&&(h=n);v.futimesSync(a.real,new Date(k),new Date(h));return 0}),fd_prestat_get:E(function(a,b){a=e(a,A(0));if(!a.path)return 28;g.refreshMemory();g.view.setUint8(b,0);g.view.setUint32(b+4,O.byteLength(a.fakePath),!0);return 0}),fd_prestat_dir_name:E(function(a,b,c){a=e(a,A(0));if(!a.path)return 28;g.refreshMemory();O.from(g.memory.buffer).write(a.fakePath, b,c,"utf8");return 0}),fd_pwrite:E(function(a,b,c,h,k){var n=e(a,pb|Gb),p=0;f(b,c).forEach(function(a){for(var b=0;bc)break;g.view.setBigUint64(b,A(f+1),!0);b+=8;if(b-p>c)break;var t=v.statSync(n.resolve(a.path,q.name));g.view.setBigUint64(b,A(t.ino),!0);b+=8;if(b-p>c)break;g.view.setUint32(b,r,!0);b+=4;if(b-p>c)break;switch(!0){case t.isBlockDevice():t=1;break;case t.isCharacterDevice():t=2;break;case t.isDirectory():t=3;break;case t.isFIFO():t=6;break;case t.isFile():t=4;break;case t.isSocket():t=6;break;case t.isSymbolicLink():t=7;break;default:t=0}g.view.setUint8(b,t);b+=1;b+=3;if(b+r>=p+c)break;O.from(g.memory.buffer).write(q.name, b);b+=r}g.view.setUint32(h,Math.min(b-p,c),!0);return 0}),fd_renumber:E(function(a,b){e(a,A(0));e(b,A(0));v.closeSync(g.FD_MAP.get(a).real);g.FD_MAP.set(a,g.FD_MAP.get(b));g.FD_MAP.delete(b);return 0}),fd_seek:E(function(a,b,c,f){a=e(a,Gb);g.refreshMemory();switch(c){case 1:a.offset=(a.offset?a.offset:A(0))+A(b);break;case 2:c=v.fstatSync(a.real).size;a.offset=A(c)+A(b);break;case 0:a.offset=A(b)}g.view.setBigUint64(f,a.offset,!0);return 0}),fd_tell:E(function(a,b){a=e(a,Dd);g.refreshMemory();a.offset|| (a.offset=A(0));g.view.setBigUint64(b,a.offset,!0);return 0}),fd_sync:E(function(a){a=e(a,ab);v.fsyncSync(a.real);return 0}),path_create_directory:E(function(a,b,c){a=e(a,Ed);if(!a.path)return 28;g.refreshMemory();b=O.from(g.memory.buffer,b,c).toString();v.mkdirSync(n.resolve(a.path,b));return 0}),path_filestat_get:E(function(a,b,c,f,h){a=e(a,Ld);if(!a.path)return 28;g.refreshMemory();c=O.from(g.memory.buffer,c,f).toString();c=v.statSync(n.resolve(a.path,c));g.view.setBigUint64(h,A(c.dev),!0);h+= 8;g.view.setBigUint64(h,A(c.ino),!0);h+=8;g.view.setUint8(h,If(g,void 0,c).filetype);h+=8;g.view.setBigUint64(h,A(c.nlink),!0);h+=8;g.view.setBigUint64(h,A(c.size),!0);h+=8;g.view.setBigUint64(h,Va(c.atimeMs),!0);h+=8;g.view.setBigUint64(h,Va(c.mtimeMs),!0);g.view.setBigUint64(h+8,Va(c.ctimeMs),!0);return 0}),path_filestat_set_times:E(function(a,c,f,h,k,p,q){a=e(a,Nd);if(!a.path)return 28;g.refreshMemory();var r=v.fstatSync(a.real);c=r.atime;r=r.mtime;var t=Ja(b(0));if(3===(q&3)||12===(q&12))return 28; 1===(q&1)?c=Ja(k):2===(q&2)&&(c=t);4===(q&4)?r=Ja(p):8===(q&8)&&(r=t);f=O.from(g.memory.buffer,f,h).toString();v.utimesSync(n.resolve(a.path,f),new Date(c),new Date(r));return 0}),path_link:E(function(a,b,c,f,h,k,p){a=e(a,Gd);h=e(h,Hd);if(!a.path||!h.path)return 28;g.refreshMemory();c=O.from(g.memory.buffer,c,f).toString();k=O.from(g.memory.buffer,k,p).toString();v.linkSync(n.resolve(a.path,c),n.resolve(h.path,k));return 0}),path_open:E(function(a,b,c,f,h,k,p,q,r){b=e(a,Ib);k=A(k);p=A(p);a=(k&(Fa| Vb))!==A(0);var t=(k&(Fb|pb|lc|Gc))!==A(0);if(t&&a)var u=v.constants.O_RDWR;else a?u=v.constants.O_RDONLY:t&&(u=v.constants.O_WRONLY);a=k|Ib;k|=p;0!==(h&1)&&(u|=v.constants.O_CREAT,a|=Fd);0!==(h&2)&&(u|=v.constants.O_DIRECTORY);0!==(h&4)&&(u|=v.constants.O_EXCL);0!==(h&8)&&(u|=v.constants.O_TRUNC,a|=Md);0!==(q&1)&&(u|=v.constants.O_APPEND);0!==(q&2)&&(u=v.constants.O_DSYNC?u|v.constants.O_DSYNC:u|v.constants.O_SYNC,k|=Fb);0!==(q&4)&&(u|=v.constants.O_NONBLOCK);0!==(q&8)&&(u=v.constants.O_RSYNC?u| v.constants.O_RSYNC:u|v.constants.O_SYNC,k|=ab);0!==(q&16)&&(u|=v.constants.O_SYNC,k|=ab);t&&0===(u&(v.constants.O_APPEND|v.constants.O_TRUNC))&&(k|=Gb);g.refreshMemory();c=O.from(g.memory.buffer,c,f).toString();c=n.resolve(b.path,c);if(n.relative(b.path,c).startsWith(".."))return 76;try{var x=v.realpathSync(c);if(n.relative(b.path,x).startsWith(".."))return 76}catch(C){if("ENOENT"===C.code)x=c;else throw C;}try{var z=v.statSync(x).isDirectory()}catch(C){}u=!t&&z?v.openSync(x,v.constants.O_RDONLY): v.openSync(x,u);z=vc(g.FD_MAP.keys()).reverse()[0]+1;g.FD_MAP.set(z,{real:u,filetype:void 0,rights:{base:a,inheriting:k},path:x});Hf(g,z);g.view.setUint32(r,z,!0);return 0}),path_readlink:E(function(a,b,c,f,h,k){a=e(a,Id);if(!a.path)return 28;g.refreshMemory();b=O.from(g.memory.buffer,b,c).toString();b=n.resolve(a.path,b);b=v.readlinkSync(b);f=O.from(g.memory.buffer).write(b,f,h);g.view.setUint32(k,f,!0);return 0}),path_remove_directory:E(function(a,b,c){a=e(a,Pd);if(!a.path)return 28;g.refreshMemory(); b=O.from(g.memory.buffer,b,c).toString();v.rmdirSync(n.resolve(a.path,b));return 0}),path_rename:E(function(a,b,c,f,h,k){a=e(a,Jd);f=e(f,Kd);if(!a.path||!f.path)return 28;g.refreshMemory();b=O.from(g.memory.buffer,b,c).toString();h=O.from(g.memory.buffer,h,k).toString();v.renameSync(n.resolve(a.path,b),n.resolve(f.path,h));return 0}),path_symlink:E(function(a,b,c,f,h){c=e(c,Od);if(!c.path)return 28;g.refreshMemory();a=O.from(g.memory.buffer,a,b).toString();f=O.from(g.memory.buffer,f,h).toString(); v.symlinkSync(a,n.resolve(c.path,f));return 0}),path_unlink_file:E(function(a,b,c){a=e(a,Qd);if(!a.path)return 28;g.refreshMemory();b=O.from(g.memory.buffer,b,c).toString();v.unlinkSync(n.resolve(a.path,b));return 0}),poll_oneoff:function(a,c,e,f){var h=0,k=0;g.refreshMemory();for(var n=0;nk?r:k);g.view.setBigUint64(c,q,!0);c+=8;g.view.setUint16(c,v,!0);c+=2;g.view.setUint8(c,0);c+=1;c+=5;h+=1;break;case 1:case 2:a+=3;g.view.getUint32(a,!0);a+=4;g.view.setBigUint64(c,q,!0);c+=8;g.view.setUint16(c,52,!0);c+=2;g.view.setUint8(c,r);c+=1;c+=5;h+=1;break;default:return 28}}for(g.view.setUint32(f,h,!0);p.hrtime() "+f);return f}catch(T){throw console.log("Catched error: "+T),T;}}})}a.prototype.refreshMemory=function(){this.view&&0!==this.view.buffer.byteLength||(this.view=new Sb(this.memory.buffer))};a.prototype.setMemory=function(a){this.memory=a};a.prototype.start=function(a){a=a.exports;if(null===a||"object"!==typeof a)throw Error("instance.exports must be an Object. Received "+a+".");var b=a.memory;if(!(b instanceof WebAssembly.Memory))throw Error("instance.exports.memory must be a WebAssembly.Memory. Recceived "+ b+".");this.setMemory(b);a._start&&a._start()};a.prototype.getImportNamespace=function(a){var b,e=null;try{for(var f=ec(WebAssembly.Module.imports(a)),h=f.next();!h.done;h=f.next()){var g=h.value;if("function"===g.kind&&g.module.startsWith("wasi_"))if(!e)e=g.module;else if(e!==g.module)throw Error("Multiple namespaces detected.");}}catch(q){var k={error:q}}finally{try{h&&!h.done&&(b=f.return)&&b.call(f)}finally{if(k)throw k.error;}}return e};a.prototype.getImports=function(a){switch(this.getImportNamespace(a)){case "wasi_unstable":return{wasi_unstable:this.wasiImport}; case "wasi_snapshot_preview1":return{wasi_snapshot_preview1:this.wasiImport};default:throw Error("Can't detect a WASI namespace for the WebAssembly Module");}};a.defaultBindings=eg;return a}(),jg=function(){function a(a){this.options=a}a.prototype.run=function(a){return Y(this,void 0,void 0,function(){return Z(this,function(a){throw Error("run not implemented by the Command subclass");})})};return a}(),ri=function(a){function b(b){var c=a.call(this,b)||this;if(!b.module)throw Error("Did not find a WebAssembly.Module for the WASI Command"); return c}cf(b,a);b.prototype.run=function(a){return Y(this,void 0,void 0,function(){var b,c,h,g;return Z(this,function(e){switch(e.label){case 0:return b={preopens:$a({".":".","/":"/"},this.options.preopens||{}),env:this.options.env,args:this.options.args,bindings:$a($a({},ig.defaultBindings),{fs:a.fs})},c=new ig(b),h=this.options.module,[4,WebAssembly.instantiate(h,$a({},c.getImports(h)))];case 1:return g=e.sent(),c.start(g),[2]}})})};return b}(jg),si=function(a){function b(b){var c=a.call(this, b)||this;if(!b.callback)throw Error("The Command Options provided are not for a Callback Command");c.callback=b.callback;return c}cf(b,a);b.prototype.run=function(a){return Y(this,void 0,void 0,function(){var b;return Z(this,function(c){switch(c.label){case 0:return[4,Promise.resolve(this.callback(this.options,a))];case 1:return b=c.sent(),"string"==typeof b&&a.fs.writeFileSync("/dev/stdout",(new TextEncoder).encode(b+"\n")),[2]}})})};return b}(jg),ti=function(){function a(a,c,e,f,h,g,k,q,t){var b= this;this.stdinPrompt="";this.commandOptions=a;this.wasmFs=new Xf;this.wasmFs.fromJSON(c);this.originalWasmFsJson=c;this.ioDevices=new ei(this.wasmFs);this.ioDeviceWindow=g;this.ioDevices.setWindowSizeCallback(function(){var a=b.ioDevices.getWindowSize();b.ioDeviceWindow.resize(a[0],a[1])});this.ioDevices.setBufferIndexDisplayCallback(function(){var a=b.ioDevices.getFrameBuffer();b.ioDeviceWindow.drawRgbaArrayToFrameBuffer(a)});this.ioDevices.setInputCallback(function(){if(b.sharedIoDeviceInput){b.ioDeviceWindow.getInputBuffer(); Atomics.wait(b.sharedIoDeviceInput,0,-1);var a=b.sharedIoDeviceInput[0];b.sharedIoDeviceInput[0]=-1;if(0<~]))/g,""):"";return a.length};a.prototype.stdinRead=function(a,c,e,f){if(0!==this.readStdinCounter% 2)return this.readStdinCounter++,0;if(this.pipedStdin)c=this.pipedStdin,this.pipedStdin="",this.readStdinCounter++;else if(this.sharedStdin&&this.startStdinReadCallback){this.startStdinReadCallback();Atomics.wait(this.sharedStdin,0,-1);c=this.sharedStdin[0];this.sharedStdin[0]=-1;e=new Uint8Array(c);for(f=0;f\n html, body {\n width: 100%;\n height: 100%;\n }\n\n body {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n margin: 0px;\n margin-left: auto;\n margin-right: auto;\n }\n\n #io-device-framebuffer {\n\n width: 100%;\n height: auto;\n\n /* Will Keep pixel art looking good */\n image-rendering: pixelated;\n image-rendering: -moz-crisp-edges;\n image-rendering: crisp-edges;\n }\n \n \n ';this.popupWindow.document.head.innerHTML="\n Wasmer Experimental Framebuffer\n ";this.popupCanvas=this.popupWindow.document.querySelector("#io-device-framebuffer");this.popupCanvasContext=this.popupCanvas.getContext("2d");this.popupImageData=this.popupCanvasContext.getImageData(0,0,a,c);this.popupWindow.document.addEventListener("keydown",this._eventListenerKeydown.bind(this));this.popupWindow.document.addEventListener("keyup",this._eventListenerKeyup.bind(this)); this.popupWindow.document.addEventListener("mousemove",this._eventListenerMousemove.bind(this));this.popupWindow.document.addEventListener("click",this._eventListenerClick.bind(this))};a.prototype._append32BitIntToByteArray=function(a,c){for(var b=0;4>b;b++){var f=a;f&=255<<8*b;f>>=8*b;c.push(f)}};a.prototype._eventListenerKeydown=function(a){a.preventDefault();this.popupKeyCodes.includes(a.keyCode)||this.popupKeyCodes.push(a.keyCode)};a.prototype._eventListenerKeyup=function(a){a.preventDefault(); a=this.popupKeyCodes.indexOf(a.keyCode);-1=e&&a.x<=f&&(k=a.x-e);a.y>=h&&a.y<=g&&(q=a.y-h);if(void 0!==k&&void 0!==q)return{x:this.popupCanvas.width/b.width*k,y:this.popupCanvas.height/b.height*q}}};return a}(),ui=function(a){return a&&("[object Function]"===Object.prototype.toString.call(a)||"function"===typeof a||a instanceof Function)},Ic,vi=function(){function a(a,c,e,f,h){this.wasmTerminalConfig=a;this.commandString=c;this.commandStartReadCallback= e;this.commandEndCallback=f;h&&(this.wasmTty=h);this.commandOptionsForProcessesToRun=[];this.spawnedProcessObjects=[];this.spawnedProcesses=0;this.pipedStdinDataForNextProcess=new Uint8Array;this.isRunning=!1;this.supportsSharedArrayBuffer=this.wasmTerminalConfig.processWorkerUrl&&window.SharedArrayBuffer&&window.Atomics}a.prototype.runCommand=function(){return Y(this,void 0,void 0,function(){var a,c,e;return Z(this,function(b){switch(b.label){case 0:a=ag(this.commandString),b.label=1;case 1:b.trys.push([1, 3,,4]);if(1this.spawnedProcesses&&2>this.spawnedProcessObjects.length&&aa+1&&(e=void 0!==this.commandOptionsForProcessesToRun[a+1].callback),this.supportsSharedArrayBuffer&&!e&&this._tryToSpawnProcess(a+1),[2]}})})};a.prototype._spawnProcessAsWorker=function(a){return Y(this,void 0,void 0,function(){var b,e,f,h,g,k,q,t,p,u;return Z(this,function(c){switch(c.label){case 0:if(!this.wasmTerminalConfig.processWorkerUrl)throw Error("Terminal Config missing the Process Worker URL");b=this.wasmTerminalConfig.processWorkerUrl; b="data:application/javascript;base64,LyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UKICAgIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCiAgICBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCiAgICBNRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULgoKICAgIFNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwogICAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KJ3VzZSBzdHJpY3QnOyhmdW5jdGlvbigpe2Z1bmN0aW9uIG1jKGMsYT1zZWxmKXthLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZCl7aWYoZCYmZC5kYXRhKXt2YXIge2lkOmYsdHlwZTpnLHBhdGg6aH09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZC5kYXRhKSxrPShkLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKEZhKTt0cnl7bGV0IGE9aC5zbGljZSgwLC0xKS5yZWR1Y2UoKGEsYyk9PmFbY10sYyksZT1oLnJlZHVjZSgoYSxjKT0+YVtjXSxjKTtzd2l0Y2goZyl7Y2FzZSAwOnZhciB0PWU7YnJlYWs7Y2FzZSAxOmFbaC5zbGljZSgtMSlbMF1dPUZhKGQuZGF0YS52YWx1ZSk7dD0hMDticmVhaztjYXNlIDI6dD1lLmFwcGx5KGEsayk7YnJlYWs7Y2FzZSAzOntsZXQgYT1uZXcgZSguLi5rKTt0PU9iamVjdC5hc3NpZ24oYSx7W3ZkXTohMH0pfWJyZWFrO2Nhc2UgNDp7bGV0IHtwb3J0MTphLHBvcnQyOmR9PW5ldyBNZXNzYWdlQ2hhbm5lbDttYyhjLGQpO3Q9CkNmKGEsW2FdKX1icmVhaztjYXNlIDU6dD12b2lkIDB9fWNhdGNoKHEpe3Q9cSxuYy5hZGQocSl9UHJvbWlzZS5yZXNvbHZlKHQpLmNhdGNoKGE9PntuYy5hZGQoYSk7cmV0dXJuIGF9KS50aGVuKGM9PntsZXQgW2QsaF09b2MoYyk7YS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZCkse2lkOmZ9KSxoKTs1PT09ZyYmKGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksIk1lc3NhZ2VQb3J0Ij09PWEuY29uc3RydWN0b3IubmFtZSYmYS5jbG9zZSgpKX0pfX0pO2Euc3RhcnQmJmEuc3RhcnQoKX1mdW5jdGlvbiBEYihjKXtpZihjKXRocm93IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKTt9ZnVuY3Rpb24gcGMoYyxhPVtdLGI9ZnVuY3Rpb24oKXt9KXtsZXQgZD0hMSxlPW5ldyBQcm94eShiLHtnZXQoYixnKXtEYihkKTtpZihnPT09RGYpcmV0dXJuKCk9PlRhKGMse3R5cGU6NSxwYXRoOmEubWFwKGE9PgphLnRvU3RyaW5nKCkpfSkudGhlbigoKT0+eyJNZXNzYWdlUG9ydCI9PT1jLmNvbnN0cnVjdG9yLm5hbWUmJmMuY2xvc2UoKTtkPSEwfSk7aWYoInRoZW4iPT09Zyl7aWYoMD09PWEubGVuZ3RoKXJldHVybnt0aGVuOigpPT5lfTtiPVRhKGMse3R5cGU6MCxwYXRoOmEubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKEZhKTtyZXR1cm4gYi50aGVuLmJpbmQoYil9cmV0dXJuIHBjKGMsWy4uLmEsZ10pfSxzZXQoYixlLGgpe0RiKGQpO2NvbnN0IFtmLGddPW9jKGgpO3JldHVybiBUYShjLHt0eXBlOjEscGF0aDpbLi4uYSxlXS5tYXAoYT0+YS50b1N0cmluZygpKSx2YWx1ZTpmfSxnKS50aGVuKEZhKX0sYXBwbHkoYixlLGgpe0RiKGQpO2I9YVthLmxlbmd0aC0xXTtpZihiPT09RWYpcmV0dXJuIFRhKGMse3R5cGU6NH0pLnRoZW4oRmEpO2lmKCJiaW5kIj09PWIpcmV0dXJuIHBjKGMsYS5zbGljZSgwLC0xKSk7Y29uc3QgW2YsZ109d2QoaCk7cmV0dXJuIFRhKGMse3R5cGU6MixwYXRoOmEubWFwKGE9PgphLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpmfSxnKS50aGVuKEZhKX0sY29uc3RydWN0KGIsZSl7RGIoZCk7Y29uc3QgW2YsZ109d2QoZSk7cmV0dXJuIFRhKGMse3R5cGU6MyxwYXRoOmEubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OmZ9LGcpLnRoZW4oRmEpfX0pO3JldHVybiBlfWZ1bmN0aW9uIHdkKGMpe2M9Yy5tYXAob2MpO3JldHVybltjLm1hcChhPT5hWzBdKSxBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGMubWFwKGE9PmFbMV0pKV19ZnVuY3Rpb24gQ2YoYyxhKXt4ZC5zZXQoYyxhKTtyZXR1cm4gY31mdW5jdGlvbiBvYyhjKXtmb3IobGV0IFthLGJdb2YgeWQpaWYoYi5jYW5IYW5kbGUoYykpe2xldCBbZCxlXT1iLnNlcmlhbGl6ZShjKTtyZXR1cm5be3R5cGU6MyxuYW1lOmEsdmFsdWU6ZH0sZV19cmV0dXJuW3t0eXBlOjAsdmFsdWU6Y30seGQuZ2V0KGMpfHxbXV19ZnVuY3Rpb24gRmEoYyl7c3dpdGNoKGMudHlwZSl7Y2FzZSAzOnJldHVybiB5ZC5nZXQoYy5uYW1lKS5kZXNlcmlhbGl6ZShjLnZhbHVlKTsKY2FzZSAwOnJldHVybiBjLnZhbHVlfX1mdW5jdGlvbiBUYShjLGEsYil7cmV0dXJuIG5ldyBQcm9taXNlKGQ9PntsZXQgZT1GZigpO2MuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaChhKXthLmRhdGEmJmEuZGF0YS5pZCYmYS5kYXRhLmlkPT09ZSYmKGMucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsaCksZChhLmRhdGEpKX0pO2Muc3RhcnQmJmMuc3RhcnQoKTtjLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmV9LGEpLGIpfSl9ZnVuY3Rpb24gRmYoKXtyZXR1cm4gQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gemQoYyxhKXtmdW5jdGlvbiBiKCl7dGhpcy5jb25zdHJ1Y3Rvcj1jfXFjKGMsYSk7Yy5wcm90b3R5cGU9bnVsbD09PWE/T2JqZWN0LmNyZWF0ZShhKTooYi5wcm90b3R5cGU9YS5wcm90b3R5cGUsCm5ldyBiKX1mdW5jdGlvbiBFYihjLGEsYixkKXtyZXR1cm4gbmV3IChifHwoYj1Qcm9taXNlKSkoZnVuY3Rpb24oZSxmKXtmdW5jdGlvbiBnKGEpe3RyeXtrKGQubmV4dChhKSl9Y2F0Y2gocSl7ZihxKX19ZnVuY3Rpb24gaChhKXt0cnl7ayhkWyJ0aHJvdyJdKGEpKX1jYXRjaChxKXtmKHEpfX1mdW5jdGlvbiBrKGEpe2EuZG9uZT9lKGEudmFsdWUpOihuZXcgYihmdW5jdGlvbihjKXtjKGEudmFsdWUpfSkpLnRoZW4oZyxoKX1rKChkPWQuYXBwbHkoYyxhfHxbXSkpLm5leHQoKSl9KX1mdW5jdGlvbiBGYihjLGEpe2Z1bmN0aW9uIGIoYSl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBkKFthLGNdKX19ZnVuY3Rpb24gZChiKXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2U7KXRyeXtpZihmPTEsZyYmKGg9YlswXSYyP2dbInJldHVybiJdOmJbMF0/Z1sidGhyb3ciXXx8KChoPWdbInJldHVybiJdKSYmaC5jYWxsKGcpLAowKTpnLm5leHQpJiYhKGg9aC5jYWxsKGcsYlsxXSkpLmRvbmUpcmV0dXJuIGg7aWYoZz0wLGgpYj1bYlswXSYyLGgudmFsdWVdO3N3aXRjaChiWzBdKXtjYXNlIDA6Y2FzZSAxOmg9YjticmVhaztjYXNlIDQ6cmV0dXJuIGUubGFiZWwrKyx7dmFsdWU6YlsxXSxkb25lOiExfTtjYXNlIDU6ZS5sYWJlbCsrO2c9YlsxXTtiPVswXTtjb250aW51ZTtjYXNlIDc6Yj1lLm9wcy5wb3AoKTtlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKGg9ZS50cnlzLGg9MDxoLmxlbmd0aCYmaFtoLmxlbmd0aC0xXSkmJig2PT09YlswXXx8Mj09PWJbMF0pKXtlPTA7Y29udGludWV9aWYoMz09PWJbMF0mJighaHx8YlsxXT5oWzBdJiZiWzFdPGhbM10pKWUubGFiZWw9YlsxXTtlbHNlIGlmKDY9PT1iWzBdJiZlLmxhYmVsPGhbMV0pZS5sYWJlbD1oWzFdLGg9YjtlbHNlIGlmKGgmJmUubGFiZWw8aFsyXSllLmxhYmVsPWhbMl0sZS5vcHMucHVzaChiKTtlbHNle2hbMl0mJmUub3BzLnBvcCgpO2UudHJ5cy5wb3AoKTsKY29udGludWV9fWI9YS5jYWxsKGMsZSl9Y2F0Y2gocSl7Yj1bNixxXSxnPTB9ZmluYWxseXtmPWg9MH1pZihiWzBdJjUpdGhyb3cgYlsxXTtyZXR1cm57dmFsdWU6YlswXT9iWzFdOnZvaWQgMCxkb25lOiEwfX12YXIgZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoaFswXSYxKXRocm93IGhbMV07cmV0dXJuIGhbMV19LHRyeXM6W10sb3BzOltdfSxmLGcsaCxrO3JldHVybiBrPXtuZXh0OmIoMCksInRocm93IjpiKDEpLCJyZXR1cm4iOmIoMil9LCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYoa1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxrfWZ1bmN0aW9uIEdmKGMsYSxiLGQpe3JldHVybiBuZXcgKGJ8fChiPVByb21pc2UpKShmdW5jdGlvbihlLGYpe2Z1bmN0aW9uIGcoYSl7dHJ5e2soZC5uZXh0KGEpKX1jYXRjaChxKXtmKHEpfX1mdW5jdGlvbiBoKGEpe3RyeXtrKGRbInRocm93Il0oYSkpfWNhdGNoKHEpe2YocSl9fWZ1bmN0aW9uIGsoYSl7YS5kb25lPwplKGEudmFsdWUpOihuZXcgYihmdW5jdGlvbihjKXtjKGEudmFsdWUpfSkpLnRoZW4oZyxoKX1rKChkPWQuYXBwbHkoYyxhfHxbXSkpLm5leHQoKSl9KX1mdW5jdGlvbiBIZihjLGEpe2Z1bmN0aW9uIGIoYSl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBkKFthLGNdKX19ZnVuY3Rpb24gZChiKXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2U7KXRyeXtpZihmPTEsZyYmKGg9YlswXSYyP2dbInJldHVybiJdOmJbMF0/Z1sidGhyb3ciXXx8KChoPWdbInJldHVybiJdKSYmaC5jYWxsKGcpLDApOmcubmV4dCkmJiEoaD1oLmNhbGwoZyxiWzFdKSkuZG9uZSlyZXR1cm4gaDtpZihnPTAsaCliPVtiWzBdJjIsaC52YWx1ZV07c3dpdGNoKGJbMF0pe2Nhc2UgMDpjYXNlIDE6aD1iO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5sYWJlbCsrLHt2YWx1ZTpiWzFdLGRvbmU6ITF9O2Nhc2UgNTplLmxhYmVsKys7Zz1iWzFdO2I9WzBdOwpjb250aW51ZTtjYXNlIDc6Yj1lLm9wcy5wb3AoKTtlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKGg9ZS50cnlzLGg9MDxoLmxlbmd0aCYmaFtoLmxlbmd0aC0xXSkmJig2PT09YlswXXx8Mj09PWJbMF0pKXtlPTA7Y29udGludWV9aWYoMz09PWJbMF0mJighaHx8YlsxXT5oWzBdJiZiWzFdPGhbM10pKWUubGFiZWw9YlsxXTtlbHNlIGlmKDY9PT1iWzBdJiZlLmxhYmVsPGhbMV0pZS5sYWJlbD1oWzFdLGg9YjtlbHNlIGlmKGgmJmUubGFiZWw8aFsyXSllLmxhYmVsPWhbMl0sZS5vcHMucHVzaChiKTtlbHNle2hbMl0mJmUub3BzLnBvcCgpO2UudHJ5cy5wb3AoKTtjb250aW51ZX19Yj1hLmNhbGwoYyxlKX1jYXRjaChxKXtiPVs2LHFdLGc9MH1maW5hbGx5e2Y9aD0wfWlmKGJbMF0mNSl0aHJvdyBiWzFdO3JldHVybnt2YWx1ZTpiWzBdP2JbMV06dm9pZCAwLGRvbmU6ITB9fXZhciBlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihoWzBdJjEpdGhyb3cgaFsxXTtyZXR1cm4gaFsxXX0sCnRyeXM6W10sb3BzOltdfSxmLGcsaCxrO3JldHVybiBrPXtuZXh0OmIoMCksInRocm93IjpiKDEpLCJyZXR1cm4iOmIoMil9LCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYoa1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxrfWZ1bmN0aW9uIHJjKGMpe3ZhciBhPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZjW1N5bWJvbC5pdGVyYXRvcl0sYj0wO3JldHVybiBhP2EuY2FsbChjKTp7bmV4dDpmdW5jdGlvbigpe2MmJmI+PWMubGVuZ3RoJiYoYz12b2lkIDApO3JldHVybnt2YWx1ZTpjJiZjW2IrK10sZG9uZTohY319fX1mdW5jdGlvbiBJZihjLGEpe3ZhciBiPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZjW1N5bWJvbC5pdGVyYXRvcl07aWYoIWIpcmV0dXJuIGM7Yz1iLmNhbGwoYyk7dmFyIGQsZT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09YXx8MDxhLS0pJiYhKGQ9Yy5uZXh0KCkpLmRvbmU7KWUucHVzaChkLnZhbHVlKX1jYXRjaChnKXt2YXIgZj0Ke2Vycm9yOmd9fWZpbmFsbHl7dHJ5e2QmJiFkLmRvbmUmJihiPWNbInJldHVybiJdKSYmYi5jYWxsKGMpfWZpbmFsbHl7aWYoZil0aHJvdyBmLmVycm9yO319cmV0dXJuIGV9ZnVuY3Rpb24gSmYoKXtmb3IodmFyIGM9W10sYT0wO2E8YXJndW1lbnRzLmxlbmd0aDthKyspYz1jLmNvbmNhdChJZihhcmd1bWVudHNbYV0pKTtyZXR1cm4gY31mdW5jdGlvbiBRKGMpe3JldHVybiBjJiZjLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLCJkZWZhdWx0Iik/Y1siZGVmYXVsdCJdOmN9ZnVuY3Rpb24gSyhjLGEpe3JldHVybiBhPXtleHBvcnRzOnt9fSxjKGEsYS5leHBvcnRzKSxhLmV4cG9ydHN9ZnVuY3Rpb24gQWQoKXtzYz0hMDtmb3IodmFyIGM9MDs2ND5jOysrYylSW2NdPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIltjXSxIWyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5jaGFyQ29kZUF0KGMpXT0KYztIWzQ1XT02MjtIWzk1XT02M31mdW5jdGlvbiBLZihjLGEsYil7Zm9yKHZhciBkPVtdLGU9YTtlPGI7ZSs9MylhPShjW2VdPDwxNikrKGNbZSsxXTw8OCkrY1tlKzJdLGQucHVzaChSW2E+PjE4JjYzXStSW2E+PjEyJjYzXStSW2E+PjYmNjNdK1JbYSY2M10pO3JldHVybiBkLmpvaW4oIiIpfWZ1bmN0aW9uIEJkKGMpe3NjfHxBZCgpO2Zvcih2YXIgYT1jLmxlbmd0aCxiPWElMyxkPSIiLGU9W10sZj0wLGc9YS1iO2Y8ZztmKz0xNjM4MyllLnB1c2goS2YoYyxmLGYrMTYzODM+Zz9nOmYrMTYzODMpKTsxPT09Yj8oYz1jW2EtMV0sZCs9UltjPj4yXSxkKz1SW2M8PDQmNjNdLGQrPSI9PSIpOjI9PT1iJiYoYz0oY1thLTJdPDw4KStjW2EtMV0sZCs9UltjPj4xMF0sZCs9UltjPj40JjYzXSxkKz1SW2M8PDImNjNdLGQrPSI9Iik7ZS5wdXNoKGQpO3JldHVybiBlLmpvaW4oIiIpfWZ1bmN0aW9uIEdiKGMsYSxiLGQsZSl7dmFyIGY9OCplLWQtMSxnPSgxPDxmKS0xLGg9Zz4+MSxrPS03O2U9CmI/ZS0xOjA7dmFyIHQ9Yj8tMToxLHE9Y1thK2VdO2UrPXQ7Yj1xJigxPDwtayktMTtxPj49LWs7Zm9yKGsrPWY7MDxrO2I9MjU2KmIrY1thK2VdLGUrPXQsay09OCk7Zj1iJigxPDwtayktMTtiPj49LWs7Zm9yKGsrPWQ7MDxrO2Y9MjU2KmYrY1thK2VdLGUrPXQsay09OCk7aWYoMD09PWIpYj0xLWg7ZWxzZXtpZihiPT09ZylyZXR1cm4gZj9OYU46SW5maW5pdHkqKHE/LTE6MSk7Zis9TWF0aC5wb3coMixkKTtiLT1ofXJldHVybihxPy0xOjEpKmYqTWF0aC5wb3coMixiLWQpfWZ1bmN0aW9uIEhiKGMsYSxiLGQsZSxmKXt2YXIgZyxoPTgqZi1lLTEsaz0oMTw8aCktMSx0PWs+PjEscT0yMz09PWU/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowO2Y9ZD8wOmYtMTt2YXIgQT1kPzE6LTEscj0wPmF8fDA9PT1hJiYwPjEvYT8xOjA7YT1NYXRoLmFicyhhKTtmb3IoaXNOYU4oYSl8fEluZmluaXR5PT09YT8oYT1pc05hTihhKT8xOjAsZD1rKTooZD1NYXRoLmZsb29yKE1hdGgubG9nKGEpLwpNYXRoLkxOMiksMT5hKihnPU1hdGgucG93KDIsLWQpKSYmKGQtLSxnKj0yKSxhPTE8PWQrdD9hK3EvZzphK3EqTWF0aC5wb3coMiwxLXQpLDI8PWEqZyYmKGQrKyxnLz0yKSxkK3Q+PWs/KGE9MCxkPWspOjE8PWQrdD8oYT0oYSpnLTEpKk1hdGgucG93KDIsZSksZCs9dCk6KGE9YSpNYXRoLnBvdygyLHQtMSkqTWF0aC5wb3coMixlKSxkPTApKTs4PD1lO2NbYitmXT1hJjI1NSxmKz1BLGEvPTI1NixlLT04KTtkPWQ8PGV8YTtmb3IoaCs9ZTswPGg7Y1tiK2ZdPWQmMjU1LGYrPUEsZC89MjU2LGgtPTgpO2NbYitmLUFdfD0xMjgqcn1mdW5jdGlvbiBqYShjLGEpe2lmKChsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzKTxhKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO2wuVFlQRURfQVJSQVlfU1VQUE9SVD8oYz1uZXcgVWludDhBcnJheShhKSxjLl9fcHJvdG9fXz1sLnByb3RvdHlwZSk6KG51bGw9PT1jJiYoYz0KbmV3IGwoYSkpLGMubGVuZ3RoPWEpO3JldHVybiBjfWZ1bmN0aW9uIGwoYyxhLGIpe2lmKCEobC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgbCkpcmV0dXJuIG5ldyBsKGMsYSxiKTtpZigibnVtYmVyIj09PXR5cGVvZiBjKXtpZigic3RyaW5nIj09PXR5cGVvZiBhKXRocm93IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiB0Yyh0aGlzLGMpfXJldHVybiBDZCh0aGlzLGMsYSxiKX1mdW5jdGlvbiBDZChjLGEsYixkKXtpZigibnVtYmVyIj09PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmYSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXthLmJ5dGVMZW5ndGg7aWYoMD5ifHxhLmJ5dGVMZW5ndGg8Yil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpOwppZihhLmJ5dGVMZW5ndGg8YisoZHx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTthPXZvaWQgMD09PWImJnZvaWQgMD09PWQ/bmV3IFVpbnQ4QXJyYXkoYSk6dm9pZCAwPT09ZD9uZXcgVWludDhBcnJheShhLGIpOm5ldyBVaW50OEFycmF5KGEsYixkKTtsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGM9YSxjLl9fcHJvdG9fXz1sLnByb3RvdHlwZSk6Yz11YyhjLGEpO3JldHVybiBjfWlmKCJzdHJpbmciPT09dHlwZW9mIGEpe2Q9YztjPWI7aWYoInN0cmluZyIhPT10eXBlb2YgY3x8IiI9PT1jKWM9InV0ZjgiO2lmKCFsLmlzRW5jb2RpbmcoYykpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7Yj1EZChhLGMpfDA7ZD1qYShkLGIpO2E9ZC53cml0ZShhLGMpO2EhPT1iJiYoZD1kLnNsaWNlKDAsYSkpO3JldHVybiBkfXJldHVybiBMZihjLGEpfWZ1bmN0aW9uIEVkKGMpe2lmKCJudW1iZXIiIT09CnR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoMD5jKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKTt9ZnVuY3Rpb24gdGMoYyxhKXtFZChhKTtjPWphKGMsMD5hPzA6dmMoYSl8MCk7aWYoIWwuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIGI9MDtiPGE7KytiKWNbYl09MDtyZXR1cm4gY31mdW5jdGlvbiB1YyhjLGEpe3ZhciBiPTA+YS5sZW5ndGg/MDp2YyhhLmxlbmd0aCl8MDtjPWphKGMsYik7Zm9yKHZhciBkPTA7ZDxiO2QrPTEpY1tkXT1hW2RdJjI1NTtyZXR1cm4gY31mdW5jdGlvbiBMZihjLGEpe2lmKFcoYSkpe3ZhciBiPXZjKGEubGVuZ3RoKXwwO2M9amEoYyxiKTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGM7YS5jb3B5KGMsMCwwLGIpO3JldHVybiBjfWlmKGEpe2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZhLmJ1ZmZlciBpbnN0YW5jZW9mCkFycmF5QnVmZmVyfHwibGVuZ3RoImluIGEpcmV0dXJuKGI9Im51bWJlciIhPT10eXBlb2YgYS5sZW5ndGgpfHwoYj1hLmxlbmd0aCxiPWIhPT1iKSxiP2phKGMsMCk6dWMoYyxhKTtpZigiQnVmZmVyIj09PWEudHlwZSYmRmQoYS5kYXRhKSlyZXR1cm4gdWMoYyxhLmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKTt9ZnVuY3Rpb24gdmMoYyl7aWYoYz49KGwuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjMpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IisobC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyMykudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gY3wwfWZ1bmN0aW9uIFcoYyl7cmV0dXJuIShudWxsPT0KY3x8IWMuX2lzQnVmZmVyKX1mdW5jdGlvbiBEZChjLGEpe2lmKFcoYykpcmV0dXJuIGMubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhjKXx8YyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gYy5ieXRlTGVuZ3RoOyJzdHJpbmciIT09dHlwZW9mIGMmJihjPSIiK2MpO3ZhciBiPWMubGVuZ3RoO2lmKDA9PT1iKXJldHVybiAwO2Zvcih2YXIgZD0hMTs7KXN3aXRjaChhKXtjYXNlICJhc2NpaSI6Y2FzZSAibGF0aW4xIjpjYXNlICJiaW5hcnkiOnJldHVybiBiO2Nhc2UgInV0ZjgiOmNhc2UgInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gSWIoYykubGVuZ3RoO2Nhc2UgInVjczIiOmNhc2UgInVjcy0yIjpjYXNlICJ1dGYxNmxlIjpjYXNlICJ1dGYtMTZsZSI6cmV0dXJuIDIqYjtjYXNlICJoZXgiOnJldHVybiBiPj4+MTtjYXNlICJiYXNlNjQiOnJldHVybiBHZChjKS5sZW5ndGg7CmRlZmF1bHQ6aWYoZClyZXR1cm4gSWIoYykubGVuZ3RoO2E9KCIiK2EpLnRvTG93ZXJDYXNlKCk7ZD0hMH19ZnVuY3Rpb24gTWYoYyxhLGIpe3ZhciBkPSExO2lmKHZvaWQgMD09PWF8fDA+YSlhPTA7aWYoYT50aGlzLmxlbmd0aClyZXR1cm4iIjtpZih2b2lkIDA9PT1ifHxiPnRoaXMubGVuZ3RoKWI9dGhpcy5sZW5ndGg7aWYoMD49YilyZXR1cm4iIjtiPj4+PTA7YT4+Pj0wO2lmKGI8PWEpcmV0dXJuIiI7Zm9yKGN8fChjPSJ1dGY4Iik7Oylzd2l0Y2goYyl7Y2FzZSAiaGV4IjpjPWE7YT1iO2I9dGhpcy5sZW5ndGg7aWYoIWN8fDA+YyljPTA7aWYoIWF8fDA+YXx8YT5iKWE9YjtkPSIiO2ZvcihiPWM7YjxhOysrYiljPWQsZD10aGlzW2JdLGQ9MTY+ZD8iMCIrZC50b1N0cmluZygxNik6ZC50b1N0cmluZygxNiksZD1jK2Q7cmV0dXJuIGQ7Y2FzZSAidXRmOCI6Y2FzZSAidXRmLTgiOnJldHVybiBIZCh0aGlzLGEsYik7Y2FzZSAiYXNjaWkiOmM9IiI7Zm9yKGI9TWF0aC5taW4odGhpcy5sZW5ndGgsCmIpO2E8YjsrK2EpYys9U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzW2FdJjEyNyk7cmV0dXJuIGM7Y2FzZSAibGF0aW4xIjpjYXNlICJiaW5hcnkiOmM9IiI7Zm9yKGI9TWF0aC5taW4odGhpcy5sZW5ndGgsYik7YTxiOysrYSljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXNbYV0pO3JldHVybiBjO2Nhc2UgImJhc2U2NCI6cmV0dXJuIGE9MD09PWEmJmI9PT10aGlzLmxlbmd0aD9CZCh0aGlzKTpCZCh0aGlzLnNsaWNlKGEsYikpLGE7Y2FzZSAidWNzMiI6Y2FzZSAidWNzLTIiOmNhc2UgInV0ZjE2bGUiOmNhc2UgInV0Zi0xNmxlIjphPXRoaXMuc2xpY2UoYSxiKTtiPSIiO2ZvcihjPTA7YzxhLmxlbmd0aDtjKz0yKWIrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtjXSsyNTYqYVtjKzFdKTtyZXR1cm4gYjtkZWZhdWx0OmlmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitjKTtjPShjKyIiKS50b0xvd2VyQ2FzZSgpO2Q9ITB9fWZ1bmN0aW9uIEdhKGMsYSxiKXt2YXIgZD0KY1thXTtjW2FdPWNbYl07Y1tiXT1kfWZ1bmN0aW9uIElkKGMsYSxiLGQsZSl7aWYoMD09PWMubGVuZ3RoKXJldHVybi0xOyJzdHJpbmciPT09dHlwZW9mIGI/KGQ9YixiPTApOjIxNDc0ODM2NDc8Yj9iPTIxNDc0ODM2NDc6LTIxNDc0ODM2NDg+YiYmKGI9LTIxNDc0ODM2NDgpO2I9K2I7aXNOYU4oYikmJihiPWU/MDpjLmxlbmd0aC0xKTswPmImJihiPWMubGVuZ3RoK2IpO2lmKGI+PWMubGVuZ3RoKXtpZihlKXJldHVybi0xO2I9Yy5sZW5ndGgtMX1lbHNlIGlmKDA+YilpZihlKWI9MDtlbHNlIHJldHVybi0xOyJzdHJpbmciPT09dHlwZW9mIGEmJihhPWwuZnJvbShhLGQpKTtpZihXKGEpKXJldHVybiAwPT09YS5sZW5ndGg/LTE6SmQoYyxhLGIsZCxlKTtpZigibnVtYmVyIj09PXR5cGVvZiBhKXJldHVybiBhJj0yNTUsbC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/ZT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYywKYSxiKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGMsYSxiKTpKZChjLFthXSxiLGQsZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIik7fWZ1bmN0aW9uIEpkKGMsYSxiLGQsZSl7ZnVuY3Rpb24gZihhLGMpe3JldHVybiAxPT09Zz9hW2NdOmEucmVhZFVJbnQxNkJFKGMqZyl9dmFyIGc9MSxoPWMubGVuZ3RoLGs9YS5sZW5ndGg7aWYodm9pZCAwIT09ZCYmKGQ9U3RyaW5nKGQpLnRvTG93ZXJDYXNlKCksInVjczIiPT09ZHx8InVjcy0yIj09PWR8fCJ1dGYxNmxlIj09PWR8fCJ1dGYtMTZsZSI9PT1kKSl7aWYoMj5jLmxlbmd0aHx8Mj5hLmxlbmd0aClyZXR1cm4tMTtnPTI7aC89MjtrLz0yO2IvPTJ9aWYoZSlmb3IoZD0tMTtiPGg7YisrKWlmKGYoYyxiKT09PWYoYSwtMT09PWQ/MDpiLWQpKXtpZigtMT09PWQmJihkPWIpLGItZCsxPT09aylyZXR1cm4gZCpnfWVsc2UtMSE9PWQmJihiLT1iLWQpLGQ9Ci0xO2Vsc2UgZm9yKGIraz5oJiYoYj1oLWspOzA8PWI7Yi0tKXtoPSEwO2ZvcihkPTA7ZDxrO2QrKylpZihmKGMsYitkKSE9PWYoYSxkKSl7aD0hMTticmVha31pZihoKXJldHVybiBifXJldHVybi0xfWZ1bmN0aW9uIEhkKGMsYSxiKXtiPU1hdGgubWluKGMubGVuZ3RoLGIpO2Zvcih2YXIgZD1bXTthPGI7KXt2YXIgZT1jW2FdLGY9bnVsbCxnPTIzOTxlPzQ6MjIzPGU/MzoxOTE8ZT8yOjE7aWYoYStnPD1iKXN3aXRjaChnKXtjYXNlIDE6MTI4PmUmJihmPWUpO2JyZWFrO2Nhc2UgMjp2YXIgaD1jW2ErMV07MTI4PT09KGgmMTkyKSYmKGU9KGUmMzEpPDw2fGgmNjMsMTI3PGUmJihmPWUpKTticmVhaztjYXNlIDM6aD1jW2ErMV07dmFyIGs9Y1thKzJdOzEyOD09PShoJjE5MikmJjEyOD09PShrJjE5MikmJihlPShlJjE1KTw8MTJ8KGgmNjMpPDw2fGsmNjMsMjA0NzxlJiYoNTUyOTY+ZXx8NTczNDM8ZSkmJihmPWUpKTticmVhaztjYXNlIDQ6aD1jW2ErMV07az1jW2ErMl07dmFyIHQ9Y1thKwozXTsxMjg9PT0oaCYxOTIpJiYxMjg9PT0oayYxOTIpJiYxMjg9PT0odCYxOTIpJiYoZT0oZSYxNSk8PDE4fChoJjYzKTw8MTJ8KGsmNjMpPDw2fHQmNjMsNjU1MzU8ZSYmMTExNDExMj5lJiYoZj1lKSl9bnVsbD09PWY/KGY9NjU1MzMsZz0xKTo2NTUzNTxmJiYoZi09NjU1MzYsZC5wdXNoKGY+Pj4xMCYxMDIzfDU1Mjk2KSxmPTU2MzIwfGYmMTAyMyk7ZC5wdXNoKGYpO2ErPWd9Yz1kLmxlbmd0aDtpZihjPD1LZClkPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGQpO2Vsc2V7Yj0iIjtmb3IoYT0wO2E8YzspYis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZC5zbGljZShhLGErPUtkKSk7ZD1ifXJldHVybiBkfWZ1bmN0aW9uIEQoYyxhLGIpe2lmKDAhPT1jJTF8fDA+Yyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoYythPmIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKTsKfWZ1bmN0aW9uIFQoYyxhLGIsZCxlLGYpe2lmKCFXKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihhPmV8fGE8Zil0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoYitkPmMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTt9ZnVuY3Rpb24gSmIoYyxhLGIsZCl7MD5hJiYoYT02NTUzNSthKzEpO2Zvcih2YXIgZT0wLGY9TWF0aC5taW4oYy5sZW5ndGgtYiwyKTtlPGY7KytlKWNbYitlXT0oYSYyNTU8PDgqKGQ/ZToxLWUpKT4+PjgqKGQ/ZToxLWUpfWZ1bmN0aW9uIEtiKGMsYSxiLGQpezA+YSYmKGE9NDI5NDk2NzI5NSthKzEpO2Zvcih2YXIgZT0wLGY9TWF0aC5taW4oYy5sZW5ndGgtYiw0KTtlPGY7KytlKWNbYitlXT1hPj4+OCooZD9lOjMtZSkmMjU1fWZ1bmN0aW9uIExiKGMsYSxiLGQpe2lmKGIrCmQ+Yy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKDA+Yil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7fWZ1bmN0aW9uIEliKGMsYSl7YT1hfHxJbmZpbml0eTtmb3IodmFyIGIsZD1jLmxlbmd0aCxlPW51bGwsZj1bXSxnPTA7ZzxkOysrZyl7Yj1jLmNoYXJDb2RlQXQoZyk7aWYoNTUyOTU8YiYmNTczNDQ+Yil7aWYoIWUpe2lmKDU2MzE5PGIpey0xPChhLT0zKSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lbHNlIGlmKGcrMT09PWQpey0xPChhLT0zKSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lPWI7Y29udGludWV9aWYoNTYzMjA+Yil7LTE8KGEtPTMpJiZmLnB1c2goMjM5LDE5MSwxODkpO2U9Yjtjb250aW51ZX1iPShlLTU1Mjk2PDwxMHxiLTU2MzIwKSs2NTUzNn1lbHNlIGUmJi0xPChhLT0zKSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtlPW51bGw7aWYoMTI4PmIpe2lmKDA+LS1hKWJyZWFrOwpmLnB1c2goYil9ZWxzZSBpZigyMDQ4PmIpe2lmKDA+KGEtPTIpKWJyZWFrO2YucHVzaChiPj42fDE5MixiJjYzfDEyOCl9ZWxzZSBpZig2NTUzNj5iKXtpZigwPihhLT0zKSlicmVhaztmLnB1c2goYj4+MTJ8MjI0LGI+PjYmNjN8MTI4LGImNjN8MTI4KX1lbHNlIGlmKDExMTQxMTI+Yil7aWYoMD4oYS09NCkpYnJlYWs7Zi5wdXNoKGI+PjE4fDI0MCxiPj4xMiY2M3wxMjgsYj4+NiY2M3wxMjgsYiY2M3wxMjgpfWVsc2UgdGhyb3cgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO31yZXR1cm4gZn1mdW5jdGlvbiBMZChjKXtmb3IodmFyIGE9W10sYj0wO2I8Yy5sZW5ndGg7KytiKWEucHVzaChjLmNoYXJDb2RlQXQoYikmMjU1KTtyZXR1cm4gYX1mdW5jdGlvbiBHZChjKXtjPShjLnRyaW0/Yy50cmltKCk6Yy5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIikpLnJlcGxhY2UoTmYsIiIpO2lmKDI+Yy5sZW5ndGgpYz0iIjtlbHNlIGZvcig7MCE9PWMubGVuZ3RoJTQ7KWMrPSI9IjtzY3x8QWQoKTsKdmFyIGE9Yy5sZW5ndGg7aWYoMDxhJTQpdGhyb3cgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgYj0iPSI9PT1jW2EtMl0/MjoiPSI9PT1jW2EtMV0/MTowLGQ9bmV3IE9mKDMqYS80LWIpLGU9MDxiP2EtNDphLGY9MDtmb3IoYT0wO2E8ZTthKz00KXt2YXIgZz1IW2MuY2hhckNvZGVBdChhKV08PDE4fEhbYy5jaGFyQ29kZUF0KGErMSldPDwxMnxIW2MuY2hhckNvZGVBdChhKzIpXTw8NnxIW2MuY2hhckNvZGVBdChhKzMpXTtkW2YrK109Zz4+MTYmMjU1O2RbZisrXT1nPj44JjI1NTtkW2YrK109ZyYyNTV9Mj09PWI/KGc9SFtjLmNoYXJDb2RlQXQoYSldPDwyfEhbYy5jaGFyQ29kZUF0KGErMSldPj40LGRbZisrXT1nJjI1NSk6MT09PWImJihnPUhbYy5jaGFyQ29kZUF0KGEpXTw8MTB8SFtjLmNoYXJDb2RlQXQoYSsxKV08PDR8SFtjLmNoYXJDb2RlQXQoYSsyKV0+PjIsZFtmKytdPWc+PjgmMjU1LGRbZisrXT1nJjI1NSk7CnJldHVybiBkfWZ1bmN0aW9uIG5iKGMsYSxiLGQpe2Zvcih2YXIgZT0wO2U8ZCYmIShlK2I+PWEubGVuZ3RofHxlPj1jLmxlbmd0aCk7KytlKWFbZStiXT1jW2VdO3JldHVybiBlfWZ1bmN0aW9uIHBhKGMpe3JldHVybiBudWxsIT1jJiYoISFjLl9pc0J1ZmZlcnx8TWQoYyl8fCJmdW5jdGlvbiI9PT10eXBlb2YgYy5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09PXR5cGVvZiBjLnNsaWNlJiZNZChjLnNsaWNlKDAsMCkpKX1mdW5jdGlvbiBNZChjKXtyZXR1cm4hIWMuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PT10eXBlb2YgYy5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmYy5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihjKX1mdW5jdGlvbiBOZCgpe3Rocm93IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIik7fWZ1bmN0aW9uIE9kKCl7dGhyb3cgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpO31mdW5jdGlvbiBQZChjKXtpZih1YT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoYywKMCk7aWYoKHVhPT09TmR8fCF1YSkmJnNldFRpbWVvdXQpcmV0dXJuIHVhPXNldFRpbWVvdXQsc2V0VGltZW91dChjLDApO3RyeXtyZXR1cm4gdWEoYywwKX1jYXRjaChhKXt0cnl7cmV0dXJuIHVhLmNhbGwobnVsbCxjLDApfWNhdGNoKGIpe3JldHVybiB1YS5jYWxsKHRoaXMsYywwKX19fWZ1bmN0aW9uIFBmKGMpe2lmKHZhPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoYyk7aWYoKHZhPT09T2R8fCF2YSkmJmNsZWFyVGltZW91dClyZXR1cm4gdmE9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChjKTt0cnl7cmV0dXJuIHZhKGMpfWNhdGNoKGEpe3RyeXtyZXR1cm4gdmEuY2FsbChudWxsLGMpfWNhdGNoKGIpe3JldHVybiB2YS5jYWxsKHRoaXMsYyl9fX1mdW5jdGlvbiBRZigpe1VhJiZIYSYmKFVhPSExLEhhLmxlbmd0aD9rYT1IYS5jb25jYXQoa2EpOk1iPS0xLGthLmxlbmd0aCYmUWQoKSl9ZnVuY3Rpb24gUWQoKXtpZighVWEpe3ZhciBjPVBkKFFmKTtVYT0hMDtmb3IodmFyIGE9CmthLmxlbmd0aDthOyl7SGE9a2E7Zm9yKGthPVtdOysrTWI8YTspSGEmJkhhW01iXS5ydW4oKTtNYj0tMTthPWthLmxlbmd0aH1IYT1udWxsO1VhPSExO1BmKGMpfX1mdW5jdGlvbiBYKGMpe3ZhciBhPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgYj0xO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYVtiLTFdPWFyZ3VtZW50c1tiXTtrYS5wdXNoKG5ldyBSZChjLGEpKTsxIT09a2EubGVuZ3RofHxVYXx8UGQoUWQpfWZ1bmN0aW9uIFJkKGMsYSl7dGhpcy5mdW49Yzt0aGlzLmFycmF5PWF9ZnVuY3Rpb24gSWEoKXt9ZnVuY3Rpb24gd2MoYyl7aWYoIUphKGMpKXtmb3IodmFyIGE9W10sYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYS5wdXNoKGFhKGFyZ3VtZW50c1tiXSkpO3JldHVybiBhLmpvaW4oIiAiKX1iPTE7dmFyIGQ9YXJndW1lbnRzLGU9ZC5sZW5ndGg7YT1TdHJpbmcoYykucmVwbGFjZShSZixmdW5jdGlvbihhKXtpZigiJSUiPT09CmEpcmV0dXJuIiUiO2lmKGI+PWUpcmV0dXJuIGE7c3dpdGNoKGEpe2Nhc2UgIiVzIjpyZXR1cm4gU3RyaW5nKGRbYisrXSk7Y2FzZSAiJWQiOnJldHVybiBOdW1iZXIoZFtiKytdKTtjYXNlICIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShkW2IrK10pfWNhdGNoKGgpe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBhfX0pO2Zvcih2YXIgZj1kW2JdO2I8ZTtmPWRbKytiXSlhPW51bGwhPT1mJiZ3YShmKT9hKygiICIrYWEoZikpOmErKCIgIitmKTtyZXR1cm4gYX1mdW5jdGlvbiB4YyhjLGEpe2lmKGxhKEthLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiB4YyhjLGEpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1WYS5ub0RlcHJlY2F0aW9uKXJldHVybiBjO3ZhciBiPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFiKXtpZihWYS50aHJvd0RlcHJlY2F0aW9uKXRocm93IEVycm9yKGEpO1ZhLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShhKToKY29uc29sZS5lcnJvcihhKTtiPSEwfXJldHVybiBjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gU2QoYyl7bGEoeWMpJiYoeWM9VmEuZW52Lk5PREVfREVCVUd8fCIiKTtjPWMudG9VcHBlckNhc2UoKTtOYltjXXx8KChuZXcgUmVnRXhwKCJcXGIiK2MrIlxcYiIsImkiKSkudGVzdCh5Yyk/TmJbY109ZnVuY3Rpb24oKXt2YXIgYT13Yy5hcHBseShudWxsLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIixjLDAsYSl9Ok5iW2NdPWZ1bmN0aW9uKCl7fSk7cmV0dXJuIE5iW2NdfWZ1bmN0aW9uIGFhKGMsYSl7dmFyIGI9e3NlZW46W10sc3R5bGl6ZTpTZn07Mzw9YXJndW1lbnRzLmxlbmd0aCYmKGIuZGVwdGg9YXJndW1lbnRzWzJdKTs0PD1hcmd1bWVudHMubGVuZ3RoJiYoYi5jb2xvcnM9YXJndW1lbnRzWzNdKTt6YyhhKT9iLnNob3dIaWRkZW49YTphJiZUZChiLGEpO2xhKGIuc2hvd0hpZGRlbikmJihiLnNob3dIaWRkZW49ITEpO2xhKGIuZGVwdGgpJiYoYi5kZXB0aD0KMik7bGEoYi5jb2xvcnMpJiYoYi5jb2xvcnM9ITEpO2xhKGIuY3VzdG9tSW5zcGVjdCkmJihiLmN1c3RvbUluc3BlY3Q9ITApO2IuY29sb3JzJiYoYi5zdHlsaXplPVRmKTtyZXR1cm4gT2IoYixjLGIuZGVwdGgpfWZ1bmN0aW9uIFRmKGMsYSl7cmV0dXJuKGE9YWEuc3R5bGVzW2FdKT8iXHUwMDFiWyIrYWEuY29sb3JzW2FdWzBdKyJtIitjKyJcdTAwMWJbIithYS5jb2xvcnNbYV1bMV0rIm0iOmN9ZnVuY3Rpb24gU2YoYyl7cmV0dXJuIGN9ZnVuY3Rpb24gVWYoYyl7dmFyIGE9e307Yy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2FbY109ITB9KTtyZXR1cm4gYX1mdW5jdGlvbiBPYihjLGEsYil7aWYoYy5jdXN0b21JbnNwZWN0JiZhJiZXYShhLmluc3BlY3QpJiZhLmluc3BlY3QhPT1hYSYmKCFhLmNvbnN0cnVjdG9yfHxhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PWEpKXt2YXIgZD1hLmluc3BlY3QoYixjKTtKYShkKXx8KGQ9T2IoYyxkLGIpKTtyZXR1cm4gZH1pZihkPVZmKGMsYSkpcmV0dXJuIGQ7CnZhciBlPU9iamVjdC5rZXlzKGEpLGY9VWYoZSk7Yy5zaG93SGlkZGVuJiYoZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKSk7aWYob2IoYSkmJigwPD1lLmluZGV4T2YoIm1lc3NhZ2UiKXx8MDw9ZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpKSlyZXR1cm4gQWMoYSk7aWYoMD09PWUubGVuZ3RoKXtpZihXYShhKSlyZXR1cm4gYy5zdHlsaXplKCJbRnVuY3Rpb24iKyhhLm5hbWU/IjogIithLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKFhhKGEpKXJldHVybiBjLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpLCJyZWdleHAiKTtpZihwYihhKSlyZXR1cm4gYy5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSksImRhdGUiKTtpZihvYihhKSlyZXR1cm4gQWMoYSl9ZD0iIjt2YXIgZz0hMSxoPVsieyIsIn0iXTtVZChhKSYmKGc9ITAsaD1bIlsiLCJdIl0pO1dhKGEpJiYoZD0iIFtGdW5jdGlvbiIrKGEubmFtZT8iOiAiK2EubmFtZToKIiIpKyJdIik7WGEoYSkmJihkPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkpO3BiKGEpJiYoZD0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChhKSk7b2IoYSkmJihkPSIgIitBYyhhKSk7aWYoMD09PWUubGVuZ3RoJiYoIWd8fDA9PWEubGVuZ3RoKSlyZXR1cm4gaFswXStkK2hbMV07aWYoMD5iKXJldHVybiBYYShhKT9jLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpLCJyZWdleHAiKTpjLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpO2Muc2Vlbi5wdXNoKGEpO2U9Zz9XZihjLGEsYixmLGUpOmUubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBCYyhjLGEsYixmLGQsZyl9KTtjLnNlZW4ucG9wKCk7cmV0dXJuIFhmKGUsZCxoKX1mdW5jdGlvbiBWZihjLGEpe2lmKGxhKGEpKXJldHVybiBjLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKEphKGEpKXJldHVybiBhPSInIitKU09OLnN0cmluZ2lmeShhKS5yZXBsYWNlKC9eInwiJC9nLAoiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIixjLnN0eWxpemUoYSwic3RyaW5nIik7aWYoVmQoYSkpcmV0dXJuIGMuc3R5bGl6ZSgiIithLCJudW1iZXIiKTtpZih6YyhhKSlyZXR1cm4gYy5zdHlsaXplKCIiK2EsImJvb2xlYW4iKTtpZihudWxsPT09YSlyZXR1cm4gYy5zdHlsaXplKCJudWxsIiwibnVsbCIpfWZ1bmN0aW9uIEFjKGMpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSsiXSJ9ZnVuY3Rpb24gV2YoYyxhLGIsZCxlKXtmb3IodmFyIGY9W10sZz0wLGg9YS5sZW5ndGg7ZzxoOysrZylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxTdHJpbmcoZykpP2YucHVzaChCYyhjLGEsYixkLFN0cmluZyhnKSwhMCkpOmYucHVzaCgiIik7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UubWF0Y2goL15cZCskLyl8fGYucHVzaChCYyhjLGEsYixkLGUsITApKX0pO3JldHVybiBmfWZ1bmN0aW9uIEJjKGMsCmEsYixkLGUsZil7dmFyIGcsaDthPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxlKXx8e3ZhbHVlOmFbZV19O2EuZ2V0P2g9YS5zZXQ/Yy5zdHlsaXplKCJbR2V0dGVyL1NldHRlcl0iLCJzcGVjaWFsIik6Yy5zdHlsaXplKCJbR2V0dGVyXSIsInNwZWNpYWwiKTphLnNldCYmKGg9Yy5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSk7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsZSl8fChnPSJbIitlKyJdIik7aHx8KDA+Yy5zZWVuLmluZGV4T2YoYS52YWx1ZSk/KGg9bnVsbD09PWI/T2IoYyxhLnZhbHVlLG51bGwpOk9iKGMsYS52YWx1ZSxiLTEpLC0xPGguaW5kZXhPZigiXG4iKSYmKGg9Zj9oLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4iICAiK2F9KS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK2guc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKGEpe3JldHVybiIgICAiK2F9KS5qb2luKCJcbiIpKSk6aD1jLnN0eWxpemUoIltDaXJjdWxhcl0iLAoic3BlY2lhbCIpKTtpZihsYShnKSl7aWYoZiYmZS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gaDtnPUpTT04uc3RyaW5naWZ5KCIiK2UpO2cubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8oZz1nLnN1YnN0cigxLGcubGVuZ3RoLTIpLGc9Yy5zdHlsaXplKGcsIm5hbWUiKSk6KGc9Zy5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksZz1jLnN0eWxpemUoZywic3RyaW5nIikpfXJldHVybiBnKyI6ICIraH1mdW5jdGlvbiBYZihjLGEsYil7cmV0dXJuIDYwPGMucmVkdWNlKGZ1bmN0aW9uKGEsYyl7Yy5pbmRleE9mKCJcbiIpO3JldHVybiBhK2MucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApP2JbMF0rKCIiPT09YT8iIjphKyJcbiAiKSsiICIrYy5qb2luKCIsXG4gICIpKyIgIitiWzFdOmJbMF0rYSsiICIrYy5qb2luKCIsICIpKyIgIitiWzFdfWZ1bmN0aW9uIFVkKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpfQpmdW5jdGlvbiB6YyhjKXtyZXR1cm4iYm9vbGVhbiI9PT10eXBlb2YgY31mdW5jdGlvbiBWZChjKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBjfWZ1bmN0aW9uIEphKGMpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGN9ZnVuY3Rpb24gbGEoYyl7cmV0dXJuIHZvaWQgMD09PWN9ZnVuY3Rpb24gWGEoYyl7cmV0dXJuIHdhKGMpJiYiW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1mdW5jdGlvbiB3YShjKXtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiBjJiZudWxsIT09Y31mdW5jdGlvbiBwYihjKXtyZXR1cm4gd2EoYykmJiJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1mdW5jdGlvbiBvYihjKXtyZXR1cm4gd2EoYykmJigiW29iamVjdCBFcnJvcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfHxjIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIFdhKGMpe3JldHVybiJmdW5jdGlvbiI9PT0KdHlwZW9mIGN9ZnVuY3Rpb24gQ2MoYyl7cmV0dXJuIG51bGw9PT1jfHwiYm9vbGVhbiI9PT10eXBlb2YgY3x8Im51bWJlciI9PT10eXBlb2YgY3x8InN0cmluZyI9PT10eXBlb2YgY3x8InN5bWJvbCI9PT10eXBlb2YgY3x8InVuZGVmaW5lZCI9PT10eXBlb2YgY31mdW5jdGlvbiBEYyhjKXtyZXR1cm4gMTA+Yz8iMCIrYy50b1N0cmluZygxMCk6Yy50b1N0cmluZygxMCl9ZnVuY3Rpb24gWWYoKXt2YXIgYz1uZXcgRGF0ZSxhPVtEYyhjLmdldEhvdXJzKCkpLERjKGMuZ2V0TWludXRlcygpKSxEYyhjLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bYy5nZXREYXRlKCksWmZbYy5nZXRNb250aCgpXSxhXS5qb2luKCIgIil9ZnVuY3Rpb24gVGQoYyxhKXtpZighYXx8IXdhKGEpKXJldHVybiBjO2Zvcih2YXIgYj1PYmplY3Qua2V5cyhhKSxkPWIubGVuZ3RoO2QtLTspY1tiW2RdXT1hW2JbZF1dO3JldHVybiBjfWZ1bmN0aW9uIFdkKGMsYSl7aWYoYz09PWEpcmV0dXJuIDA7Zm9yKHZhciBiPQpjLmxlbmd0aCxkPWEubGVuZ3RoLGU9MCxmPU1hdGgubWluKGIsZCk7ZTxmOysrZSlpZihjW2VdIT09YVtlXSl7Yj1jW2VdO2Q9YVtlXTticmVha31yZXR1cm4gYjxkPy0xOmQ8Yj8xOjB9ZnVuY3Rpb24gWGQoKXtyZXR1cm4idW5kZWZpbmVkIiE9PXR5cGVvZiBFYz9FYzpFYz1mdW5jdGlvbigpe3JldHVybiJmb28iPT09ZnVuY3Rpb24oKXt9Lm5hbWV9KCl9ZnVuY3Rpb24gWWQoYyl7cmV0dXJuIHBhKGMpfHwiZnVuY3Rpb24iIT09dHlwZW9mIEthLkFycmF5QnVmZmVyPyExOiJmdW5jdGlvbiI9PT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhjKTpjP2MgaW5zdGFuY2VvZiBEYXRhVmlld3x8Yy5idWZmZXImJmMuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ITA6ITE6ITF9ZnVuY3Rpb24gRShjLGEpe2N8fFMoYywhMCxhLCI9PSIsRmMpfWZ1bmN0aW9uIFpkKGMpe2lmKFdhKGMpKXJldHVybiBYZCgpP2MubmFtZTooYz1jLnRvU3RyaW5nKCkubWF0Y2goJGYpKSYmCmNbMV19ZnVuY3Rpb24gR2MoYyl7dGhpcy5uYW1lPSJBc3NlcnRpb25FcnJvciI7dGhpcy5hY3R1YWw9Yy5hY3R1YWw7dGhpcy5leHBlY3RlZD1jLmV4cGVjdGVkO3RoaXMub3BlcmF0b3I9Yy5vcGVyYXRvcjtjLm1lc3NhZ2U/KHRoaXMubWVzc2FnZT1jLm1lc3NhZ2UsdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSExKToodGhpcy5tZXNzYWdlPSRkKGFlKHRoaXMuYWN0dWFsKSwxMjgpKyIgIit0aGlzLm9wZXJhdG9yKyIgIiskZChhZSh0aGlzLmV4cGVjdGVkKSwxMjgpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIGE9Yy5zdGFja1N0YXJ0RnVuY3Rpb258fFM7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxhKTooYz1FcnJvcigpLGMuc3RhY2smJihjPWMuc3RhY2ssYT1aZChhKSxhPWMuaW5kZXhPZigiXG4iK2EpLDA8PWEmJihhPWMuaW5kZXhPZigiXG4iLGErMSksYz1jLnN1YnN0cmluZyhhKzEpKSx0aGlzLnN0YWNrPWMpKX1mdW5jdGlvbiAkZChjLAphKXtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBjP2MubGVuZ3RoPGE/YzpjLnNsaWNlKDAsYSk6Y31mdW5jdGlvbiBhZShjKXtpZihYZCgpfHwhV2EoYykpcmV0dXJuIGFhKGMpO2M9WmQoYyk7cmV0dXJuIltGdW5jdGlvbiIrKGM/IjogIitjOiIiKSsiXSJ9ZnVuY3Rpb24gUyhjLGEsYixkLGUpe3Rocm93IG5ldyBHYyh7bWVzc2FnZTpiLGFjdHVhbDpjLGV4cGVjdGVkOmEsb3BlcmF0b3I6ZCxzdGFja1N0YXJ0RnVuY3Rpb246ZX0pO31mdW5jdGlvbiBGYyhjLGEpe2N8fFMoYywhMCxhLCI9PSIsRmMpfWZ1bmN0aW9uIGJlKGMsYSxiKXtjIT1hJiZTKGMsYSxiLCI9PSIsYmUpfWZ1bmN0aW9uIGNlKGMsYSxiKXtjPT1hJiZTKGMsYSxiLCIhPSIsY2UpfWZ1bmN0aW9uIGRlKGMsYSxiKXtZYShjLGEsITEpfHxTKGMsYSxiLCJkZWVwRXF1YWwiLGRlKX1mdW5jdGlvbiBlZShjLGEsYil7WWEoYyxhLCEwKXx8UyhjLGEsYiwiZGVlcFN0cmljdEVxdWFsIixlZSl9ZnVuY3Rpb24gWWEoYyxhLGIsCmQpe2lmKGM9PT1hKXJldHVybiEwO2lmKHBhKGMpJiZwYShhKSlyZXR1cm4gMD09PVdkKGMsYSk7aWYocGIoYykmJnBiKGEpKXJldHVybiBjLmdldFRpbWUoKT09PWEuZ2V0VGltZSgpO2lmKFhhKGMpJiZYYShhKSlyZXR1cm4gYy5zb3VyY2U9PT1hLnNvdXJjZSYmYy5nbG9iYWw9PT1hLmdsb2JhbCYmYy5tdWx0aWxpbmU9PT1hLm11bHRpbGluZSYmYy5sYXN0SW5kZXg9PT1hLmxhc3RJbmRleCYmYy5pZ25vcmVDYXNlPT09YS5pZ25vcmVDYXNlO2lmKG51bGwhPT1jJiYib2JqZWN0Ij09PXR5cGVvZiBjfHxudWxsIT09YSYmIm9iamVjdCI9PT10eXBlb2YgYSl7aWYoIVlkKGMpfHwhWWQoYSl8fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKXx8YyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8YyBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSl7aWYocGEoYykhPT1wYShhKSlyZXR1cm4hMTtkPWR8fHthY3R1YWw6W10sCmV4cGVjdGVkOltdfTt2YXIgZT1kLmFjdHVhbC5pbmRleE9mKGMpO2lmKC0xIT09ZSYmZT09PWQuZXhwZWN0ZWQuaW5kZXhPZihhKSlyZXR1cm4hMDtkLmFjdHVhbC5wdXNoKGMpO2QuZXhwZWN0ZWQucHVzaChhKTtyZXR1cm4gYWcoYyxhLGIsZCl9cmV0dXJuIDA9PT1XZChuZXcgVWludDhBcnJheShjLmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkoYS5idWZmZXIpKX1yZXR1cm4gYj9jPT09YTpjPT1hfWZ1bmN0aW9uIGFnKGMsYSxiLGQpe2lmKG51bGw9PT1jfHx2b2lkIDA9PT1jfHxudWxsPT09YXx8dm9pZCAwPT09YSlyZXR1cm4hMTtpZihDYyhjKXx8Q2MoYSkpcmV0dXJuIGM9PT1hO2lmKGImJk9iamVjdC5nZXRQcm90b3R5cGVPZihjKSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihhKSlyZXR1cm4hMTt2YXIgZT0iW29iamVjdCBBcmd1bWVudHNdIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpLGY9IltvYmplY3QgQXJndW1lbnRzXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTsKaWYoZSYmIWZ8fCFlJiZmKXJldHVybiExO2lmKGUpcmV0dXJuIGM9ZmUuY2FsbChjKSxhPWZlLmNhbGwoYSksWWEoYyxhLGIpO2U9Z2UoYyk7dmFyIGc9Z2UoYSk7aWYoZS5sZW5ndGghPT1nLmxlbmd0aClyZXR1cm4hMTtlLnNvcnQoKTtnLnNvcnQoKTtmb3IoZj1lLmxlbmd0aC0xOzA8PWY7Zi0tKWlmKGVbZl0hPT1nW2ZdKXJldHVybiExO2ZvcihmPWUubGVuZ3RoLTE7MDw9ZjtmLS0paWYoZz1lW2ZdLCFZYShjW2ddLGFbZ10sYixkKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBoZShjLGEsYil7WWEoYyxhLCExKSYmUyhjLGEsYiwibm90RGVlcEVxdWFsIixoZSl9ZnVuY3Rpb24gaWUoYyxhLGIpe1lhKGMsYSwhMCkmJlMoYyxhLGIsIm5vdERlZXBTdHJpY3RFcXVhbCIsaWUpfWZ1bmN0aW9uIGplKGMsYSxiKXtjIT09YSYmUyhjLGEsYiwiPT09IixqZSl9ZnVuY3Rpb24ga2UoYyxhLGIpe2M9PT1hJiZTKGMsYSxiLCIhPT0iLGtlKX1mdW5jdGlvbiBsZShjLGEpe2lmKCFjfHwhYSlyZXR1cm4hMTsKaWYoIltvYmplY3QgUmVnRXhwXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSlyZXR1cm4gYS50ZXN0KGMpO3RyeXtpZihjIGluc3RhbmNlb2YgYSlyZXR1cm4hMH1jYXRjaChiKXt9cmV0dXJuIEVycm9yLmlzUHJvdG90eXBlT2YoYSk/ITE6ITA9PT1hLmNhbGwoe30sYyl9ZnVuY3Rpb24gbWUoYyxhLGIsZCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJyJibG9jayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7InN0cmluZyI9PT10eXBlb2YgYiYmKGQ9YixiPW51bGwpO3RyeXthKCl9Y2F0Y2goaCl7dmFyIGU9aH1hPWU7ZD0oYiYmYi5uYW1lPyIgKCIrYi5uYW1lKyIpLiI6Ii4iKSsoZD8iICIrZDoiLiIpO2MmJiFhJiZTKGEsYiwiTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24iK2QpO2U9InN0cmluZyI9PT10eXBlb2YgZDt2YXIgZj0hYyYmb2IoYSksZz0hYyYmYSYmIWI7KGYmJmUmJmxlKGEsYil8fGcpJiZTKGEsCmIsIkdvdCB1bndhbnRlZCBleGNlcHRpb24iK2QpO2lmKGMmJmEmJmImJiFsZShhLGIpfHwhYyYmYSl0aHJvdyBhO31mdW5jdGlvbiBiZyhjLGEpe2Zvcih2YXIgYj0wLGQ9Yy5sZW5ndGgtMTswPD1kO2QtLSl7dmFyIGU9Y1tkXTsiLiI9PT1lP2Muc3BsaWNlKGQsMSk6Ii4uIj09PWU/KGMuc3BsaWNlKGQsMSksYisrKTpiJiYoYy5zcGxpY2UoZCwxKSxiLS0pfWlmKGEpZm9yKDtiLS07YiljLnVuc2hpZnQoIi4uIik7cmV0dXJuIGN9ZnVuY3Rpb24gSGMoKXtmb3IodmFyIGM9IiIsYT0hMSxiPWFyZ3VtZW50cy5sZW5ndGgtMTstMTw9YiYmIWE7Yi0tKXt2YXIgZD0wPD1iP2FyZ3VtZW50c1tiXToiLyI7aWYoInN0cmluZyIhPT10eXBlb2YgZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2QmJihjPWQrIi8iK2MsYT0iLyI9PT1kLmNoYXJBdCgwKSl9Yz1iZyhjZyhjLnNwbGl0KCIvIiksZnVuY3Rpb24oYSl7cmV0dXJuISFhfSksCiFhKS5qb2luKCIvIik7cmV0dXJuKGE/Ii8iOiIiKStjfHwiLiJ9ZnVuY3Rpb24gUGIoYyxhKXtmdW5jdGlvbiBiKGEpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGgmJiIiPT09YVtjXTtjKyspO2Zvcih2YXIgYj1hLmxlbmd0aC0xOzA8PWImJiIiPT09YVtiXTtiLS0pO3JldHVybiBjPmI/W106YS5zbGljZShjLGItYysxKX1jPUhjKGMpLnN1YnN0cigxKTthPUhjKGEpLnN1YnN0cigxKTtjPWIoYy5zcGxpdCgiLyIpKTthPWIoYS5zcGxpdCgiLyIpKTtmb3IodmFyIGQ9TWF0aC5taW4oYy5sZW5ndGgsYS5sZW5ndGgpLGU9ZCxmPTA7ZjxkO2YrKylpZihjW2ZdIT09YVtmXSl7ZT1mO2JyZWFrfWQ9W107Zm9yKGY9ZTtmPGMubGVuZ3RoO2YrKylkLnB1c2goIi4uIik7ZD1kLmNvbmNhdChhLnNsaWNlKGUpKTtyZXR1cm4gZC5qb2luKCIvIil9ZnVuY3Rpb24gY2coYyxhKXtpZihjLmZpbHRlcilyZXR1cm4gYy5maWx0ZXIoYSk7Zm9yKHZhciBiPVtdLGQ9MDtkPGMubGVuZ3RoO2QrKylhKGNbZF0sCmQsYykmJmIucHVzaChjW2RdKTtyZXR1cm4gYn1mdW5jdGlvbiBxYSgpe31mdW5jdGlvbiB4KCl7eC5pbml0LmNhbGwodGhpcyl9ZnVuY3Rpb24gbmUoYyxhLGIsZCl7dmFyIGU7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBiKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoZT1jLl9ldmVudHMpe2UubmV3TGlzdGVuZXImJihjLmVtaXQoIm5ld0xpc3RlbmVyIixhLGIubGlzdGVuZXI/Yi5saXN0ZW5lcjpiKSxlPWMuX2V2ZW50cyk7dmFyIGY9ZVthXX1lbHNlIGU9Yy5fZXZlbnRzPW5ldyBxYSxjLl9ldmVudHNDb3VudD0wO2Y/KCJmdW5jdGlvbiI9PT10eXBlb2YgZj9mPWVbYV09ZD9bYixmXTpbZixiXTpkP2YudW5zaGlmdChiKTpmLnB1c2goYiksZi53YXJuZWR8fChiPXZvaWQgMD09PWMuX21heExpc3RlbmVycz94LmRlZmF1bHRNYXhMaXN0ZW5lcnM6Yy5fbWF4TGlzdGVuZXJzKSYmMDxiJiZmLmxlbmd0aD5iJiYoZi53YXJuZWQ9CiEwLGI9RXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitmLmxlbmd0aCsiICIrYSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKSxiLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsYi5lbWl0dGVyPWMsYi50eXBlPWEsYi5jb3VudD1mLmxlbmd0aCwiZnVuY3Rpb24iPT09dHlwZW9mIGNvbnNvbGUud2Fybj9jb25zb2xlLndhcm4oYik6Y29uc29sZS5sb2coYikpKTooZVthXT1iLCsrYy5fZXZlbnRzQ291bnQpO3JldHVybiBjfWZ1bmN0aW9uIG9lKGMsYSxiKXtmdW5jdGlvbiBkKCl7Yy5yZW1vdmVMaXN0ZW5lcihhLGQpO2V8fChlPSEwLGIuYXBwbHkoYyxhcmd1bWVudHMpKX12YXIgZT0hMTtkLmxpc3RlbmVyPWI7cmV0dXJuIGR9ZnVuY3Rpb24gcGUoYyl7dmFyIGE9dGhpcy5fZXZlbnRzO2lmKGEpe2M9YVtjXTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGMpcmV0dXJuIDE7CmlmKGMpcmV0dXJuIGMubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIHFiKGMsYSl7Zm9yKHZhciBiPUFycmF5KGEpO2EtLTspYlthXT1jW2FdO3JldHVybiBifWZ1bmN0aW9uIExhKCl7dGhpcy50YWlsPXRoaXMuaGVhZD1udWxsO3RoaXMubGVuZ3RoPTB9ZnVuY3Rpb24gcmIoYyl7dGhpcy5lbmNvZGluZz0oY3x8InV0ZjgiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX10vLCIiKTtpZihjJiYhZGcoYykpdGhyb3cgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrYyk7c3dpdGNoKHRoaXMuZW5jb2Rpbmcpe2Nhc2UgInV0ZjgiOnRoaXMuc3Vycm9nYXRlU2l6ZT0zO2JyZWFrO2Nhc2UgInVjczIiOmNhc2UgInV0ZjE2bGUiOnRoaXMuc3Vycm9nYXRlU2l6ZT0yO3RoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXI9ZWc7YnJlYWs7Y2FzZSAiYmFzZTY0Ijp0aGlzLnN1cnJvZ2F0ZVNpemU9Mzt0aGlzLmRldGVjdEluY29tcGxldGVDaGFyPWZnO2JyZWFrO2RlZmF1bHQ6dGhpcy53cml0ZT1nZzsKcmV0dXJufXRoaXMuY2hhckJ1ZmZlcj1uZXcgbCg2KTt0aGlzLmNoYXJMZW5ndGg9dGhpcy5jaGFyUmVjZWl2ZWQ9MH1mdW5jdGlvbiBnZyhjKXtyZXR1cm4gYy50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBlZyhjKXt0aGlzLmNoYXJMZW5ndGg9KHRoaXMuY2hhclJlY2VpdmVkPWMubGVuZ3RoJTIpPzI6MH1mdW5jdGlvbiBmZyhjKXt0aGlzLmNoYXJMZW5ndGg9KHRoaXMuY2hhclJlY2VpdmVkPWMubGVuZ3RoJTMpPzM6MH1mdW5jdGlvbiBoZyhjLGEsYil7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBjLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gYy5wcmVwZW5kTGlzdGVuZXIoYSxiKTtpZihjLl9ldmVudHMmJmMuX2V2ZW50c1thXSlBcnJheS5pc0FycmF5KGMuX2V2ZW50c1thXSk/Yy5fZXZlbnRzW2FdLnVuc2hpZnQoYik6Yy5fZXZlbnRzW2FdPVtiLGMuX2V2ZW50c1thXV07ZWxzZSBjLm9uKGEsYil9ZnVuY3Rpb24gcWUoYyxhKXtjPWN8fHt9O3RoaXMub2JqZWN0TW9kZT0KISFjLm9iamVjdE1vZGU7YSBpbnN0YW5jZW9mIFUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIWMucmVhZGFibGVPYmplY3RNb2RlKTthPWMuaGlnaFdhdGVyTWFyazt2YXIgYj10aGlzLm9iamVjdE1vZGU/MTY6MTYzODQ7dGhpcy5oaWdoV2F0ZXJNYXJrPWF8fDA9PT1hP2E6Yjt0aGlzLmhpZ2hXYXRlck1hcms9fn50aGlzLmhpZ2hXYXRlck1hcms7dGhpcy5idWZmZXI9bmV3IExhO3RoaXMubGVuZ3RoPTA7dGhpcy5waXBlcz1udWxsO3RoaXMucGlwZXNDb3VudD0wO3RoaXMuZmxvd2luZz1udWxsO3RoaXMucmVhZGluZz10aGlzLmVuZEVtaXR0ZWQ9dGhpcy5lbmRlZD0hMTt0aGlzLnN5bmM9ITA7dGhpcy5yZXN1bWVTY2hlZHVsZWQ9dGhpcy5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmVtaXR0ZWRSZWFkYWJsZT10aGlzLm5lZWRSZWFkYWJsZT0hMTt0aGlzLmRlZmF1bHRFbmNvZGluZz1jLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiO3RoaXMucmFuT3V0PSExO3RoaXMuYXdhaXREcmFpbj0KMDt0aGlzLnJlYWRpbmdNb3JlPSExO3RoaXMuZW5jb2Rpbmc9dGhpcy5kZWNvZGVyPW51bGw7Yy5lbmNvZGluZyYmKHRoaXMuZGVjb2Rlcj1uZXcgcmIoYy5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1jLmVuY29kaW5nKX1mdW5jdGlvbiB5KGMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHkpKXJldHVybiBuZXcgeShjKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBxZShjLHRoaXMpO3RoaXMucmVhZGFibGU9ITA7YyYmImZ1bmN0aW9uIj09PXR5cGVvZiBjLnJlYWQmJih0aGlzLl9yZWFkPWMucmVhZCk7eC5jYWxsKHRoaXMpfWZ1bmN0aW9uIHJlKGMsYSxiLGQsZSl7dmFyIGY9YixnPW51bGw7cGEoZil8fCJzdHJpbmciPT09dHlwZW9mIGZ8fG51bGw9PT1mfHx2b2lkIDA9PT1mfHxhLm9iamVjdE1vZGV8fChnPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSk7aWYoZj1nKWMuZW1pdCgiZXJyb3IiLGYpO2Vsc2UgaWYobnVsbD09PWIpYS5yZWFkaW5nPQohMSxhLmVuZGVkfHwoYS5kZWNvZGVyJiYoYj1hLmRlY29kZXIuZW5kKCkpJiZiLmxlbmd0aCYmKGEuYnVmZmVyLnB1c2goYiksYS5sZW5ndGgrPWEub2JqZWN0TW9kZT8xOmIubGVuZ3RoKSxhLmVuZGVkPSEwLFFiKGMpKTtlbHNlIGlmKGEub2JqZWN0TW9kZXx8YiYmMDxiLmxlbmd0aClpZihhLmVuZGVkJiYhZSljLmVtaXQoImVycm9yIixFcnJvcigic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSk7ZWxzZSBpZihhLmVuZEVtaXR0ZWQmJmUpYy5lbWl0KCJlcnJvciIsRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpO2Vsc2V7aWYoYS5kZWNvZGVyJiYhZSYmIWQpe2I9YS5kZWNvZGVyLndyaXRlKGIpO3ZhciBoPSFhLm9iamVjdE1vZGUmJjA9PT1iLmxlbmd0aH1lfHwoYS5yZWFkaW5nPSExKTtofHwoYS5mbG93aW5nJiYwPT09YS5sZW5ndGgmJiFhLnN5bmM/KGMuZW1pdCgiZGF0YSIsYiksYy5yZWFkKDApKTooYS5sZW5ndGgrPWEub2JqZWN0TW9kZT8xOmIubGVuZ3RoLAplP2EuYnVmZmVyLnVuc2hpZnQoYik6YS5idWZmZXIucHVzaChiKSxhLm5lZWRSZWFkYWJsZSYmUWIoYykpKTthLnJlYWRpbmdNb3JlfHwoYS5yZWFkaW5nTW9yZT0hMCxYKGlnLGMsYSkpfWVsc2UgZXx8KGEucmVhZGluZz0hMSk7cmV0dXJuIWEuZW5kZWQmJihhLm5lZWRSZWFkYWJsZXx8YS5sZW5ndGg8YS5oaWdoV2F0ZXJNYXJrfHwwPT09YS5sZW5ndGgpfWZ1bmN0aW9uIHNlKGMsYSl7aWYoMD49Y3x8MD09PWEubGVuZ3RoJiZhLmVuZGVkKXJldHVybiAwO2lmKGEub2JqZWN0TW9kZSlyZXR1cm4gMTtpZihjIT09YylyZXR1cm4gYS5mbG93aW5nJiZhLmxlbmd0aD9hLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOmEubGVuZ3RoO2lmKGM+YS5oaWdoV2F0ZXJNYXJrKXt2YXIgYj1jOzgzODg2MDg8PWI/Yj04Mzg4NjA4OihiLS0sYnw9Yj4+PjEsYnw9Yj4+PjIsYnw9Yj4+PjQsYnw9Yj4+PjgsYnw9Yj4+PjE2LGIrKyk7YS5oaWdoV2F0ZXJNYXJrPWJ9cmV0dXJuIGM8PWEubGVuZ3RoP2M6CmEuZW5kZWQ/YS5sZW5ndGg6KGEubmVlZFJlYWRhYmxlPSEwLDApfWZ1bmN0aW9uIFFiKGMpe3ZhciBhPWMuX3JlYWRhYmxlU3RhdGU7YS5uZWVkUmVhZGFibGU9ITE7YS5lbWl0dGVkUmVhZGFibGV8fCh6KCJlbWl0UmVhZGFibGUiLGEuZmxvd2luZyksYS5lbWl0dGVkUmVhZGFibGU9ITAsYS5zeW5jP1godGUsYyk6dGUoYykpfWZ1bmN0aW9uIHRlKGMpe3ooImVtaXQgcmVhZGFibGUiKTtjLmVtaXQoInJlYWRhYmxlIik7SWMoYyl9ZnVuY3Rpb24gaWcoYyxhKXtmb3IodmFyIGI9YS5sZW5ndGg7IWEucmVhZGluZyYmIWEuZmxvd2luZyYmIWEuZW5kZWQmJmEubGVuZ3RoPGEuaGlnaFdhdGVyTWFyayYmKHooIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksYy5yZWFkKDApLGIhPT1hLmxlbmd0aCk7KWI9YS5sZW5ndGg7YS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBqZyhjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1jLl9yZWFkYWJsZVN0YXRlO3ooInBpcGVPbkRyYWluIixhLmF3YWl0RHJhaW4pOwphLmF3YWl0RHJhaW4mJmEuYXdhaXREcmFpbi0tOzA9PT1hLmF3YWl0RHJhaW4mJmMubGlzdGVuZXJzKCJkYXRhIikubGVuZ3RoJiYoYS5mbG93aW5nPSEwLEljKGMpKX19ZnVuY3Rpb24ga2coYyl7eigicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIik7Yy5yZWFkKDApfWZ1bmN0aW9uIGxnKGMsYSl7YS5yZWFkaW5nfHwoeigicmVzdW1lIHJlYWQgMCIpLGMucmVhZCgwKSk7YS5yZXN1bWVTY2hlZHVsZWQ9ITE7YS5hd2FpdERyYWluPTA7Yy5lbWl0KCJyZXN1bWUiKTtJYyhjKTthLmZsb3dpbmcmJiFhLnJlYWRpbmcmJmMucmVhZCgwKX1mdW5jdGlvbiBJYyhjKXt2YXIgYT1jLl9yZWFkYWJsZVN0YXRlO2Zvcih6KCJmbG93IixhLmZsb3dpbmcpO2EuZmxvd2luZyYmbnVsbCE9PWMucmVhZCgpOyk7fWZ1bmN0aW9uIHVlKGMsYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBudWxsO2lmKGEub2JqZWN0TW9kZSl2YXIgYj1hLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYoIWN8fGM+PWEubGVuZ3RoKWI9CmEuZGVjb2Rlcj9hLmJ1ZmZlci5qb2luKCIiKToxPT09YS5idWZmZXIubGVuZ3RoP2EuYnVmZmVyLmhlYWQuZGF0YTphLmJ1ZmZlci5jb25jYXQoYS5sZW5ndGgpLGEuYnVmZmVyLmNsZWFyKCk7ZWxzZXtiPWEuYnVmZmVyO2E9YS5kZWNvZGVyO2lmKGM8Yi5oZWFkLmRhdGEubGVuZ3RoKWE9Yi5oZWFkLmRhdGEuc2xpY2UoMCxjKSxiLmhlYWQuZGF0YT1iLmhlYWQuZGF0YS5zbGljZShjKTtlbHNle2lmKGM9PT1iLmhlYWQuZGF0YS5sZW5ndGgpYj1iLnNoaWZ0KCk7ZWxzZSBpZihhKXthPWIuaGVhZDt2YXIgZD0xLGU9YS5kYXRhO2ZvcihjLT1lLmxlbmd0aDthPWEubmV4dDspe3ZhciBmPWEuZGF0YSxnPWM+Zi5sZW5ndGg/Zi5sZW5ndGg6YztlPWc9PT1mLmxlbmd0aD9lK2Y6ZStmLnNsaWNlKDAsYyk7Yy09ZztpZigwPT09Yyl7Zz09PWYubGVuZ3RoPygrK2QsYi5oZWFkPWEubmV4dD9hLm5leHQ6Yi50YWlsPW51bGwpOihiLmhlYWQ9YSxhLmRhdGE9Zi5zbGljZShnKSk7YnJlYWt9KytkfWIubGVuZ3RoLT0KZDtiPWV9ZWxzZXthPWwuYWxsb2NVbnNhZmUoYyk7ZD1iLmhlYWQ7ZT0xO2QuZGF0YS5jb3B5KGEpO2ZvcihjLT1kLmRhdGEubGVuZ3RoO2Q9ZC5uZXh0Oyl7Zj1kLmRhdGE7Zz1jPmYubGVuZ3RoP2YubGVuZ3RoOmM7Zi5jb3B5KGEsYS5sZW5ndGgtYywwLGcpO2MtPWc7aWYoMD09PWMpe2c9PT1mLmxlbmd0aD8oKytlLGIuaGVhZD1kLm5leHQ/ZC5uZXh0OmIudGFpbD1udWxsKTooYi5oZWFkPWQsZC5kYXRhPWYuc2xpY2UoZykpO2JyZWFrfSsrZX1iLmxlbmd0aC09ZTtiPWF9YT1ifWI9YX1yZXR1cm4gYn1mdW5jdGlvbiBKYyhjKXt2YXIgYT1jLl9yZWFkYWJsZVN0YXRlO2lmKDA8YS5sZW5ndGgpdGhyb3cgRXJyb3IoJyJlbmRSZWFkYWJsZSgpIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO2EuZW5kRW1pdHRlZHx8KGEuZW5kZWQ9ITAsWChtZyxhLGMpKX1mdW5jdGlvbiBtZyhjLGEpe2MuZW5kRW1pdHRlZHx8MCE9PWMubGVuZ3RofHwoYy5lbmRFbWl0dGVkPSEwLGEucmVhZGFibGU9CiExLGEuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIG5nKGMsYSl7Zm9yKHZhciBiPTAsZD1jLmxlbmd0aDtiPGQ7YisrKWEoY1tiXSxiKX1mdW5jdGlvbiB2ZShjLGEpe2Zvcih2YXIgYj0wLGQ9Yy5sZW5ndGg7YjxkO2IrKylpZihjW2JdPT09YSlyZXR1cm4gYjtyZXR1cm4tMX1mdW5jdGlvbiBvZygpe31mdW5jdGlvbiBwZyhjLGEsYil7dGhpcy5jaHVuaz1jO3RoaXMuZW5jb2Rpbmc9YTt0aGlzLmNhbGxiYWNrPWI7dGhpcy5uZXh0PW51bGx9ZnVuY3Rpb24gS2MoYyxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnVmZmVyIix7Z2V0OnhjKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIpfSk7Yz1jfHx7fTt0aGlzLm9iamVjdE1vZGU9ISFjLm9iamVjdE1vZGU7YSBpbnN0YW5jZW9mIFUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwKISFjLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIGI9Yy5oaWdoV2F0ZXJNYXJrLGQ9dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0O3RoaXMuaGlnaFdhdGVyTWFyaz1ifHwwPT09Yj9iOmQ7dGhpcy5oaWdoV2F0ZXJNYXJrPX5+dGhpcy5oaWdoV2F0ZXJNYXJrO3RoaXMuZmluaXNoZWQ9dGhpcy5lbmRlZD10aGlzLmVuZGluZz10aGlzLm5lZWREcmFpbj0hMTt0aGlzLmRlY29kZVN0cmluZ3M9ITEhPT1jLmRlY29kZVN0cmluZ3M7dGhpcy5kZWZhdWx0RW5jb2Rpbmc9Yy5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Ijt0aGlzLmxlbmd0aD0wO3RoaXMud3JpdGluZz0hMTt0aGlzLmNvcmtlZD0wO3RoaXMuc3luYz0hMDt0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITE7dGhpcy5vbndyaXRlPWZ1bmN0aW9uKGMpe3ZhciBiPWEuX3dyaXRhYmxlU3RhdGUsZD1iLnN5bmMsZT1iLndyaXRlY2I7Yi53cml0aW5nPSExO2Iud3JpdGVjYj1udWxsO2IubGVuZ3RoLT1iLndyaXRlbGVuO2Iud3JpdGVsZW49MDtjPwooLS1iLnBlbmRpbmdjYixkP1goZSxjKTplKGMpLGEuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGEuZW1pdCgiZXJyb3IiLGMpKTooKGM9d2UoYikpfHxiLmNvcmtlZHx8Yi5idWZmZXJQcm9jZXNzaW5nfHwhYi5idWZmZXJlZFJlcXVlc3R8fHhlKGEsYiksZD9YKHllLGEsYixjLGUpOnllKGEsYixjLGUpKX07dGhpcy53cml0ZWNiPW51bGw7dGhpcy53cml0ZWxlbj0wO3RoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD10aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsO3RoaXMucGVuZGluZ2NiPTA7dGhpcy5lcnJvckVtaXR0ZWQ9dGhpcy5wcmVmaW5pc2hlZD0hMTt0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTA7dGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IHplKHRoaXMpfWZ1bmN0aW9uIEwoYyl7aWYoISh0aGlzIGluc3RhbmNlb2YgTHx8dGhpcyBpbnN0YW5jZW9mIFUpKXJldHVybiBuZXcgTChjKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBLYyhjLHRoaXMpO3RoaXMud3JpdGFibGU9CiEwO2MmJigiZnVuY3Rpb24iPT09dHlwZW9mIGMud3JpdGUmJih0aGlzLl93cml0ZT1jLndyaXRlKSwiZnVuY3Rpb24iPT09dHlwZW9mIGMud3JpdGV2JiYodGhpcy5fd3JpdGV2PWMud3JpdGV2KSk7eC5jYWxsKHRoaXMpfWZ1bmN0aW9uIExjKGMsYSxiLGQsZSxmLGcpe2Eud3JpdGVsZW49ZDthLndyaXRlY2I9ZzthLndyaXRpbmc9ITA7YS5zeW5jPSEwO2I/Yy5fd3JpdGV2KGUsYS5vbndyaXRlKTpjLl93cml0ZShlLGYsYS5vbndyaXRlKTthLnN5bmM9ITF9ZnVuY3Rpb24geWUoYyxhLGIsZCl7IWImJjA9PT1hLmxlbmd0aCYmYS5uZWVkRHJhaW4mJihhLm5lZWREcmFpbj0hMSxjLmVtaXQoImRyYWluIikpO2EucGVuZGluZ2NiLS07ZCgpO0FlKGMsYSl9ZnVuY3Rpb24geGUoYyxhKXthLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIGI9YS5idWZmZXJlZFJlcXVlc3Q7aWYoYy5fd3JpdGV2JiZiJiZiLm5leHQpe3ZhciBkPUFycmF5KGEuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLGU9YS5jb3JrZWRSZXF1ZXN0c0ZyZWU7CmUuZW50cnk9Yjtmb3IodmFyIGY9MDtiOylkW2ZdPWIsYj1iLm5leHQsZis9MTtMYyhjLGEsITAsYS5sZW5ndGgsZCwiIixlLmZpbmlzaCk7YS5wZW5kaW5nY2IrKzthLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbDtlLm5leHQ/KGEuY29ya2VkUmVxdWVzdHNGcmVlPWUubmV4dCxlLm5leHQ9bnVsbCk6YS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IHplKGEpfWVsc2V7Zm9yKDtiJiYoZD1iLmNodW5rLExjKGMsYSwhMSxhLm9iamVjdE1vZGU/MTpkLmxlbmd0aCxkLGIuZW5jb2RpbmcsYi5jYWxsYmFjayksYj1iLm5leHQsIWEud3JpdGluZyk7KTtudWxsPT09YiYmKGEubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1hLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTA7YS5idWZmZXJlZFJlcXVlc3Q9YjthLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gd2UoYyl7cmV0dXJuIGMuZW5kaW5nJiYwPT09Yy5sZW5ndGgmJm51bGw9PT1jLmJ1ZmZlcmVkUmVxdWVzdCYmIWMuZmluaXNoZWQmJiFjLndyaXRpbmd9CmZ1bmN0aW9uIEFlKGMsYSl7dmFyIGI9d2UoYSk7YiYmKDA9PT1hLnBlbmRpbmdjYj8oYS5wcmVmaW5pc2hlZHx8KGEucHJlZmluaXNoZWQ9ITAsYy5lbWl0KCJwcmVmaW5pc2giKSksYS5maW5pc2hlZD0hMCxjLmVtaXQoImZpbmlzaCIpKTphLnByZWZpbmlzaGVkfHwoYS5wcmVmaW5pc2hlZD0hMCxjLmVtaXQoInByZWZpbmlzaCIpKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gemUoYyl7dmFyIGE9dGhpczt0aGlzLmVudHJ5PXRoaXMubmV4dD1udWxsO3RoaXMuZmluaXNoPWZ1bmN0aW9uKGIpe3ZhciBkPWEuZW50cnk7Zm9yKGEuZW50cnk9bnVsbDtkOyl7dmFyIGU9ZC5jYWxsYmFjaztjLnBlbmRpbmdjYi0tO2UoYik7ZD1kLm5leHR9Yy5jb3JrZWRSZXF1ZXN0c0ZyZWU/Yy5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1hOmMuY29ya2VkUmVxdWVzdHNGcmVlPWF9fWZ1bmN0aW9uIFUoYyl7aWYoISh0aGlzIGluc3RhbmNlb2YgVSkpcmV0dXJuIG5ldyBVKGMpO3kuY2FsbCh0aGlzLGMpO0wuY2FsbCh0aGlzLApjKTtjJiYhMT09PWMucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKTtjJiYhMT09PWMud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKTt0aGlzLmFsbG93SGFsZk9wZW49ITA7YyYmITE9PT1jLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEpO3RoaXMub25jZSgiZW5kIixxZyl9ZnVuY3Rpb24gcWcoKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fFgocmcsdGhpcyl9ZnVuY3Rpb24gcmcoYyl7Yy5lbmQoKX1mdW5jdGlvbiBzZyhjKXt0aGlzLmFmdGVyVHJhbnNmb3JtPWZ1bmN0aW9uKGEsYil7dmFyIGQ9Yy5fdHJhbnNmb3JtU3RhdGU7ZC50cmFuc2Zvcm1pbmc9ITE7dmFyIGU9ZC53cml0ZWNiO2U/KGQud3JpdGVjaHVuaz1udWxsLGQud3JpdGVjYj1udWxsLG51bGwhPT1iJiZ2b2lkIDAhPT1iJiZjLnB1c2goYiksZShhKSxhPWMuX3JlYWRhYmxlU3RhdGUsYS5yZWFkaW5nPSExLChhLm5lZWRSZWFkYWJsZXx8YS5sZW5ndGg8CmEuaGlnaFdhdGVyTWFyaykmJmMuX3JlYWQoYS5oaWdoV2F0ZXJNYXJrKSxhPXZvaWQgMCk6YT1jLmVtaXQoImVycm9yIixFcnJvcigibm8gd3JpdGVjYiBpbiBUcmFuc2Zvcm0gY2xhc3MiKSk7cmV0dXJuIGF9O3RoaXMudHJhbnNmb3JtaW5nPXRoaXMubmVlZFRyYW5zZm9ybT0hMTt0aGlzLndyaXRlZW5jb2Rpbmc9dGhpcy53cml0ZWNodW5rPXRoaXMud3JpdGVjYj1udWxsfWZ1bmN0aW9uIGJhKGMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGJhKSlyZXR1cm4gbmV3IGJhKGMpO1UuY2FsbCh0aGlzLGMpO3RoaXMuX3RyYW5zZm9ybVN0YXRlPW5ldyBzZyh0aGlzKTt2YXIgYT10aGlzO3RoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwO3RoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMTtjJiYoImZ1bmN0aW9uIj09PXR5cGVvZiBjLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1jLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09PXR5cGVvZiBjLmZsdXNoJiYodGhpcy5fZmx1c2g9CmMuZmx1c2gpKTt0aGlzLm9uY2UoInByZWZpbmlzaCIsZnVuY3Rpb24oKXsiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKGMpe0JlKGEsYyl9KTpCZShhKX0pfWZ1bmN0aW9uIEJlKGMsYSl7aWYoYSlyZXR1cm4gYy5lbWl0KCJlcnJvciIsYSk7YT1jLl90cmFuc2Zvcm1TdGF0ZTtpZihjLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwIik7aWYoYS50cmFuc2Zvcm1pbmcpdGhyb3cgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gYy5wdXNoKG51bGwpfWZ1bmN0aW9uIHNiKGMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHNiKSlyZXR1cm4gbmV3IHNiKGMpO2JhLmNhbGwodGhpcyxjKX1mdW5jdGlvbiBjYSgpe3guY2FsbCh0aGlzKX1mdW5jdGlvbiB0ZyhjLGEpe3ZhciBiPWMuc3BsaXQoIkAiKSwKZD0iIjsxPGIubGVuZ3RoJiYoZD1iWzBdKyJAIixjPWJbMV0pO2M9Yy5yZXBsYWNlKHVnLCIuIik7Yz1jLnNwbGl0KCIuIik7Yj1jLmxlbmd0aDtmb3IodmFyIGU9W107Yi0tOyllW2JdPWEoY1tiXSk7YT1lLmpvaW4oIi4iKTtyZXR1cm4gZCthfWZ1bmN0aW9uIENlKGMsYSl7cmV0dXJuIGMrMjIrNzUqKDI2PmMpLSgoMCE9YSk8PDUpfWZ1bmN0aW9uIHZnKGMpe3JldHVybiB0ZyhjLGZ1bmN0aW9uKGEpe2lmKHdnLnRlc3QoYSkpe3ZhciBjLGQ9W10sZT1bXSxmPTA7Zm9yKGM9YS5sZW5ndGg7ZjxjOyl7dmFyIGc9YS5jaGFyQ29kZUF0KGYrKyk7aWYoNTUyOTY8PWcmJjU2MzE5Pj1nJiZmPGMpe3ZhciBoPWEuY2hhckNvZGVBdChmKyspOzU2MzIwPT0oaCY2NDUxMik/ZS5wdXNoKCgoZyYxMDIzKTw8MTApKyhoJjEwMjMpKzY1NTM2KTooZS5wdXNoKGcpLGYtLSl9ZWxzZSBlLnB1c2goZyl9YT1lO2g9YS5sZW5ndGg7ZT0xMjg7dmFyIGs9MCx0PTcyO2ZvcihnPTA7ZzxoOysrZyl7dmFyIHE9CmFbZ107MTI4PnEmJmQucHVzaChNYyhxKSl9Zm9yKChmPWM9ZC5sZW5ndGgpJiZkLnB1c2goIi0iKTtmPGg7KXt2YXIgQT0yMTQ3NDgzNjQ3O2ZvcihnPTA7ZzxoOysrZylxPWFbZ10scT49ZSYmcTxBJiYoQT1xKTt2YXIgcj1mKzE7aWYoQS1lPlphKCgyMTQ3NDgzNjQ3LWspL3IpKXRocm93IG5ldyBSYW5nZUVycm9yKERlLm92ZXJmbG93KTtrKz0oQS1lKSpyO2U9QTtmb3IoZz0wO2c8aDsrK2cpe3E9YVtnXTtpZihxPGUmJjIxNDc0ODM2NDc8KytrKXRocm93IG5ldyBSYW5nZUVycm9yKERlLm92ZXJmbG93KTtpZihxPT1lKXt2YXIgUD1rO2ZvcihBPTM2OztBKz0zNil7cT1BPD10PzE6QT49dCsyNj8yNjpBLXQ7aWYoUDxxKWJyZWFrO3ZhciBwPVAtcTtQPTM2LXE7ZC5wdXNoKE1jKENlKHErcCVQLDApKSk7UD1aYShwL1ApfWQucHVzaChNYyhDZShQLDApKSk7dD1yO0E9MDtrPWY9PWM/WmEoay83MDApOms+PjE7Zm9yKGsrPVphKGsvdCk7NDU1PGs7QSs9MzYpaz1aYShrLzM1KTt0PQpaYShBKzM2KmsvKGsrMzgpKTtrPTA7KytmfX0rK2s7KytlfWQ9InhuLS0iK2Quam9pbigiIil9ZWxzZSBkPWE7cmV0dXJuIGR9KX1mdW5jdGlvbiB0YihjKXtzd2l0Y2godHlwZW9mIGMpe2Nhc2UgInN0cmluZyI6cmV0dXJuIGM7Y2FzZSAiYm9vbGVhbiI6cmV0dXJuIGM/InRydWUiOiJmYWxzZSI7Y2FzZSAibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUoYyk/YzoiIjtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiB4ZyhjLGEsYixkKXthPWF8fCImIjtiPWJ8fCI9IjtudWxsPT09YyYmKGM9dm9pZCAwKTtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiBjP0VlKHlnKGMpLGZ1bmN0aW9uKGQpe3ZhciBlPWVuY29kZVVSSUNvbXBvbmVudCh0YihkKSkrYjtyZXR1cm4gRmUoY1tkXSk/RWUoY1tkXSxmdW5jdGlvbihhKXtyZXR1cm4gZStlbmNvZGVVUklDb21wb25lbnQodGIoYSkpfSkuam9pbihhKTplK2VuY29kZVVSSUNvbXBvbmVudCh0YihjW2RdKSl9KS5qb2luKGEpOmQ/ZW5jb2RlVVJJQ29tcG9uZW50KHRiKGQpKSsKYitlbmNvZGVVUklDb21wb25lbnQodGIoYykpOiIifWZ1bmN0aW9uIEVlKGMsYSl7aWYoYy5tYXApcmV0dXJuIGMubWFwKGEpO2Zvcih2YXIgYj1bXSxkPTA7ZDxjLmxlbmd0aDtkKyspYi5wdXNoKGEoY1tkXSxkKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gR2UoYyxhLGIsZCl7Yj1ifHwiPSI7dmFyIGU9e307aWYoInN0cmluZyIhPT10eXBlb2YgY3x8MD09PWMubGVuZ3RoKXJldHVybiBlO3ZhciBmPS9cKy9nO2M9Yy5zcGxpdChhfHwiJiIpO2E9MUUzO2QmJiJudW1iZXIiPT09dHlwZW9mIGQubWF4S2V5cyYmKGE9ZC5tYXhLZXlzKTtkPWMubGVuZ3RoOzA8YSYmZD5hJiYoZD1hKTtmb3IoYT0wO2E8ZDsrK2Epe3ZhciBnPWNbYV0ucmVwbGFjZShmLCIlMjAiKSxoPWcuaW5kZXhPZihiKTtpZigwPD1oKXt2YXIgaz1nLnN1YnN0cigwLGgpO2c9Zy5zdWJzdHIoaCsxKX1lbHNlIGs9ZyxnPSIiO2s9ZGVjb2RlVVJJQ29tcG9uZW50KGspO2c9ZGVjb2RlVVJJQ29tcG9uZW50KGcpO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLAprKT9GZShlW2tdKT9lW2tdLnB1c2goZyk6ZVtrXT1bZVtrXSxnXTplW2tdPWd9cmV0dXJuIGV9ZnVuY3Rpb24gZGEoKXt0aGlzLmhyZWY9dGhpcy5wYXRoPXRoaXMucGF0aG5hbWU9dGhpcy5xdWVyeT10aGlzLnNlYXJjaD10aGlzLmhhc2g9dGhpcy5ob3N0bmFtZT10aGlzLnBvcnQ9dGhpcy5ob3N0PXRoaXMuYXV0aD10aGlzLnNsYXNoZXM9dGhpcy5wcm90b2NvbD1udWxsfWZ1bmN0aW9uIFJiKGMsYSxiKXtpZihjJiZ3YShjKSYmYyBpbnN0YW5jZW9mIGRhKXJldHVybiBjO3ZhciBkPW5ldyBkYTtkLnBhcnNlKGMsYSxiKTtyZXR1cm4gZH1mdW5jdGlvbiBIZShjLGEsYixkKXtpZighSmEoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICd1cmwnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBhKTt2YXIgZT1hLmluZGV4T2YoIj8iKTtlPS0xIT09ZSYmZTxhLmluZGV4T2YoIiMiKT8iPyI6IiMiO2E9YS5zcGxpdChlKTthWzBdPWFbMF0ucmVwbGFjZSgvXFwvZywKIi8iKTthPWEuam9pbihlKTtlPWEudHJpbSgpO2lmKCFkJiYxPT09YS5zcGxpdCgiIyIpLmxlbmd0aCYmKGE9emcuZXhlYyhlKSkpcmV0dXJuIGMucGF0aD1lLGMuaHJlZj1lLGMucGF0aG5hbWU9YVsxXSxhWzJdPyhjLnNlYXJjaD1hWzJdLGMucXVlcnk9Yj9HZShjLnNlYXJjaC5zdWJzdHIoMSkpOmMuc2VhcmNoLnN1YnN0cigxKSk6YiYmKGMuc2VhcmNoPSIiLGMucXVlcnk9e30pLGM7aWYoYT1BZy5leGVjKGUpKXthPWFbMF07dmFyIGY9YS50b0xvd2VyQ2FzZSgpO2MucHJvdG9jb2w9ZjtlPWUuc3Vic3RyKGEubGVuZ3RoKX1pZihkfHxhfHxlLm1hdGNoKC9eXC9cL1teQFwvXStAW15AXC9dKy8pKXt2YXIgZz0iLy8iPT09ZS5zdWJzdHIoMCwyKTshZ3x8YSYmTmNbYV18fChlPWUuc3Vic3RyKDIpLGMuc2xhc2hlcz0hMCl9aWYoIU5jW2FdJiYoZ3x8YSYmISRhW2FdKSl7YT0tMTtmb3IoZD0wO2Q8SWUubGVuZ3RoO2QrKylnPWUuaW5kZXhPZihJZVtkXSksLTEhPT1nJiYoLTE9PT1hfHwKZzxhKSYmKGE9Zyk7Zz0tMT09PWE/ZS5sYXN0SW5kZXhPZigiQCIpOmUubGFzdEluZGV4T2YoIkAiLGEpOy0xIT09ZyYmKGQ9ZS5zbGljZSgwLGcpLGU9ZS5zbGljZShnKzEpLGMuYXV0aD1kZWNvZGVVUklDb21wb25lbnQoZCkpO2E9LTE7Zm9yKGQ9MDtkPEplLmxlbmd0aDtkKyspZz1lLmluZGV4T2YoSmVbZF0pLC0xIT09ZyYmKC0xPT09YXx8ZzxhKSYmKGE9Zyk7LTE9PT1hJiYoYT1lLmxlbmd0aCk7Yy5ob3N0PWUuc2xpY2UoMCxhKTtlPWUuc2xpY2UoYSk7S2UoYyk7Yy5ob3N0bmFtZT1jLmhvc3RuYW1lfHwiIjtnPSJbIj09PWMuaG9zdG5hbWVbMF0mJiJdIj09PWMuaG9zdG5hbWVbYy5ob3N0bmFtZS5sZW5ndGgtMV07aWYoIWcpe3ZhciBoPWMuaG9zdG5hbWUuc3BsaXQoL1wuLyk7ZD0wO2ZvcihhPWgubGVuZ3RoO2Q8YTtkKyspe3ZhciBrPWhbZF07aWYoayYmIWsubWF0Y2goTGUpKXtmb3IodmFyIHQ9IiIscT0wLEE9ay5sZW5ndGg7cTxBO3ErKyl0PTEyNzxrLmNoYXJDb2RlQXQocSk/CnQrIngiOnQra1txXTtpZighdC5tYXRjaChMZSkpe2E9aC5zbGljZSgwLGQpO2Q9aC5zbGljZShkKzEpO2lmKGs9ay5tYXRjaChCZykpYS5wdXNoKGtbMV0pLGQudW5zaGlmdChrWzJdKTtkLmxlbmd0aCYmKGU9Ii8iK2Quam9pbigiLiIpK2UpO2MuaG9zdG5hbWU9YS5qb2luKCIuIik7YnJlYWt9fX19Yy5ob3N0bmFtZT1jLmhvc3RuYW1lLmxlbmd0aD5DZz8iIjpjLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7Z3x8KGMuaG9zdG5hbWU9dmcoYy5ob3N0bmFtZSkpO2Q9Yy5wb3J0PyI6IitjLnBvcnQ6IiI7Yy5ob3N0PShjLmhvc3RuYW1lfHwiIikrZDtjLmhyZWYrPWMuaG9zdDtnJiYoYy5ob3N0bmFtZT1jLmhvc3RuYW1lLnN1YnN0cigxLGMuaG9zdG5hbWUubGVuZ3RoLTIpLCIvIiE9PWVbMF0mJihlPSIvIitlKSl9aWYoIURnW2ZdKWZvcihkPTAsYT1PYy5sZW5ndGg7ZDxhO2QrKylnPU9jW2RdLC0xIT09ZS5pbmRleE9mKGcpJiYoaz1lbmNvZGVVUklDb21wb25lbnQoZyksaz09PWcmJgooaz1lc2NhcGUoZykpLGU9ZS5zcGxpdChnKS5qb2luKGspKTtkPWUuaW5kZXhPZigiIyIpOy0xIT09ZCYmKGMuaGFzaD1lLnN1YnN0cihkKSxlPWUuc2xpY2UoMCxkKSk7ZD1lLmluZGV4T2YoIj8iKTstMSE9PWQ/KGMuc2VhcmNoPWUuc3Vic3RyKGQpLGMucXVlcnk9ZS5zdWJzdHIoZCsxKSxiJiYoYy5xdWVyeT1HZShjLnF1ZXJ5KSksZT1lLnNsaWNlKDAsZCkpOmImJihjLnNlYXJjaD0iIixjLnF1ZXJ5PXt9KTtlJiYoYy5wYXRobmFtZT1lKTskYVtmXSYmYy5ob3N0bmFtZSYmIWMucGF0aG5hbWUmJihjLnBhdGhuYW1lPSIvIik7aWYoYy5wYXRobmFtZXx8Yy5zZWFyY2gpZD1jLnBhdGhuYW1lfHwiIixjLnBhdGg9ZCsoYy5zZWFyY2h8fCIiKTtjLmhyZWY9UGMoYyk7cmV0dXJuIGN9ZnVuY3Rpb24gUGMoYyl7dmFyIGE9Yy5hdXRofHwiIjthJiYoYT1lbmNvZGVVUklDb21wb25lbnQoYSksYT1hLnJlcGxhY2UoLyUzQS9pLCI6IiksYSs9IkAiKTt2YXIgYj1jLnByb3RvY29sfHwiIiwKZD1jLnBhdGhuYW1lfHwiIixlPWMuaGFzaHx8IiIsZj0hMSxnPSIiO2MuaG9zdD9mPWErYy5ob3N0OmMuaG9zdG5hbWUmJihmPWErKC0xPT09Yy5ob3N0bmFtZS5pbmRleE9mKCI6Iik/Yy5ob3N0bmFtZToiWyIrdGhpcy5ob3N0bmFtZSsiXSIpLGMucG9ydCYmKGYrPSI6IitjLnBvcnQpKTtjLnF1ZXJ5JiZ3YShjLnF1ZXJ5KSYmT2JqZWN0LmtleXMoYy5xdWVyeSkubGVuZ3RoJiYoZz14ZyhjLnF1ZXJ5KSk7YT1jLnNlYXJjaHx8ZyYmIj8iK2d8fCIiO2ImJiI6IiE9PWIuc3Vic3RyKC0xKSYmKGIrPSI6Iik7Yy5zbGFzaGVzfHwoIWJ8fCRhW2JdKSYmITEhPT1mPyhmPSIvLyIrKGZ8fCIiKSxkJiYiLyIhPT1kLmNoYXJBdCgwKSYmKGQ9Ii8iK2QpKTpmfHwoZj0iIik7ZSYmIiMiIT09ZS5jaGFyQXQoMCkmJihlPSIjIitlKTthJiYiPyIhPT1hLmNoYXJBdCgwKSYmKGE9Ij8iK2EpO2Q9ZC5yZXBsYWNlKC9bPyNdL2csZnVuY3Rpb24oYSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChhKX0pOwphPWEucmVwbGFjZSgiIyIsIiUyMyIpO3JldHVybiBiK2YrZCthK2V9ZnVuY3Rpb24gS2UoYyl7dmFyIGE9Yy5ob3N0LGI9RWcuZXhlYyhhKTtiJiYoYj1iWzBdLCI6IiE9PWImJihjLnBvcnQ9Yi5zdWJzdHIoMSkpLGE9YS5zdWJzdHIoMCxhLmxlbmd0aC1iLmxlbmd0aCkpO2EmJihjLmhvc3RuYW1lPWEpfWZ1bmN0aW9uIFFjKGMsYSl7UWM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsYyl7YS5fX3Byb3RvX189Y318fGZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBiIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShiKSYmKGFbYl09Y1tiXSl9O3JldHVybiBRYyhjLGEpfWZ1bmN0aW9uIFJjKGMsYSl7ZnVuY3Rpb24gYigpe3RoaXMuY29uc3RydWN0b3I9Y31RYyhjLGEpO2MucHJvdG90eXBlPW51bGw9PT1hP09iamVjdC5jcmVhdGUoYSk6KGIucHJvdG90eXBlPWEucHJvdG90eXBlLG5ldyBiKX1mdW5jdGlvbiBTYihjKXt2YXIgYT0KImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmNbU3ltYm9sLml0ZXJhdG9yXSxiPTA7cmV0dXJuIGE/YS5jYWxsKGMpOntuZXh0OmZ1bmN0aW9uKCl7YyYmYj49Yy5sZW5ndGgmJihjPXZvaWQgMCk7cmV0dXJue3ZhbHVlOmMmJmNbYisrXSxkb25lOiFjfX19fWZ1bmN0aW9uIFRiKGMsYSl7dmFyIGI9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmNbU3ltYm9sLml0ZXJhdG9yXTtpZighYilyZXR1cm4gYztjPWIuY2FsbChjKTt2YXIgZCxlPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1hfHwwPGEtLSkmJiEoZD1jLm5leHQoKSkuZG9uZTspZS5wdXNoKGQudmFsdWUpfWNhdGNoKGcpe3ZhciBmPXtlcnJvcjpnfX1maW5hbGx5e3RyeXtkJiYhZC5kb25lJiYoYj1jWyJyZXR1cm4iXSkmJmIuY2FsbChjKX1maW5hbGx5e2lmKGYpdGhyb3cgZi5lcnJvcjt9fXJldHVybiBlfWZ1bmN0aW9uIFViKCl7Zm9yKHZhciBjPVtdLGE9MDthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKWM9Yy5jb25jYXQoVGIoYXJndW1lbnRzW2FdKSk7CnJldHVybiBjfWZ1bmN0aW9uIE1lKCl7U2M9ITA7Zm9yKHZhciBjPTA7NjQ+YzsrK2MpZWFbY109IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iW2NdLE1bIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLmNoYXJDb2RlQXQoYyldPWM7TVs0NV09NjI7TVs5NV09NjN9ZnVuY3Rpb24gRmcoYyxhLGIpe2Zvcih2YXIgZD1bXSxlPWE7ZTxiO2UrPTMpYT0oY1tlXTw8MTYpKyhjW2UrMV08PDgpK2NbZSsyXSxkLnB1c2goZWFbYT4+MTgmNjNdK2VhW2E+PjEyJjYzXStlYVthPj42JjYzXStlYVthJjYzXSk7cmV0dXJuIGQuam9pbigiIil9ZnVuY3Rpb24gTmUoYyl7U2N8fE1lKCk7Zm9yKHZhciBhPWMubGVuZ3RoLGI9YSUzLGQ9IiIsZT1bXSxmPTAsZz1hLWI7ZjxnO2YrPTE2MzgzKWUucHVzaChGZyhjLGYsZisxNjM4Mz5nP2c6ZisxNjM4MykpOzE9PT0KYj8oYz1jW2EtMV0sZCs9ZWFbYz4+Ml0sZCs9ZWFbYzw8NCY2M10sZCs9Ij09Iik6Mj09PWImJihjPShjW2EtMl08PDgpK2NbYS0xXSxkKz1lYVtjPj4xMF0sZCs9ZWFbYz4+NCY2M10sZCs9ZWFbYzw8MiY2M10sZCs9Ij0iKTtlLnB1c2goZCk7cmV0dXJuIGUuam9pbigiIil9ZnVuY3Rpb24gVmIoYyxhLGIsZCxlKXt2YXIgZj04KmUtZC0xLGc9KDE8PGYpLTEsaD1nPj4xLGs9LTc7ZT1iP2UtMTowO3ZhciB0PWI/LTE6MSxxPWNbYStlXTtlKz10O2I9cSYoMTw8LWspLTE7cT4+PS1rO2ZvcihrKz1mOzA8aztiPTI1NipiK2NbYStlXSxlKz10LGstPTgpO2Y9YiYoMTw8LWspLTE7Yj4+PS1rO2ZvcihrKz1kOzA8aztmPTI1NipmK2NbYStlXSxlKz10LGstPTgpO2lmKDA9PT1iKWI9MS1oO2Vsc2V7aWYoYj09PWcpcmV0dXJuIGY/TmFOOkluZmluaXR5KihxPy0xOjEpO2YrPU1hdGgucG93KDIsZCk7Yi09aH1yZXR1cm4ocT8tMToxKSpmKk1hdGgucG93KDIsYi1kKX1mdW5jdGlvbiBXYihjLAphLGIsZCxlLGYpe3ZhciBnLGg9OCpmLWUtMSxrPSgxPDxoKS0xLHQ9az4+MSxxPTIzPT09ZT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjA7Zj1kPzA6Zi0xO3ZhciBBPWQ/MTotMSxyPTA+YXx8MD09PWEmJjA+MS9hPzE6MDthPU1hdGguYWJzKGEpO2Zvcihpc05hTihhKXx8SW5maW5pdHk9PT1hPyhhPWlzTmFOKGEpPzE6MCxkPWspOihkPU1hdGguZmxvb3IoTWF0aC5sb2coYSkvTWF0aC5MTjIpLDE+YSooZz1NYXRoLnBvdygyLC1kKSkmJihkLS0sZyo9MiksYT0xPD1kK3Q/YStxL2c6YStxKk1hdGgucG93KDIsMS10KSwyPD1hKmcmJihkKyssZy89MiksZCt0Pj1rPyhhPTAsZD1rKToxPD1kK3Q/KGE9KGEqZy0xKSpNYXRoLnBvdygyLGUpLGQrPXQpOihhPWEqTWF0aC5wb3coMix0LTEpKk1hdGgucG93KDIsZSksZD0wKSk7ODw9ZTtjW2IrZl09YSYyNTUsZis9QSxhLz0yNTYsZS09OCk7ZD1kPDxlfGE7Zm9yKGgrPWU7MDxoO2NbYitmXT1kJjI1NSxmKz1BLGQvPTI1NiwKaC09OCk7Y1tiK2YtQV18PTEyOCpyfWZ1bmN0aW9uIG1hKGMsYSl7aWYoKG0uVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjMpPGEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7bS5UWVBFRF9BUlJBWV9TVVBQT1JUPyhjPW5ldyBVaW50OEFycmF5KGEpLGMuX19wcm90b19fPW0ucHJvdG90eXBlKToobnVsbD09PWMmJihjPW5ldyBtKGEpKSxjLmxlbmd0aD1hKTtyZXR1cm4gY31mdW5jdGlvbiBtKGMsYSxiKXtpZighKG0uVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIG0pKXJldHVybiBuZXcgbShjLGEsYik7aWYoIm51bWJlciI9PT10eXBlb2YgYyl7aWYoInN0cmluZyI9PT10eXBlb2YgYSl0aHJvdyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gVGModGhpcyxjKX1yZXR1cm4gT2UodGhpcyxjLAphLGIpfWZ1bmN0aW9uIE9lKGMsYSxiLGQpe2lmKCJudW1iZXIiPT09dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe2EuYnl0ZUxlbmd0aDtpZigwPmJ8fGEuYnl0ZUxlbmd0aDxiKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYoYS5ieXRlTGVuZ3RoPGIrKGR8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7YT12b2lkIDA9PT1iJiZ2b2lkIDA9PT1kP25ldyBVaW50OEFycmF5KGEpOnZvaWQgMD09PWQ/bmV3IFVpbnQ4QXJyYXkoYSxiKTpuZXcgVWludDhBcnJheShhLGIsZCk7bS5UWVBFRF9BUlJBWV9TVVBQT1JUPyhjPWEsYy5fX3Byb3RvX189bS5wcm90b3R5cGUpOmM9VWMoYyxhKTtyZXR1cm4gY31pZigic3RyaW5nIj09PQp0eXBlb2YgYSl7ZD1jO2M9YjtpZigic3RyaW5nIiE9PXR5cGVvZiBjfHwiIj09PWMpYz0idXRmOCI7aWYoIW0uaXNFbmNvZGluZyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTtiPVBlKGEsYyl8MDtkPW1hKGQsYik7YT1kLndyaXRlKGEsYyk7YSE9PWImJihkPWQuc2xpY2UoMCxhKSk7cmV0dXJuIGR9cmV0dXJuIEdnKGMsYSl9ZnVuY3Rpb24gUWUoYyl7aWYoIm51bWJlciIhPT10eXBlb2YgYyl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKDA+Yyl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyk7fWZ1bmN0aW9uIFRjKGMsYSl7UWUoYSk7Yz1tYShjLDA+YT8wOlZjKGEpfDApO2lmKCFtLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBiPTA7YjxhOysrYiljW2JdPTA7cmV0dXJuIGN9ZnVuY3Rpb24gVWMoYywKYSl7dmFyIGI9MD5hLmxlbmd0aD8wOlZjKGEubGVuZ3RoKXwwO2M9bWEoYyxiKTtmb3IodmFyIGQ9MDtkPGI7ZCs9MSljW2RdPWFbZF0mMjU1O3JldHVybiBjfWZ1bmN0aW9uIEdnKGMsYSl7aWYoZmEoYSkpe3ZhciBiPVZjKGEubGVuZ3RoKXwwO2M9bWEoYyxiKTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGM7YS5jb3B5KGMsMCwwLGIpO3JldHVybiBjfWlmKGEpe2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZhLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIGEpcmV0dXJuKGI9Im51bWJlciIhPT10eXBlb2YgYS5sZW5ndGgpfHwoYj1hLmxlbmd0aCxiPWIhPT1iKSxiP21hKGMsMCk6VWMoYyxhKTtpZigiQnVmZmVyIj09PWEudHlwZSYmUmUoYS5kYXRhKSlyZXR1cm4gVWMoYyxhLmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKTsKfWZ1bmN0aW9uIFZjKGMpe2lmKGM+PShtLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrKG0uVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjMpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIGN8MH1mdW5jdGlvbiBmYShjKXtyZXR1cm4hKG51bGw9PWN8fCFjLl9pc0J1ZmZlcil9ZnVuY3Rpb24gUGUoYyxhKXtpZihmYShjKSlyZXR1cm4gYy5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGMpfHxjIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBjLmJ5dGVMZW5ndGg7InN0cmluZyIhPT10eXBlb2YgYyYmKGM9IiIrYyk7dmFyIGI9Yy5sZW5ndGg7CmlmKDA9PT1iKXJldHVybiAwO2Zvcih2YXIgZD0hMTs7KXN3aXRjaChhKXtjYXNlICJhc2NpaSI6Y2FzZSAibGF0aW4xIjpjYXNlICJiaW5hcnkiOnJldHVybiBiO2Nhc2UgInV0ZjgiOmNhc2UgInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gWGIoYykubGVuZ3RoO2Nhc2UgInVjczIiOmNhc2UgInVjcy0yIjpjYXNlICJ1dGYxNmxlIjpjYXNlICJ1dGYtMTZsZSI6cmV0dXJuIDIqYjtjYXNlICJoZXgiOnJldHVybiBiPj4+MTtjYXNlICJiYXNlNjQiOnJldHVybiBTZShjKS5sZW5ndGg7ZGVmYXVsdDppZihkKXJldHVybiBYYihjKS5sZW5ndGg7YT0oIiIrYSkudG9Mb3dlckNhc2UoKTtkPSEwfX1mdW5jdGlvbiBIZyhjLGEsYil7dmFyIGQ9ITE7aWYodm9pZCAwPT09YXx8MD5hKWE9MDtpZihhPnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKHZvaWQgMD09PWJ8fGI+dGhpcy5sZW5ndGgpYj10aGlzLmxlbmd0aDtpZigwPj1iKXJldHVybiIiO2I+Pj49MDthPj4+PTA7aWYoYjw9YSlyZXR1cm4iIjsKZm9yKGN8fChjPSJ1dGY4Iik7Oylzd2l0Y2goYyl7Y2FzZSAiaGV4IjpjPWE7YT1iO2I9dGhpcy5sZW5ndGg7aWYoIWN8fDA+YyljPTA7aWYoIWF8fDA+YXx8YT5iKWE9YjtkPSIiO2ZvcihiPWM7YjxhOysrYiljPWQsZD10aGlzW2JdLGQ9MTY+ZD8iMCIrZC50b1N0cmluZygxNik6ZC50b1N0cmluZygxNiksZD1jK2Q7cmV0dXJuIGQ7Y2FzZSAidXRmOCI6Y2FzZSAidXRmLTgiOnJldHVybiBUZSh0aGlzLGEsYik7Y2FzZSAiYXNjaWkiOmM9IiI7Zm9yKGI9TWF0aC5taW4odGhpcy5sZW5ndGgsYik7YTxiOysrYSljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXNbYV0mMTI3KTtyZXR1cm4gYztjYXNlICJsYXRpbjEiOmNhc2UgImJpbmFyeSI6Yz0iIjtmb3IoYj1NYXRoLm1pbih0aGlzLmxlbmd0aCxiKTthPGI7KythKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpc1thXSk7cmV0dXJuIGM7Y2FzZSAiYmFzZTY0IjpyZXR1cm4gYT0wPT09YSYmYj09PXRoaXMubGVuZ3RoP05lKHRoaXMpOgpOZSh0aGlzLnNsaWNlKGEsYikpLGE7Y2FzZSAidWNzMiI6Y2FzZSAidWNzLTIiOmNhc2UgInV0ZjE2bGUiOmNhc2UgInV0Zi0xNmxlIjphPXRoaXMuc2xpY2UoYSxiKTtiPSIiO2ZvcihjPTA7YzxhLmxlbmd0aDtjKz0yKWIrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtjXSsyNTYqYVtjKzFdKTtyZXR1cm4gYjtkZWZhdWx0OmlmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitjKTtjPShjKyIiKS50b0xvd2VyQ2FzZSgpO2Q9ITB9fWZ1bmN0aW9uIE1hKGMsYSxiKXt2YXIgZD1jW2FdO2NbYV09Y1tiXTtjW2JdPWR9ZnVuY3Rpb24gVWUoYyxhLGIsZCxlKXtpZigwPT09Yy5sZW5ndGgpcmV0dXJuLTE7InN0cmluZyI9PT10eXBlb2YgYj8oZD1iLGI9MCk6MjE0NzQ4MzY0NzxiP2I9MjE0NzQ4MzY0NzotMjE0NzQ4MzY0OD5iJiYoYj0tMjE0NzQ4MzY0OCk7Yj0rYjtpc05hTihiKSYmKGI9ZT8wOmMubGVuZ3RoLTEpOzA+YiYmKGI9Yy5sZW5ndGgrYik7aWYoYj49CmMubGVuZ3RoKXtpZihlKXJldHVybi0xO2I9Yy5sZW5ndGgtMX1lbHNlIGlmKDA+YilpZihlKWI9MDtlbHNlIHJldHVybi0xOyJzdHJpbmciPT09dHlwZW9mIGEmJihhPW0uZnJvbShhLGQpKTtpZihmYShhKSlyZXR1cm4gMD09PWEubGVuZ3RoPy0xOlZlKGMsYSxiLGQsZSk7aWYoIm51bWJlciI9PT10eXBlb2YgYSlyZXR1cm4gYSY9MjU1LG0uVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2U/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGMsYSxiKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGMsYSxiKTpWZShjLFthXSxiLGQsZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIik7fWZ1bmN0aW9uIFZlKGMsYSxiLGQsZSl7ZnVuY3Rpb24gZihhLGMpe3JldHVybiAxPT09Zz9hW2NdOmEucmVhZFVJbnQxNkJFKGMqCmcpfXZhciBnPTEsaD1jLmxlbmd0aCxrPWEubGVuZ3RoO2lmKHZvaWQgMCE9PWQmJihkPVN0cmluZyhkKS50b0xvd2VyQ2FzZSgpLCJ1Y3MyIj09PWR8fCJ1Y3MtMiI9PT1kfHwidXRmMTZsZSI9PT1kfHwidXRmLTE2bGUiPT09ZCkpe2lmKDI+Yy5sZW5ndGh8fDI+YS5sZW5ndGgpcmV0dXJuLTE7Zz0yO2gvPTI7ay89MjtiLz0yfWlmKGUpZm9yKGQ9LTE7YjxoO2IrKylpZihmKGMsYik9PT1mKGEsLTE9PT1kPzA6Yi1kKSl7aWYoLTE9PT1kJiYoZD1iKSxiLWQrMT09PWspcmV0dXJuIGQqZ31lbHNlLTEhPT1kJiYoYi09Yi1kKSxkPS0xO2Vsc2UgZm9yKGIraz5oJiYoYj1oLWspOzA8PWI7Yi0tKXtoPSEwO2ZvcihkPTA7ZDxrO2QrKylpZihmKGMsYitkKSE9PWYoYSxkKSl7aD0hMTticmVha31pZihoKXJldHVybiBifXJldHVybi0xfWZ1bmN0aW9uIFRlKGMsYSxiKXtiPU1hdGgubWluKGMubGVuZ3RoLGIpO2Zvcih2YXIgZD1bXTthPGI7KXt2YXIgZT1jW2FdLGY9bnVsbCxnPTIzOTxlPwo0OjIyMzxlPzM6MTkxPGU/MjoxO2lmKGErZzw9Yilzd2l0Y2goZyl7Y2FzZSAxOjEyOD5lJiYoZj1lKTticmVhaztjYXNlIDI6dmFyIGg9Y1thKzFdOzEyOD09PShoJjE5MikmJihlPShlJjMxKTw8NnxoJjYzLDEyNzxlJiYoZj1lKSk7YnJlYWs7Y2FzZSAzOmg9Y1thKzFdO3ZhciBrPWNbYSsyXTsxMjg9PT0oaCYxOTIpJiYxMjg9PT0oayYxOTIpJiYoZT0oZSYxNSk8PDEyfChoJjYzKTw8NnxrJjYzLDIwNDc8ZSYmKDU1Mjk2PmV8fDU3MzQzPGUpJiYoZj1lKSk7YnJlYWs7Y2FzZSA0Omg9Y1thKzFdO2s9Y1thKzJdO3ZhciB0PWNbYSszXTsxMjg9PT0oaCYxOTIpJiYxMjg9PT0oayYxOTIpJiYxMjg9PT0odCYxOTIpJiYoZT0oZSYxNSk8PDE4fChoJjYzKTw8MTJ8KGsmNjMpPDw2fHQmNjMsNjU1MzU8ZSYmMTExNDExMj5lJiYoZj1lKSl9bnVsbD09PWY/KGY9NjU1MzMsZz0xKTo2NTUzNTxmJiYoZi09NjU1MzYsZC5wdXNoKGY+Pj4xMCYxMDIzfDU1Mjk2KSxmPTU2MzIwfGYmMTAyMyk7CmQucHVzaChmKTthKz1nfWM9ZC5sZW5ndGg7aWYoYzw9V2UpZD1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxkKTtlbHNle2I9IiI7Zm9yKGE9MDthPGM7KWIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGQuc2xpY2UoYSxhKz1XZSkpO2Q9Yn1yZXR1cm4gZH1mdW5jdGlvbiBJKGMsYSxiKXtpZigwIT09YyUxfHwwPmMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGMrYT5iKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIik7fWZ1bmN0aW9uIFYoYyxhLGIsZCxlLGYpe2lmKCFmYShjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoYT5lfHxhPGYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKGIrZD5jLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7Cn1mdW5jdGlvbiBZYihjLGEsYixkKXswPmEmJihhPTY1NTM1K2ErMSk7Zm9yKHZhciBlPTAsZj1NYXRoLm1pbihjLmxlbmd0aC1iLDIpO2U8ZjsrK2UpY1tiK2VdPShhJjI1NTw8OCooZD9lOjEtZSkpPj4+OCooZD9lOjEtZSl9ZnVuY3Rpb24gWmIoYyxhLGIsZCl7MD5hJiYoYT00Mjk0OTY3Mjk1K2ErMSk7Zm9yKHZhciBlPTAsZj1NYXRoLm1pbihjLmxlbmd0aC1iLDQpO2U8ZjsrK2UpY1tiK2VdPWE+Pj44KihkP2U6My1lKSYyNTV9ZnVuY3Rpb24gJGIoYyxhLGIsZCl7aWYoYitkPmMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZigwPmIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO31mdW5jdGlvbiBYYihjLGEpe2E9YXx8SW5maW5pdHk7Zm9yKHZhciBiLGQ9Yy5sZW5ndGgsZT1udWxsLGY9W10sZz0wO2c8ZDsrK2cpe2I9Yy5jaGFyQ29kZUF0KGcpO2lmKDU1Mjk1PGImJjU3MzQ0PmIpe2lmKCFlKXtpZig1NjMxOTwKYil7LTE8KGEtPTMpJiZmLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWVsc2UgaWYoZysxPT09ZCl7LTE8KGEtPTMpJiZmLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWU9Yjtjb250aW51ZX1pZig1NjMyMD5iKXstMTwoYS09MykmJmYucHVzaCgyMzksMTkxLDE4OSk7ZT1iO2NvbnRpbnVlfWI9KGUtNTUyOTY8PDEwfGItNTYzMjApKzY1NTM2fWVsc2UgZSYmLTE8KGEtPTMpJiZmLnB1c2goMjM5LDE5MSwxODkpO2U9bnVsbDtpZigxMjg+Yil7aWYoMD4tLWEpYnJlYWs7Zi5wdXNoKGIpfWVsc2UgaWYoMjA0OD5iKXtpZigwPihhLT0yKSlicmVhaztmLnB1c2goYj4+NnwxOTIsYiY2M3wxMjgpfWVsc2UgaWYoNjU1MzY+Yil7aWYoMD4oYS09MykpYnJlYWs7Zi5wdXNoKGI+PjEyfDIyNCxiPj42JjYzfDEyOCxiJjYzfDEyOCl9ZWxzZSBpZigxMTE0MTEyPmIpe2lmKDA+KGEtPTQpKWJyZWFrO2YucHVzaChiPj4xOHwyNDAsYj4+MTImNjN8MTI4LGI+PjYmNjN8MTI4LGImNjN8MTI4KX1lbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTsKfXJldHVybiBmfWZ1bmN0aW9uIFhlKGMpe2Zvcih2YXIgYT1bXSxiPTA7YjxjLmxlbmd0aDsrK2IpYS5wdXNoKGMuY2hhckNvZGVBdChiKSYyNTUpO3JldHVybiBhfWZ1bmN0aW9uIFNlKGMpe2M9KGMudHJpbT9jLnRyaW0oKTpjLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKSkucmVwbGFjZShJZywiIik7aWYoMj5jLmxlbmd0aCljPSIiO2Vsc2UgZm9yKDswIT09Yy5sZW5ndGglNDspYys9Ij0iO1NjfHxNZSgpO3ZhciBhPWMubGVuZ3RoO2lmKDA8YSU0KXRocm93IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIGI9Ij0iPT09Y1thLTJdPzI6Ij0iPT09Y1thLTFdPzE6MCxkPW5ldyBKZygzKmEvNC1iKSxlPTA8Yj9hLTQ6YSxmPTA7Zm9yKGE9MDthPGU7YSs9NCl7dmFyIGc9TVtjLmNoYXJDb2RlQXQoYSldPDwxOHxNW2MuY2hhckNvZGVBdChhKzEpXTw8MTJ8TVtjLmNoYXJDb2RlQXQoYSsyKV08PDZ8TVtjLmNoYXJDb2RlQXQoYSsKMyldO2RbZisrXT1nPj4xNiYyNTU7ZFtmKytdPWc+PjgmMjU1O2RbZisrXT1nJjI1NX0yPT09Yj8oZz1NW2MuY2hhckNvZGVBdChhKV08PDJ8TVtjLmNoYXJDb2RlQXQoYSsxKV0+PjQsZFtmKytdPWcmMjU1KToxPT09YiYmKGc9TVtjLmNoYXJDb2RlQXQoYSldPDwxMHxNW2MuY2hhckNvZGVBdChhKzEpXTw8NHxNW2MuY2hhckNvZGVBdChhKzIpXT4+MixkW2YrK109Zz4+OCYyNTUsZFtmKytdPWcmMjU1KTtyZXR1cm4gZH1mdW5jdGlvbiB1YihjLGEsYixkKXtmb3IodmFyIGU9MDtlPGQmJiEoZStiPj1hLmxlbmd0aHx8ZT49Yy5sZW5ndGgpOysrZSlhW2UrYl09Y1tlXTtyZXR1cm4gZX1mdW5jdGlvbiBZZShjKXtyZXR1cm4gbnVsbCE9YyYmKCEhYy5faXNCdWZmZXJ8fFplKGMpfHwiZnVuY3Rpb24iPT09dHlwZW9mIGMucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PT10eXBlb2YgYy5zbGljZSYmWmUoYy5zbGljZSgwLDApKSl9ZnVuY3Rpb24gWmUoYyl7cmV0dXJuISFjLmNvbnN0cnVjdG9yJiYKImZ1bmN0aW9uIj09PXR5cGVvZiBjLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZjLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGMpfWZ1bmN0aW9uIFdjKGMsYSl7cmV0dXJuIGE9e2V4cG9ydHM6e319LGMoYSxhLmV4cG9ydHMpLGEuZXhwb3J0c31mdW5jdGlvbiAkZSgpe3Rocm93IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIik7fWZ1bmN0aW9uIGFmKCl7dGhyb3cgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpO31mdW5jdGlvbiBiZihjKXtpZihyYT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoYywwKTtpZigocmE9PT0kZXx8IXJhKSYmc2V0VGltZW91dClyZXR1cm4gcmE9c2V0VGltZW91dCxzZXRUaW1lb3V0KGMsMCk7dHJ5e3JldHVybiByYShjLDApfWNhdGNoKGEpe3RyeXtyZXR1cm4gcmEuY2FsbChudWxsLGMsMCl9Y2F0Y2goYil7cmV0dXJuIHJhLmNhbGwodGhpcyxjLDApfX19ZnVuY3Rpb24gS2coYyl7aWYoeWE9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChjKTsKaWYoKHlhPT09YWZ8fCF5YSkmJmNsZWFyVGltZW91dClyZXR1cm4geWE9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChjKTt0cnl7cmV0dXJuIHlhKGMpfWNhdGNoKGEpe3RyeXtyZXR1cm4geWEuY2FsbChudWxsLGMpfWNhdGNoKGIpe3JldHVybiB5YS5jYWxsKHRoaXMsYyl9fX1mdW5jdGlvbiBMZygpe2FiJiZOYSYmKGFiPSExLE5hLmxlbmd0aD9zYT1OYS5jb25jYXQoc2EpOmFjPS0xLHNhLmxlbmd0aCYmY2YoKSl9ZnVuY3Rpb24gY2YoKXtpZighYWIpe3ZhciBjPWJmKExnKTthYj0hMDtmb3IodmFyIGE9c2EubGVuZ3RoO2E7KXtOYT1zYTtmb3Ioc2E9W107KythYzxhOylOYSYmTmFbYWNdLnJ1bigpO2FjPS0xO2E9c2EubGVuZ3RofU5hPW51bGw7YWI9ITE7S2coYyl9fWZ1bmN0aW9uIGRmKGMpe3ZhciBhPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgYj0xO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYVtiLTFdPWFyZ3VtZW50c1tiXTsKc2EucHVzaChuZXcgZWYoYyxhKSk7MSE9PXNhLmxlbmd0aHx8YWJ8fGJmKGNmKX1mdW5jdGlvbiBlZihjLGEpe3RoaXMuZnVuPWM7dGhpcy5hcnJheT1hfWZ1bmN0aW9uIE9hKCl7fWZ1bmN0aW9uIGhhKGMpe2lmKCJzdHJpbmciIT09dHlwZW9mIGMpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KGMpKTt9ZnVuY3Rpb24gZmYoYyxhKXtmb3IodmFyIGI9IiIsZD0wLGU9LTEsZj0wLGcsaD0wO2g8PWMubGVuZ3RoOysraCl7aWYoaDxjLmxlbmd0aClnPWMuY2hhckNvZGVBdChoKTtlbHNlIGlmKDQ3PT09ZylicmVhaztlbHNlIGc9NDc7aWYoNDc9PT1nKXtpZihlIT09aC0xJiYxIT09ZilpZihlIT09aC0xJiYyPT09Zil7aWYoMj5iLmxlbmd0aHx8MiE9PWR8fDQ2IT09Yi5jaGFyQ29kZUF0KGIubGVuZ3RoLTEpfHw0NiE9PWIuY2hhckNvZGVBdChiLmxlbmd0aC0yKSlpZigyPGIubGVuZ3RoKXtpZihlPWIubGFzdEluZGV4T2YoIi8iKSwKZSE9PWIubGVuZ3RoLTEpey0xPT09ZT8oYj0iIixkPTApOihiPWIuc2xpY2UoMCxlKSxkPWIubGVuZ3RoLTEtYi5sYXN0SW5kZXhPZigiLyIpKTtlPWg7Zj0wO2NvbnRpbnVlfX1lbHNlIGlmKDI9PT1iLmxlbmd0aHx8MT09PWIubGVuZ3RoKXtiPSIiO2Q9MDtlPWg7Zj0wO2NvbnRpbnVlfWEmJihiPTA8Yi5sZW5ndGg/YisiLy4uIjoiLi4iLGQ9Mil9ZWxzZSBiPTA8Yi5sZW5ndGg/YisoIi8iK2Muc2xpY2UoZSsxLGgpKTpjLnNsaWNlKGUrMSxoKSxkPWgtZS0xO2U9aDtmPTB9ZWxzZSA0Nj09PWcmJi0xIT09Zj8rK2Y6Zj0tMX1yZXR1cm4gYn1mdW5jdGlvbiBQYShjKXt2YXIgYT1NYXRoLnRydW5jKGMpO2M9bihNYXRoLnJvdW5kKDFFNiooYy1hKSkpO3JldHVybiBuKGEpKm4oMUU2KStjfWZ1bmN0aW9uIGJiKGMpeyJudW1iZXIiPT09dHlwZW9mIGMmJihjPU1hdGgudHJ1bmMoYykpO2M9bihjKTtyZXR1cm4gTnVtYmVyKGMvbigxRTYpKX1mdW5jdGlvbiBCKGMpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgYT0KW10sYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYVtiXT1hcmd1bWVudHNbYl07dHJ5e3JldHVybiBjLmFwcGx5KHZvaWQgMCxVYihhKSl9Y2F0Y2goZCl7aWYoZCYmZC5jb2RlJiYic3RyaW5nIj09PXR5cGVvZiBkLmNvZGUpcmV0dXJuIE1nW2QuY29kZV18fDI4O2lmKGQgaW5zdGFuY2VvZiBYYylyZXR1cm4gZC5lcnJubzt0aHJvdyBkO319fWZ1bmN0aW9uIGdmKGMsYSl7dmFyIGI9Yy5GRF9NQVAuZ2V0KGEpO2lmKCFiKXRocm93IG5ldyBYYyg4KTtpZih2b2lkIDA9PT1iLmZpbGV0eXBlKXt2YXIgZD1jLmJpbmRpbmdzLmZzLmZzdGF0U3luYyhiLnJlYWwpO2M9aGYoYyxhLGQpO2E9Yy5yaWdodHNCYXNlO2Q9Yy5yaWdodHNJbmhlcml0aW5nO2IuZmlsZXR5cGU9Yy5maWxldHlwZTtiLnJpZ2h0c3x8KGIucmlnaHRzPXtiYXNlOmEsaW5oZXJpdGluZzpkfSl9cmV0dXJuIGJ9ZnVuY3Rpb24gaGYoYyxhLGIpe3N3aXRjaCghMCl7Y2FzZSBiLmlzQmxvY2tEZXZpY2UoKTpyZXR1cm57ZmlsZXR5cGU6MSwKcmlnaHRzQmFzZTpjYixyaWdodHNJbmhlcml0aW5nOmNifTtjYXNlIGIuaXNDaGFyYWN0ZXJEZXZpY2UoKTpyZXR1cm4gdm9pZCAwIT09YSYmYy5iaW5kaW5ncy5pc1RUWShhKT97ZmlsZXR5cGU6MixyaWdodHNCYXNlOk5nLHJpZ2h0c0luaGVyaXRpbmc6T2d9OntmaWxldHlwZToyLHJpZ2h0c0Jhc2U6Y2IscmlnaHRzSW5oZXJpdGluZzpjYn07Y2FzZSBiLmlzRGlyZWN0b3J5KCk6cmV0dXJue2ZpbGV0eXBlOjMscmlnaHRzQmFzZTpZYyxyaWdodHNJbmhlcml0aW5nOmpmfTtjYXNlIGIuaXNGSUZPKCk6cmV0dXJue2ZpbGV0eXBlOjYscmlnaHRzQmFzZTprZixyaWdodHNJbmhlcml0aW5nOmNifTtjYXNlIGIuaXNGaWxlKCk6cmV0dXJue2ZpbGV0eXBlOjQscmlnaHRzQmFzZTpsZixyaWdodHNJbmhlcml0aW5nOlBnfTtjYXNlIGIuaXNTb2NrZXQoKTpyZXR1cm57ZmlsZXR5cGU6NixyaWdodHNCYXNlOmtmLHJpZ2h0c0luaGVyaXRpbmc6Y2J9O2Nhc2UgYi5pc1N5bWJvbGljTGluaygpOnJldHVybntmaWxldHlwZTo3LApyaWdodHNCYXNlOm4oMCkscmlnaHRzSW5oZXJpdGluZzpuKDApfTtkZWZhdWx0OnJldHVybntmaWxldHlwZTowLHJpZ2h0c0Jhc2U6bigwKSxyaWdodHNJbmhlcml0aW5nOm4oMCl9fX1sZXQgdmQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksRWY9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksRGY9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLG5jPW5ldyBXZWFrU2V0LHlkPW5ldyBNYXAoW1sicHJveHkiLHtjYW5IYW5kbGU6Yz0+YyYmY1t2ZF0sc2VyaWFsaXplKGMpe2NvbnN0IHtwb3J0MTphLHBvcnQyOmJ9PW5ldyBNZXNzYWdlQ2hhbm5lbDttYyhjLGEpO3JldHVybltiLFtiXV19LGRlc2VyaWFsaXplOmM9PntjLnN0YXJ0KCk7cmV0dXJuIHBjKGMsW10sdm9pZCAwKX19XSxbInRocm93Iix7Y2FuSGFuZGxlOmM9Pm5jLmhhcyhjKSxzZXJpYWxpemUoYyl7Y29uc3QgYT1jIGluc3RhbmNlb2YgRXJyb3I7bGV0IGI9YzthJiYoYj17aXNFcnJvcjphLG1lc3NhZ2U6Yy5tZXNzYWdlLApzdGFjazpjLnN0YWNrfSk7cmV0dXJuW2IsW11dfSxkZXNlcmlhbGl6ZShjKXtpZihjLmlzRXJyb3IpdGhyb3cgT2JqZWN0LmFzc2lnbihFcnJvcigpLGMpO3Rocm93IGM7fX1dXSkseGQ9bmV3IFdlYWtNYXA7dmFyIHFjPWZ1bmN0aW9uKGMsYSl7cWM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsYyl7YS5fX3Byb3RvX189Y318fGZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBiIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShiKSYmKGFbYl09Y1tiXSl9O3JldHVybiBxYyhjLGEpfSxkYj1mdW5jdGlvbigpe2RiPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGMpe2Zvcih2YXIgYSxiPTEsZD1hcmd1bWVudHMubGVuZ3RoO2I8ZDtiKyspe2E9YXJndW1lbnRzW2JdO2Zvcih2YXIgZSBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGUpJiYoY1tlXT1hW2VdKX1yZXR1cm4gY307cmV0dXJuIGRiLmFwcGx5KHRoaXMsCmFyZ3VtZW50cyl9LG5hPSJ1bmRlZmluZWQiIT09dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sTj0idW5kZWZpbmVkIiE9PXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9PXR5cGVvZiBuYT9uYToidW5kZWZpbmVkIiE9PXR5cGVvZiBzZWxmP3NlbGY6e30sdT1LKGZ1bmN0aW9uKGMsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2EuY29uc3RhbnRzPXtPX1JET05MWTowLE9fV1JPTkxZOjEsT19SRFdSOjIsU19JRk1UOjYxNDQwLFNfSUZSRUc6MzI3NjgsU19JRkRJUjoxNjM4NCxTX0lGQ0hSOjgxOTIsU19JRkJMSzoyNDU3NixTX0lGSUZPOjQwOTYsU19JRkxOSzo0MDk2MCxTX0lGU09DSzo0OTE1MixPX0NSRUFUOjY0LE9fRVhDTDoxMjgsCk9fTk9DVFRZOjI1NixPX1RSVU5DOjUxMixPX0FQUEVORDoxMDI0LE9fRElSRUNUT1JZOjY1NTM2LE9fTk9BVElNRToyNjIxNDQsT19OT0ZPTExPVzoxMzEwNzIsT19TWU5DOjEwNTI2NzIsT19ESVJFQ1Q6MTYzODQsT19OT05CTE9DSzoyMDQ4LFNfSVJXWFU6NDQ4LFNfSVJVU1I6MjU2LFNfSVdVU1I6MTI4LFNfSVhVU1I6NjQsU19JUldYRzo1NixTX0lSR1JQOjMyLFNfSVdHUlA6MTYsU19JWEdSUDo4LFNfSVJXWE86NyxTX0lST1RIOjQsU19JV09USDoyLFNfSVhPVEg6MSxGX09LOjAsUl9PSzo0LFdfT0s6MixYX09LOjEsVVZfRlNfU1lNTElOS19ESVI6MSxVVl9GU19TWU1MSU5LX0pVTkNUSU9OOjIsVVZfRlNfQ09QWUZJTEVfRVhDTDoxLFVWX0ZTX0NPUFlGSUxFX0ZJQ0xPTkU6MixVVl9GU19DT1BZRklMRV9GSUNMT05FX0ZPUkNFOjQsQ09QWUZJTEVfRVhDTDoxLENPUFlGSUxFX0ZJQ0xPTkU6MixDT1BZRklMRV9GSUNMT05FX0ZPUkNFOjR9fSk7USh1KTt2YXIgUWc9SyhmdW5jdGlvbihjLAphKXthLmRlZmF1bHQ9ImZ1bmN0aW9uIj09PXR5cGVvZiBCaWdJbnQ/QmlnSW50OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkJpZ0ludCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIik7fX0pLGViPUsoZnVuY3Rpb24oYyxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGI9dS5jb25zdGFudHMuU19JRk1ULGQ9dS5jb25zdGFudHMuU19JRkRJUixlPXUuY29uc3RhbnRzLlNfSUZSRUcsZj11LmNvbnN0YW50cy5TX0lGQkxLLGc9dS5jb25zdGFudHMuU19JRkNIUixoPXUuY29uc3RhbnRzLlNfSUZMTkssaz11LmNvbnN0YW50cy5TX0lGSUZPLHQ9dS5jb25zdGFudHMuU19JRlNPQ0s7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt9YS5idWlsZD1mdW5jdGlvbihjLGIpe3ZvaWQgMD09PWImJihiPSExKTt2YXIgZD1uZXcgYSxlPWMuZ2lkLGY9Yy5hdGltZSxoPWMubXRpbWUsZz1jLmN0aW1lO2I9Yj9RZy5kZWZhdWx0OgpmdW5jdGlvbihhKXtyZXR1cm4gYX07ZC51aWQ9YihjLnVpZCk7ZC5naWQ9YihlKTtkLnJkZXY9YigwKTtkLmJsa3NpemU9Yig0MDk2KTtkLmlubz1iKGMuaW5vKTtkLnNpemU9YihjLmdldFNpemUoKSk7ZC5ibG9ja3M9YigxKTtkLmF0aW1lPWY7ZC5tdGltZT1oO2QuY3RpbWU9ZztkLmJpcnRodGltZT1nO2QuYXRpbWVNcz1iKGYuZ2V0VGltZSgpKTtkLm10aW1lTXM9YihoLmdldFRpbWUoKSk7ZT1iKGcuZ2V0VGltZSgpKTtkLmN0aW1lTXM9ZTtkLmJpcnRodGltZU1zPWU7ZC5kZXY9YigwKTtkLm1vZGU9YihjLm1vZGUpO2Qubmxpbms9YihjLm5saW5rKTtyZXR1cm4gZH07YS5wcm90b3R5cGUuX2NoZWNrTW9kZVByb3BlcnR5PWZ1bmN0aW9uKGEpe3JldHVybihOdW1iZXIodGhpcy5tb2RlKSZiKT09PWF9O2EucHJvdG90eXBlLmlzRGlyZWN0b3J5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGQpfTthLnByb3RvdHlwZS5pc0ZpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoZSl9OwphLnByb3RvdHlwZS5pc0Jsb2NrRGV2aWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGYpfTthLnByb3RvdHlwZS5pc0NoYXJhY3RlckRldmljZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShnKX07YS5wcm90b3R5cGUuaXNTeW1ib2xpY0xpbms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoaCl9O2EucHJvdG90eXBlLmlzRklGTz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShrKX07YS5wcm90b3R5cGUuaXNTb2NrZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkodCl9O3JldHVybiBhfSgpO2EuU3RhdHM9YzthLmRlZmF1bHQ9Y30pO1EoZWIpO3ZhciBLYT0idW5kZWZpbmVkIiE9PXR5cGVvZiBuYT9uYToidW5kZWZpbmVkIiE9PXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxSPVtdLApIPVtdLE9mPSJ1bmRlZmluZWQiIT09dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxzYz0hMSxSZz17fS50b1N0cmluZyxGZD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihjKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1SZy5jYWxsKGMpfTtsLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09S2EuVFlQRURfQVJSQVlfU1VQUE9SVD9LYS5UWVBFRF9BUlJBWV9TVVBQT1JUOiEwO3ZhciBTZz1sLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzO2wucG9vbFNpemU9ODE5MjtsLl9hdWdtZW50PWZ1bmN0aW9uKGMpe2MuX19wcm90b19fPWwucHJvdG90eXBlO3JldHVybiBjfTtsLmZyb209ZnVuY3Rpb24oYyxhLGIpe3JldHVybiBDZChudWxsLGMsYSxiKX07bC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYobC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGwuX19wcm90b19fPVVpbnQ4QXJyYXkpO2wuYWxsb2M9ZnVuY3Rpb24oYywKYSxiKXtFZChjKTtyZXR1cm4gYz0wPj1jP2phKG51bGwsYyk6dm9pZCAwIT09YT8ic3RyaW5nIj09PXR5cGVvZiBiP2phKG51bGwsYykuZmlsbChhLGIpOmphKG51bGwsYykuZmlsbChhKTpqYShudWxsLGMpfTtsLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGMpe3JldHVybiB0YyhudWxsLGMpfTtsLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihjKXtyZXR1cm4gdGMobnVsbCxjKX07bC5pc0J1ZmZlcj1wYTtsLmNvbXBhcmU9ZnVuY3Rpb24oYyxhKXtpZighVyhjKXx8IVcoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGM9PT1hKXJldHVybiAwO2Zvcih2YXIgYj1jLmxlbmd0aCxkPWEubGVuZ3RoLGU9MCxmPU1hdGgubWluKGIsZCk7ZTxmOysrZSlpZihjW2VdIT09YVtlXSl7Yj1jW2VdO2Q9YVtlXTticmVha31yZXR1cm4gYjxkPy0xOmQ8Yj8xOjB9O2wuaXNFbmNvZGluZz1mdW5jdGlvbihjKXtzd2l0Y2goU3RyaW5nKGMpLnRvTG93ZXJDYXNlKCkpe2Nhc2UgImhleCI6Y2FzZSAidXRmOCI6Y2FzZSAidXRmLTgiOmNhc2UgImFzY2lpIjpjYXNlICJsYXRpbjEiOmNhc2UgImJpbmFyeSI6Y2FzZSAiYmFzZTY0IjpjYXNlICJ1Y3MyIjpjYXNlICJ1Y3MtMiI6Y2FzZSAidXRmMTZsZSI6Y2FzZSAidXRmLTE2bGUiOnJldHVybiEwOwpkZWZhdWx0OnJldHVybiExfX07bC5jb25jYXQ9ZnVuY3Rpb24oYyxhKXtpZighRmQoYykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1jLmxlbmd0aClyZXR1cm4gbC5hbGxvYygwKTt2YXIgYjtpZih2b2lkIDA9PT1hKWZvcihiPWE9MDtiPGMubGVuZ3RoOysrYilhKz1jW2JdLmxlbmd0aDthPWwuYWxsb2NVbnNhZmUoYSk7dmFyIGQ9MDtmb3IoYj0wO2I8Yy5sZW5ndGg7KytiKXt2YXIgZT1jW2JdO2lmKCFXKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtlLmNvcHkoYSxkKTtkKz1lLmxlbmd0aH1yZXR1cm4gYX07bC5ieXRlTGVuZ3RoPURkO2wucHJvdG90eXBlLl9pc0J1ZmZlcj0hMDtsLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmxlbmd0aDtpZigwIT09YyUyKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpOwpmb3IodmFyIGE9MDthPGM7YSs9MilHYSh0aGlzLGEsYSsxKTtyZXR1cm4gdGhpc307bC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5sZW5ndGg7aWYoMCE9PWMlNCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIGE9MDthPGM7YSs9NClHYSh0aGlzLGEsYSszKSxHYSh0aGlzLGErMSxhKzIpO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmxlbmd0aDtpZigwIT09YyU4KXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgYT0wO2E8YzthKz04KUdhKHRoaXMsYSxhKzcpLEdhKHRoaXMsYSsxLGErNiksR2EodGhpcyxhKzIsYSs1KSxHYSh0aGlzLGErMyxhKzQpO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBjPQp0aGlzLmxlbmd0aHwwO3JldHVybiAwPT09Yz8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9IZCh0aGlzLDAsYyk6TWYuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtsLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oYyl7aWYoIVcoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09Yz8hMDowPT09bC5jb21wYXJlKHRoaXMsYyl9O2wucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgYz0iIjswPHRoaXMubGVuZ3RoJiYoYz10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSw1MDx0aGlzLmxlbmd0aCYmKGMrPSIgLi4uICIpKTtyZXR1cm4iPEJ1ZmZlciAiK2MrIj4ifTtsLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGMsYSxiLGQsZSl7aWYoIVcoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3ZvaWQgMD09PWEmJihhPTApO3ZvaWQgMD09PQpiJiYoYj1jP2MubGVuZ3RoOjApO3ZvaWQgMD09PWQmJihkPTApO3ZvaWQgMD09PWUmJihlPXRoaXMubGVuZ3RoKTtpZigwPmF8fGI+Yy5sZW5ndGh8fDA+ZHx8ZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoZD49ZSYmYT49YilyZXR1cm4gMDtpZihkPj1lKXJldHVybi0xO2lmKGE+PWIpcmV0dXJuIDE7YT4+Pj0wO2I+Pj49MDtkPj4+PTA7ZT4+Pj0wO2lmKHRoaXM9PT1jKXJldHVybiAwO3ZhciBmPWUtZCxnPWItYSxoPU1hdGgubWluKGYsZyk7ZD10aGlzLnNsaWNlKGQsZSk7Yz1jLnNsaWNlKGEsYik7Zm9yKGE9MDthPGg7KythKWlmKGRbYV0hPT1jW2FdKXtmPWRbYV07Zz1jW2FdO2JyZWFrfXJldHVybiBmPGc/LTE6ZzxmPzE6MH07bC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oYyxhLGIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGMsYSxiKX07bC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihjLGEsYil7cmV0dXJuIElkKHRoaXMsCmMsYSxiLCEwKX07bC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oYyxhLGIpe3JldHVybiBJZCh0aGlzLGMsYSxiLCExKX07bC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYyxhLGIsZCl7aWYodm9pZCAwPT09YSlkPSJ1dGY4IixiPXRoaXMubGVuZ3RoLGE9MDtlbHNlIGlmKHZvaWQgMD09PWImJiJzdHJpbmciPT09dHlwZW9mIGEpZD1hLGI9dGhpcy5sZW5ndGgsYT0wO2Vsc2UgaWYoaXNGaW5pdGUoYSkpYXw9MCxpc0Zpbml0ZShiKT8oYnw9MCx2b2lkIDA9PT1kJiYoZD0idXRmOCIpKTooZD1iLGI9dm9pZCAwKTtlbHNlIHRocm93IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3ZhciBlPXRoaXMubGVuZ3RoLWE7aWYodm9pZCAwPT09Ynx8Yj5lKWI9ZTtpZigwPGMubGVuZ3RoJiYoMD5ifHwwPmEpfHxhPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpOwpkfHwoZD0idXRmOCIpO2ZvcihlPSExOzspc3dpdGNoKGQpe2Nhc2UgImhleCI6YTp7YT1OdW1iZXIoYSl8fDA7ZD10aGlzLmxlbmd0aC1hO2I/KGI9TnVtYmVyKGIpLGI+ZCYmKGI9ZCkpOmI9ZDtkPWMubGVuZ3RoO2lmKDAhPT1kJTIpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7Yj5kLzImJihiPWQvMik7Zm9yKGQ9MDtkPGI7KytkKXtlPXBhcnNlSW50KGMuc3Vic3RyKDIqZCwyKSwxNik7aWYoaXNOYU4oZSkpe2M9ZDticmVhayBhfXRoaXNbYStkXT1lfWM9ZH1yZXR1cm4gYztjYXNlICJ1dGY4IjpjYXNlICJ1dGYtOCI6cmV0dXJuIG5iKEliKGMsdGhpcy5sZW5ndGgtYSksdGhpcyxhLGIpO2Nhc2UgImFzY2lpIjpyZXR1cm4gbmIoTGQoYyksdGhpcyxhLGIpO2Nhc2UgImxhdGluMSI6Y2FzZSAiYmluYXJ5IjpyZXR1cm4gbmIoTGQoYyksdGhpcyxhLGIpO2Nhc2UgImJhc2U2NCI6cmV0dXJuIG5iKEdkKGMpLHRoaXMsYSxiKTtjYXNlICJ1Y3MyIjpjYXNlICJ1Y3MtMiI6Y2FzZSAidXRmMTZsZSI6Y2FzZSAidXRmLTE2bGUiOmQ9CmM7ZT10aGlzLmxlbmd0aC1hO2Zvcih2YXIgZj1bXSxnPTA7ZzxkLmxlbmd0aCYmISgwPihlLT0yKSk7KytnKXt2YXIgaD1kLmNoYXJDb2RlQXQoZyk7Yz1oPj44O2glPTI1NjtmLnB1c2goaCk7Zi5wdXNoKGMpfXJldHVybiBuYihmLHRoaXMsYSxiKTtkZWZhdWx0OmlmKGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitkKTtkPSgiIitkKS50b0xvd2VyQ2FzZSgpO2U9ITB9fTtsLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBLZD00MDk2O2wucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGMsYSl7dmFyIGI9dGhpcy5sZW5ndGg7Yz1+fmM7YT12b2lkIDA9PT1hP2I6fn5hOzA+Yz8oYys9YiwwPmMmJihjPTApKTpjPmImJihjPWIpOzA+YT8oYSs9YiwwPmEmJihhPTApKTphPmImJihhPWIpO2E8YyYmKGE9Yyk7aWYobC5UWVBFRF9BUlJBWV9TVVBQT1JUKWE9CnRoaXMuc3ViYXJyYXkoYyxhKSxhLl9fcHJvdG9fXz1sLnByb3RvdHlwZTtlbHNle2I9YS1jO2E9bmV3IGwoYix2b2lkIDApO2Zvcih2YXIgZD0wO2Q8YjsrK2QpYVtkXT10aGlzW2QrY119cmV0dXJuIGF9O2wucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oYyxhLGIpe2N8PTA7YXw9MDtifHxEKGMsYSx0aGlzLmxlbmd0aCk7Yj10aGlzW2NdO2Zvcih2YXIgZD0xLGU9MDsrK2U8YSYmKGQqPTI1Nik7KWIrPXRoaXNbYytlXSpkO3JldHVybiBifTtsLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGMsYSxiKXtjfD0wO2F8PTA7Ynx8RChjLGEsdGhpcy5sZW5ndGgpO2I9dGhpc1tjKy0tYV07Zm9yKHZhciBkPTE7MDxhJiYoZCo9MjU2KTspYis9dGhpc1tjKy0tYV0qZDtyZXR1cm4gYn07bC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGMsYSl7YXx8RChjLDEsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdfTtsLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oYywKYSl7YXx8RChjLDIsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdfHRoaXNbYysxXTw8OH07bC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDIsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdPDw4fHRoaXNbYysxXX07bC5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDQsdGhpcy5sZW5ndGgpO3JldHVybih0aGlzW2NdfHRoaXNbYysxXTw8OHx0aGlzW2MrMl08PDE2KSsxNjc3NzIxNip0aGlzW2MrM119O2wucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihjLGEpe2F8fEQoYyw0LHRoaXMubGVuZ3RoKTtyZXR1cm4gMTY3NzcyMTYqdGhpc1tjXSsodGhpc1tjKzFdPDwxNnx0aGlzW2MrMl08PDh8dGhpc1tjKzNdKX07bC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGMsYSxiKXtjfD0wO2F8PTA7Ynx8RChjLGEsdGhpcy5sZW5ndGgpO2I9dGhpc1tjXTtmb3IodmFyIGQ9MSxlPTA7KytlPGEmJihkKj0yNTYpOyliKz0KdGhpc1tjK2VdKmQ7Yj49MTI4KmQmJihiLT1NYXRoLnBvdygyLDgqYSkpO3JldHVybiBifTtsLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oYyxhLGIpe2N8PTA7YXw9MDtifHxEKGMsYSx0aGlzLmxlbmd0aCk7Yj1hO2Zvcih2YXIgZD0xLGU9dGhpc1tjKy0tYl07MDxiJiYoZCo9MjU2KTspZSs9dGhpc1tjKy0tYl0qZDtlPj0xMjgqZCYmKGUtPU1hdGgucG93KDIsOCphKSk7cmV0dXJuIGV9O2wucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGMsYSl7YXx8RChjLDEsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdJjEyOD8tMSooMjU1LXRoaXNbY10rMSk6dGhpc1tjXX07bC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oYyxhKXthfHxEKGMsMix0aGlzLmxlbmd0aCk7Yz10aGlzW2NdfHRoaXNbYysxXTw8ODtyZXR1cm4gYyYzMjc2OD9jfDQyOTQ5MDE3NjA6Y307bC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oYyxhKXthfHxEKGMsMix0aGlzLmxlbmd0aCk7CmM9dGhpc1tjKzFdfHRoaXNbY108PDg7cmV0dXJuIGMmMzI3Njg/Y3w0Mjk0OTAxNzYwOmN9O2wucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDQsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdfHRoaXNbYysxXTw8OHx0aGlzW2MrMl08PDE2fHRoaXNbYyszXTw8MjR9O2wucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDQsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2NdPDwyNHx0aGlzW2MrMV08PDE2fHRoaXNbYysyXTw8OHx0aGlzW2MrM119O2wucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDQsdGhpcy5sZW5ndGgpO3JldHVybiBHYih0aGlzLGMsITAsMjMsNCl9O2wucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDQsdGhpcy5sZW5ndGgpO3JldHVybiBHYih0aGlzLGMsITEsMjMsNCl9O2wucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihjLGEpe2F8fApEKGMsOCx0aGlzLmxlbmd0aCk7cmV0dXJuIEdiKHRoaXMsYywhMCw1Miw4KX07bC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGMsYSl7YXx8RChjLDgsdGhpcy5sZW5ndGgpO3JldHVybiBHYih0aGlzLGMsITEsNTIsOCl9O2wucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGMsYSxiLGQpe2M9K2M7YXw9MDtifD0wO2R8fFQodGhpcyxjLGEsYixNYXRoLnBvdygyLDgqYiktMSwwKTtkPTE7dmFyIGU9MDtmb3IodGhpc1thXT1jJjI1NTsrK2U8YiYmKGQqPTI1Nik7KXRoaXNbYStlXT1jL2QmMjU1O3JldHVybiBhK2J9O2wucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGMsYSxiLGQpe2M9K2M7YXw9MDtifD0wO2R8fFQodGhpcyxjLGEsYixNYXRoLnBvdygyLDgqYiktMSwwKTtkPWItMTt2YXIgZT0xO2Zvcih0aGlzW2ErZF09YyYyNTU7MDw9LS1kJiYoZSo9MjU2KTspdGhpc1thK2RdPWMvZSYyNTU7cmV0dXJuIGErYn07bC5wcm90b3R5cGUud3JpdGVVSW50OD0KZnVuY3Rpb24oYyxhLGIpe2M9K2M7YXw9MDtifHxUKHRoaXMsYyxhLDEsMjU1LDApO2wuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGM9TWF0aC5mbG9vcihjKSk7dGhpc1thXT1jJjI1NTtyZXR1cm4gYSsxfTtsLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGMsYSxiKXtjPStjO2F8PTA7Ynx8VCh0aGlzLGMsYSwyLDY1NTM1LDApO2wuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1thXT1jJjI1NSx0aGlzW2ErMV09Yz4+PjgpOkpiKHRoaXMsYyxhLCEwKTtyZXR1cm4gYSsyfTtsLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGMsYSxiKXtjPStjO2F8PTA7Ynx8VCh0aGlzLGMsYSwyLDY1NTM1LDApO2wuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1thXT1jPj4+OCx0aGlzW2ErMV09YyYyNTUpOkpiKHRoaXMsYyxhLCExKTtyZXR1cm4gYSsyfTtsLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGMsYSxiKXtjPStjO2F8PTA7Ynx8VCh0aGlzLGMsYSw0LAo0Mjk0OTY3Mjk1LDApO2wuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1thKzNdPWM+Pj4yNCx0aGlzW2ErMl09Yz4+PjE2LHRoaXNbYSsxXT1jPj4+OCx0aGlzW2FdPWMmMjU1KTpLYih0aGlzLGMsYSwhMCk7cmV0dXJuIGErNH07bC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihjLGEsYil7Yz0rYzthfD0wO2J8fFQodGhpcyxjLGEsNCw0Mjk0OTY3Mjk1LDApO2wuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1thXT1jPj4+MjQsdGhpc1thKzFdPWM+Pj4xNix0aGlzW2ErMl09Yz4+PjgsdGhpc1thKzNdPWMmMjU1KTpLYih0aGlzLGMsYSwhMSk7cmV0dXJuIGErNH07bC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihjLGEsYixkKXtjPStjO2F8PTA7ZHx8KGQ9TWF0aC5wb3coMiw4KmItMSksVCh0aGlzLGMsYSxiLGQtMSwtZCkpO2Q9MDt2YXIgZT0xLGY9MDtmb3IodGhpc1thXT1jJjI1NTsrK2Q8YiYmKGUqPTI1Nik7KTA+YyYmMD09PWYmJjAhPT10aGlzW2ErZC0KMV0mJihmPTEpLHRoaXNbYStkXT0oYy9lPj4wKS1mJjI1NTtyZXR1cm4gYStifTtsLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGMsYSxiLGQpe2M9K2M7YXw9MDtkfHwoZD1NYXRoLnBvdygyLDgqYi0xKSxUKHRoaXMsYyxhLGIsZC0xLC1kKSk7ZD1iLTE7dmFyIGU9MSxmPTA7Zm9yKHRoaXNbYStkXT1jJjI1NTswPD0tLWQmJihlKj0yNTYpOykwPmMmJjA9PT1mJiYwIT09dGhpc1thK2QrMV0mJihmPTEpLHRoaXNbYStkXT0oYy9lPj4wKS1mJjI1NTtyZXR1cm4gYStifTtsLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oYyxhLGIpe2M9K2M7YXw9MDtifHxUKHRoaXMsYyxhLDEsMTI3LC0xMjgpO2wuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGM9TWF0aC5mbG9vcihjKSk7MD5jJiYoYz0yNTUrYysxKTt0aGlzW2FdPWMmMjU1O3JldHVybiBhKzF9O2wucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihjLGEsYil7Yz0rYzthfD0wO2J8fFQodGhpcyxjLGEsMiwzMjc2NywKLTMyNzY4KTtsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYV09YyYyNTUsdGhpc1thKzFdPWM+Pj44KTpKYih0aGlzLGMsYSwhMCk7cmV0dXJuIGErMn07bC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGMsYSxiKXtjPStjO2F8PTA7Ynx8VCh0aGlzLGMsYSwyLDMyNzY3LC0zMjc2OCk7bC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2FdPWM+Pj44LHRoaXNbYSsxXT1jJjI1NSk6SmIodGhpcyxjLGEsITEpO3JldHVybiBhKzJ9O2wucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihjLGEsYil7Yz0rYzthfD0wO2J8fFQodGhpcyxjLGEsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KTtsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYV09YyYyNTUsdGhpc1thKzFdPWM+Pj44LHRoaXNbYSsyXT1jPj4+MTYsdGhpc1thKzNdPWM+Pj4yNCk6S2IodGhpcyxjLGEsITApO3JldHVybiBhKzR9O2wucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihjLGEsYil7Yz0KK2M7YXw9MDtifHxUKHRoaXMsYyxhLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCk7MD5jJiYoYz00Mjk0OTY3Mjk1K2MrMSk7bC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2FdPWM+Pj4yNCx0aGlzW2ErMV09Yz4+PjE2LHRoaXNbYSsyXT1jPj4+OCx0aGlzW2ErM109YyYyNTUpOktiKHRoaXMsYyxhLCExKTtyZXR1cm4gYSs0fTtsLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oYyxhLGIpe2J8fExiKHRoaXMsYyxhLDQpO0hiKHRoaXMsYyxhLCEwLDIzLDQpO3JldHVybiBhKzR9O2wucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihjLGEsYil7Ynx8TGIodGhpcyxjLGEsNCk7SGIodGhpcyxjLGEsITEsMjMsNCk7cmV0dXJuIGErNH07bC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihjLGEsYil7Ynx8TGIodGhpcyxjLGEsOCk7SGIodGhpcyxjLGEsITAsNTIsOCk7cmV0dXJuIGErOH07bC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihjLAphLGIpe2J8fExiKHRoaXMsYyxhLDgpO0hiKHRoaXMsYyxhLCExLDUyLDgpO3JldHVybiBhKzh9O2wucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYyxhLGIsZCl7Ynx8KGI9MCk7ZHx8MD09PWR8fChkPXRoaXMubGVuZ3RoKTthPj1jLmxlbmd0aCYmKGE9Yy5sZW5ndGgpO2F8fChhPTApOzA8ZCYmZDxiJiYoZD1iKTtpZihkPT09Ynx8MD09PWMubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoMD5hKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoMD5ifHxiPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKDA+ZCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtkPnRoaXMubGVuZ3RoJiYoZD10aGlzLmxlbmd0aCk7Yy5sZW5ndGgtYTxkLWImJihkPWMubGVuZ3RoLWErYik7dmFyIGU9ZC1iO2lmKHRoaXM9PT1jJiZiPGEmJgphPGQpZm9yKGQ9ZS0xOzA8PWQ7LS1kKWNbZCthXT10aGlzW2QrYl07ZWxzZSBpZigxRTM+ZXx8IWwuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoZD0wO2Q8ZTsrK2QpY1tkK2FdPXRoaXNbZCtiXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGMsdGhpcy5zdWJhcnJheShiLGIrZSksYSk7cmV0dXJuIGV9O2wucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYyxhLGIsZCl7aWYoInN0cmluZyI9PT10eXBlb2YgYyl7InN0cmluZyI9PT10eXBlb2YgYT8oZD1hLGE9MCxiPXRoaXMubGVuZ3RoKToic3RyaW5nIj09PXR5cGVvZiBiJiYoZD1iLGI9dGhpcy5sZW5ndGgpO2lmKDE9PT1jLmxlbmd0aCl7dmFyIGU9Yy5jaGFyQ29kZUF0KDApOzI1Nj5lJiYoYz1lKX1pZih2b2lkIDAhPT1kJiYic3RyaW5nIiE9PXR5cGVvZiBkKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09PXR5cGVvZiBkJiYhbC5pc0VuY29kaW5nKGQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrCmQpO31lbHNlIm51bWJlciI9PT10eXBlb2YgYyYmKGMmPTI1NSk7aWYoMD5hfHx0aGlzLmxlbmd0aDxhfHx0aGlzLmxlbmd0aDxiKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihiPD1hKXJldHVybiB0aGlzO2E+Pj49MDtiPXZvaWQgMD09PWI/dGhpcy5sZW5ndGg6Yj4+PjA7Y3x8KGM9MCk7aWYoIm51bWJlciI9PT10eXBlb2YgYylmb3IoZD1hO2Q8YjsrK2QpdGhpc1tkXT1jO2Vsc2UgZm9yKGM9VyhjKT9jOkliKChuZXcgbChjLGQpKS50b1N0cmluZygpKSxlPWMubGVuZ3RoLGQ9MDtkPGItYTsrK2QpdGhpc1tkK2FdPWNbZCVlXTtyZXR1cm4gdGhpc307dmFyIE5mPS9bXitcLzAtOUEtWmEtei1fXS9nLHZiPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLElOU1BFQ1RfTUFYX0JZVEVTOjUwLGtNYXhMZW5ndGg6U2csQnVmZmVyOmwsU2xvd0J1ZmZlcjpmdW5jdGlvbihjKXsrYyE9YyYmKGM9MCk7cmV0dXJuIGwuYWxsb2MoK2MpfSxpc0J1ZmZlcjpwYX0pLApKPUsoZnVuY3Rpb24oYyxhKXtmdW5jdGlvbiBiKGEpe2Zvcih2YXIgYz1bXSxiPTE7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyljW2ItMV09YXJndW1lbnRzW2JdO3JldHVybiBuZXcgKHZiLkJ1ZmZlci5iaW5kLmFwcGx5KHZiLkJ1ZmZlcixkKFt2b2lkIDAsYV0sYykpKX12YXIgZD1OJiZOLl9fc3ByZWFkQXJyYXlzfHxmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGM9MCxiPWFyZ3VtZW50cy5sZW5ndGg7YzxiO2MrKylhKz1hcmd1bWVudHNbY10ubGVuZ3RoO2E9QXJyYXkoYSk7dmFyIGQ9MDtmb3IoYz0wO2M8YjtjKyspZm9yKHZhciBrPWFyZ3VtZW50c1tjXSx0PTAscT1rLmxlbmd0aDt0PHE7dCsrLGQrKylhW2RdPWtbdF07cmV0dXJuIGF9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTthLkJ1ZmZlcj12Yi5CdWZmZXI7YS5idWZmZXJBbGxvY1Vuc2FmZT12Yi5CdWZmZXIuYWxsb2NVbnNhZmV8fGI7YS5idWZmZXJGcm9tPXZiLkJ1ZmZlci5mcm9tfHwKYn0pO1EoSik7dmFyIHVhPU5kLHZhPU9kOyJmdW5jdGlvbiI9PT10eXBlb2YgS2Euc2V0VGltZW91dCYmKHVhPXNldFRpbWVvdXQpOyJmdW5jdGlvbiI9PT10eXBlb2YgS2EuY2xlYXJUaW1lb3V0JiYodmE9Y2xlYXJUaW1lb3V0KTt2YXIga2E9W10sVWE9ITEsSGEsTWI9LTE7UmQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciBmYj1LYS5wZXJmb3JtYW5jZXx8e30sVGc9ZmIubm93fHxmYi5tb3pOb3d8fGZiLm1zTm93fHxmYi5vTm93fHxmYi53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LFVnPW5ldyBEYXRlLFZhPXtuZXh0VGljazpYLHRpdGxlOiJicm93c2VyIixicm93c2VyOiEwLGVudjp7fSxhcmd2OltdLHZlcnNpb246IiIsdmVyc2lvbnM6e30sb246SWEsYWRkTGlzdGVuZXI6SWEsb25jZTpJYSxvZmY6SWEscmVtb3ZlTGlzdGVuZXI6SWEscmVtb3ZlQWxsTGlzdGVuZXJzOklhLAplbWl0OklhLGJpbmRpbmc6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKTt9LGN3ZDpmdW5jdGlvbigpe3JldHVybiIvIn0sY2hkaXI6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIik7fSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oYyl7dmFyIGE9LjAwMSpUZy5jYWxsKGZiKSxiPU1hdGguZmxvb3IoYSk7YT1NYXRoLmZsb29yKGElMSoxRTkpO2MmJihiLT1jWzBdLGEtPWNbMV0sMD5hJiYoYi0tLGErPTFFOSkpO3JldHVybltiLGFdfSxwbGF0Zm9ybToiYnJvd3NlciIscmVsZWFzZTp7fSxjb25maWc6e30sdXB0aW1lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlLVVnKS8xRTN9fSx6YT0iZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oYyxhKXtjLnN1cGVyXz1hO2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUsCntjb25zdHJ1Y3Rvcjp7dmFsdWU6YyxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZnVuY3Rpb24oYyxhKXtmdW5jdGlvbiBiKCl7fWMuc3VwZXJfPWE7Yi5wcm90b3R5cGU9YS5wcm90b3R5cGU7Yy5wcm90b3R5cGU9bmV3IGI7Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9Y30sUmY9LyVbc2RqJV0vZyxOYj17fSx5YzthYS5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19O2FhLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLCJib29sZWFuIjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLCJudWxsIjoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIsCnJlZ2V4cDoicmVkIn07dmFyIFpmPSJKYW4gRmViIE1hciBBcHIgTWF5IEp1biBKdWwgQXVnIFNlcCBPY3QgTm92IERlYyIuc3BsaXQoIiAiKSx3Yj17aW5oZXJpdHM6emEsX2V4dGVuZDpUZCxsb2c6ZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiJXMgLSAlcyIsWWYoKSx3Yy5hcHBseShudWxsLGFyZ3VtZW50cykpfSxpc0J1ZmZlcjpmdW5jdGlvbihjKXtyZXR1cm4gcGEoYyl9LGlzUHJpbWl0aXZlOkNjLGlzRnVuY3Rpb246V2EsaXNFcnJvcjpvYixpc0RhdGU6cGIsaXNPYmplY3Q6d2EsaXNSZWdFeHA6WGEsaXNVbmRlZmluZWQ6bGEsaXNTeW1ib2w6ZnVuY3Rpb24oYyl7cmV0dXJuInN5bWJvbCI9PT10eXBlb2YgY30saXNTdHJpbmc6SmEsaXNOdW1iZXI6VmQsaXNOdWxsT3JVbmRlZmluZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIG51bGw9PWN9LGlzTnVsbDpmdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09PWN9LGlzQm9vbGVhbjp6Yyxpc0FycmF5OlVkLGluc3BlY3Q6YWEsZGVwcmVjYXRlOnhjLApmb3JtYXQ6d2MsZGVidWdsb2c6U2R9LFZnPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZ2U9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGMpe3ZhciBhPVtdLGI7Zm9yKGIgaW4gYylWZy5jYWxsKGMsYikmJmEucHVzaChiKTtyZXR1cm4gYX0sZmU9QXJyYXkucHJvdG90eXBlLnNsaWNlLEVjLCRmPS9ccypmdW5jdGlvblxzKyhbXlwoXHNdKilccyovO0UuQXNzZXJ0aW9uRXJyb3I9R2M7emEoR2MsRXJyb3IpO0UuZmFpbD1TO0Uub2s9RmM7RS5lcXVhbD1iZTtFLm5vdEVxdWFsPWNlO0UuZGVlcEVxdWFsPWRlO0UuZGVlcFN0cmljdEVxdWFsPWVlO0Uubm90RGVlcEVxdWFsPWhlO0Uubm90RGVlcFN0cmljdEVxdWFsPWllO0Uuc3RyaWN0RXF1YWw9amU7RS5ub3RTdHJpY3RFcXVhbD1rZTtFLnRocm93cz1mdW5jdGlvbihjLGEsYil7bWUoITAsYyxhLGIpfTtFLmRvZXNOb3RUaHJvdz1mdW5jdGlvbihjLGEsYil7bWUoITEsYyxhLGIpfTtFLmlmRXJyb3I9ZnVuY3Rpb24oYyl7aWYoYyl0aHJvdyBjOwp9O3ZhciB4Yj1LKGZ1bmN0aW9uKGMsYSl7ZnVuY3Rpb24gYihhKXtyZXR1cm4gZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhjKXtmb3IodmFyIGI9W10sZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspYltlLTFdPWFyZ3VtZW50c1tlXTtiPWEuY2FsbCh0aGlzLGQoYyxiKSl8fHRoaXM7Yi5jb2RlPWM7YltoXT1jO2IubmFtZT1hLnByb3RvdHlwZS5uYW1lKyIgWyIrYltoXSsiXSI7cmV0dXJuIGJ9ZyhjLGEpO3JldHVybiBjfShhKX1mdW5jdGlvbiBkKGEsYyl7RS5zdHJpY3RFcXVhbCh0eXBlb2YgYSwic3RyaW5nIik7dmFyIGI9a1thXTtFKGIsIkFuIGludmFsaWQgZXJyb3IgbWVzc2FnZSBrZXkgd2FzIHVzZWQ6ICIrYSsiLiIpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYilhPWI7ZWxzZXthPXdiLmZvcm1hdDtpZih2b2lkIDA9PT1jfHwwPT09Yy5sZW5ndGgpcmV0dXJuIGI7Yy51bnNoaWZ0KGIpfXJldHVybiBTdHJpbmcoYS5hcHBseShudWxsLGMpKX1mdW5jdGlvbiBlKGEsYyl7a1thXT0KImZ1bmN0aW9uIj09PXR5cGVvZiBjP2M6U3RyaW5nKGMpfWZ1bmN0aW9uIGYoYSxjKXtFKGEsImV4cGVjdGVkIGlzIHJlcXVpcmVkIik7RSgic3RyaW5nIj09PXR5cGVvZiBjLCJ0aGluZyBpcyByZXF1aXJlZCIpO2lmKEFycmF5LmlzQXJyYXkoYSkpe3ZhciBiPWEubGVuZ3RoO0UoMDxiLCJBdCBsZWFzdCBvbmUgZXhwZWN0ZWQgdmFsdWUgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIik7YT1hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEpfSk7cmV0dXJuIDI8Yj8ib25lIG9mICIrYysiICIrYS5zbGljZSgwLGItMSkuam9pbigiLCAiKSsiLCBvciAiK2FbYi0xXToyPT09Yj8ib25lIG9mICIrYysiICIrYVswXSsiIG9yICIrYVsxXToib2YgIitjKyIgIithWzBdfXJldHVybiJvZiAiK2MrIiAiK1N0cmluZyhhKX12YXIgZz1OJiZOLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGMsYil7YT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZgpBcnJheSYmZnVuY3Rpb24oYSxjKXthLl9fcHJvdG9fXz1jfXx8ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGIgaW4gYyljLmhhc093blByb3BlcnR5KGIpJiYoYVtiXT1jW2JdKX07cmV0dXJuIGEoYyxiKX1yZXR1cm4gZnVuY3Rpb24oYyxiKXtmdW5jdGlvbiBkKCl7dGhpcy5jb25zdHJ1Y3Rvcj1jfWEoYyxiKTtjLnByb3RvdHlwZT1udWxsPT09Yj9PYmplY3QuY3JlYXRlKGIpOihkLnByb3RvdHlwZT1iLnByb3RvdHlwZSxuZXcgZCl9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaD0idW5kZWZpbmVkIj09PXR5cGVvZiBTeW1ib2w/Il9rQ29kZSI6U3ltYm9sKCJjb2RlIiksaz17fTtjPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYil7aWYoIm9iamVjdCIhPT10eXBlb2YgYnx8bnVsbD09PWIpdGhyb3cgbmV3IGEuVHlwZUVycm9yKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsIm9wdGlvbnMiLCJvYmplY3QiKTt2YXIgZD1iLm1lc3NhZ2U/CmMuY2FsbCh0aGlzLGIubWVzc2FnZSl8fHRoaXM6Yy5jYWxsKHRoaXMsd2IuaW5zcGVjdChiLmFjdHVhbCkuc2xpY2UoMCwxMjgpKyIgIisoYi5vcGVyYXRvcisiICIrd2IuaW5zcGVjdChiLmV4cGVjdGVkKS5zbGljZSgwLDEyOCkpKXx8dGhpcztkLmdlbmVyYXRlZE1lc3NhZ2U9IWIubWVzc2FnZTtkLm5hbWU9IkFzc2VydGlvbkVycm9yIFtFUlJfQVNTRVJUSU9OXSI7ZC5jb2RlPSJFUlJfQVNTRVJUSU9OIjtkLmFjdHVhbD1iLmFjdHVhbDtkLmV4cGVjdGVkPWIuZXhwZWN0ZWQ7ZC5vcGVyYXRvcj1iLm9wZXJhdG9yO2EuRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZCxiLnN0YWNrU3RhcnRGdW5jdGlvbik7cmV0dXJuIGR9ZyhiLGMpO3JldHVybiBifShOLkVycm9yKTthLkFzc2VydGlvbkVycm9yPWM7YS5tZXNzYWdlPWQ7YS5FPWU7YS5FcnJvcj1iKE4uRXJyb3IpO2EuVHlwZUVycm9yPWIoTi5UeXBlRXJyb3IpO2EuUmFuZ2VFcnJvcj1iKE4uUmFuZ2VFcnJvcik7ZSgiRVJSX0FSR19OT1RfSVRFUkFCTEUiLAoiJXMgbXVzdCBiZSBpdGVyYWJsZSIpO2UoIkVSUl9BU1NFUlRJT04iLCIlcyIpO2UoIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8iQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiOiciJythKyciIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcyd9KTtlKCJFUlJfQ0hJTERfQ0xPU0VEX0JFRk9SRV9SRVBMWSIsIkNoaWxkIGNsb3NlZCBiZWZvcmUgcmVwbHkgcmVjZWl2ZWQiKTtlKCJFUlJfQ09OU09MRV9XUklUQUJMRV9TVFJFQU0iLCJDb25zb2xlIGV4cGVjdHMgYSB3cml0YWJsZSBzdHJlYW0gaW5zdGFuY2UgZm9yICVzIik7ZSgiRVJSX0NQVV9VU0FHRSIsIlVuYWJsZSB0byBvYnRhaW4gY3B1IHVzYWdlICVzIik7ZSgiRVJSX0ROU19TRVRfU0VSVkVSU19GQUlMRUQiLGZ1bmN0aW9uKGEsYyl7cmV0dXJuJ2MtYXJlcyBmYWlsZWQgdG8gc2V0IHNlcnZlcnM6ICInK2ErJyIgWycrYysiXSJ9KTtlKCJFUlJfRkFMU1lfVkFMVUVfUkVKRUNUSU9OIiwKIlByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggZmFsc3kgdmFsdWUiKTtlKCJFUlJfRU5DT0RJTkdfTk9UX1NVUFBPUlRFRCIsZnVuY3Rpb24oYSl7cmV0dXJuJ1RoZSAiJythKyciIGVuY29kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnfSk7ZSgiRVJSX0VOQ09ESU5HX0lOVkFMSURfRU5DT0RFRF9EQVRBIixmdW5jdGlvbihhKXtyZXR1cm4iVGhlIGVuY29kZWQgZGF0YSB3YXMgbm90IHZhbGlkIGZvciBlbmNvZGluZyAiK2F9KTtlKCJFUlJfSFRUUF9IRUFERVJTX1NFTlQiLCJDYW5ub3QgcmVuZGVyIGhlYWRlcnMgYWZ0ZXIgdGhleSBhcmUgc2VudCB0byB0aGUgY2xpZW50Iik7ZSgiRVJSX0hUVFBfSU5WQUxJRF9TVEFUVVNfQ09ERSIsIkludmFsaWQgc3RhdHVzIGNvZGU6ICVzIik7ZSgiRVJSX0hUVFBfVFJBSUxFUl9JTlZBTElEIiwiVHJhaWxlcnMgYXJlIGludmFsaWQgd2l0aCB0aGlzIHRyYW5zZmVyIGVuY29kaW5nIik7ZSgiRVJSX0lOREVYX09VVF9PRl9SQU5HRSIsIkluZGV4IG91dCBvZiByYW5nZSIpOwplKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oYSxjLGIpe0UoYSwibmFtZSBpcyByZXF1aXJlZCIpO2lmKGMuaW5jbHVkZXMoIm5vdCAiKSl7dmFyIGQ9Im11c3Qgbm90IGJlIjtjPWMuc3BsaXQoIm5vdCAiKVsxXX1lbHNlIGQ9Im11c3QgYmUiO2lmKEFycmF5LmlzQXJyYXkoYSkpZD0iVGhlICIrYS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuJyInK2ErJyInfSkuam9pbigiLCAiKSsiIGFyZ3VtZW50cyAiK2QrIiAiK2YoYywidHlwZSIpO2Vsc2UgaWYoYS5pbmNsdWRlcygiIGFyZ3VtZW50IikpZD0iVGhlICIrYSsiICIrZCsiICIrZihjLCJ0eXBlIik7ZWxzZXt2YXIgZT1hLmluY2x1ZGVzKCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO2Q9J1RoZSAiJythKyciICcrZSsiICIrZCsiICIrZihjLCJ0eXBlIil9Mzw9YXJndW1lbnRzLmxlbmd0aCYmKGQrPSIuIFJlY2VpdmVkIHR5cGUgIisobnVsbCE9PWI/dHlwZW9mIGI6Im51bGwiKSk7cmV0dXJuIGR9KTtlKCJFUlJfSU5WQUxJRF9BUlJBWV9MRU5HVEgiLApmdW5jdGlvbihhLGMsYil7RS5zdHJpY3RFcXVhbCh0eXBlb2YgYiwibnVtYmVyIik7cmV0dXJuJ1RoZSBhcnJheSAiJythKyciIChsZW5ndGggJytiKyIpIG11c3QgYmUgb2YgbGVuZ3RoICIrYysiLiJ9KTtlKCJFUlJfSU5WQUxJRF9CVUZGRVJfU0laRSIsIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlcyIpO2UoIkVSUl9JTlZBTElEX0NBTExCQUNLIiwiQ2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZSgiRVJSX0lOVkFMSURfQ0hBUiIsIkludmFsaWQgY2hhcmFjdGVyIGluICVzIik7ZSgiRVJSX0lOVkFMSURfQ1VSU09SX1BPUyIsIkNhbm5vdCBzZXQgY3Vyc29yIHJvdyB3aXRob3V0IHNldHRpbmcgaXRzIGNvbHVtbiIpO2UoIkVSUl9JTlZBTElEX0ZEIiwnImZkIiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcjogJXMnKTtlKCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9IT1NUIiwnRmlsZSBVUkwgaG9zdCBtdXN0IGJlICJsb2NhbGhvc3QiIG9yIGVtcHR5IG9uICVzJyk7CmUoIkVSUl9JTlZBTElEX0ZJTEVfVVJMX1BBVEgiLCJGaWxlIFVSTCBwYXRoICVzIik7ZSgiRVJSX0lOVkFMSURfSEFORExFX1RZUEUiLCJUaGlzIGhhbmRsZSB0eXBlIGNhbm5vdCBiZSBzZW50Iik7ZSgiRVJSX0lOVkFMSURfSVBfQUREUkVTUyIsIkludmFsaWQgSVAgYWRkcmVzczogJXMiKTtlKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKGEsYyl7cmV0dXJuJ1RoZSB2YWx1ZSAiJytTdHJpbmcoYykrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK2ErJyInfSk7ZSgiRVJSX0lOVkFMSURfT1BUX1ZBTFVFX0VOQ09ESU5HIixmdW5jdGlvbihhKXtyZXR1cm4nVGhlIHZhbHVlICInK1N0cmluZyhhKSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gImVuY29kaW5nIid9KTtlKCJFUlJfSU5WQUxJRF9SRVBMX0VWQUxfQ09ORklHIiwnQ2Fubm90IHNwZWNpZnkgYm90aCAiYnJlYWtFdmFsT25TaWdpbnQiIGFuZCAiZXZhbCIgZm9yIFJFUEwnKTtlKCJFUlJfSU5WQUxJRF9TWU5DX0ZPUktfSU5QVVQiLAoiQXN5bmNocm9ub3VzIGZvcmtzIGRvIG5vdCBzdXBwb3J0IEJ1ZmZlciwgVWludDhBcnJheSBvciBzdHJpbmcgaW5wdXQ6ICVzIik7ZSgiRVJSX0lOVkFMSURfVEhJUyIsJ1ZhbHVlIG9mICJ0aGlzIiBtdXN0IGJlIG9mIHR5cGUgJXMnKTtlKCJFUlJfSU5WQUxJRF9UVVBMRSIsIiVzIG11c3QgYmUgYW4gaXRlcmFibGUgJXMgdHVwbGUiKTtlKCJFUlJfSU5WQUxJRF9VUkwiLCJJbnZhbGlkIFVSTDogJXMiKTtlKCJFUlJfSU5WQUxJRF9VUkxfU0NIRU1FIixmdW5jdGlvbihhKXtyZXR1cm4iVGhlIFVSTCBtdXN0IGJlICIrZihhLCJzY2hlbWUiKX0pO2UoIkVSUl9JUENfQ0hBTk5FTF9DTE9TRUQiLCJDaGFubmVsIGNsb3NlZCIpO2UoIkVSUl9JUENfRElTQ09OTkVDVEVEIiwiSVBDIGNoYW5uZWwgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQiKTtlKCJFUlJfSVBDX09ORV9QSVBFIiwiQ2hpbGQgcHJvY2VzcyBjYW4gaGF2ZSBvbmx5IG9uZSBJUEMgcGlwZSIpO2UoIkVSUl9JUENfU1lOQ19GT1JLIiwKIklQQyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN5bmNocm9ub3VzIGZvcmtzIik7ZSgiRVJSX01JU1NJTkdfQVJHUyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYVtjXT1hcmd1bWVudHNbY107RSgwPGEubGVuZ3RoLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO2M9IlRoZSAiO3ZhciBiPWEubGVuZ3RoO2E9YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuJyInK2ErJyInfSk7c3dpdGNoKGIpe2Nhc2UgMTpjKz1hWzBdKyIgYXJndW1lbnQiO2JyZWFrO2Nhc2UgMjpjKz1hWzBdKyIgYW5kICIrYVsxXSsiIGFyZ3VtZW50cyI7YnJlYWs7ZGVmYXVsdDpjKz1hLnNsaWNlKDAsYi0xKS5qb2luKCIsICIpLGMrPSIsIGFuZCAiK2FbYi0xXSsiIGFyZ3VtZW50cyJ9cmV0dXJuIGMrIiBtdXN0IGJlIHNwZWNpZmllZCJ9KTtlKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKTsKZSgiRVJSX05BUElfQ09OU19GVU5DVElPTiIsIkNvbnN0cnVjdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2UoIkVSUl9OQVBJX0NPTlNfUFJPVE9UWVBFX09CSkVDVCIsIkNvbnN0cnVjdG9yLnByb3RvdHlwZSBtdXN0IGJlIGFuIG9iamVjdCIpO2UoIkVSUl9OT19DUllQVE8iLCJOb2RlLmpzIGlzIG5vdCBjb21waWxlZCB3aXRoIE9wZW5TU0wgY3J5cHRvIHN1cHBvcnQiKTtlKCJFUlJfTk9fTE9OR0VSX1NVUFBPUlRFRCIsIiVzIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtlKCJFUlJfUEFSU0VfSElTVE9SWV9EQVRBIiwiQ291bGQgbm90IHBhcnNlIGhpc3RvcnkgZGF0YSBpbiAlcyIpO2UoIkVSUl9TT0NLRVRfQUxSRUFEWV9CT1VORCIsIlNvY2tldCBpcyBhbHJlYWR5IGJvdW5kIik7ZSgiRVJSX1NPQ0tFVF9CQURfUE9SVCIsIlBvcnQgc2hvdWxkIGJlID4gMCBhbmQgPCA2NTUzNiIpO2UoIkVSUl9TT0NLRVRfQkFEX1RZUEUiLCJCYWQgc29ja2V0IHR5cGUgc3BlY2lmaWVkLiBWYWxpZCB0eXBlcyBhcmU6IHVkcDQsIHVkcDYiKTsKZSgiRVJSX1NPQ0tFVF9DQU5OT1RfU0VORCIsIlVuYWJsZSB0byBzZW5kIGRhdGEiKTtlKCJFUlJfU09DS0VUX0NMT1NFRCIsIlNvY2tldCBpcyBjbG9zZWQiKTtlKCJFUlJfU09DS0VUX0RHUkFNX05PVF9SVU5OSU5HIiwiTm90IHJ1bm5pbmciKTtlKCJFUlJfU1RERVJSX0NMT1NFIiwicHJvY2Vzcy5zdGRlcnIgY2Fubm90IGJlIGNsb3NlZCIpO2UoIkVSUl9TVERPVVRfQ0xPU0UiLCJwcm9jZXNzLnN0ZG91dCBjYW5ub3QgYmUgY2xvc2VkIik7ZSgiRVJSX1NUUkVBTV9XUkFQIiwiU3RyZWFtIGhhcyBTdHJpbmdEZWNvZGVyIHNldCBvciBpcyBpbiBvYmplY3RNb2RlIik7ZSgiRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCIsIkhvc3RuYW1lL0lQIGRvZXMgbm90IG1hdGNoIGNlcnRpZmljYXRlJ3MgYWx0bmFtZXM6ICVzIik7ZSgiRVJSX1RMU19ESF9QQVJBTV9TSVpFIixmdW5jdGlvbihhKXtyZXR1cm4iREggcGFyYW1ldGVyIHNpemUgIithKyIgaXMgbGVzcyB0aGFuIDIwNDgifSk7CmUoIkVSUl9UTFNfSEFORFNIQUtFX1RJTUVPVVQiLCJUTFMgaGFuZHNoYWtlIHRpbWVvdXQiKTtlKCJFUlJfVExTX1JFTkVHT1RJQVRJT05fRkFJTEVEIiwiRmFpbGVkIHRvIHJlbmVnb3RpYXRlIik7ZSgiRVJSX1RMU19SRVFVSVJFRF9TRVJWRVJfTkFNRSIsJyJzZXJ2ZXJuYW1lIiBpcyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yIFNlcnZlci5hZGRDb250ZXh0Jyk7ZSgiRVJSX1RMU19TRVNTSU9OX0FUVEFDSyIsIlRTTCBzZXNzaW9uIHJlbmVnb3RpYXRpb24gYXR0YWNrIGRldGVjdGVkIik7ZSgiRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyIsIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtlKCJFUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAiLCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3JpdGFibGVTdGF0ZS5sZW5ndGggIT0gMCIpO2UoIkVSUl9VTktOT1dOX0VOQ09ESU5HIiwiVW5rbm93biBlbmNvZGluZzogJXMiKTsKZSgiRVJSX1VOS05PV05fU0lHTkFMIiwiVW5rbm93biBzaWduYWw6ICVzIik7ZSgiRVJSX1VOS05PV05fU1RESU5fVFlQRSIsIlVua25vd24gc3RkaW4gZmlsZSB0eXBlIik7ZSgiRVJSX1VOS05PV05fU1RSRUFNX1RZUEUiLCJVbmtub3duIHN0cmVhbSBmaWxlIHR5cGUiKTtlKCJFUlJfVjhCUkVBS0lURVJBVE9SIiwiRnVsbCBJQ1UgZGF0YSBub3QgaW5zdGFsbGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3dpa2kvSW50bCIpfSk7USh4Yik7dmFyIG9hPUsoZnVuY3Rpb24oYyxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7YS5FTkNPRElOR19VVEY4PSJ1dGY4IjthLmFzc2VydEVuY29kaW5nPWZ1bmN0aW9uKGEpe2lmKGEmJiFKLkJ1ZmZlci5pc0VuY29kaW5nKGEpKXRocm93IG5ldyB4Yi5UeXBlRXJyb3IoIkVSUl9JTlZBTElEX09QVF9WQUxVRV9FTkNPRElORyIsYSk7fTthLnN0clRvRW5jb2Rpbmc9ZnVuY3Rpb24oYywKZCl7cmV0dXJuIGQmJmQhPT1hLkVOQ09ESU5HX1VURjg/ImJ1ZmZlciI9PT1kP25ldyBKLkJ1ZmZlcihjKToobmV3IEouQnVmZmVyKGMpKS50b1N0cmluZyhkKTpjfX0pO1Eob2EpO3ZhciAkYz1LKGZ1bmN0aW9uKGMsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBiPXUuY29uc3RhbnRzLlNfSUZNVCxkPXUuY29uc3RhbnRzLlNfSUZESVIsZT11LmNvbnN0YW50cy5TX0lGUkVHLGY9dS5jb25zdGFudHMuU19JRkJMSyxnPXUuY29uc3RhbnRzLlNfSUZDSFIsaD11LmNvbnN0YW50cy5TX0lGTE5LLGs9dS5jb25zdGFudHMuU19JRklGTyx0PXUuY29uc3RhbnRzLlNfSUZTT0NLO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5uYW1lPSIiO3RoaXMubW9kZT0wfWEuYnVpbGQ9ZnVuY3Rpb24oYyxiKXt2YXIgZD1uZXcgYSxlPWMuZ2V0Tm9kZSgpLm1vZGU7ZC5uYW1lPW9hLnN0clRvRW5jb2RpbmcoYy5nZXROYW1lKCksYik7ZC5tb2RlPQplO3JldHVybiBkfTthLnByb3RvdHlwZS5fY2hlY2tNb2RlUHJvcGVydHk9ZnVuY3Rpb24oYSl7cmV0dXJuKHRoaXMubW9kZSZiKT09PWF9O2EucHJvdG90eXBlLmlzRGlyZWN0b3J5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGQpfTthLnByb3RvdHlwZS5pc0ZpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoZSl9O2EucHJvdG90eXBlLmlzQmxvY2tEZXZpY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoZil9O2EucHJvdG90eXBlLmlzQ2hhcmFjdGVyRGV2aWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGcpfTthLnByb3RvdHlwZS5pc1N5bWJvbGljTGluaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja01vZGVQcm9wZXJ0eShoKX07YS5wcm90b3R5cGUuaXNGSUZPPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KGspfTsKYS5wcm90b3R5cGUuaXNTb2NrZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkodCl9O3JldHVybiBhfSgpO2EuRGlyZW50PWM7YS5kZWZhdWx0PWN9KTtRKCRjKTsiYWIiLnN1YnN0cigtMSk7dmFyIGdiPUsoZnVuY3Rpb24oYyxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Yz0iZnVuY3Rpb24iPT09dHlwZW9mIHNldEltbWVkaWF0ZT9zZXRJbW1lZGlhdGUuYmluZChOKTpzZXRUaW1lb3V0LmJpbmQoTik7YS5kZWZhdWx0PWN9KTtRKGdiKTt2YXIgWT1LKGZ1bmN0aW9uKGMsYSl7ZnVuY3Rpb24gYigpe3ZhciBhPVZhfHx7fTthLmdldHVpZHx8KGEuZ2V0dWlkPWZ1bmN0aW9uKCl7cmV0dXJuIDB9KTthLmdldGdpZHx8KGEuZ2V0Z2lkPWZ1bmN0aW9uKCl7cmV0dXJuIDB9KTthLmN3ZHx8KGEuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSk7YS5uZXh0VGlja3x8KGEubmV4dFRpY2s9Z2IuZGVmYXVsdCk7YS5lbWl0V2FybmluZ3x8CihhLmVtaXRXYXJuaW5nPWZ1bmN0aW9uKGEsYyl7Y29uc29sZS53YXJuKCIiK2MrKGM/IjogIjoiIikrYSl9KTthLmVudnx8KGEuZW52PXt9KTtyZXR1cm4gYX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7YS5jcmVhdGVQcm9jZXNzPWI7YS5kZWZhdWx0PWIoKX0pO1EoWSk7cWEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobnVsbCk7eC5FdmVudEVtaXR0ZXI9eDt4LnVzaW5nRG9tYWlucz0hMTt4LnByb3RvdHlwZS5kb21haW49dm9pZCAwO3gucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwO3gucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3guZGVmYXVsdE1heExpc3RlbmVycz0xMDt4LmluaXQ9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpbj1udWxsO3RoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9bmV3IHFhLHRoaXMuX2V2ZW50c0NvdW50PTApOwp0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9O3gucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihjKXtpZigibnVtYmVyIiE9PXR5cGVvZiBjfHwwPmN8fGlzTmFOKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJuIiBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7dGhpcy5fbWF4TGlzdGVuZXJzPWM7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLl9tYXhMaXN0ZW5lcnM/eC5kZWZhdWx0TWF4TGlzdGVuZXJzOnRoaXMuX21heExpc3RlbmVyc307eC5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihjKXt2YXIgYSxiLGQ9ImVycm9yIj09PWM7aWYoYT10aGlzLl9ldmVudHMpZD1kJiZudWxsPT1hLmVycm9yO2Vsc2UgaWYoIWQpcmV0dXJuITE7dmFyIGU9dGhpcy5kb21haW47aWYoZCl7YT1hcmd1bWVudHNbMV07aWYoZSlhfHwoYT1FcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkICJlcnJvciIgZXZlbnQnKSksCmEuZG9tYWluRW1pdHRlcj10aGlzLGEuZG9tYWluPWUsYS5kb21haW5UaHJvd249ITEsZS5lbWl0KCJlcnJvciIsYSk7ZWxzZXtpZihhIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgYTtlPUVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgImVycm9yIiBldmVudC4gKCcrYSsiKSIpO2UuY29udGV4dD1hO3Rocm93IGU7fXJldHVybiExfWU9YVtjXTtpZighZSlyZXR1cm4hMTthPSJmdW5jdGlvbiI9PT10eXBlb2YgZTt2YXIgZj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChmKXtjYXNlIDE6aWYoYSllLmNhbGwodGhpcyk7ZWxzZSBmb3IoYT1lLmxlbmd0aCxlPXFiKGUsYSksZD0wO2Q8YTsrK2QpZVtkXS5jYWxsKHRoaXMpO2JyZWFrO2Nhc2UgMjpkPWFyZ3VtZW50c1sxXTtpZihhKWUuY2FsbCh0aGlzLGQpO2Vsc2UgZm9yKGE9ZS5sZW5ndGgsZT1xYihlLGEpLGY9MDtmPGE7KytmKWVbZl0uY2FsbCh0aGlzLGQpO2JyZWFrO2Nhc2UgMzpkPWFyZ3VtZW50c1sxXTtmPWFyZ3VtZW50c1syXTsKaWYoYSllLmNhbGwodGhpcyxkLGYpO2Vsc2UgZm9yKGE9ZS5sZW5ndGgsZT1xYihlLGEpLGI9MDtiPGE7KytiKWVbYl0uY2FsbCh0aGlzLGQsZik7YnJlYWs7Y2FzZSA0OmQ9YXJndW1lbnRzWzFdO2Y9YXJndW1lbnRzWzJdO2I9YXJndW1lbnRzWzNdO2lmKGEpZS5jYWxsKHRoaXMsZCxmLGIpO2Vsc2V7YT1lLmxlbmd0aDtlPXFiKGUsYSk7Zm9yKHZhciBnPTA7ZzxhOysrZyllW2ddLmNhbGwodGhpcyxkLGYsYil9YnJlYWs7ZGVmYXVsdDpkPUFycmF5KGYtMSk7Zm9yKGI9MTtiPGY7YisrKWRbYi0xXT1hcmd1bWVudHNbYl07aWYoYSllLmFwcGx5KHRoaXMsZCk7ZWxzZSBmb3IoYT1lLmxlbmd0aCxlPXFiKGUsYSksZj0wO2Y8YTsrK2YpZVtmXS5hcHBseSh0aGlzLGQpfXJldHVybiEwfTt4LnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihjLGEpe3JldHVybiBuZSh0aGlzLGMsYSwhMSl9O3gucHJvdG90eXBlLm9uPXgucHJvdG90eXBlLmFkZExpc3RlbmVyO3gucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj0KZnVuY3Rpb24oYyxhKXtyZXR1cm4gbmUodGhpcyxjLGEsITApfTt4LnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGMsYSl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dGhpcy5vbihjLG9lKHRoaXMsYyxhKSk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oYyxhKXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt0aGlzLnByZXBlbmRMaXN0ZW5lcihjLG9lKHRoaXMsYyxhKSk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGMsYSl7dmFyIGI7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7CnZhciBkPXRoaXMuX2V2ZW50cztpZighZClyZXR1cm4gdGhpczt2YXIgZT1kW2NdO2lmKCFlKXJldHVybiB0aGlzO2lmKGU9PT1hfHxlLmxpc3RlbmVyJiZlLmxpc3RlbmVyPT09YSkwPT09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bmV3IHFhOihkZWxldGUgZFtjXSxkLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixjLGUubGlzdGVuZXJ8fGEpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPT10eXBlb2YgZSl7dmFyIGY9LTE7Zm9yKGI9ZS5sZW5ndGg7MDxiLS07KWlmKGVbYl09PT1hfHxlW2JdLmxpc3RlbmVyJiZlW2JdLmxpc3RlbmVyPT09YSl7dmFyIGc9ZVtiXS5saXN0ZW5lcjtmPWI7YnJlYWt9aWYoMD5mKXJldHVybiB0aGlzO2lmKDE9PT1lLmxlbmd0aCl7ZVswXT12b2lkIDA7aWYoMD09PS0tdGhpcy5fZXZlbnRzQ291bnQpcmV0dXJuIHRoaXMuX2V2ZW50cz1uZXcgcWEsdGhpcztkZWxldGUgZFtjXX1lbHNle2I9ZisxO2Zvcih2YXIgaD0KZS5sZW5ndGg7YjxoO2YrPTEsYis9MSllW2ZdPWVbYl07ZS5wb3AoKX1kLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixjLGd8fGEpfXJldHVybiB0aGlzfTt4LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oYyl7dmFyIGE9dGhpcy5fZXZlbnRzO2lmKCFhKXJldHVybiB0aGlzO2lmKCFhLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPW5ldyBxYSx0aGlzLl9ldmVudHNDb3VudD0wKTphW2NdJiYoMD09PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPW5ldyBxYTpkZWxldGUgYVtjXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7YT1PYmplY3Qua2V5cyhhKTtmb3IodmFyIGI9MCxkO2I8YS5sZW5ndGg7KytiKWQ9YVtiXSwicmVtb3ZlTGlzdGVuZXIiIT09ZCYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoZCk7dGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIik7CnRoaXMuX2V2ZW50cz1uZXcgcWE7dGhpcy5fZXZlbnRzQ291bnQ9MDtyZXR1cm4gdGhpc31hPWFbY107aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBhKXRoaXMucmVtb3ZlTGlzdGVuZXIoYyxhKTtlbHNlIGlmKGEpe2RvIHRoaXMucmVtb3ZlTGlzdGVuZXIoYyxhW2EubGVuZ3RoLTFdKTt3aGlsZShhWzBdKX1yZXR1cm4gdGhpc307eC5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGMpe3ZhciBhPXRoaXMuX2V2ZW50cztpZihhKWlmKGM9YVtjXSlpZigiZnVuY3Rpb24iPT09dHlwZW9mIGMpYz1bYy5saXN0ZW5lcnx8Y107ZWxzZXthPUFycmF5KGMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoOysrYilhW2JdPWNbYl0ubGlzdGVuZXJ8fGNbYl07Yz1hfWVsc2UgYz1bXTtlbHNlIGM9W107cmV0dXJuIGN9O3gubGlzdGVuZXJDb3VudD1mdW5jdGlvbihjLGEpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgYy5saXN0ZW5lckNvdW50P2MubGlzdGVuZXJDb3VudChhKTpwZS5jYWxsKGMsCmEpfTt4LnByb3RvdHlwZS5saXN0ZW5lckNvdW50PXBlO3gucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLl9ldmVudHNDb3VudD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX07dmFyIHliPUsoZnVuY3Rpb24oYyxhKXt2YXIgYj1OJiZOLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGMsYil7YT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oYSxjKXthLl9fcHJvdG9fXz1jfXx8ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGIgaW4gYyljLmhhc093blByb3BlcnR5KGIpJiYoYVtiXT1jW2JdKX07cmV0dXJuIGEoYyxiKX1yZXR1cm4gZnVuY3Rpb24oYyxiKXtmdW5jdGlvbiBkKCl7dGhpcy5jb25zdHJ1Y3Rvcj1jfWEoYyxiKTtjLnByb3RvdHlwZT1udWxsPT09Yj9PYmplY3QuY3JlYXRlKGIpOihkLnByb3RvdHlwZT1iLnByb3RvdHlwZSxuZXcgZCl9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLAoiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGQ9dS5jb25zdGFudHMuU19JRk1ULGU9dS5jb25zdGFudHMuU19JRkRJUixmPXUuY29uc3RhbnRzLlNfSUZSRUcsZz11LmNvbnN0YW50cy5TX0lGTE5LLGg9dS5jb25zdGFudHMuT19BUFBFTkQ7YS5TRVA9Ii8iO2M9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhjLGIpe3ZvaWQgMD09PWImJihiPTQzOCk7dmFyIGQ9YS5jYWxsKHRoaXMpfHx0aGlzO2QudWlkPVkuZGVmYXVsdC5nZXR1aWQoKTtkLmdpZD1ZLmRlZmF1bHQuZ2V0Z2lkKCk7ZC5hdGltZT1uZXcgRGF0ZTtkLm10aW1lPW5ldyBEYXRlO2QuY3RpbWU9bmV3IERhdGU7ZC5wZXJtPTQzODtkLm1vZGU9ZjtkLm5saW5rPTE7ZC5wZXJtPWI7ZC5tb2RlfD1iO2QuaW5vPWM7cmV0dXJuIGR9YihjLGEpO2MucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT0idXRmOCIpO3JldHVybiB0aGlzLmdldEJ1ZmZlcigpLnRvU3RyaW5nKGEpfTtjLnByb3RvdHlwZS5zZXRTdHJpbmc9CmZ1bmN0aW9uKGEpe3RoaXMuYnVmPUouYnVmZmVyRnJvbShhLCJ1dGY4Iik7dGhpcy50b3VjaCgpfTtjLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXt0aGlzLmJ1Znx8dGhpcy5zZXRCdWZmZXIoSi5idWZmZXJBbGxvY1Vuc2FmZSgwKSk7cmV0dXJuIEouYnVmZmVyRnJvbSh0aGlzLmJ1Zil9O2MucHJvdG90eXBlLnNldEJ1ZmZlcj1mdW5jdGlvbihhKXt0aGlzLmJ1Zj1KLmJ1ZmZlckZyb20oYSk7dGhpcy50b3VjaCgpfTtjLnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVmP3RoaXMuYnVmLmxlbmd0aDowfTtjLnByb3RvdHlwZS5zZXRNb2RlUHJvcGVydHk9ZnVuY3Rpb24oYSl7dGhpcy5tb2RlPXRoaXMubW9kZSZ+ZHxhfTtjLnByb3RvdHlwZS5zZXRJc0ZpbGU9ZnVuY3Rpb24oKXt0aGlzLnNldE1vZGVQcm9wZXJ0eShmKX07Yy5wcm90b3R5cGUuc2V0SXNEaXJlY3Rvcnk9ZnVuY3Rpb24oKXt0aGlzLnNldE1vZGVQcm9wZXJ0eShlKX07Yy5wcm90b3R5cGUuc2V0SXNTeW1saW5rPQpmdW5jdGlvbigpe3RoaXMuc2V0TW9kZVByb3BlcnR5KGcpfTtjLnByb3RvdHlwZS5pc0ZpbGU9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5tb2RlJmQpPT09Zn07Yy5wcm90b3R5cGUuaXNEaXJlY3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5tb2RlJmQpPT09ZX07Yy5wcm90b3R5cGUuaXNTeW1saW5rPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMubW9kZSZkKT09PWd9O2MucHJvdG90eXBlLm1ha2VTeW1saW5rPWZ1bmN0aW9uKGEpe3RoaXMuc3ltbGluaz1hO3RoaXMuc2V0SXNTeW1saW5rKCl9O2MucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGEsYyxiLGQpe3ZvaWQgMD09PWMmJihjPTApO3ZvaWQgMD09PWImJihiPWEubGVuZ3RoKTt2b2lkIDA9PT1kJiYoZD0wKTt0aGlzLmJ1Znx8KHRoaXMuYnVmPUouYnVmZmVyQWxsb2NVbnNhZmUoMCkpO2lmKGQrYj50aGlzLmJ1Zi5sZW5ndGgpe3ZhciBlPUouYnVmZmVyQWxsb2NVbnNhZmUoZCtiKTt0aGlzLmJ1Zi5jb3B5KGUsMCwwLHRoaXMuYnVmLmxlbmd0aCk7CnRoaXMuYnVmPWV9YS5jb3B5KHRoaXMuYnVmLGQsYyxjK2IpO3RoaXMudG91Y2goKTtyZXR1cm4gYn07Yy5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihhLGMsYixkKXt2b2lkIDA9PT1jJiYoYz0wKTt2b2lkIDA9PT1iJiYoYj1hLmJ5dGVMZW5ndGgpO3ZvaWQgMD09PWQmJihkPTApO3RoaXMuYnVmfHwodGhpcy5idWY9Si5idWZmZXJBbGxvY1Vuc2FmZSgwKSk7Yj5hLmJ5dGVMZW5ndGgmJihiPWEuYnl0ZUxlbmd0aCk7YitkPnRoaXMuYnVmLmxlbmd0aCYmKGI9dGhpcy5idWYubGVuZ3RoLWQpO3RoaXMuYnVmLmNvcHkoYSxjLGQsZCtiKTtyZXR1cm4gYn07Yy5wcm90b3R5cGUudHJ1bmNhdGU9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9MCk7aWYoYSlpZih0aGlzLmJ1Znx8KHRoaXMuYnVmPUouYnVmZmVyQWxsb2NVbnNhZmUoMCkpLGE8PXRoaXMuYnVmLmxlbmd0aCl0aGlzLmJ1Zj10aGlzLmJ1Zi5zbGljZSgwLGEpO2Vsc2V7dmFyIGM9Si5idWZmZXJBbGxvY1Vuc2FmZSgwKTt0aGlzLmJ1Zi5jb3B5KGMpOwpjLmZpbGwoMCxhKX1lbHNlIHRoaXMuYnVmPUouYnVmZmVyQWxsb2NVbnNhZmUoMCk7dGhpcy50b3VjaCgpfTtjLnByb3RvdHlwZS5jaG1vZD1mdW5jdGlvbihhKXt0aGlzLnBlcm09YTt0aGlzLm1vZGU9dGhpcy5tb2RlJi01MTJ8YTt0aGlzLnRvdWNoKCl9O2MucHJvdG90eXBlLmNob3duPWZ1bmN0aW9uKGEsYyl7dGhpcy51aWQ9YTt0aGlzLmdpZD1jO3RoaXMudG91Y2goKX07Yy5wcm90b3R5cGUudG91Y2g9ZnVuY3Rpb24oKXt0aGlzLm10aW1lPW5ldyBEYXRlO3RoaXMuZW1pdCgiY2hhbmdlIix0aGlzKX07Yy5wcm90b3R5cGUuY2FuUmVhZD1mdW5jdGlvbihhLGMpe3ZvaWQgMD09PWEmJihhPVkuZGVmYXVsdC5nZXR1aWQoKSk7dm9pZCAwPT09YyYmKGM9WS5kZWZhdWx0LmdldGdpZCgpKTtyZXR1cm4gdGhpcy5wZXJtJjR8fGM9PT10aGlzLmdpZCYmdGhpcy5wZXJtJjMyfHxhPT09dGhpcy51aWQmJnRoaXMucGVybSYyNTY/ITA6ITF9O2MucHJvdG90eXBlLmNhbldyaXRlPWZ1bmN0aW9uKGEsCmMpe3ZvaWQgMD09PWEmJihhPVkuZGVmYXVsdC5nZXR1aWQoKSk7dm9pZCAwPT09YyYmKGM9WS5kZWZhdWx0LmdldGdpZCgpKTtyZXR1cm4gdGhpcy5wZXJtJjJ8fGM9PT10aGlzLmdpZCYmdGhpcy5wZXJtJjE2fHxhPT09dGhpcy51aWQmJnRoaXMucGVybSYxMjg/ITA6ITF9O2MucHJvdG90eXBlLmRlbD1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZGVsZXRlIix0aGlzKX07Yy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue2lubzp0aGlzLmlubyx1aWQ6dGhpcy51aWQsZ2lkOnRoaXMuZ2lkLGF0aW1lOnRoaXMuYXRpbWUuZ2V0VGltZSgpLG10aW1lOnRoaXMubXRpbWUuZ2V0VGltZSgpLGN0aW1lOnRoaXMuY3RpbWUuZ2V0VGltZSgpLHBlcm06dGhpcy5wZXJtLG1vZGU6dGhpcy5tb2RlLG5saW5rOnRoaXMubmxpbmssc3ltbGluazp0aGlzLnN5bWxpbmssZGF0YTp0aGlzLmdldFN0cmluZygpfX07cmV0dXJuIGN9KHguRXZlbnRFbWl0dGVyKTthLk5vZGU9YztjPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGQoYSwKYixkKXt2YXIgZT1jLmNhbGwodGhpcyl8fHRoaXM7ZS5jaGlsZHJlbj17fTtlLnN0ZXBzPVtdO2UuaW5vPTA7ZS5sZW5ndGg9MDtlLnZvbD1hO2UucGFyZW50PWI7ZS5zdGVwcz1iP2Iuc3RlcHMuY29uY2F0KFtkXSk6W2RdO3JldHVybiBlfWIoZCxjKTtkLnByb3RvdHlwZS5zZXROb2RlPWZ1bmN0aW9uKGEpe3RoaXMubm9kZT1hO3RoaXMuaW5vPWEuaW5vfTtkLnByb3RvdHlwZS5nZXROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZX07ZC5wcm90b3R5cGUuY3JlYXRlQ2hpbGQ9ZnVuY3Rpb24oYSxjKXt2b2lkIDA9PT1jJiYoYz10aGlzLnZvbC5jcmVhdGVOb2RlKCkpO3ZhciBiPW5ldyBkKHRoaXMudm9sLHRoaXMsYSk7Yi5zZXROb2RlKGMpO2MuaXNEaXJlY3RvcnkoKTt0aGlzLnNldENoaWxkKGEsYik7cmV0dXJuIGJ9O2QucHJvdG90eXBlLnNldENoaWxkPWZ1bmN0aW9uKGEsYyl7dm9pZCAwPT09YyYmKGM9bmV3IGQodGhpcy52b2wsdGhpcyxhKSk7dGhpcy5jaGlsZHJlblthXT0KYztjLnBhcmVudD10aGlzO3RoaXMubGVuZ3RoKys7dGhpcy5lbWl0KCJjaGlsZDphZGQiLGMsdGhpcyk7cmV0dXJuIGN9O2QucHJvdG90eXBlLmRlbGV0ZUNoaWxkPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLmNoaWxkcmVuW2EuZ2V0TmFtZSgpXTt0aGlzLmxlbmd0aC0tO3RoaXMuZW1pdCgiY2hpbGQ6ZGVsZXRlIixhLHRoaXMpfTtkLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbihhKXtpZihPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNoaWxkcmVuLGEpKXJldHVybiB0aGlzLmNoaWxkcmVuW2FdfTtkLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RlcHMuam9pbihhLlNFUCl9O2QucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGVwc1t0aGlzLnN0ZXBzLmxlbmd0aC0xXX07ZC5wcm90b3R5cGUud2Fsaz1mdW5jdGlvbihhLGMsYil7dm9pZCAwPT09YyYmKGM9YS5sZW5ndGgpO3ZvaWQgMD09PWImJihiPTApOwppZihiPj1hLmxlbmd0aHx8Yj49YylyZXR1cm4gdGhpczt2YXIgZD10aGlzLmdldENoaWxkKGFbYl0pO3JldHVybiBkP2Qud2FsayhhLGMsYisxKTpudWxsfTtkLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57c3RlcHM6dGhpcy5zdGVwcyxpbm86dGhpcy5pbm8sY2hpbGRyZW46T2JqZWN0LmtleXModGhpcy5jaGlsZHJlbil9fTtyZXR1cm4gZH0oeC5FdmVudEVtaXR0ZXIpO2EuTGluaz1jO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYyxiLGQpe3RoaXMucG9zaXRpb249MDt0aGlzLmxpbms9YTt0aGlzLm5vZGU9Yzt0aGlzLmZsYWdzPWI7dGhpcy5mZD1kfWEucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuZ2V0U3RyaW5nKCl9O2EucHJvdG90eXBlLnNldFN0cmluZz1mdW5jdGlvbihhKXt0aGlzLm5vZGUuc2V0U3RyaW5nKGEpfTthLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLmdldEJ1ZmZlcigpfTsKYS5wcm90b3R5cGUuc2V0QnVmZmVyPWZ1bmN0aW9uKGEpe3RoaXMubm9kZS5zZXRCdWZmZXIoYSl9O2EucHJvdG90eXBlLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLmdldFNpemUoKX07YS5wcm90b3R5cGUudHJ1bmNhdGU9ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLnRydW5jYXRlKGEpfTthLnByb3RvdHlwZS5zZWVrVG89ZnVuY3Rpb24oYSl7dGhpcy5wb3NpdGlvbj1hfTthLnByb3RvdHlwZS5zdGF0cz1mdW5jdGlvbigpe3JldHVybiBlYi5kZWZhdWx0LmJ1aWxkKHRoaXMubm9kZSl9O2EucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGEsYyxiLGQpe3ZvaWQgMD09PWMmJihjPTApO3ZvaWQgMD09PWImJihiPWEubGVuZ3RoKTsibnVtYmVyIiE9PXR5cGVvZiBkJiYoZD10aGlzLnBvc2l0aW9uKTt0aGlzLmZsYWdzJmgmJihkPXRoaXMuZ2V0U2l6ZSgpKTthPXRoaXMubm9kZS53cml0ZShhLGMsYixkKTt0aGlzLnBvc2l0aW9uPWQrYTtyZXR1cm4gYX07YS5wcm90b3R5cGUucmVhZD0KZnVuY3Rpb24oYSxjLGIsZCl7dm9pZCAwPT09YyYmKGM9MCk7dm9pZCAwPT09YiYmKGI9YS5ieXRlTGVuZ3RoKTsibnVtYmVyIiE9PXR5cGVvZiBkJiYoZD10aGlzLnBvc2l0aW9uKTthPXRoaXMubm9kZS5yZWFkKGEsYyxiLGQpO3RoaXMucG9zaXRpb249ZCthO3JldHVybiBhfTthLnByb3RvdHlwZS5jaG1vZD1mdW5jdGlvbihhKXt0aGlzLm5vZGUuY2htb2QoYSl9O2EucHJvdG90eXBlLmNob3duPWZ1bmN0aW9uKGEsYyl7dGhpcy5ub2RlLmNob3duKGEsYyl9O3JldHVybiBhfSgpO2EuRmlsZT1jfSk7USh5Yik7dmFyIFdnPXliLk5vZGUsbWY9SyhmdW5jdGlvbihjLGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTthLmRlZmF1bHQ9ZnVuY3Rpb24oYSxjLGUpe3ZhciBiPXNldFRpbWVvdXQuYXBwbHkobnVsbCxhcmd1bWVudHMpO2ImJiJvYmplY3QiPT09dHlwZW9mIGImJiJmdW5jdGlvbiI9PT10eXBlb2YgYi51bnJlZiYmYi51bnJlZigpOwpyZXR1cm4gYn19KTtRKG1mKTtMYS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihjKXtjPXtkYXRhOmMsbmV4dDpudWxsfTswPHRoaXMubGVuZ3RoP3RoaXMudGFpbC5uZXh0PWM6dGhpcy5oZWFkPWM7dGhpcy50YWlsPWM7Kyt0aGlzLmxlbmd0aH07TGEucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oYyl7Yz17ZGF0YTpjLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9Yyk7dGhpcy5oZWFkPWM7Kyt0aGlzLmxlbmd0aH07TGEucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgYz10aGlzLmhlYWQuZGF0YTt0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0Oy0tdGhpcy5sZW5ndGg7cmV0dXJuIGN9fTtMYS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw7dGhpcy5sZW5ndGg9MH07TGEucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oYyl7aWYoMD09PQp0aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIGE9dGhpcy5oZWFkLGI9IiIrYS5kYXRhO2E9YS5uZXh0OyliKz1jK2EuZGF0YTtyZXR1cm4gYn07TGEucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihjKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIGwuYWxsb2MoMCk7aWYoMT09PXRoaXMubGVuZ3RoKXJldHVybiB0aGlzLmhlYWQuZGF0YTtjPWwuYWxsb2NVbnNhZmUoYz4+PjApO2Zvcih2YXIgYT10aGlzLmhlYWQsYj0wO2E7KWEuZGF0YS5jb3B5KGMsYiksYis9YS5kYXRhLmxlbmd0aCxhPWEubmV4dDtyZXR1cm4gY307dmFyIGRnPWwuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oYyl7c3dpdGNoKGMmJmMudG9Mb3dlckNhc2UoKSl7Y2FzZSAiaGV4IjpjYXNlICJ1dGY4IjpjYXNlICJ1dGYtOCI6Y2FzZSAiYXNjaWkiOmNhc2UgImJpbmFyeSI6Y2FzZSAiYmFzZTY0IjpjYXNlICJ1Y3MyIjpjYXNlICJ1Y3MtMiI6Y2FzZSAidXRmMTZsZSI6Y2FzZSAidXRmLTE2bGUiOmNhc2UgInJhdyI6cmV0dXJuITA7CmRlZmF1bHQ6cmV0dXJuITF9fTtyYi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYyl7Zm9yKHZhciBhPSIiO3RoaXMuY2hhckxlbmd0aDspe2E9Yy5sZW5ndGg+PXRoaXMuY2hhckxlbmd0aC10aGlzLmNoYXJSZWNlaXZlZD90aGlzLmNoYXJMZW5ndGgtdGhpcy5jaGFyUmVjZWl2ZWQ6Yy5sZW5ndGg7Yy5jb3B5KHRoaXMuY2hhckJ1ZmZlcix0aGlzLmNoYXJSZWNlaXZlZCwwLGEpO3RoaXMuY2hhclJlY2VpdmVkKz1hO2lmKHRoaXMuY2hhclJlY2VpdmVkPHRoaXMuY2hhckxlbmd0aClyZXR1cm4iIjtjPWMuc2xpY2UoYSxjLmxlbmd0aCk7YT10aGlzLmNoYXJCdWZmZXIuc2xpY2UoMCx0aGlzLmNoYXJMZW5ndGgpLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO3ZhciBiPWEuY2hhckNvZGVBdChhLmxlbmd0aC0xKTtpZig1NTI5Njw9YiYmNTYzMTk+PWIpdGhpcy5jaGFyTGVuZ3RoKz10aGlzLnN1cnJvZ2F0ZVNpemUsYT0iIjtlbHNle3RoaXMuY2hhclJlY2VpdmVkPXRoaXMuY2hhckxlbmd0aD0KMDtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGE7YnJlYWt9fXRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXIoYyk7dmFyIGQ9Yy5sZW5ndGg7dGhpcy5jaGFyTGVuZ3RoJiYoYy5jb3B5KHRoaXMuY2hhckJ1ZmZlciwwLGMubGVuZ3RoLXRoaXMuY2hhclJlY2VpdmVkLGQpLGQtPXRoaXMuY2hhclJlY2VpdmVkKTthKz1jLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCxkKTtkPWEubGVuZ3RoLTE7Yj1hLmNoYXJDb2RlQXQoZCk7cmV0dXJuIDU1Mjk2PD1iJiY1NjMxOT49Yj8oYj10aGlzLnN1cnJvZ2F0ZVNpemUsdGhpcy5jaGFyTGVuZ3RoKz1iLHRoaXMuY2hhclJlY2VpdmVkKz1iLHRoaXMuY2hhckJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlcixiLDAsYiksYy5jb3B5KHRoaXMuY2hhckJ1ZmZlciwwLDAsYiksYS5zdWJzdHJpbmcoMCxkKSk6YX07cmIucHJvdG90eXBlLmRldGVjdEluY29tcGxldGVDaGFyPWZ1bmN0aW9uKGMpe2Zvcih2YXIgYT0zPD1jLmxlbmd0aD8zOmMubGVuZ3RoOzA8CmE7YS0tKXt2YXIgYj1jW2MubGVuZ3RoLWFdO2lmKDE9PWEmJjY9PWI+PjUpe3RoaXMuY2hhckxlbmd0aD0yO2JyZWFrfWlmKDI+PWEmJjE0PT1iPj40KXt0aGlzLmNoYXJMZW5ndGg9MzticmVha31pZigzPj1hJiYzMD09Yj4+Myl7dGhpcy5jaGFyTGVuZ3RoPTQ7YnJlYWt9fXRoaXMuY2hhclJlY2VpdmVkPWF9O3JiLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oYyl7dmFyIGE9IiI7YyYmYy5sZW5ndGgmJihhPXRoaXMud3JpdGUoYykpO3RoaXMuY2hhclJlY2VpdmVkJiYoYz10aGlzLmVuY29kaW5nLGErPXRoaXMuY2hhckJ1ZmZlci5zbGljZSgwLHRoaXMuY2hhclJlY2VpdmVkKS50b1N0cmluZyhjKSk7cmV0dXJuIGF9O3kuUmVhZGFibGVTdGF0ZT1xZTt2YXIgej1TZCgic3RyZWFtIik7emEoeSx4KTt5LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGMsYSl7dmFyIGI9dGhpcy5fcmVhZGFibGVTdGF0ZTtiLm9iamVjdE1vZGV8fCJzdHJpbmciIT09dHlwZW9mIGN8fChhPWF8fGIuZGVmYXVsdEVuY29kaW5nLAphIT09Yi5lbmNvZGluZyYmKGM9bC5mcm9tKGMsYSksYT0iIikpO3JldHVybiByZSh0aGlzLGIsYyxhLCExKX07eS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihjKXtyZXR1cm4gcmUodGhpcyx0aGlzLl9yZWFkYWJsZVN0YXRlLGMsIiIsITApfTt5LnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfTt5LnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihjKXt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IHJiKGMpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9YztyZXR1cm4gdGhpc307eS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihjKXt6KCJyZWFkIixjKTtjPXBhcnNlSW50KGMsMTApO3ZhciBhPXRoaXMuX3JlYWRhYmxlU3RhdGUsYj1jOzAhPT1jJiYoYS5lbWl0dGVkUmVhZGFibGU9ITEpO2lmKDA9PT1jJiZhLm5lZWRSZWFkYWJsZSYmKGEubGVuZ3RoPj1hLmhpZ2hXYXRlck1hcmt8fAphLmVuZGVkKSlyZXR1cm4geigicmVhZDogZW1pdFJlYWRhYmxlIixhLmxlbmd0aCxhLmVuZGVkKSwwPT09YS5sZW5ndGgmJmEuZW5kZWQ/SmModGhpcyk6UWIodGhpcyksbnVsbDtjPXNlKGMsYSk7aWYoMD09PWMmJmEuZW5kZWQpcmV0dXJuIDA9PT1hLmxlbmd0aCYmSmModGhpcyksbnVsbDt2YXIgZD1hLm5lZWRSZWFkYWJsZTt6KCJuZWVkIHJlYWRhYmxlIixkKTtpZigwPT09YS5sZW5ndGh8fGEubGVuZ3RoLWM8YS5oaWdoV2F0ZXJNYXJrKWQ9ITAseigibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGQpO2EuZW5kZWR8fGEucmVhZGluZz96KCJyZWFkaW5nIG9yIGVuZGVkIiwhMSk6ZCYmKHooImRvIHJlYWQiKSxhLnJlYWRpbmc9ITAsYS5zeW5jPSEwLDA9PT1hLmxlbmd0aCYmKGEubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKGEuaGlnaFdhdGVyTWFyayksYS5zeW5jPSExLGEucmVhZGluZ3x8KGM9c2UoYixhKSkpO2Q9MDxjP3VlKGMsYSk6bnVsbDtudWxsPT09ZD8oYS5uZWVkUmVhZGFibGU9CiEwLGM9MCk6YS5sZW5ndGgtPWM7MD09PWEubGVuZ3RoJiYoYS5lbmRlZHx8KGEubmVlZFJlYWRhYmxlPSEwKSxiIT09YyYmYS5lbmRlZCYmSmModGhpcykpO251bGwhPT1kJiZ0aGlzLmVtaXQoImRhdGEiLGQpO3JldHVybiBkfTt5LnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLEVycm9yKCJub3QgaW1wbGVtZW50ZWQiKSl9O3kucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oYyxhKXtmdW5jdGlvbiBiKGEpe3ooIm9udW5waXBlIik7YT09PXEmJmUoKX1mdW5jdGlvbiBkKCl7eigib25lbmQiKTtjLmVuZCgpfWZ1bmN0aW9uIGUoKXt6KCJjbGVhbnVwIik7Yy5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGgpO2MucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsayk7Yy5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHIpO2MucmVtb3ZlTGlzdGVuZXIoImVycm9yIixnKTtjLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLGIpO3EucmVtb3ZlTGlzdGVuZXIoImVuZCIsZCk7cS5yZW1vdmVMaXN0ZW5lcigiZW5kIiwKZSk7cS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsZik7bT0hMDshbC5hd2FpdERyYWlufHxjLl93cml0YWJsZVN0YXRlJiYhYy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fHIoKX1mdW5jdGlvbiBmKGEpe3ooIm9uZGF0YSIpO3A9ITE7ITEhPT1jLndyaXRlKGEpfHxwfHwoKDE9PT1sLnBpcGVzQ291bnQmJmwucGlwZXM9PT1jfHwxPGwucGlwZXNDb3VudCYmLTEhPT12ZShsLnBpcGVzLGMpKSYmIW0mJih6KCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLHEuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbikscS5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKysscD0hMCkscS5wYXVzZSgpKX1mdW5jdGlvbiBnKGEpe3ooIm9uZXJyb3IiLGEpO3QoKTtjLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsZyk7MD09PWMubGlzdGVuZXJzKCJlcnJvciIpLmxlbmd0aCYmYy5lbWl0KCJlcnJvciIsYSl9ZnVuY3Rpb24gaCgpe2MucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsayk7dCgpfWZ1bmN0aW9uIGsoKXt6KCJvbmZpbmlzaCIpOwpjLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaCk7dCgpfWZ1bmN0aW9uIHQoKXt6KCJ1bnBpcGUiKTtxLnVucGlwZShjKX12YXIgcT10aGlzLGw9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2gobC5waXBlc0NvdW50KXtjYXNlIDA6bC5waXBlcz1jO2JyZWFrO2Nhc2UgMTpsLnBpcGVzPVtsLnBpcGVzLGNdO2JyZWFrO2RlZmF1bHQ6bC5waXBlcy5wdXNoKGMpfWwucGlwZXNDb3VudCs9MTt6KCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLGwucGlwZXNDb3VudCxhKTthPWEmJiExPT09YS5lbmQ/ZTpkO2lmKGwuZW5kRW1pdHRlZClYKGEpO2Vsc2UgcS5vbmNlKCJlbmQiLGEpO2Mub24oInVucGlwZSIsYik7dmFyIHI9amcocSk7Yy5vbigiZHJhaW4iLHIpO3ZhciBtPSExLHA9ITE7cS5vbigiZGF0YSIsZik7aGcoYywiZXJyb3IiLGcpO2Mub25jZSgiY2xvc2UiLGgpO2Mub25jZSgiZmluaXNoIixrKTtjLmVtaXQoInBpcGUiLHEpO2wuZmxvd2luZ3x8KHooInBpcGUgcmVzdW1lIikscS5yZXN1bWUoKSk7CnJldHVybiBjfTt5LnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oYyl7dmFyIGE9dGhpcy5fcmVhZGFibGVTdGF0ZTtpZigwPT09YS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1hLnBpcGVzQ291bnQpe2lmKGMmJmMhPT1hLnBpcGVzKXJldHVybiB0aGlzO2N8fChjPWEucGlwZXMpO2EucGlwZXM9bnVsbDthLnBpcGVzQ291bnQ9MDthLmZsb3dpbmc9ITE7YyYmYy5lbWl0KCJ1bnBpcGUiLHRoaXMpO3JldHVybiB0aGlzfWlmKCFjKXtjPWEucGlwZXM7dmFyIGI9YS5waXBlc0NvdW50O2EucGlwZXM9bnVsbDthLnBpcGVzQ291bnQ9MDthLmZsb3dpbmc9ITE7Zm9yKGE9MDthPGI7YSsrKWNbYV0uZW1pdCgidW5waXBlIix0aGlzKTtyZXR1cm4gdGhpc31iPXZlKGEucGlwZXMsYyk7aWYoLTE9PT1iKXJldHVybiB0aGlzO2EucGlwZXMuc3BsaWNlKGIsMSk7LS1hLnBpcGVzQ291bnQ7MT09PWEucGlwZXNDb3VudCYmKGEucGlwZXM9YS5waXBlc1swXSk7Yy5lbWl0KCJ1bnBpcGUiLAp0aGlzKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUub249ZnVuY3Rpb24oYyxhKXthPXgucHJvdG90eXBlLm9uLmNhbGwodGhpcyxjLGEpOyJkYXRhIj09PWM/ITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk6InJlYWRhYmxlIj09PWMmJihjPXRoaXMuX3JlYWRhYmxlU3RhdGUsYy5lbmRFbWl0dGVkfHxjLnJlYWRhYmxlTGlzdGVuaW5nfHwoYy5yZWFkYWJsZUxpc3RlbmluZz1jLm5lZWRSZWFkYWJsZT0hMCxjLmVtaXR0ZWRSZWFkYWJsZT0hMSxjLnJlYWRpbmc/Yy5sZW5ndGgmJlFiKHRoaXMpOlgoa2csdGhpcykpKTtyZXR1cm4gYX07eS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9eS5wcm90b3R5cGUub247eS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5fcmVhZGFibGVTdGF0ZTtjLmZsb3dpbmd8fCh6KCJyZXN1bWUiKSxjLmZsb3dpbmc9ITAsYy5yZXN1bWVTY2hlZHVsZWR8fChjLnJlc3VtZVNjaGVkdWxlZD0hMCxYKGxnLAp0aGlzLGMpKSk7cmV0dXJuIHRoaXN9O3kucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7eigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpOyExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoeigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihjKXt2YXIgYT10aGlzLl9yZWFkYWJsZVN0YXRlLGI9ITEsZD10aGlzO2Mub24oImVuZCIsZnVuY3Rpb24oKXt6KCJ3cmFwcGVkIGVuZCIpO2lmKGEuZGVjb2RlciYmIWEuZW5kZWQpe3ZhciBjPWEuZGVjb2Rlci5lbmQoKTtjJiZjLmxlbmd0aCYmZC5wdXNoKGMpfWQucHVzaChudWxsKX0pO2Mub24oImRhdGEiLGZ1bmN0aW9uKGUpe3ooIndyYXBwZWQgZGF0YSIpO2EuZGVjb2RlciYmKGU9YS5kZWNvZGVyLndyaXRlKGUpKTthLm9iamVjdE1vZGUmJihudWxsPT09CmV8fHZvaWQgMD09PWUpfHwhKGEub2JqZWN0TW9kZXx8ZSYmZS5sZW5ndGgpfHxkLnB1c2goZSl8fChiPSEwLGMucGF1c2UoKSl9KTtmb3IodmFyIGUgaW4gYyl2b2lkIDA9PT10aGlzW2VdJiYiZnVuY3Rpb24iPT09dHlwZW9mIGNbZV0mJih0aGlzW2VdPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjW2FdLmFwcGx5KGMsYXJndW1lbnRzKX19KGUpKTtuZyhbImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXSxmdW5jdGlvbihhKXtjLm9uKGEsZC5lbWl0LmJpbmQoZCxhKSl9KTtkLl9yZWFkPWZ1bmN0aW9uKGEpe3ooIndyYXBwZWQgX3JlYWQiLGEpO2ImJihiPSExLGMucmVzdW1lKCkpfTtyZXR1cm4gZH07eS5fZnJvbUxpc3Q9dWU7TC5Xcml0YWJsZVN0YXRlPUtjO3phKEwseCk7S2MucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgYz10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxhPVtdO2M7KWEucHVzaChjKSxjPWMubmV4dDsKcmV0dXJuIGF9O0wucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixFcnJvcigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX07TC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYyxhLGIpe3ZhciBkPXRoaXMuX3dyaXRhYmxlU3RhdGUsZT0hMTsiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihiPWEsYT1udWxsKTtsLmlzQnVmZmVyKGMpP2E9ImJ1ZmZlciI6YXx8KGE9ZC5kZWZhdWx0RW5jb2RpbmcpOyJmdW5jdGlvbiIhPT10eXBlb2YgYiYmKGI9b2cpO2lmKGQuZW5kZWQpZD1iLGM9RXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpLHRoaXMuZW1pdCgiZXJyb3IiLGMpLFgoZCxjKTtlbHNle3ZhciBmPWIsZz0hMCxoPSExO251bGw9PT1jP2g9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKTpsLmlzQnVmZmVyKGMpfHwic3RyaW5nIj09PXR5cGVvZiBjfHx2b2lkIDA9PT1jfHxkLm9iamVjdE1vZGV8fChoPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSk7CmgmJih0aGlzLmVtaXQoImVycm9yIixoKSxYKGYsaCksZz0hMSk7ZyYmKGQucGVuZGluZ2NiKyssZT1hLGQub2JqZWN0TW9kZXx8ITE9PT1kLmRlY29kZVN0cmluZ3N8fCJzdHJpbmciIT09dHlwZW9mIGN8fChjPWwuZnJvbShjLGUpKSxsLmlzQnVmZmVyKGMpJiYoZT0iYnVmZmVyIiksZj1kLm9iamVjdE1vZGU/MTpjLmxlbmd0aCxkLmxlbmd0aCs9ZixhPWQubGVuZ3RoPGQuaGlnaFdhdGVyTWFyayxhfHwoZC5uZWVkRHJhaW49ITApLGQud3JpdGluZ3x8ZC5jb3JrZWQ/KGY9ZC5sYXN0QnVmZmVyZWRSZXF1ZXN0LGQubGFzdEJ1ZmZlcmVkUmVxdWVzdD1uZXcgcGcoYyxlLGIpLGY/Zi5uZXh0PWQubGFzdEJ1ZmZlcmVkUmVxdWVzdDpkLmJ1ZmZlcmVkUmVxdWVzdD1kLmxhc3RCdWZmZXJlZFJlcXVlc3QsZC5idWZmZXJlZFJlcXVlc3RDb3VudCs9MSk6TGModGhpcyxkLCExLGYsYyxlLGIpLGU9YSl9cmV0dXJuIGV9O0wucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfTsKTC5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5fd3JpdGFibGVTdGF0ZTtjLmNvcmtlZCYmKGMuY29ya2VkLS0sYy53cml0aW5nfHxjLmNvcmtlZHx8Yy5maW5pc2hlZHx8Yy5idWZmZXJQcm9jZXNzaW5nfHwhYy5idWZmZXJlZFJlcXVlc3R8fHhlKHRoaXMsYykpfTtMLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oYyl7InN0cmluZyI9PT10eXBlb2YgYyYmKGM9Yy50b0xvd2VyQ2FzZSgpKTtpZighKC0xPCJoZXggdXRmOCB1dGYtOCBhc2NpaSBiaW5hcnkgYmFzZTY0IHVjczIgdWNzLTIgdXRmMTZsZSB1dGYtMTZsZSByYXciLnNwbGl0KCIgIikuaW5kZXhPZigoYysiIikudG9Mb3dlckNhc2UoKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrYyk7dGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9YztyZXR1cm4gdGhpc307TC5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGMsYSxiKXtiKEVycm9yKCJub3QgaW1wbGVtZW50ZWQiKSl9OwpMLnByb3RvdHlwZS5fd3JpdGV2PW51bGw7TC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGMsYSxiKXt2YXIgZD10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PT10eXBlb2YgYz8oYj1jLGE9Yz1udWxsKToiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihiPWEsYT1udWxsKTtudWxsIT09YyYmdm9pZCAwIT09YyYmdGhpcy53cml0ZShjLGEpO2QuY29ya2VkJiYoZC5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKTtpZighZC5lbmRpbmcmJiFkLmZpbmlzaGVkKXtjPWI7ZC5lbmRpbmc9ITA7QWUodGhpcyxkKTtpZihjKWlmKGQuZmluaXNoZWQpWChjKTtlbHNlIHRoaXMub25jZSgiZmluaXNoIixjKTtkLmVuZGVkPSEwO3RoaXMud3JpdGFibGU9ITF9fTt6YShVLHkpO2Zvcih2YXIgbmY9T2JqZWN0LmtleXMoTC5wcm90b3R5cGUpLGFkPTA7YWQ8bmYubGVuZ3RoO2FkKyspe3ZhciBiZD1uZlthZF07VS5wcm90b3R5cGVbYmRdfHwoVS5wcm90b3R5cGVbYmRdPUwucHJvdG90eXBlW2JkXSl9emEoYmEsClUpO2JhLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGMsYSl7dGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMTtyZXR1cm4gVS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsYyxhKX07YmEucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7fTtiYS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGMsYSxiKXt2YXIgZD10aGlzLl90cmFuc2Zvcm1TdGF0ZTtkLndyaXRlY2I9YjtkLndyaXRlY2h1bms9YztkLndyaXRlZW5jb2Rpbmc9YTtkLnRyYW5zZm9ybWluZ3x8KGM9dGhpcy5fcmVhZGFibGVTdGF0ZSwoZC5uZWVkVHJhbnNmb3JtfHxjLm5lZWRSZWFkYWJsZXx8Yy5sZW5ndGg8Yy5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChjLmhpZ2hXYXRlck1hcmspKX07YmEucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbCE9PWMud3JpdGVjaHVuayYmYy53cml0ZWNiJiYKIWMudHJhbnNmb3JtaW5nPyhjLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oYy53cml0ZWNodW5rLGMud3JpdGVlbmNvZGluZyxjLmFmdGVyVHJhbnNmb3JtKSk6Yy5uZWVkVHJhbnNmb3JtPSEwfTt6YShzYixiYSk7c2IucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oYyxhLGIpe2IobnVsbCxjKX07emEoY2EseCk7Y2EuUmVhZGFibGU9eTtjYS5Xcml0YWJsZT1MO2NhLkR1cGxleD1VO2NhLlRyYW5zZm9ybT1iYTtjYS5QYXNzVGhyb3VnaD1zYjtjYS5TdHJlYW09Y2E7Y2EucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oYyxhKXtmdW5jdGlvbiBiKGEpe2Mud3JpdGFibGUmJiExPT09Yy53cml0ZShhKSYmay5wYXVzZSYmay5wYXVzZSgpfWZ1bmN0aW9uIGQoKXtrLnJlYWRhYmxlJiZrLnJlc3VtZSYmay5yZXN1bWUoKX1mdW5jdGlvbiBlKCl7dHx8KHQ9ITAsYy5lbmQoKSl9ZnVuY3Rpb24gZigpe3R8fCh0PSEwLCJmdW5jdGlvbiI9PT10eXBlb2YgYy5kZXN0cm95JiZjLmRlc3Ryb3koKSl9CmZ1bmN0aW9uIGcoYSl7aCgpO2lmKDA9PT14Lmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyBhO31mdW5jdGlvbiBoKCl7ay5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsYik7Yy5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLGQpO2sucmVtb3ZlTGlzdGVuZXIoImVuZCIsZSk7ay5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGYpO2sucmVtb3ZlTGlzdGVuZXIoImVycm9yIixnKTtjLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsZyk7ay5yZW1vdmVMaXN0ZW5lcigiZW5kIixoKTtrLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaCk7Yy5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGgpfXZhciBrPXRoaXM7ay5vbigiZGF0YSIsYik7Yy5vbigiZHJhaW4iLGQpO2MuX2lzU3RkaW98fGEmJiExPT09YS5lbmR8fChrLm9uKCJlbmQiLGUpLGsub24oImNsb3NlIixmKSk7dmFyIHQ9ITE7ay5vbigiZXJyb3IiLGcpO2Mub24oImVycm9yIixnKTtrLm9uKCJlbmQiLGgpO2sub24oImNsb3NlIixoKTtjLm9uKCJjbG9zZSIsCmgpO2MuZW1pdCgicGlwZSIsayk7cmV0dXJuIGN9O3ZhciBYZz1BcnJheS5wcm90b3R5cGUuc2xpY2UsWWc9ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgZSBpbiBiKWFbZV09YltlXTtyZXR1cm4gMz5hcmd1bWVudHMubGVuZ3RoP2E6ZC5hcHBseShudWxsLFthXS5jb25jYXQoWGcuY2FsbChhcmd1bWVudHMsMikpKX0sb2Y9SyhmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYSxiLGQpe3ZvaWQgMD09PWQmJihkPWZ1bmN0aW9uKGEpe3JldHVybiBhfSk7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPVtdLGg9MDtoPGFyZ3VtZW50cy5sZW5ndGg7aCsrKWZbaF09YXJndW1lbnRzW2hdO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihoLGcpe2FbYl0uYmluZChhKS5hcHBseSh2b2lkIDAsZShmLFtmdW5jdGlvbihhLGIpe3JldHVybiBhP2coYSk6aChkKGIpKX1dKSl9KX19dmFyIGU9TiYmTi5fX3NwcmVhZEFycmF5c3x8ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiPTAsZD1hcmd1bWVudHMubGVuZ3RoO2I8CmQ7YisrKWErPWFyZ3VtZW50c1tiXS5sZW5ndGg7YT1BcnJheShhKTt2YXIgZT0wO2ZvcihiPTA7YjxkO2IrKylmb3IodmFyIGY9YXJndW1lbnRzW2JdLGw9MCxyPWYubGVuZ3RoO2w8cjtsKyssZSsrKWFbZV09ZltsXTtyZXR1cm4gYX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe3RoaXMudm9sPWE7dGhpcy5mZD1ifWEucHJvdG90eXBlLmFwcGVuZEZpbGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZCh0aGlzLnZvbCwiYXBwZW5kRmlsZSIpKHRoaXMuZmQsYSxiKX07YS5wcm90b3R5cGUuY2htb2Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGQodGhpcy52b2wsImZjaG1vZCIpKHRoaXMuZmQsYSl9O2EucHJvdG90eXBlLmNob3duPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQodGhpcy52b2wsImZjaG93biIpKHRoaXMuZmQsYSxiKX07YS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4gZCh0aGlzLnZvbCwKImNsb3NlIikodGhpcy5mZCl9O2EucHJvdG90eXBlLmRhdGFzeW5jPWZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcy52b2wsImZkYXRhc3luYyIpKHRoaXMuZmQpfTthLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKGEsYixlLGYpe3JldHVybiBkKHRoaXMudm9sLCJyZWFkIixmdW5jdGlvbihiKXtyZXR1cm57Ynl0ZXNSZWFkOmIsYnVmZmVyOmF9fSkodGhpcy5mZCxhLGIsZSxmKX07YS5wcm90b3R5cGUucmVhZEZpbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQodGhpcy52b2wsInJlYWRGaWxlIikodGhpcy5mZCxhKX07YS5wcm90b3R5cGUuc3RhdD1mdW5jdGlvbihhKXtyZXR1cm4gZCh0aGlzLnZvbCwiZnN0YXQiKSh0aGlzLmZkLGEpfTthLnByb3RvdHlwZS5zeW5jPWZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcy52b2wsImZzeW5jIikodGhpcy5mZCl9O2EucHJvdG90eXBlLnRydW5jYXRlPWZ1bmN0aW9uKGEpe3JldHVybiBkKHRoaXMudm9sLCJmdHJ1bmNhdGUiKSh0aGlzLmZkLGEpfTthLnByb3RvdHlwZS51dGltZXM9CmZ1bmN0aW9uKGEsYil7cmV0dXJuIGQodGhpcy52b2wsImZ1dGltZXMiKSh0aGlzLmZkLGEsYil9O2EucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGEsYixlLGYpe3JldHVybiBkKHRoaXMudm9sLCJ3cml0ZSIsZnVuY3Rpb24oYil7cmV0dXJue2J5dGVzV3JpdHRlbjpiLGJ1ZmZlcjphfX0pKHRoaXMuZmQsYSxiLGUsZil9O2EucHJvdG90eXBlLndyaXRlRmlsZT1mdW5jdGlvbihhLGIpe3JldHVybiBkKHRoaXMudm9sLCJ3cml0ZUZpbGUiKSh0aGlzLmZkLGEsYil9O3JldHVybiBhfSgpO2IuRmlsZUhhbmRsZT1mO2IuZGVmYXVsdD1mdW5jdGlvbihhKXtyZXR1cm4idW5kZWZpbmVkIj09PXR5cGVvZiBQcm9taXNlP251bGw6e0ZpbGVIYW5kbGU6ZixhY2Nlc3M6ZnVuY3Rpb24oYixlKXtyZXR1cm4gZChhLCJhY2Nlc3MiKShiLGUpfSxhcHBlbmRGaWxlOmZ1bmN0aW9uKGIsZSxnKXtyZXR1cm4gZChhLCJhcHBlbmRGaWxlIikoYiBpbnN0YW5jZW9mIGY/Yi5mZDpiLGUsZyl9LGNobW9kOmZ1bmN0aW9uKGIsCmUpe3JldHVybiBkKGEsImNobW9kIikoYixlKX0sY2hvd246ZnVuY3Rpb24oYixlLGYpe3JldHVybiBkKGEsImNob3duIikoYixlLGYpfSxjb3B5RmlsZTpmdW5jdGlvbihiLGUsZil7cmV0dXJuIGQoYSwiY29weUZpbGUiKShiLGUsZil9LGxjaG1vZDpmdW5jdGlvbihiLGUpe3JldHVybiBkKGEsImxjaG1vZCIpKGIsZSl9LGxjaG93bjpmdW5jdGlvbihiLGUsZil7cmV0dXJuIGQoYSwibGNob3duIikoYixlLGYpfSxsaW5rOmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGQoYSwibGluayIpKGIsZSl9LGxzdGF0OmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGQoYSwibHN0YXQiKShiLGUpfSxta2RpcjpmdW5jdGlvbihiLGUpe3JldHVybiBkKGEsIm1rZGlyIikoYixlKX0sbWtkdGVtcDpmdW5jdGlvbihiLGUpe3JldHVybiBkKGEsIm1rZHRlbXAiKShiLGUpfSxvcGVuOmZ1bmN0aW9uKGIsZSxnKXtyZXR1cm4gZChhLCJvcGVuIixmdW5jdGlvbihiKXtyZXR1cm4gbmV3IGYoYSxiKX0pKGIsZSxnKX0scmVhZGRpcjpmdW5jdGlvbihiLAplKXtyZXR1cm4gZChhLCJyZWFkZGlyIikoYixlKX0scmVhZEZpbGU6ZnVuY3Rpb24oYixlKXtyZXR1cm4gZChhLCJyZWFkRmlsZSIpKGIgaW5zdGFuY2VvZiBmP2IuZmQ6YixlKX0scmVhZGxpbms6ZnVuY3Rpb24oYixlKXtyZXR1cm4gZChhLCJyZWFkbGluayIpKGIsZSl9LHJlYWxwYXRoOmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGQoYSwicmVhbHBhdGgiKShiLGUpfSxyZW5hbWU6ZnVuY3Rpb24oYixlKXtyZXR1cm4gZChhLCJyZW5hbWUiKShiLGUpfSxybWRpcjpmdW5jdGlvbihiKXtyZXR1cm4gZChhLCJybWRpciIpKGIpfSxzdGF0OmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGQoYSwic3RhdCIpKGIsZSl9LHN5bWxpbms6ZnVuY3Rpb24oYixlLGYpe3JldHVybiBkKGEsInN5bWxpbmsiKShiLGUsZil9LHRydW5jYXRlOmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGQoYSwidHJ1bmNhdGUiKShiLGUpfSx1bmxpbms6ZnVuY3Rpb24oYil7cmV0dXJuIGQoYSwidW5saW5rIikoYil9LHV0aW1lczpmdW5jdGlvbihiLAplLGYpe3JldHVybiBkKGEsInV0aW1lcyIpKGIsZSxmKX0sd3JpdGVGaWxlOmZ1bmN0aW9uKGIsZSxnKXtyZXR1cm4gZChhLCJ3cml0ZUZpbGUiKShiIGluc3RhbmNlb2YgZj9iLmZkOmIsZSxnKX19fX0pO1Eob2YpO3ZhciB3Zz0vW15ceDIwLVx4N0VdLyx1Zz0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csRGU9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LFphPU1hdGguZmxvb3IsTWM9U3RyaW5nLmZyb21DaGFyQ29kZSxGZT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfSx5Zz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oYSl7dmFyIGI9W10sZDtmb3IoZCBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLApkKSYmYi5wdXNoKGQpO3JldHVybiBifSxaZz17cGFyc2U6UmIscmVzb2x2ZTpmdW5jdGlvbihhLGIpe3JldHVybiBSYihhLCExLCEwKS5yZXNvbHZlKGIpfSxyZXNvbHZlT2JqZWN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE/UmIoYSwhMSwhMCkucmVzb2x2ZU9iamVjdChiKTpifSxmb3JtYXQ6ZnVuY3Rpb24oYSl7SmEoYSkmJihhPUhlKHt9LGEpKTtyZXR1cm4gUGMoYSl9LFVybDpkYX0sQWc9L14oW2EtejAtOS4rLV0rOikvaSxFZz0vOlswLTldKiQvLHpnPS9eKFwvXC8/KD8hXC8pW15cP1xzXSopKFw/W15cc10qKT8kLywkZz0ie318XFxeYCIuc3BsaXQoIiIpLmNvbmNhdCgnPD4iYCBcclxuXHQnLnNwbGl0KCIiKSksT2M9WyInIl0uY29uY2F0KCRnKSxKZT1bIiUiLCIvIiwiPyIsIjsiLCIjIl0uY29uY2F0KE9jKSxJZT1bIi8iLCI/IiwiIyJdLENnPTI1NSxMZT0vXlsrYS16MC05QS1aXy1dezAsNjN9JC8sQmc9L14oWythLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLERnPXtqYXZhc2NyaXB0OiEwLAoiamF2YXNjcmlwdDoiOiEwfSxOYz17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSwkYT17aHR0cDohMCxodHRwczohMCxmdHA6ITAsZ29waGVyOiEwLGZpbGU6ITAsImh0dHA6IjohMCwiaHR0cHM6IjohMCwiZnRwOiI6ITAsImdvcGhlcjoiOiEwLCJmaWxlOiI6ITB9O2RhLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIEhlKHRoaXMsYSxiLGQpfTtkYS5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIFBjKHRoaXMpfTtkYS5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KFJiKGEsITEsITApKS5mb3JtYXQoKX07ZGEucHJvdG90eXBlLnJlc29sdmVPYmplY3Q9ZnVuY3Rpb24oYSl7aWYoSmEoYSkpe3ZhciBiPW5ldyBkYTtiLnBhcnNlKGEsITEsITApO2E9Yn1iPW5ldyBkYTtmb3IodmFyIGQ9T2JqZWN0LmtleXModGhpcyksZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZj1kW2VdO2JbZl09CnRoaXNbZl19Yi5oYXNoPWEuaGFzaDtpZigiIj09PWEuaHJlZilyZXR1cm4gYi5ocmVmPWIuZm9ybWF0KCksYjtpZihhLnNsYXNoZXMmJiFhLnByb3RvY29sKXtkPU9iamVjdC5rZXlzKGEpO2ZvcihlPTA7ZTxkLmxlbmd0aDtlKyspZj1kW2VdLCJwcm90b2NvbCIhPT1mJiYoYltmXT1hW2ZdKTskYVtiLnByb3RvY29sXSYmYi5ob3N0bmFtZSYmIWIucGF0aG5hbWUmJihiLnBhdGg9Yi5wYXRobmFtZT0iLyIpO2IuaHJlZj1iLmZvcm1hdCgpO3JldHVybiBifXZhciBnO2lmKGEucHJvdG9jb2wmJmEucHJvdG9jb2whPT1iLnByb3RvY29sKXtpZighJGFbYS5wcm90b2NvbF0pe2Q9T2JqZWN0LmtleXMoYSk7Zm9yKGU9MDtlPGQubGVuZ3RoO2UrKylmPWRbZV0sYltmXT1hW2ZdO2IuaHJlZj1iLmZvcm1hdCgpO3JldHVybiBifWIucHJvdG9jb2w9YS5wcm90b2NvbDtpZihhLmhvc3R8fE5jW2EucHJvdG9jb2xdKWIucGF0aG5hbWU9YS5wYXRobmFtZTtlbHNle2ZvcihnPShhLnBhdGhuYW1lfHwKIiIpLnNwbGl0KCIvIik7Zy5sZW5ndGgmJiEoYS5ob3N0PWcuc2hpZnQoKSk7KTthLmhvc3R8fChhLmhvc3Q9IiIpO2EuaG9zdG5hbWV8fChhLmhvc3RuYW1lPSIiKTsiIiE9PWdbMF0mJmcudW5zaGlmdCgiIik7Mj5nLmxlbmd0aCYmZy51bnNoaWZ0KCIiKTtiLnBhdGhuYW1lPWcuam9pbigiLyIpfWIuc2VhcmNoPWEuc2VhcmNoO2IucXVlcnk9YS5xdWVyeTtiLmhvc3Q9YS5ob3N0fHwiIjtiLmF1dGg9YS5hdXRoO2IuaG9zdG5hbWU9YS5ob3N0bmFtZXx8YS5ob3N0O2IucG9ydD1hLnBvcnQ7aWYoYi5wYXRobmFtZXx8Yi5zZWFyY2gpYi5wYXRoPShiLnBhdGhuYW1lfHwiIikrKGIuc2VhcmNofHwiIik7Yi5zbGFzaGVzPWIuc2xhc2hlc3x8YS5zbGFzaGVzO2IuaHJlZj1iLmZvcm1hdCgpO3JldHVybiBifWQ9Yi5wYXRobmFtZSYmIi8iPT09Yi5wYXRobmFtZS5jaGFyQXQoMCk7dmFyIGg9YS5ob3N0fHxhLnBhdGhuYW1lJiYiLyI9PT1hLnBhdGhuYW1lLmNoYXJBdCgwKSxrPWQ9aHx8CmR8fGIuaG9zdCYmYS5wYXRobmFtZTtlPWIucGF0aG5hbWUmJmIucGF0aG5hbWUuc3BsaXQoIi8iKXx8W107Zj1iLnByb3RvY29sJiYhJGFbYi5wcm90b2NvbF07Zz1hLnBhdGhuYW1lJiZhLnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdO2YmJihiLmhvc3RuYW1lPSIiLGIucG9ydD1udWxsLGIuaG9zdCYmKCIiPT09ZVswXT9lWzBdPWIuaG9zdDplLnVuc2hpZnQoYi5ob3N0KSksYi5ob3N0PSIiLGEucHJvdG9jb2wmJihhLmhvc3RuYW1lPW51bGwsYS5wb3J0PW51bGwsYS5ob3N0JiYoIiI9PT1nWzBdP2dbMF09YS5ob3N0OmcudW5zaGlmdChhLmhvc3QpKSxhLmhvc3Q9bnVsbCksZD1kJiYoIiI9PT1nWzBdfHwiIj09PWVbMF0pKTtpZihoKWIuaG9zdD1hLmhvc3R8fCIiPT09YS5ob3N0P2EuaG9zdDpiLmhvc3QsYi5ob3N0bmFtZT1hLmhvc3RuYW1lfHwiIj09PWEuaG9zdG5hbWU/YS5ob3N0bmFtZTpiLmhvc3RuYW1lLGIuc2VhcmNoPWEuc2VhcmNoLGIucXVlcnk9YS5xdWVyeSxlPWc7ZWxzZSBpZihnLmxlbmd0aCllfHwKKGU9W10pLGUucG9wKCksZT1lLmNvbmNhdChnKSxiLnNlYXJjaD1hLnNlYXJjaCxiLnF1ZXJ5PWEucXVlcnk7ZWxzZSBpZihudWxsIT1hLnNlYXJjaCl7ZiYmKGIuaG9zdG5hbWU9Yi5ob3N0PWUuc2hpZnQoKSxmPWIuaG9zdCYmMDxiLmhvc3QuaW5kZXhPZigiQCIpP2IuaG9zdC5zcGxpdCgiQCIpOiExKSYmKGIuYXV0aD1mLnNoaWZ0KCksYi5ob3N0PWIuaG9zdG5hbWU9Zi5zaGlmdCgpKTtiLnNlYXJjaD1hLnNlYXJjaDtiLnF1ZXJ5PWEucXVlcnk7aWYobnVsbCE9PWIucGF0aG5hbWV8fG51bGwhPT1iLnNlYXJjaCliLnBhdGg9KGIucGF0aG5hbWU/Yi5wYXRobmFtZToiIikrKGIuc2VhcmNoP2Iuc2VhcmNoOiIiKTtiLmhyZWY9Yi5mb3JtYXQoKTtyZXR1cm4gYn1pZighZS5sZW5ndGgpcmV0dXJuIGIucGF0aG5hbWU9bnVsbCxiLnBhdGg9Yi5zZWFyY2g/Ii8iK2Iuc2VhcmNoOm51bGwsYi5ocmVmPWIuZm9ybWF0KCksYjtoPWUuc2xpY2UoLTEpWzBdO2c9KGIuaG9zdHx8YS5ob3N0fHwKMTxlLmxlbmd0aCkmJigiLiI9PT1ofHwiLi4iPT09aCl8fCIiPT09aDtmb3IodmFyIGw9MCxxPWUubGVuZ3RoOzA8PXE7cS0tKWg9ZVtxXSwiLiI9PT1oP2Uuc3BsaWNlKHEsMSk6Ii4uIj09PWg/KGUuc3BsaWNlKHEsMSksbCsrKTpsJiYoZS5zcGxpY2UocSwxKSxsLS0pO2lmKCFkJiYhaylmb3IoO2wtLTtsKWUudW5zaGlmdCgiLi4iKTshZHx8IiI9PT1lWzBdfHxlWzBdJiYiLyI9PT1lWzBdLmNoYXJBdCgwKXx8ZS51bnNoaWZ0KCIiKTtnJiYiLyIhPT1lLmpvaW4oIi8iKS5zdWJzdHIoLTEpJiZlLnB1c2goIiIpO2s9IiI9PT1lWzBdfHxlWzBdJiYiLyI9PT1lWzBdLmNoYXJBdCgwKTtmJiYoYi5ob3N0bmFtZT1iLmhvc3Q9az8iIjplLmxlbmd0aD9lLnNoaWZ0KCk6IiIsZj1iLmhvc3QmJjA8Yi5ob3N0LmluZGV4T2YoIkAiKT9iLmhvc3Quc3BsaXQoIkAiKTohMSkmJihiLmF1dGg9Zi5zaGlmdCgpLGIuaG9zdD1iLmhvc3RuYW1lPWYuc2hpZnQoKSk7KGR8fGIuaG9zdCYmZS5sZW5ndGgpJiYKIWsmJmUudW5zaGlmdCgiIik7ZS5sZW5ndGg/Yi5wYXRobmFtZT1lLmpvaW4oIi8iKTooYi5wYXRobmFtZT1udWxsLGIucGF0aD1udWxsKTtpZihudWxsIT09Yi5wYXRobmFtZXx8bnVsbCE9PWIuc2VhcmNoKWIucGF0aD0oYi5wYXRobmFtZT9iLnBhdGhuYW1lOiIiKSsoYi5zZWFyY2g/Yi5zZWFyY2g6IiIpO2IuYXV0aD1hLmF1dGh8fGIuYXV0aDtiLnNsYXNoZXM9Yi5zbGFzaGVzfHxhLnNsYXNoZXM7Yi5ocmVmPWIuZm9ybWF0KCk7cmV0dXJuIGJ9O2RhLnByb3RvdHlwZS5wYXJzZUhvc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gS2UodGhpcyl9O3ZhciBwZj1LKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZChhLGIpe2E9YVtiXTtyZXR1cm4gMDxiJiYoIi8iPT09YXx8ZiYmIlxcIj09PWEpfWZ1bmN0aW9uIGUoYSl7dmFyIGI9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiEwO2lmKGYpe3ZhciBlPWE7aWYoInN0cmluZyIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleHBlY3RlZCBhIHN0cmluZyIpOwplPWUucmVwbGFjZSgvW1xcXC9dKy9nLCIvIik7aWYoITEhPT1iKWlmKGI9ZSxlPWIubGVuZ3RoLTEsMj5lKWU9YjtlbHNle2Zvcig7ZChiLGUpOyllLS07ZT1iLnN1YnN0cigwLGUrMSl9cmV0dXJuIGUucmVwbGFjZSgvXihbYS16QS1aXSs6fFwuXC8pLywiIil9cmV0dXJuIGF9T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2IudW5peGlmeT1lO2IuY29ycmVjdFBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYS5yZXBsYWNlKC9eXFxcXFw/XFwuOlxcLywiXFwiKSl9O3ZhciBmPSJ3aW4zMiI9PT1WYS5wbGF0Zm9ybX0pO1EocGYpO3ZhciBRYT1LKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZChhLGIpe3ZvaWQgMD09PWImJihiPVkuZGVmYXVsdC5jd2QoKSk7cmV0dXJuIGFoKGIsYSl9ZnVuY3Rpb24gZShhLGIpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgYT9bZigpLGFdOltmKGEpLHIoYildfWZ1bmN0aW9uIGYoYSl7dm9pZCAwPT09YSYmKGE9Cnt9KTtyZXR1cm4geGEoe30sdWEsYSl9ZnVuY3Rpb24gZyhhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhP3hhKHt9LGthLHttb2RlOmF9KTp4YSh7fSxrYSxhKX1mdW5jdGlvbiBoKGEsYixkLGUpe3ZvaWQgMD09PWImJihiPSIiKTt2b2lkIDA9PT1kJiYoZD0iIik7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciB2PSIiO2QmJih2PSIgJyIrZCsiJyIpO2UmJih2Kz0iIC0+ICciK2UrIiciKTtzd2l0Y2goYSl7Y2FzZSAiRU5PRU5UIjpyZXR1cm4iRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCAiK2IrdjtjYXNlICJFQkFERiI6cmV0dXJuIkVCQURGOiBiYWQgZmlsZSBkZXNjcmlwdG9yLCAiK2IrdjtjYXNlICJFSU5WQUwiOnJldHVybiJFSU5WQUw6IGludmFsaWQgYXJndW1lbnQsICIrYit2O2Nhc2UgIkVQRVJNIjpyZXR1cm4iRVBFUk06IG9wZXJhdGlvbiBub3QgcGVybWl0dGVkLCAiK2IrdjtjYXNlICJFUFJPVE8iOnJldHVybiJFUFJPVE86IHByb3RvY29sIGVycm9yLCAiKwpiK3Y7Y2FzZSAiRUVYSVNUIjpyZXR1cm4iRUVYSVNUOiBmaWxlIGFscmVhZHkgZXhpc3RzLCAiK2IrdjtjYXNlICJFTk9URElSIjpyZXR1cm4iRU5PVERJUjogbm90IGEgZGlyZWN0b3J5LCAiK2IrdjtjYXNlICJFSVNESVIiOnJldHVybiJFSVNESVI6IGlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5LCAiK2IrdjtjYXNlICJFQUNDRVMiOnJldHVybiJFQUNDRVM6IHBlcm1pc3Npb24gZGVuaWVkLCAiK2IrdjtjYXNlICJFTk9URU1QVFkiOnJldHVybiJFTk9URU1QVFk6IGRpcmVjdG9yeSBub3QgZW1wdHksICIrYit2O2Nhc2UgIkVNRklMRSI6cmV0dXJuIkVNRklMRTogdG9vIG1hbnkgb3BlbiBmaWxlcywgIitiK3Y7Y2FzZSAiRU5PU1lTIjpyZXR1cm4iRU5PU1lTOiBmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQsICIrYit2O2RlZmF1bHQ6cmV0dXJuIGErIjogZXJyb3Igb2NjdXJyZWQsICIrYit2fX1mdW5jdGlvbiBrKGEsYixkLGUsZil7dm9pZCAwPT09YiYmKGI9IiIpO3ZvaWQgMD09PQpkJiYoZD0iIik7dm9pZCAwPT09ZSYmKGU9IiIpO3ZvaWQgMD09PWYmJihmPUVycm9yKTtiPW5ldyBmKGgoYSxiLGQsZSkpO2IuY29kZT1hO3JldHVybiBifWZ1bmN0aW9uIGwoYSl7aWYoIm51bWJlciI9PT10eXBlb2YgYSlyZXR1cm4gYTtpZigic3RyaW5nIj09PXR5cGVvZiBhKXt2YXIgYj1SW2FdO2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIGIpcmV0dXJuIGJ9dGhyb3cgbmV3IHhiLlR5cGVFcnJvcigiRVJSX0lOVkFMSURfT1BUX1ZBTFVFIiwiZmxhZ3MiLGEpO31mdW5jdGlvbiBxKGEsYil7aWYoYil7dmFyIGQ9dHlwZW9mIGI7c3dpdGNoKGQpe2Nhc2UgInN0cmluZyI6YT14YSh7fSxhLHtlbmNvZGluZzpifSk7YnJlYWs7Y2FzZSAib2JqZWN0IjphPXhhKHt9LGEsYik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBUeXBlRXJyb3IoIkV4cGVjdGVkIG9wdGlvbnMgdG8gYmUgZWl0aGVyIGFuIG9iamVjdCBvciBhIHN0cmluZywgYnV0IGdvdCAiK2QrIiBpbnN0ZWFkIik7fX1lbHNlIHJldHVybiBhOwoiYnVmZmVyIiE9PWEuZW5jb2RpbmcmJm9hLmFzc2VydEVuY29kaW5nKGEuZW5jb2RpbmcpO3JldHVybiBhfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBxKGEsYil9fWZ1bmN0aW9uIHIoYSl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBhKXRocm93IFR5cGVFcnJvcihNLkNCKTtyZXR1cm4gYX1mdW5jdGlvbiBQKGEpe3JldHVybiBmdW5jdGlvbihiLGQpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgYj9bYSgpLGJdOlthKGIpLHIoZCldfX1mdW5jdGlvbiBwKGEpe2lmKCJzdHJpbmciIT09dHlwZW9mIGEmJiFKLkJ1ZmZlci5pc0J1ZmZlcihhKSl7dHJ5e2lmKCEoYSBpbnN0YW5jZW9mIFpnLlVSTCkpdGhyb3cgbmV3IFR5cGVFcnJvcihNLlBBVEhfU1RSKTt9Y2F0Y2goY2Qpe3Rocm93IG5ldyBUeXBlRXJyb3IoTS5QQVRIX1NUUik7fWlmKCIiIT09YS5ob3N0bmFtZSl0aHJvdyBuZXcgeGIuVHlwZUVycm9yKCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9IT1NUIiwKWS5kZWZhdWx0LnBsYXRmb3JtKTthPWEucGF0aG5hbWU7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspaWYoIiUiPT09YVtiXSl7dmFyIGQ9YS5jb2RlUG9pbnRBdChiKzIpfDMyO2lmKCIyIj09PWFbYisxXSYmMTAyPT09ZCl0aHJvdyBuZXcgeGIuVHlwZUVycm9yKCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9QQVRIIiwibXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVycyIpO31hPWRlY29kZVVSSUNvbXBvbmVudChhKX1hPVN0cmluZyhhKTtFKGEpO3JldHVybiBhfWZ1bmN0aW9uIG4oYSxiKXtyZXR1cm4oYT1kKGEsYikuc3Vic3RyKDEpKT9hLnNwbGl0KEgpOltdfWZ1bmN0aW9uIEIoYSl7cmV0dXJuIG4ocChhKSl9ZnVuY3Rpb24geihhLGIpe3ZvaWQgMD09PWImJihiPW9hLkVOQ09ESU5HX1VURjgpO3JldHVybiBKLkJ1ZmZlci5pc0J1ZmZlcihhKT9hOmEgaW5zdGFuY2VvZiBVaW50OEFycmF5P0ouYnVmZmVyRnJvbShhKTpKLmJ1ZmZlckZyb20oU3RyaW5nKGEpLGIpfQpmdW5jdGlvbiBDKGEsYil7cmV0dXJuIGImJiJidWZmZXIiIT09Yj9hLnRvU3RyaW5nKGIpOmF9ZnVuY3Rpb24gRShhLGIpe2lmKC0xIT09KCIiK2EpLmluZGV4T2YoIlx4MDAiKSl7YT1FcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nIHdpdGhvdXQgbnVsbCBieXRlcyIpO2EuY29kZT0iRU5PRU5UIjtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGIpdGhyb3cgYTtZLmRlZmF1bHQubmV4dFRpY2soYixhKTtyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiB5KGEsYil7YT0ibnVtYmVyIj09PXR5cGVvZiBhP2E6InN0cmluZyI9PT10eXBlb2YgYT9wYXJzZUludChhLDgpOmI/eShiKTp2b2lkIDA7aWYoIm51bWJlciIhPT10eXBlb2YgYXx8aXNOYU4oYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihNLk1PREVfSU5UKTtyZXR1cm4gYX1mdW5jdGlvbiBHKGEpe2lmKGE+Pj4wIT09YSl0aHJvdyBUeXBlRXJyb3IoTS5GRCk7fWZ1bmN0aW9uIEQoYSl7aWYoInN0cmluZyI9PT10eXBlb2YgYSYmK2E9PWEpcmV0dXJuK2E7CmlmKGEgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBhLmdldFRpbWUoKS8xRTM7aWYoaXNGaW5pdGUoYSkpcmV0dXJuIDA+YT9EYXRlLm5vdygpLzFFMzphO3Rocm93IEVycm9yKCJDYW5ub3QgcGFyc2UgdGltZTogIithKTt9ZnVuY3Rpb24gdyhhKXtpZigibnVtYmVyIiE9PXR5cGVvZiBhKXRocm93IFR5cGVFcnJvcihNLlVJRCk7fWZ1bmN0aW9uIEYoYSl7aWYoIm51bWJlciIhPT10eXBlb2YgYSl0aHJvdyBUeXBlRXJyb3IoTS5HSUQpO31mdW5jdGlvbiBiYyhhKXthLmVtaXQoInN0b3AiKX1mdW5jdGlvbiB0YShhLGIsZCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdGEpKXJldHVybiBuZXcgdGEoYSxiLGQpO3RoaXMuX3ZvbD1hO2Q9eGEoe30scShkLHt9KSk7dm9pZCAwPT09ZC5oaWdoV2F0ZXJNYXJrJiYoZC5oaWdoV2F0ZXJNYXJrPTY1NTM2KTtjYS5SZWFkYWJsZS5jYWxsKHRoaXMsZCk7dGhpcy5wYXRoPXAoYik7dGhpcy5mZD12b2lkIDA9PT1kLmZkP251bGw6ZC5mZDt0aGlzLmZsYWdzPQp2b2lkIDA9PT1kLmZsYWdzPyJyIjpkLmZsYWdzO3RoaXMubW9kZT12b2lkIDA9PT1kLm1vZGU/NDM4OmQubW9kZTt0aGlzLnN0YXJ0PWQuc3RhcnQ7dGhpcy5lbmQ9ZC5lbmQ7dGhpcy5hdXRvQ2xvc2U9dm9pZCAwPT09ZC5hdXRvQ2xvc2U/ITA6ZC5hdXRvQ2xvc2U7dGhpcy5wb3M9dm9pZCAwO3RoaXMuYnl0ZXNSZWFkPTA7aWYodm9pZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBuZXcgVHlwZUVycm9yKCcic3RhcnQiIG9wdGlvbiBtdXN0IGJlIGEgTnVtYmVyJyk7aWYodm9pZCAwPT09dGhpcy5lbmQpdGhpcy5lbmQ9SW5maW5pdHk7ZWxzZSBpZigibnVtYmVyIiE9PXR5cGVvZiB0aGlzLmVuZCl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5kIiBvcHRpb24gbXVzdCBiZSBhIE51bWJlcicpO2lmKHRoaXMuc3RhcnQ+dGhpcy5lbmQpdGhyb3cgRXJyb3IoJyJzdGFydCIgb3B0aW9uIG11c3QgYmUgPD0gImVuZCIgb3B0aW9uJyk7dGhpcy5wb3M9CnRoaXMuc3RhcnR9Im51bWJlciIhPT10eXBlb2YgdGhpcy5mZCYmdGhpcy5vcGVuKCk7dGhpcy5vbigiZW5kIixmdW5jdGlvbigpe3RoaXMuYXV0b0Nsb3NlJiZ0aGlzLmRlc3Ryb3kmJnRoaXMuZGVzdHJveSgpfSl9ZnVuY3Rpb24gYmgoKXt0aGlzLmNsb3NlKCl9ZnVuY3Rpb24gWihhLGIsZCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWikpcmV0dXJuIG5ldyBaKGEsYixkKTt0aGlzLl92b2w9YTtkPXhhKHt9LHEoZCx7fSkpO2NhLldyaXRhYmxlLmNhbGwodGhpcyxkKTt0aGlzLnBhdGg9cChiKTt0aGlzLmZkPXZvaWQgMD09PWQuZmQ/bnVsbDpkLmZkO3RoaXMuZmxhZ3M9dm9pZCAwPT09ZC5mbGFncz8idyI6ZC5mbGFnczt0aGlzLm1vZGU9dm9pZCAwPT09ZC5tb2RlPzQzODpkLm1vZGU7dGhpcy5zdGFydD1kLnN0YXJ0O3RoaXMuYXV0b0Nsb3NlPXZvaWQgMD09PWQuYXV0b0Nsb3NlPyEwOiEhZC5hdXRvQ2xvc2U7dGhpcy5wb3M9dm9pZCAwO3RoaXMuYnl0ZXNXcml0dGVuPTA7aWYodm9pZCAwIT09CnRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT09dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgbmV3IFR5cGVFcnJvcignInN0YXJ0IiBvcHRpb24gbXVzdCBiZSBhIE51bWJlcicpO2lmKDA+dGhpcy5zdGFydCl0aHJvdyBFcnJvcignInN0YXJ0IiBtdXN0IGJlID49IHplcm8nKTt0aGlzLnBvcz10aGlzLnN0YXJ0fWQuZW5jb2RpbmcmJnRoaXMuc2V0RGVmYXVsdEVuY29kaW5nKGQuZW5jb2RpbmcpOyJudW1iZXIiIT09dHlwZW9mIHRoaXMuZmQmJnRoaXMub3BlbigpO3RoaXMub25jZSgiZmluaXNoIixmdW5jdGlvbigpe3RoaXMuYXV0b0Nsb3NlJiZ0aGlzLmNsb3NlKCl9KX12YXIgaGI9TiYmTi5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGQpe2E9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsYil7YS5fX3Byb3RvX189Yn18fGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShkKSYmCihhW2RdPWJbZF0pfTtyZXR1cm4gYShiLGQpfXJldHVybiBmdW5jdGlvbihiLGQpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvbnN0cnVjdG9yPWJ9YShiLGQpO2IucHJvdG90eXBlPW51bGw9PT1kP09iamVjdC5jcmVhdGUoZCk6KGUucHJvdG90eXBlPWQucHJvdG90eXBlLG5ldyBlKX19KCksZmQ9TiYmTi5fX3NwcmVhZEFycmF5c3x8ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiPTAsZD1hcmd1bWVudHMubGVuZ3RoO2I8ZDtiKyspYSs9YXJndW1lbnRzW2JdLmxlbmd0aDthPUFycmF5KGEpO3ZhciBlPTA7Zm9yKGI9MDtiPGQ7YisrKWZvcih2YXIgZj1hcmd1bWVudHNbYl0saD0wLGc9Zi5sZW5ndGg7aDxnO2grKyxlKyspYVtlXT1mW2hdO3JldHVybiBhfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHhhPVlnLGFoPUhjLGNjPXUuY29uc3RhbnRzLk9fUkRPTkxZLGliPXUuY29uc3RhbnRzLk9fV1JPTkxZLEFhPXUuY29uc3RhbnRzLk9fUkRXUiwKTz11LmNvbnN0YW50cy5PX0NSRUFULEk9dS5jb25zdGFudHMuT19FWENMLEs9dS5jb25zdGFudHMuT19UUlVOQyxMPXUuY29uc3RhbnRzLk9fQVBQRU5ELFE9dS5jb25zdGFudHMuT19TWU5DLFQ9dS5jb25zdGFudHMuT19ESVJFQ1RPUlksUz11LmNvbnN0YW50cy5GX09LLFY9dS5jb25zdGFudHMuQ09QWUZJTEVfRVhDTCxYPXUuY29uc3RhbnRzLkNPUFlGSUxFX0ZJQ0xPTkVfRk9SQ0UsSD0iLyIsVT0id2luMzIiPT09WS5kZWZhdWx0LnBsYXRmb3JtLE09e1BBVEhfU1RSOiJwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgQnVmZmVyIixGRDoiZmQgbXVzdCBiZSBhIGZpbGUgZGVzY3JpcHRvciIsTU9ERV9JTlQ6Im1vZGUgbXVzdCBiZSBhbiBpbnQiLENCOiJjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iLFVJRDoidWlkIG11c3QgYmUgYW4gdW5zaWduZWQgaW50IixHSUQ6ImdpZCBtdXN0IGJlIGFuIHVuc2lnbmVkIGludCIsTEVOOiJsZW4gbXVzdCBiZSBhbiBpbnRlZ2VyIixBVElNRToiYXRpbWUgbXVzdCBiZSBhbiBpbnRlZ2VyIiwKTVRJTUU6Im10aW1lIG11c3QgYmUgYW4gaW50ZWdlciIsUFJFRklYOiJmaWxlbmFtZSBwcmVmaXggaXMgcmVxdWlyZWQiLEJVRkZFUjoiYnVmZmVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyIG9yIFN0YXRpY0J1ZmZlciIsT0ZGU0VUOiJvZmZzZXQgbXVzdCBiZSBhbiBpbnRlZ2VyIixMRU5HVEg6Imxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXIiLFBPU0lUSU9OOiJwb3NpdGlvbiBtdXN0IGJlIGFuIGludGVnZXIifSxSOyhmdW5jdGlvbihhKXthW2Eucj1jY109InIiO2FbYVsicisiXT1BYV09InIrIjthW2EucnM9Y2N8UV09InJzIjthW2Euc3I9YS5yc109InNyIjthW2FbInJzKyJdPUFhfFFdPSJycysiO2FbYVsic3IrIl09YVsicnMrIl1dPSJzcisiO2FbYS53PWlifE98S109InciO2FbYS53eD1pYnxPfEt8SV09Ind4IjthW2EueHc9YS53eF09Inh3IjthW2FbIncrIl09QWF8T3xLXT0idysiO2FbYVsid3grIl09QWF8T3xLfEldPSJ3eCsiO2FbYVsieHcrIl09YVsid3grIl1dPQoieHcrIjthW2EuYT1pYnxMfE9dPSJhIjthW2EuYXg9aWJ8THxPfEldPSJheCI7YVthLnhhPWEuYXhdPSJ4YSI7YVthWyJhKyJdPUFhfEx8T109ImErIjthW2FbImF4KyJdPUFhfEx8T3xJXT0iYXgrIjthW2FbInhhKyJdPWFbImF4KyJdXT0ieGErIn0pKFI9Yi5GTEFHU3x8KGIuRkxBR1M9e30pKTtiLmZsYWdzVG9OdW1iZXI9bDthPXtlbmNvZGluZzoidXRmOCJ9O3ZhciBXPW0oYSksYWE9UChXKSxiYT1tKHtmbGFnOiJyIn0pLGRhPXtlbmNvZGluZzoidXRmOCIsbW9kZTo0MzgsZmxhZzpSW1Iud119LGVhPW0oZGEpLGZhPXtlbmNvZGluZzoidXRmOCIsbW9kZTo0MzgsZmxhZzpSW1IuYV19LGhhPW0oZmEpLG5hPVAoaGEpLGphPW0oYSkscGE9UChqYSksa2E9e21vZGU6NTExLHJlY3Vyc2l2ZTohMX0sbGE9e3JlY3Vyc2l2ZTohMX0sbWE9bSh7ZW5jb2Rpbmc6InV0ZjgiLHdpdGhGaWxlVHlwZXM6ITF9KSxzYT1QKG1hKSx1YT17YmlnaW50OiExfTtiLnBhdGhUb0ZpbGVuYW1lPXA7aWYoVSl7dmFyIHZhPQpkLHdhPXBmLnVuaXhpZnk7ZD1mdW5jdGlvbihhLGIpe3JldHVybiB3YSh2YShhLGIpKX19Yi5maWxlbmFtZVRvU3RlcHM9bjtiLnBhdGhUb1N0ZXBzPUI7Yi5kYXRhVG9TdHI9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1vYS5FTkNPRElOR19VVEY4KTtyZXR1cm4gSi5CdWZmZXIuaXNCdWZmZXIoYSk/YS50b1N0cmluZyhiKTphIGluc3RhbmNlb2YgVWludDhBcnJheT9KLmJ1ZmZlckZyb20oYSkudG9TdHJpbmcoYik6U3RyaW5nKGEpfTtiLmRhdGFUb0J1ZmZlcj16O2IuYnVmZmVyVG9FbmNvZGluZz1DO2IudG9Vbml4VGltZXN0YW1wPUQ7YT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7dm9pZCAwPT09YSYmKGE9e30pO3RoaXMuaW5vPTA7dGhpcy5pbm9kZXM9e307dGhpcy5yZWxlYXNlZElub3M9W107dGhpcy5mZHM9e307dGhpcy5yZWxlYXNlZEZkcz1bXTt0aGlzLm1heEZpbGVzPTFFNDt0aGlzLm9wZW5GaWxlcz0wO3RoaXMucHJvbWlzZXNBcGk9b2YuZGVmYXVsdCh0aGlzKTsKdGhpcy5zdGF0V2F0Y2hlcnM9e307dGhpcy5wcm9wcz14YSh7Tm9kZTp5Yi5Ob2RlLExpbms6eWIuTGluayxGaWxlOnliLkZpbGV9LGEpO2E9dGhpcy5jcmVhdGVMaW5rKCk7YS5zZXROb2RlKHRoaXMuY3JlYXRlTm9kZSghMCkpO3ZhciBiPXRoaXM7dGhpcy5TdGF0V2F0Y2hlcj1mdW5jdGlvbihhKXtmdW5jdGlvbiBkKCl7cmV0dXJuIGEuY2FsbCh0aGlzLGIpfHx0aGlzfWhiKGQsYSk7cmV0dXJuIGR9KHFhKTt0aGlzLlJlYWRTdHJlYW09ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylkW2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gYS5hcHBseSh0aGlzLGZkKFtiXSxkKSl8fHRoaXN9aGIoZCxhKTtyZXR1cm4gZH0odGEpO3RoaXMuV3JpdGVTdHJlYW09ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylkW2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gYS5hcHBseSh0aGlzLApmZChbYl0sZCkpfHx0aGlzfWhiKGQsYSk7cmV0dXJuIGR9KFopO3RoaXMuRlNXYXRjaGVyPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGQoKXtyZXR1cm4gYS5jYWxsKHRoaXMsYil8fHRoaXN9aGIoZCxhKTtyZXR1cm4gZH0ocmEpO3RoaXMucm9vdD1hfWEuZnJvbUpTT049ZnVuY3Rpb24oYixkKXt2YXIgZT1uZXcgYTtlLmZyb21KU09OKGIsZCk7cmV0dXJuIGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSwicHJvbWlzZXMiLHtnZXQ6ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5wcm9taXNlc0FwaSl0aHJvdyBFcnJvcigiUHJvbWlzZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIik7cmV0dXJuIHRoaXMucHJvbWlzZXNBcGl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7YS5wcm90b3R5cGUuY3JlYXRlTGluaz1mdW5jdGlvbihhLGIsZCxlKXt2b2lkIDA9PT1kJiYoZD0hMSk7aWYoIWEpcmV0dXJuIG5ldyB0aGlzLnByb3BzLkxpbmsodGhpcywKbnVsbCwiIik7aWYoIWIpdGhyb3cgRXJyb3IoImNyZWF0ZUxpbms6IG5hbWUgY2Fubm90IGJlIGVtcHR5Iik7cmV0dXJuIGEuY3JlYXRlQ2hpbGQoYix0aGlzLmNyZWF0ZU5vZGUoZCxlKSl9O2EucHJvdG90eXBlLmRlbGV0ZUxpbms9ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnQ7cmV0dXJuIGI/KGIuZGVsZXRlQ2hpbGQoYSksITApOiExfTthLnByb3RvdHlwZS5uZXdJbm9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlbGVhc2VkSW5vcy5wb3AoKTtyZXR1cm4gYT9hOnRoaXMuaW5vPSh0aGlzLmlubysxKSU0Mjk0OTY3Mjk1fTthLnByb3RvdHlwZS5uZXdGZE51bWJlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMucmVsZWFzZWRGZHMucG9wKCk7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgYj9iOmEuZmQtLX07YS5wcm90b3R5cGUuY3JlYXRlTm9kZT1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPSExKTtiPW5ldyB0aGlzLnByb3BzLk5vZGUodGhpcy5uZXdJbm9OdW1iZXIoKSwKYik7YSYmYi5zZXRJc0RpcmVjdG9yeSgpO3JldHVybiB0aGlzLmlub2Rlc1tiLmlub109Yn07YS5wcm90b3R5cGUuZ2V0Tm9kZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pbm9kZXNbYV19O2EucHJvdG90eXBlLmRlbGV0ZU5vZGU9ZnVuY3Rpb24oYSl7YS5kZWwoKTtkZWxldGUgdGhpcy5pbm9kZXNbYS5pbm9dO3RoaXMucmVsZWFzZWRJbm9zLnB1c2goYS5pbm8pfTthLnByb3RvdHlwZS5nZW5SbmRTdHI9ZnVuY3Rpb24oKXt2YXIgYT0oTWF0aC5yYW5kb20oKSsxKS50b1N0cmluZygzNikuc3Vic3RyKDIsNik7cmV0dXJuIDY9PT1hLmxlbmd0aD9hOnRoaXMuZ2VuUm5kU3RyKCl9O2EucHJvdG90eXBlLmdldExpbms9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm9vdC53YWxrKGEpfTthLnByb3RvdHlwZS5nZXRMaW5rT3JUaHJvdz1mdW5jdGlvbihhLGIpe3ZhciBkPW4oYSk7ZD10aGlzLmdldExpbmsoZCk7aWYoIWQpdGhyb3cgaygiRU5PRU5UIixiLGEpO3JldHVybiBkfTthLnByb3RvdHlwZS5nZXRSZXNvbHZlZExpbms9CmZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PT10eXBlb2YgYT9uKGEpOmE7Zm9yKHZhciBiPXRoaXMucm9vdCxkPTA7ZDxhLmxlbmd0aDspe2I9Yi5nZXRDaGlsZChhW2RdKTtpZighYilyZXR1cm4gbnVsbDt2YXIgZT1iLmdldE5vZGUoKTtlLmlzU3ltbGluaygpPyhhPWUuc3ltbGluay5jb25jYXQoYS5zbGljZShkKzEpKSxiPXRoaXMucm9vdCxkPTApOmQrK31yZXR1cm4gYn07YS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRMaW5rT3JUaHJvdz1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuZ2V0UmVzb2x2ZWRMaW5rKGEpO2lmKCFkKXRocm93IGsoIkVOT0VOVCIsYixhKTtyZXR1cm4gZH07YS5wcm90b3R5cGUucmVzb2x2ZVN5bWxpbmtzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdldFJlc29sdmVkTGluayhhLnN0ZXBzLnNsaWNlKDEpKX07YS5wcm90b3R5cGUuZ2V0TGlua0FzRGlyT3JUaHJvdz1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuZ2V0TGlua09yVGhyb3coYSxiKTtpZighZC5nZXROb2RlKCkuaXNEaXJlY3RvcnkoKSl0aHJvdyBrKCJFTk9URElSIiwKYixhKTtyZXR1cm4gZH07YS5wcm90b3R5cGUuZ2V0TGlua1BhcmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb290LndhbGsoYSxhLmxlbmd0aC0xKX07YS5wcm90b3R5cGUuZ2V0TGlua1BhcmVudEFzRGlyT3JUaHJvdz1mdW5jdGlvbihhLGIpe2E9YSBpbnN0YW5jZW9mIEFycmF5P2E6bihhKTt2YXIgZD10aGlzLmdldExpbmtQYXJlbnQoYSk7aWYoIWQpdGhyb3cgaygiRU5PRU5UIixiLEgrYS5qb2luKEgpKTtpZighZC5nZXROb2RlKCkuaXNEaXJlY3RvcnkoKSl0aHJvdyBrKCJFTk9URElSIixiLEgrYS5qb2luKEgpKTtyZXR1cm4gZH07YS5wcm90b3R5cGUuZ2V0RmlsZUJ5RmQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZmRzW1N0cmluZyhhKV19O2EucHJvdG90eXBlLmdldEZpbGVCeUZkT3JUaHJvdz1mdW5jdGlvbihhLGIpe2lmKGE+Pj4wIT09YSl0aHJvdyBUeXBlRXJyb3IoTS5GRCk7YT10aGlzLmdldEZpbGVCeUZkKGEpO2lmKCFhKXRocm93IGsoIkVCQURGIixiKTtyZXR1cm4gYX07CmEucHJvdG90eXBlLmdldE5vZGVCeUlkT3JDcmVhdGU9ZnVuY3Rpb24oYSxiLGQpe2lmKCJudW1iZXIiPT09dHlwZW9mIGEpe2E9dGhpcy5nZXRGaWxlQnlGZChhKTtpZighYSl0aHJvdyBFcnJvcigiRmlsZSBudG8gZm91bmQiKTtyZXR1cm4gYS5ub2RlfXZhciBlPUIoYSksZj10aGlzLmdldExpbmsoZSk7aWYoZilyZXR1cm4gZi5nZXROb2RlKCk7aWYoYiZPJiYoYj10aGlzLmdldExpbmtQYXJlbnQoZSkpKXJldHVybiBmPXRoaXMuY3JlYXRlTGluayhiLGVbZS5sZW5ndGgtMV0sITEsZCksZi5nZXROb2RlKCk7dGhyb3cgaygiRU5PRU5UIiwiZ2V0Tm9kZUJ5SWRPckNyZWF0ZSIscChhKSk7fTthLnByb3RvdHlwZS53cmFwQXN5bmM9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPXRoaXM7cihkKTtnYi5kZWZhdWx0KGZ1bmN0aW9uKCl7dHJ5e2QobnVsbCxhLmFwcGx5KGUsYikpfWNhdGNoKEFiKXtkKEFiKX19KX07YS5wcm90b3R5cGUuX3RvSlNPTj1mdW5jdGlvbihhLGIsZCl7dmFyIGU7dm9pZCAwPT09CmEmJihhPXRoaXMucm9vdCk7dm9pZCAwPT09YiYmKGI9e30pO3ZhciBmPSEwLHY9YS5jaGlsZHJlbjthLmdldE5vZGUoKS5pc0ZpbGUoKSYmKHY9KGU9e30sZVthLmdldE5hbWUoKV09YS5wYXJlbnQuZ2V0Q2hpbGQoYS5nZXROYW1lKCkpLGUpLGE9YS5wYXJlbnQpO2Zvcih2YXIgaCBpbiB2KXtmPSExO3Y9YS5nZXRDaGlsZChoKTtpZighdil0aHJvdyBFcnJvcigiX3RvSlNPTjogdW5leHBlY3RlZCB1bmRlZmluZWQiKTtlPXYuZ2V0Tm9kZSgpO2UuaXNGaWxlKCk/KHY9di5nZXRQYXRoKCksZCYmKHY9UGIoZCx2KSksYlt2XT1lLmdldFN0cmluZygpKTplLmlzRGlyZWN0b3J5KCkmJnRoaXMuX3RvSlNPTih2LGIsZCl9YT1hLmdldFBhdGgoKTtkJiYoYT1QYihkLGEpKTthJiZmJiYoYlthXT1udWxsKTtyZXR1cm4gYn07YS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEsYixkKXt2b2lkIDA9PT1iJiYoYj17fSk7dm9pZCAwPT09ZCYmKGQ9ITEpO3ZhciBlPVtdO2lmKGEpe2EgaW5zdGFuY2VvZgpBcnJheXx8KGE9W2FdKTtmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIHY9cChhW2ZdKTsodj10aGlzLmdldFJlc29sdmVkTGluayh2KSkmJmUucHVzaCh2KX19ZWxzZSBlLnB1c2godGhpcy5yb290KTtpZighZS5sZW5ndGgpcmV0dXJuIGI7Zm9yKGY9MDtmPGUubGVuZ3RoO2YrKyl2PWVbZl0sdGhpcy5fdG9KU09OKHYsYixkP3YuZ2V0UGF0aCgpOiIiKTtyZXR1cm4gYn07YS5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1ZLmRlZmF1bHQuY3dkKCkpO2Zvcih2YXIgZSBpbiBhKXt2YXIgZj1hW2VdO2lmKCJzdHJpbmciPT09dHlwZW9mIGYpe2U9ZChlLGIpO3ZhciB2PW4oZSk7MTx2Lmxlbmd0aCYmKHY9SCt2LnNsaWNlKDAsdi5sZW5ndGgtMSkuam9pbihIKSx0aGlzLm1rZGlycEJhc2Uodiw1MTEpKTt0aGlzLndyaXRlRmlsZVN5bmMoZSxmKX1lbHNlIHRoaXMubWtkaXJwQmFzZShlLDUxMSl9fTthLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuaW5vPQowO3RoaXMuaW5vZGVzPXt9O3RoaXMucmVsZWFzZWRJbm9zPVtdO3RoaXMuZmRzPXt9O3RoaXMucmVsZWFzZWRGZHM9W107dGhpcy5vcGVuRmlsZXM9MDt0aGlzLnJvb3Q9dGhpcy5jcmVhdGVMaW5rKCk7dGhpcy5yb290LnNldE5vZGUodGhpcy5jcmVhdGVOb2RlKCEwKSl9O2EucHJvdG90eXBlLm1vdW50U3luYz1mdW5jdGlvbihhLGIpe3RoaXMuZnJvbUpTT04oYixhKX07YS5wcm90b3R5cGUub3Blbkxpbms9ZnVuY3Rpb24oYSxiLGQpe3ZvaWQgMD09PWQmJihkPSEwKTtpZih0aGlzLm9wZW5GaWxlcz49dGhpcy5tYXhGaWxlcyl0aHJvdyBrKCJFTUZJTEUiLCJvcGVuIixhLmdldFBhdGgoKSk7dmFyIGU9YTtkJiYoZT10aGlzLnJlc29sdmVTeW1saW5rcyhhKSk7aWYoIWUpdGhyb3cgaygiRU5PRU5UIiwib3BlbiIsYS5nZXRQYXRoKCkpO2Q9ZS5nZXROb2RlKCk7aWYoZC5pc0RpcmVjdG9yeSgpKXtpZigoYiYoY2N8QWF8aWIpKSE9PWNjKXRocm93IGsoIkVJU0RJUiIsIm9wZW4iLGEuZ2V0UGF0aCgpKTsKfWVsc2UgaWYoYiZUKXRocm93IGsoIkVOT1RESVIiLCJvcGVuIixhLmdldFBhdGgoKSk7aWYoIShiJmlifHxkLmNhblJlYWQoKSkpdGhyb3cgaygiRUFDQ0VTIiwib3BlbiIsYS5nZXRQYXRoKCkpO2E9bmV3IHRoaXMucHJvcHMuRmlsZShhLGQsYix0aGlzLm5ld0ZkTnVtYmVyKCkpO3RoaXMuZmRzW2EuZmRdPWE7dGhpcy5vcGVuRmlsZXMrKztiJksmJmEudHJ1bmNhdGUoKTtyZXR1cm4gYX07YS5wcm90b3R5cGUub3BlbkZpbGU9ZnVuY3Rpb24oYSxiLGQsZSl7dm9pZCAwPT09ZSYmKGU9ITApO3ZhciBmPW4oYSksdj1lP3RoaXMuZ2V0UmVzb2x2ZWRMaW5rKGYpOnRoaXMuZ2V0TGluayhmKTtpZighdiYmYiZPKXt2YXIgaD10aGlzLmdldFJlc29sdmVkTGluayhmLnNsaWNlKDAsZi5sZW5ndGgtMSkpO2lmKCFoKXRocm93IGsoIkVOT0VOVCIsIm9wZW4iLEgrZi5qb2luKEgpKTtiJk8mJiJudW1iZXIiPT09dHlwZW9mIGQmJih2PXRoaXMuY3JlYXRlTGluayhoLGZbZi5sZW5ndGgtMV0sCiExLGQpKX1pZih2KXJldHVybiB0aGlzLm9wZW5MaW5rKHYsYixlKTt0aHJvdyBrKCJFTk9FTlQiLCJvcGVuIixhKTt9O2EucHJvdG90eXBlLm9wZW5CYXNlPWZ1bmN0aW9uKGEsYixkLGUpe3ZvaWQgMD09PWUmJihlPSEwKTtiPXRoaXMub3BlbkZpbGUoYSxiLGQsZSk7aWYoIWIpdGhyb3cgaygiRU5PRU5UIiwib3BlbiIsYSk7cmV0dXJuIGIuZmR9O2EucHJvdG90eXBlLm9wZW5TeW5jPWZ1bmN0aW9uKGEsYixkKXt2b2lkIDA9PT1kJiYoZD00MzgpO2Q9eShkKTthPXAoYSk7Yj1sKGIpO3JldHVybiB0aGlzLm9wZW5CYXNlKGEsYixkKX07YS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbihhLGIsZCxlKXt2YXIgZj1kOyJmdW5jdGlvbiI9PT10eXBlb2YgZCYmKGY9NDM4LGU9ZCk7ZD15KGZ8fDQzOCk7YT1wKGEpO2I9bChiKTt0aGlzLndyYXBBc3luYyh0aGlzLm9wZW5CYXNlLFthLGIsZF0sZSl9O2EucHJvdG90eXBlLmNsb3NlRmlsZT1mdW5jdGlvbihhKXt0aGlzLmZkc1thLmZkXSYmKHRoaXMub3BlbkZpbGVzLS0sCmRlbGV0ZSB0aGlzLmZkc1thLmZkXSx0aGlzLnJlbGVhc2VkRmRzLnB1c2goYS5mZCkpfTthLnByb3RvdHlwZS5jbG9zZVN5bmM9ZnVuY3Rpb24oYSl7RyhhKTthPXRoaXMuZ2V0RmlsZUJ5RmRPclRocm93KGEsImNsb3NlIik7dGhpcy5jbG9zZUZpbGUoYSl9O2EucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGEsYil7RyhhKTt0aGlzLndyYXBBc3luYyh0aGlzLmNsb3NlU3luYyxbYV0sYil9O2EucHJvdG90eXBlLm9wZW5GaWxlT3JHZXRCeUlkPWZ1bmN0aW9uKGEsYixkKXtpZigibnVtYmVyIj09PXR5cGVvZiBhKXthPXRoaXMuZmRzW2FdO2lmKCFhKXRocm93IGsoIkVOT0VOVCIpO3JldHVybiBhfXJldHVybiB0aGlzLm9wZW5GaWxlKHAoYSksYixkKX07YS5wcm90b3R5cGUucmVhZEJhc2U9ZnVuY3Rpb24oYSxiLGQsZSxmKXtyZXR1cm4gdGhpcy5nZXRGaWxlQnlGZE9yVGhyb3coYSkucmVhZChiLE51bWJlcihkKSxOdW1iZXIoZSksZil9O2EucHJvdG90eXBlLnJlYWRTeW5jPWZ1bmN0aW9uKGEsCmIsZCxlLGYpe0coYSk7cmV0dXJuIHRoaXMucmVhZEJhc2UoYSxiLGQsZSxmKX07YS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihhLGIsZCxlLGYsaCl7dmFyIGc9dGhpcztyKGgpO2lmKDA9PT1lKXJldHVybiBZLmRlZmF1bHQubmV4dFRpY2soZnVuY3Rpb24oKXtoJiZoKG51bGwsMCxiKX0pO2diLmRlZmF1bHQoZnVuY3Rpb24oKXt0cnl7dmFyIHY9Zy5yZWFkQmFzZShhLGIsZCxlLGYpO2gobnVsbCx2LGIpfWNhdGNoKGNoKXtoKGNoKX19KX07YS5wcm90b3R5cGUucmVhZEZpbGVCYXNlPWZ1bmN0aW9uKGEsYixkKXt2YXIgZT0ibnVtYmVyIj09PXR5cGVvZiBhJiZhPj4+MD09PWE7aWYoIWUpe3ZhciBmPXAoYSk7Zj1uKGYpO2lmKChmPXRoaXMuZ2V0UmVzb2x2ZWRMaW5rKGYpKSYmZi5nZXROb2RlKCkuaXNEaXJlY3RvcnkoKSl0aHJvdyBrKCJFSVNESVIiLCJvcGVuIixmLmdldFBhdGgoKSk7YT10aGlzLm9wZW5TeW5jKGEsYil9dHJ5e3ZhciBoPUModGhpcy5nZXRGaWxlQnlGZE9yVGhyb3coYSkuZ2V0QnVmZmVyKCksCmQpfWZpbmFsbHl7ZXx8dGhpcy5jbG9zZVN5bmMoYSl9cmV0dXJuIGh9O2EucHJvdG90eXBlLnJlYWRGaWxlU3luYz1mdW5jdGlvbihhLGIpe2I9YmEoYik7dmFyIGQ9bChiLmZsYWcpO3JldHVybiB0aGlzLnJlYWRGaWxlQmFzZShhLGQsYi5lbmNvZGluZyl9O2EucHJvdG90eXBlLnJlYWRGaWxlPWZ1bmN0aW9uKGEsYixkKXtkPVAoYmEpKGIsZCk7Yj1kWzBdO2Q9ZFsxXTt2YXIgZT1sKGIuZmxhZyk7dGhpcy53cmFwQXN5bmModGhpcy5yZWFkRmlsZUJhc2UsW2EsZSxiLmVuY29kaW5nXSxkKX07YS5wcm90b3R5cGUud3JpdGVCYXNlPWZ1bmN0aW9uKGEsYixkLGUsZil7cmV0dXJuIHRoaXMuZ2V0RmlsZUJ5RmRPclRocm93KGEsIndyaXRlIikud3JpdGUoYixkLGUsZil9O2EucHJvdG90eXBlLndyaXRlU3luYz1mdW5jdGlvbihhLGIsZCxlLGYpe0coYSk7dmFyIGg9InN0cmluZyIhPT10eXBlb2YgYjtpZihoKXt2YXIgZz0oZHx8MCl8MCx2PWU7ZD1mfWVsc2UgdmFyIHpiPWU7Yj16KGIsCnpiKTtoPyJ1bmRlZmluZWQiPT09dHlwZW9mIHYmJih2PWIubGVuZ3RoKTooZz0wLHY9Yi5sZW5ndGgpO3JldHVybiB0aGlzLndyaXRlQmFzZShhLGIsZyx2LGQpfTthLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihhLGIsZCxlLGYsaCl7dmFyIGc9dGhpcztHKGEpO3ZhciB2PXR5cGVvZiBiLHpiPXR5cGVvZiBkLGNkPXR5cGVvZiBlLGs9dHlwZW9mIGY7aWYoInN0cmluZyIhPT12KWlmKCJmdW5jdGlvbiI9PT16Yil2YXIgdz1kO2Vsc2UgaWYoImZ1bmN0aW9uIj09PWNkKXt2YXIgRj1kfDA7dz1lfWVsc2UgaWYoImZ1bmN0aW9uIj09PWspe0Y9ZHwwO3ZhciBsPWU7dz1mfWVsc2V7Rj1kfDA7bD1lO3ZhciBkZD1mO3c9aH1lbHNlIGlmKCJmdW5jdGlvbiI9PT16Yil3PWQ7ZWxzZSBpZigiZnVuY3Rpb24iPT09Y2QpZGQ9ZCx3PWU7ZWxzZSBpZigiZnVuY3Rpb24iPT09ayl7ZGQ9ZDt2YXIgcT1lO3c9Zn12YXIgcD16KGIscSk7InN0cmluZyIhPT12PyJ1bmRlZmluZWQiPT09dHlwZW9mIGwmJgoobD1wLmxlbmd0aCk6KEY9MCxsPXAubGVuZ3RoKTt2YXIgbT1yKHcpO2diLmRlZmF1bHQoZnVuY3Rpb24oKXt0cnl7dmFyIGQ9Zy53cml0ZUJhc2UoYSxwLEYsbCxkZCk7InN0cmluZyIhPT12P20obnVsbCxkLHApOm0obnVsbCxkLGIpfWNhdGNoKGRoKXttKGRoKX19KX07YS5wcm90b3R5cGUud3JpdGVGaWxlQmFzZT1mdW5jdGlvbihhLGIsZCxlKXt2YXIgZj0ibnVtYmVyIj09PXR5cGVvZiBhO2E9Zj9hOnRoaXMub3BlbkJhc2UocChhKSxkLGUpO2U9MDt2YXIgaD1iLmxlbmd0aDtkPWQmTD92b2lkIDA6MDt0cnl7Zm9yKDswPGg7KXt2YXIgZz10aGlzLndyaXRlU3luYyhhLGIsZSxoLGQpO2UrPWc7aC09Zzt2b2lkIDAhPT1kJiYoZCs9Zyl9fWZpbmFsbHl7Znx8dGhpcy5jbG9zZVN5bmMoYSl9fTthLnByb3RvdHlwZS53cml0ZUZpbGVTeW5jPWZ1bmN0aW9uKGEsYixkKXt2YXIgZT1lYShkKTtkPWwoZS5mbGFnKTt2YXIgZj15KGUubW9kZSk7Yj16KGIsZS5lbmNvZGluZyk7dGhpcy53cml0ZUZpbGVCYXNlKGEsCmIsZCxmKX07YS5wcm90b3R5cGUud3JpdGVGaWxlPWZ1bmN0aW9uKGEsYixkLGUpe3ZhciBmPWQ7ImZ1bmN0aW9uIj09PXR5cGVvZiBkJiYoZj1kYSxlPWQpO2Q9cihlKTt2YXIgaD1lYShmKTtmPWwoaC5mbGFnKTtlPXkoaC5tb2RlKTtiPXooYixoLmVuY29kaW5nKTt0aGlzLndyYXBBc3luYyh0aGlzLndyaXRlRmlsZUJhc2UsW2EsYixmLGVdLGQpfTthLnByb3RvdHlwZS5saW5rQmFzZT1mdW5jdGlvbihhLGIpe3ZhciBkPW4oYSksZT10aGlzLmdldExpbmsoZCk7aWYoIWUpdGhyb3cgaygiRU5PRU5UIiwibGluayIsYSxiKTt2YXIgZj1uKGIpO2Q9dGhpcy5nZXRMaW5rUGFyZW50KGYpO2lmKCFkKXRocm93IGsoIkVOT0VOVCIsImxpbmsiLGEsYik7Zj1mW2YubGVuZ3RoLTFdO2lmKGQuZ2V0Q2hpbGQoZikpdGhyb3cgaygiRUVYSVNUIiwibGluayIsYSxiKTthPWUuZ2V0Tm9kZSgpO2EubmxpbmsrKztkLmNyZWF0ZUNoaWxkKGYsYSl9O2EucHJvdG90eXBlLmNvcHlGaWxlQmFzZT1mdW5jdGlvbihhLApiLGQpe3ZhciBlPXRoaXMucmVhZEZpbGVTeW5jKGEpO2lmKGQmViYmdGhpcy5leGlzdHNTeW5jKGIpKXRocm93IGsoIkVFWElTVCIsImNvcHlGaWxlIixhLGIpO2lmKGQmWCl0aHJvdyBrKCJFTk9TWVMiLCJjb3B5RmlsZSIsYSxiKTt0aGlzLndyaXRlRmlsZUJhc2UoYixlLFIudyw0MzgpfTthLnByb3RvdHlwZS5jb3B5RmlsZVN5bmM9ZnVuY3Rpb24oYSxiLGQpe2E9cChhKTtiPXAoYik7cmV0dXJuIHRoaXMuY29weUZpbGVCYXNlKGEsYiwoZHx8MCl8MCl9O2EucHJvdG90eXBlLmNvcHlGaWxlPWZ1bmN0aW9uKGEsYixkLGUpe2E9cChhKTtiPXAoYik7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBkKXZhciBmPTA7ZWxzZSBmPWQsZD1lO3IoZCk7dGhpcy53cmFwQXN5bmModGhpcy5jb3B5RmlsZUJhc2UsW2EsYixmXSxkKX07YS5wcm90b3R5cGUubGlua1N5bmM9ZnVuY3Rpb24oYSxiKXthPXAoYSk7Yj1wKGIpO3RoaXMubGlua0Jhc2UoYSxiKX07YS5wcm90b3R5cGUubGluaz1mdW5jdGlvbihhLApiLGQpe2E9cChhKTtiPXAoYik7dGhpcy53cmFwQXN5bmModGhpcy5saW5rQmFzZSxbYSxiXSxkKX07YS5wcm90b3R5cGUudW5saW5rQmFzZT1mdW5jdGlvbihhKXt2YXIgYj1uKGEpO2I9dGhpcy5nZXRMaW5rKGIpO2lmKCFiKXRocm93IGsoIkVOT0VOVCIsInVubGluayIsYSk7aWYoYi5sZW5ndGgpdGhyb3cgRXJyb3IoIkRpciBub3QgZW1wdHkuLi4iKTt0aGlzLmRlbGV0ZUxpbmsoYik7YT1iLmdldE5vZGUoKTthLm5saW5rLS07MD49YS5ubGluayYmdGhpcy5kZWxldGVOb2RlKGEpfTthLnByb3RvdHlwZS51bmxpbmtTeW5jPWZ1bmN0aW9uKGEpe2E9cChhKTt0aGlzLnVubGlua0Jhc2UoYSl9O2EucHJvdG90eXBlLnVubGluaz1mdW5jdGlvbihhLGIpe2E9cChhKTt0aGlzLndyYXBBc3luYyh0aGlzLnVubGlua0Jhc2UsW2FdLGIpfTthLnByb3RvdHlwZS5zeW1saW5rQmFzZT1mdW5jdGlvbihhLGIpe3ZhciBkPW4oYiksZT10aGlzLmdldExpbmtQYXJlbnQoZCk7aWYoIWUpdGhyb3cgaygiRU5PRU5UIiwKInN5bWxpbmsiLGEsYik7ZD1kW2QubGVuZ3RoLTFdO2lmKGUuZ2V0Q2hpbGQoZCkpdGhyb3cgaygiRUVYSVNUIiwic3ltbGluayIsYSxiKTtiPWUuY3JlYXRlQ2hpbGQoZCk7Yi5nZXROb2RlKCkubWFrZVN5bWxpbmsobihhKSk7cmV0dXJuIGJ9O2EucHJvdG90eXBlLnN5bWxpbmtTeW5jPWZ1bmN0aW9uKGEsYil7YT1wKGEpO2I9cChiKTt0aGlzLnN5bWxpbmtCYXNlKGEsYil9O2EucHJvdG90eXBlLnN5bWxpbms9ZnVuY3Rpb24oYSxiLGQsZSl7ZD1yKCJmdW5jdGlvbiI9PT10eXBlb2YgZD9kOmUpO2E9cChhKTtiPXAoYik7dGhpcy53cmFwQXN5bmModGhpcy5zeW1saW5rQmFzZSxbYSxiXSxkKX07YS5wcm90b3R5cGUucmVhbHBhdGhCYXNlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9bihhKTtkPXRoaXMuZ2V0UmVzb2x2ZWRMaW5rKGQpO2lmKCFkKXRocm93IGsoIkVOT0VOVCIsInJlYWxwYXRoIixhKTtyZXR1cm4gb2Euc3RyVG9FbmNvZGluZyhkLmdldFBhdGgoKSxiKX07YS5wcm90b3R5cGUucmVhbHBhdGhTeW5jPQpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJlYWxwYXRoQmFzZShwKGEpLGphKGIpLmVuY29kaW5nKX07YS5wcm90b3R5cGUucmVhbHBhdGg9ZnVuY3Rpb24oYSxiLGQpe2Q9cGEoYixkKTtiPWRbMF07ZD1kWzFdO2E9cChhKTt0aGlzLndyYXBBc3luYyh0aGlzLnJlYWxwYXRoQmFzZSxbYSxiLmVuY29kaW5nXSxkKX07YS5wcm90b3R5cGUubHN0YXRCYXNlPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9ITEpO3ZhciBkPXRoaXMuZ2V0TGluayhuKGEpKTtpZighZCl0aHJvdyBrKCJFTk9FTlQiLCJsc3RhdCIsYSk7cmV0dXJuIGViLmRlZmF1bHQuYnVpbGQoZC5nZXROb2RlKCksYil9O2EucHJvdG90eXBlLmxzdGF0U3luYz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmxzdGF0QmFzZShwKGEpLGYoYikuYmlnaW50KX07YS5wcm90b3R5cGUubHN0YXQ9ZnVuY3Rpb24oYSxiLGQpe2Q9ZShiLGQpO2I9ZFswXTtkPWRbMV07dGhpcy53cmFwQXN5bmModGhpcy5sc3RhdEJhc2UsW3AoYSksCmIuYmlnaW50XSxkKX07YS5wcm90b3R5cGUuc3RhdEJhc2U9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0hMSk7dmFyIGQ9dGhpcy5nZXRSZXNvbHZlZExpbmsobihhKSk7aWYoIWQpdGhyb3cgaygiRU5PRU5UIiwic3RhdCIsYSk7cmV0dXJuIGViLmRlZmF1bHQuYnVpbGQoZC5nZXROb2RlKCksYil9O2EucHJvdG90eXBlLnN0YXRTeW5jPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuc3RhdEJhc2UocChhKSxmKGIpLmJpZ2ludCl9O2EucHJvdG90eXBlLnN0YXQ9ZnVuY3Rpb24oYSxiLGQpe2Q9ZShiLGQpO2I9ZFswXTtkPWRbMV07dGhpcy53cmFwQXN5bmModGhpcy5zdGF0QmFzZSxbcChhKSxiLmJpZ2ludF0sZCl9O2EucHJvdG90eXBlLmZzdGF0QmFzZT1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPSExKTthPXRoaXMuZ2V0RmlsZUJ5RmQoYSk7aWYoIWEpdGhyb3cgaygiRUJBREYiLCJmc3RhdCIpO3JldHVybiBlYi5kZWZhdWx0LmJ1aWxkKGEubm9kZSxiKX07YS5wcm90b3R5cGUuZnN0YXRTeW5jPQpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmZzdGF0QmFzZShhLGYoYikuYmlnaW50KX07YS5wcm90b3R5cGUuZnN0YXQ9ZnVuY3Rpb24oYSxiLGQpe2I9ZShiLGQpO3RoaXMud3JhcEFzeW5jKHRoaXMuZnN0YXRCYXNlLFthLGJbMF0uYmlnaW50XSxiWzFdKX07YS5wcm90b3R5cGUucmVuYW1lQmFzZT1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuZ2V0TGluayhuKGEpKTtpZighZCl0aHJvdyBrKCJFTk9FTlQiLCJyZW5hbWUiLGEsYik7dmFyIGU9bihiKSxmPXRoaXMuZ2V0TGlua1BhcmVudChlKTtpZighZil0aHJvdyBrKCJFTk9FTlQiLCJyZW5hbWUiLGEsYik7KGE9ZC5wYXJlbnQpJiZhLmRlbGV0ZUNoaWxkKGQpO2Quc3RlcHM9ZmQoZi5zdGVwcyxbZVtlLmxlbmd0aC0xXV0pO2Yuc2V0Q2hpbGQoZC5nZXROYW1lKCksZCl9O2EucHJvdG90eXBlLnJlbmFtZVN5bmM9ZnVuY3Rpb24oYSxiKXthPXAoYSk7Yj1wKGIpO3RoaXMucmVuYW1lQmFzZShhLGIpfTthLnByb3RvdHlwZS5yZW5hbWU9CmZ1bmN0aW9uKGEsYixkKXthPXAoYSk7Yj1wKGIpO3RoaXMud3JhcEFzeW5jKHRoaXMucmVuYW1lQmFzZSxbYSxiXSxkKX07YS5wcm90b3R5cGUuZXhpc3RzQmFzZT1mdW5jdGlvbihhKXtyZXR1cm4hIXRoaXMuc3RhdEJhc2UoYSl9O2EucHJvdG90eXBlLmV4aXN0c1N5bmM9ZnVuY3Rpb24oYSl7dHJ5e3JldHVybiB0aGlzLmV4aXN0c0Jhc2UocChhKSl9Y2F0Y2goemIpe3JldHVybiExfX07YS5wcm90b3R5cGUuZXhpc3RzPWZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcyxlPXAoYSk7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBiKXRocm93IEVycm9yKE0uQ0IpO2diLmRlZmF1bHQoZnVuY3Rpb24oKXt0cnl7YihkLmV4aXN0c0Jhc2UoZSkpfWNhdGNoKEFiKXtiKCExKX19KX07YS5wcm90b3R5cGUuYWNjZXNzQmFzZT1mdW5jdGlvbihhKXt0aGlzLmdldExpbmtPclRocm93KGEsImFjY2VzcyIpfTthLnByb3RvdHlwZS5hY2Nlc3NTeW5jPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9Uyk7CmE9cChhKTt0aGlzLmFjY2Vzc0Jhc2UoYSxifDApfTthLnByb3RvdHlwZS5hY2Nlc3M9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPVM7ImZ1bmN0aW9uIiE9PXR5cGVvZiBiJiYoZT1ifDAsYj1yKGQpKTthPXAoYSk7dGhpcy53cmFwQXN5bmModGhpcy5hY2Nlc3NCYXNlLFthLGVdLGIpfTthLnByb3RvdHlwZS5hcHBlbmRGaWxlU3luYz1mdW5jdGlvbihhLGIsZCl7dm9pZCAwPT09ZCYmKGQ9ZmEpO2Q9aGEoZCk7ZC5mbGFnJiZhPj4+MCE9PWF8fChkLmZsYWc9ImEiKTt0aGlzLndyaXRlRmlsZVN5bmMoYSxiLGQpfTthLnByb3RvdHlwZS5hcHBlbmRGaWxlPWZ1bmN0aW9uKGEsYixkLGUpe2U9bmEoZCxlKTtkPWVbMF07ZT1lWzFdO2QuZmxhZyYmYT4+PjAhPT1hfHwoZC5mbGFnPSJhIik7dGhpcy53cml0ZUZpbGUoYSxiLGQsZSl9O2EucHJvdG90eXBlLnJlYWRkaXJCYXNlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9bihhKTtkPXRoaXMuZ2V0UmVzb2x2ZWRMaW5rKGQpO2lmKCFkKXRocm93IGsoIkVOT0VOVCIsCiJyZWFkZGlyIixhKTtpZighZC5nZXROb2RlKCkuaXNEaXJlY3RvcnkoKSl0aHJvdyBrKCJFTk9URElSIiwic2NhbmRpciIsYSk7aWYoYi53aXRoRmlsZVR5cGVzKXt2YXIgZT1bXTtmb3IoZiBpbiBkLmNoaWxkcmVuKShhPWQuZ2V0Q2hpbGQoZikpJiZlLnB1c2goJGMuZGVmYXVsdC5idWlsZChhLGIuZW5jb2RpbmcpKTtVfHwiYnVmZmVyIj09PWIuZW5jb2Rpbmd8fGUuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLm5hbWU8Yi5uYW1lPy0xOmEubmFtZT5iLm5hbWU/MTowfSk7cmV0dXJuIGV9dmFyIGY9W107Zm9yKGUgaW4gZC5jaGlsZHJlbilmLnB1c2gob2Euc3RyVG9FbmNvZGluZyhlLGIuZW5jb2RpbmcpKTtVfHwiYnVmZmVyIj09PWIuZW5jb2Rpbmd8fGYuc29ydCgpO3JldHVybiBmfTthLnByb3RvdHlwZS5yZWFkZGlyU3luYz1mdW5jdGlvbihhLGIpe2I9bWEoYik7YT1wKGEpO3JldHVybiB0aGlzLnJlYWRkaXJCYXNlKGEsYil9O2EucHJvdG90eXBlLnJlYWRkaXI9ZnVuY3Rpb24oYSwKYixkKXtkPXNhKGIsZCk7Yj1kWzBdO2Q9ZFsxXTthPXAoYSk7dGhpcy53cmFwQXN5bmModGhpcy5yZWFkZGlyQmFzZSxbYSxiXSxkKX07YS5wcm90b3R5cGUucmVhZGxpbmtCYXNlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5nZXRMaW5rT3JUaHJvdyhhLCJyZWFkbGluayIpLmdldE5vZGUoKTtpZighZC5pc1N5bWxpbmsoKSl0aHJvdyBrKCJFSU5WQUwiLCJyZWFkbGluayIsYSk7YT1IK2Quc3ltbGluay5qb2luKEgpO3JldHVybiBvYS5zdHJUb0VuY29kaW5nKGEsYil9O2EucHJvdG90eXBlLnJlYWRsaW5rU3luYz1mdW5jdGlvbihhLGIpe2I9VyhiKTthPXAoYSk7cmV0dXJuIHRoaXMucmVhZGxpbmtCYXNlKGEsYi5lbmNvZGluZyl9O2EucHJvdG90eXBlLnJlYWRsaW5rPWZ1bmN0aW9uKGEsYixkKXtkPWFhKGIsZCk7Yj1kWzBdO2Q9ZFsxXTthPXAoYSk7dGhpcy53cmFwQXN5bmModGhpcy5yZWFkbGlua0Jhc2UsW2EsYi5lbmNvZGluZ10sZCl9O2EucHJvdG90eXBlLmZzeW5jQmFzZT0KZnVuY3Rpb24oYSl7dGhpcy5nZXRGaWxlQnlGZE9yVGhyb3coYSwiZnN5bmMiKX07YS5wcm90b3R5cGUuZnN5bmNTeW5jPWZ1bmN0aW9uKGEpe3RoaXMuZnN5bmNCYXNlKGEpfTthLnByb3RvdHlwZS5mc3luYz1mdW5jdGlvbihhLGIpe3RoaXMud3JhcEFzeW5jKHRoaXMuZnN5bmNCYXNlLFthXSxiKX07YS5wcm90b3R5cGUuZmRhdGFzeW5jQmFzZT1mdW5jdGlvbihhKXt0aGlzLmdldEZpbGVCeUZkT3JUaHJvdyhhLCJmZGF0YXN5bmMiKX07YS5wcm90b3R5cGUuZmRhdGFzeW5jU3luYz1mdW5jdGlvbihhKXt0aGlzLmZkYXRhc3luY0Jhc2UoYSl9O2EucHJvdG90eXBlLmZkYXRhc3luYz1mdW5jdGlvbihhLGIpe3RoaXMud3JhcEFzeW5jKHRoaXMuZmRhdGFzeW5jQmFzZSxbYV0sYil9O2EucHJvdG90eXBlLmZ0cnVuY2F0ZUJhc2U9ZnVuY3Rpb24oYSxiKXt0aGlzLmdldEZpbGVCeUZkT3JUaHJvdyhhLCJmdHJ1bmNhdGUiKS50cnVuY2F0ZShiKX07YS5wcm90b3R5cGUuZnRydW5jYXRlU3luYz0KZnVuY3Rpb24oYSxiKXt0aGlzLmZ0cnVuY2F0ZUJhc2UoYSxiKX07YS5wcm90b3R5cGUuZnRydW5jYXRlPWZ1bmN0aW9uKGEsYixkKXt2YXIgZT0ibnVtYmVyIj09PXR5cGVvZiBiP2I6MDtiPXIoIm51bWJlciI9PT10eXBlb2YgYj9kOmIpO3RoaXMud3JhcEFzeW5jKHRoaXMuZnRydW5jYXRlQmFzZSxbYSxlXSxiKX07YS5wcm90b3R5cGUudHJ1bmNhdGVCYXNlPWZ1bmN0aW9uKGEsYil7YT10aGlzLm9wZW5TeW5jKGEsInIrIik7dHJ5e3RoaXMuZnRydW5jYXRlU3luYyhhLGIpfWZpbmFsbHl7dGhpcy5jbG9zZVN5bmMoYSl9fTthLnByb3RvdHlwZS50cnVuY2F0ZVN5bmM9ZnVuY3Rpb24oYSxiKXtpZihhPj4+MD09PWEpcmV0dXJuIHRoaXMuZnRydW5jYXRlU3luYyhhLGIpO3RoaXMudHJ1bmNhdGVCYXNlKGEsYil9O2EucHJvdG90eXBlLnRydW5jYXRlPWZ1bmN0aW9uKGEsYixkKXt2YXIgZT0ibnVtYmVyIj09PXR5cGVvZiBiP2I6MDtiPXIoIm51bWJlciI9PT10eXBlb2YgYj9kOmIpOwppZihhPj4+MD09PWEpcmV0dXJuIHRoaXMuZnRydW5jYXRlKGEsZSxiKTt0aGlzLndyYXBBc3luYyh0aGlzLnRydW5jYXRlQmFzZSxbYSxlXSxiKX07YS5wcm90b3R5cGUuZnV0aW1lc0Jhc2U9ZnVuY3Rpb24oYSxiLGQpe2E9dGhpcy5nZXRGaWxlQnlGZE9yVGhyb3coYSwiZnV0aW1lcyIpLm5vZGU7YS5hdGltZT1uZXcgRGF0ZSgxRTMqYik7YS5tdGltZT1uZXcgRGF0ZSgxRTMqZCl9O2EucHJvdG90eXBlLmZ1dGltZXNTeW5jPWZ1bmN0aW9uKGEsYixkKXt0aGlzLmZ1dGltZXNCYXNlKGEsRChiKSxEKGQpKX07YS5wcm90b3R5cGUuZnV0aW1lcz1mdW5jdGlvbihhLGIsZCxlKXt0aGlzLndyYXBBc3luYyh0aGlzLmZ1dGltZXNCYXNlLFthLEQoYiksRChkKV0sZSl9O2EucHJvdG90eXBlLnV0aW1lc0Jhc2U9ZnVuY3Rpb24oYSxiLGQpe2E9dGhpcy5vcGVuU3luYyhhLCJyKyIpO3RyeXt0aGlzLmZ1dGltZXNCYXNlKGEsYixkKX1maW5hbGx5e3RoaXMuY2xvc2VTeW5jKGEpfX07YS5wcm90b3R5cGUudXRpbWVzU3luYz0KZnVuY3Rpb24oYSxiLGQpe3RoaXMudXRpbWVzQmFzZShwKGEpLEQoYiksRChkKSl9O2EucHJvdG90eXBlLnV0aW1lcz1mdW5jdGlvbihhLGIsZCxlKXt0aGlzLndyYXBBc3luYyh0aGlzLnV0aW1lc0Jhc2UsW3AoYSksRChiKSxEKGQpXSxlKX07YS5wcm90b3R5cGUubWtkaXJCYXNlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9bihhKTtpZighZC5sZW5ndGgpdGhyb3cgaygiRUlTRElSIiwibWtkaXIiLGEpO3ZhciBlPXRoaXMuZ2V0TGlua1BhcmVudEFzRGlyT3JUaHJvdyhhLCJta2RpciIpO2Q9ZFtkLmxlbmd0aC0xXTtpZihlLmdldENoaWxkKGQpKXRocm93IGsoIkVFWElTVCIsIm1rZGlyIixhKTtlLmNyZWF0ZUNoaWxkKGQsdGhpcy5jcmVhdGVOb2RlKCEwLGIpKX07YS5wcm90b3R5cGUubWtkaXJwQmFzZT1mdW5jdGlvbihhLGIpe2E9bihhKTtmb3IodmFyIGQ9dGhpcy5yb290LGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIGY9YVtlXTtpZighZC5nZXROb2RlKCkuaXNEaXJlY3RvcnkoKSl0aHJvdyBrKCJFTk9URElSIiwKIm1rZGlyIixkLmdldFBhdGgoKSk7dmFyIGg9ZC5nZXRDaGlsZChmKTtpZihoKWlmKGguZ2V0Tm9kZSgpLmlzRGlyZWN0b3J5KCkpZD1oO2Vsc2UgdGhyb3cgaygiRU5PVERJUiIsIm1rZGlyIixoLmdldFBhdGgoKSk7ZWxzZSBkPWQuY3JlYXRlQ2hpbGQoZix0aGlzLmNyZWF0ZU5vZGUoITAsYikpfX07YS5wcm90b3R5cGUubWtkaXJTeW5jPWZ1bmN0aW9uKGEsYil7Yj1nKGIpO3ZhciBkPXkoYi5tb2RlLDUxMSk7YT1wKGEpO2IucmVjdXJzaXZlP3RoaXMubWtkaXJwQmFzZShhLGQpOnRoaXMubWtkaXJCYXNlKGEsZCl9O2EucHJvdG90eXBlLm1rZGlyPWZ1bmN0aW9uKGEsYixkKXt2YXIgZT1nKGIpO2I9cigiZnVuY3Rpb24iPT09dHlwZW9mIGI/YjpkKTtkPXkoZS5tb2RlLDUxMSk7YT1wKGEpO2UucmVjdXJzaXZlP3RoaXMud3JhcEFzeW5jKHRoaXMubWtkaXJwQmFzZSxbYSxkXSxiKTp0aGlzLndyYXBBc3luYyh0aGlzLm1rZGlyQmFzZSxbYSxkXSxiKX07YS5wcm90b3R5cGUubWtkaXJwU3luYz0KZnVuY3Rpb24oYSxiKXt0aGlzLm1rZGlyU3luYyhhLHttb2RlOmIscmVjdXJzaXZlOiEwfSl9O2EucHJvdG90eXBlLm1rZGlycD1mdW5jdGlvbihhLGIsZCl7dmFyIGU9ImZ1bmN0aW9uIj09PXR5cGVvZiBiP3ZvaWQgMDpiO2I9cigiZnVuY3Rpb24iPT09dHlwZW9mIGI/YjpkKTt0aGlzLm1rZGlyKGEse21vZGU6ZSxyZWN1cnNpdmU6ITB9LGIpfTthLnByb3RvdHlwZS5ta2R0ZW1wQmFzZT1mdW5jdGlvbihhLGIsZCl7dm9pZCAwPT09ZCYmKGQ9NSk7dmFyIGU9YSt0aGlzLmdlblJuZFN0cigpO3RyeXtyZXR1cm4gdGhpcy5ta2RpckJhc2UoZSw1MTEpLG9hLnN0clRvRW5jb2RpbmcoZSxiKX1jYXRjaChBYil7aWYoIkVFWElTVCI9PT1BYi5jb2RlKXtpZigxPGQpcmV0dXJuIHRoaXMubWtkdGVtcEJhc2UoYSxiLGQtMSk7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBkaXIuIik7fXRocm93IEFiO319O2EucHJvdG90eXBlLm1rZHRlbXBTeW5jPWZ1bmN0aW9uKGEsYil7Yj0KVyhiKS5lbmNvZGluZztpZighYXx8InN0cmluZyIhPT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJmaWxlbmFtZSBwcmVmaXggaXMgcmVxdWlyZWQiKTtFKGEpO3JldHVybiB0aGlzLm1rZHRlbXBCYXNlKGEsYil9O2EucHJvdG90eXBlLm1rZHRlbXA9ZnVuY3Rpb24oYSxiLGQpe2Q9YWEoYixkKTtiPWRbMF0uZW5jb2Rpbmc7ZD1kWzFdO2lmKCFhfHwic3RyaW5nIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoImZpbGVuYW1lIHByZWZpeCBpcyByZXF1aXJlZCIpO0UoYSkmJnRoaXMud3JhcEFzeW5jKHRoaXMubWtkdGVtcEJhc2UsW2EsYl0sZCl9O2EucHJvdG90eXBlLnJtZGlyQmFzZT1mdW5jdGlvbihhLGIpe2I9eGEoe30sbGEsYik7dmFyIGQ9dGhpcy5nZXRMaW5rQXNEaXJPclRocm93KGEsInJtZGlyIik7aWYoZC5sZW5ndGgmJiFiLnJlY3Vyc2l2ZSl0aHJvdyBrKCJFTk9URU1QVFkiLCJybWRpciIsYSk7dGhpcy5kZWxldGVMaW5rKGQpfTthLnByb3RvdHlwZS5ybWRpclN5bmM9CmZ1bmN0aW9uKGEsYil7dGhpcy5ybWRpckJhc2UocChhKSxiKX07YS5wcm90b3R5cGUucm1kaXI9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPXhhKHt9LGxhLGIpO2I9cigiZnVuY3Rpb24iPT09dHlwZW9mIGI/YjpkKTt0aGlzLndyYXBBc3luYyh0aGlzLnJtZGlyQmFzZSxbcChhKSxlXSxiKX07YS5wcm90b3R5cGUuZmNobW9kQmFzZT1mdW5jdGlvbihhLGIpe3RoaXMuZ2V0RmlsZUJ5RmRPclRocm93KGEsImZjaG1vZCIpLmNobW9kKGIpfTthLnByb3RvdHlwZS5mY2htb2RTeW5jPWZ1bmN0aW9uKGEsYil7dGhpcy5mY2htb2RCYXNlKGEseShiKSl9O2EucHJvdG90eXBlLmZjaG1vZD1mdW5jdGlvbihhLGIsZCl7dGhpcy53cmFwQXN5bmModGhpcy5mY2htb2RCYXNlLFthLHkoYildLGQpfTthLnByb3RvdHlwZS5jaG1vZEJhc2U9ZnVuY3Rpb24oYSxiKXthPXRoaXMub3BlblN5bmMoYSwicisiKTt0cnl7dGhpcy5mY2htb2RCYXNlKGEsYil9ZmluYWxseXt0aGlzLmNsb3NlU3luYyhhKX19OwphLnByb3RvdHlwZS5jaG1vZFN5bmM9ZnVuY3Rpb24oYSxiKXtiPXkoYik7YT1wKGEpO3RoaXMuY2htb2RCYXNlKGEsYil9O2EucHJvdG90eXBlLmNobW9kPWZ1bmN0aW9uKGEsYixkKXtiPXkoYik7YT1wKGEpO3RoaXMud3JhcEFzeW5jKHRoaXMuY2htb2RCYXNlLFthLGJdLGQpfTthLnByb3RvdHlwZS5sY2htb2RCYXNlPWZ1bmN0aW9uKGEsYil7YT10aGlzLm9wZW5CYXNlKGEsQWEsMCwhMSk7dHJ5e3RoaXMuZmNobW9kQmFzZShhLGIpfWZpbmFsbHl7dGhpcy5jbG9zZVN5bmMoYSl9fTthLnByb3RvdHlwZS5sY2htb2RTeW5jPWZ1bmN0aW9uKGEsYil7Yj15KGIpO2E9cChhKTt0aGlzLmxjaG1vZEJhc2UoYSxiKX07YS5wcm90b3R5cGUubGNobW9kPWZ1bmN0aW9uKGEsYixkKXtiPXkoYik7YT1wKGEpO3RoaXMud3JhcEFzeW5jKHRoaXMubGNobW9kQmFzZSxbYSxiXSxkKX07YS5wcm90b3R5cGUuZmNob3duQmFzZT1mdW5jdGlvbihhLGIsZCl7dGhpcy5nZXRGaWxlQnlGZE9yVGhyb3coYSwKImZjaG93biIpLmNob3duKGIsZCl9O2EucHJvdG90eXBlLmZjaG93blN5bmM9ZnVuY3Rpb24oYSxiLGQpe3coYik7RihkKTt0aGlzLmZjaG93bkJhc2UoYSxiLGQpfTthLnByb3RvdHlwZS5mY2hvd249ZnVuY3Rpb24oYSxiLGQsZSl7dyhiKTtGKGQpO3RoaXMud3JhcEFzeW5jKHRoaXMuZmNob3duQmFzZSxbYSxiLGRdLGUpfTthLnByb3RvdHlwZS5jaG93bkJhc2U9ZnVuY3Rpb24oYSxiLGQpe3RoaXMuZ2V0UmVzb2x2ZWRMaW5rT3JUaHJvdyhhLCJjaG93biIpLmdldE5vZGUoKS5jaG93bihiLGQpfTthLnByb3RvdHlwZS5jaG93blN5bmM9ZnVuY3Rpb24oYSxiLGQpe3coYik7RihkKTt0aGlzLmNob3duQmFzZShwKGEpLGIsZCl9O2EucHJvdG90eXBlLmNob3duPWZ1bmN0aW9uKGEsYixkLGUpe3coYik7RihkKTt0aGlzLndyYXBBc3luYyh0aGlzLmNob3duQmFzZSxbcChhKSxiLGRdLGUpfTthLnByb3RvdHlwZS5sY2hvd25CYXNlPWZ1bmN0aW9uKGEsYixkKXt0aGlzLmdldExpbmtPclRocm93KGEsCiJsY2hvd24iKS5nZXROb2RlKCkuY2hvd24oYixkKX07YS5wcm90b3R5cGUubGNob3duU3luYz1mdW5jdGlvbihhLGIsZCl7dyhiKTtGKGQpO3RoaXMubGNob3duQmFzZShwKGEpLGIsZCl9O2EucHJvdG90eXBlLmxjaG93bj1mdW5jdGlvbihhLGIsZCxlKXt3KGIpO0YoZCk7dGhpcy53cmFwQXN5bmModGhpcy5sY2hvd25CYXNlLFtwKGEpLGIsZF0sZSl9O2EucHJvdG90eXBlLndhdGNoRmlsZT1mdW5jdGlvbihhLGIsZCl7YT1wKGEpO3ZhciBlPWI7ImZ1bmN0aW9uIj09PXR5cGVvZiBlJiYoZD1iLGU9bnVsbCk7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBkKXRocm93IEVycm9yKCcid2F0Y2hGaWxlKCkiIHJlcXVpcmVzIGEgbGlzdGVuZXIgZnVuY3Rpb24nKTtiPTUwMDc7dmFyIGY9ITA7ZSYmIm9iamVjdCI9PT10eXBlb2YgZSYmKCJudW1iZXIiPT09dHlwZW9mIGUuaW50ZXJ2YWwmJihiPWUuaW50ZXJ2YWwpLCJib29sZWFuIj09PXR5cGVvZiBlLnBlcnNpc3RlbnQmJihmPWUucGVyc2lzdGVudCkpOwooZT10aGlzLnN0YXRXYXRjaGVyc1thXSl8fChlPW5ldyB0aGlzLlN0YXRXYXRjaGVyLGUuc3RhcnQoYSxmLGIpLHRoaXMuc3RhdFdhdGNoZXJzW2FdPWUpO2UuYWRkTGlzdGVuZXIoImNoYW5nZSIsZCk7cmV0dXJuIGV9O2EucHJvdG90eXBlLnVud2F0Y2hGaWxlPWZ1bmN0aW9uKGEsYil7YT1wKGEpO3ZhciBkPXRoaXMuc3RhdFdhdGNoZXJzW2FdO2QmJigiZnVuY3Rpb24iPT09dHlwZW9mIGI/ZC5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlIixiKTpkLnJlbW92ZUFsbExpc3RlbmVycygiY2hhbmdlIiksMD09PWQubGlzdGVuZXJDb3VudCgiY2hhbmdlIikmJihkLnN0b3AoKSxkZWxldGUgdGhpcy5zdGF0V2F0Y2hlcnNbYV0pKX07YS5wcm90b3R5cGUuY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgdGhpcy5SZWFkU3RyZWFtKGEsYil9O2EucHJvdG90eXBlLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyB0aGlzLldyaXRlU3RyZWFtKGEsCmIpfTthLnByb3RvdHlwZS53YXRjaD1mdW5jdGlvbihhLGIsZCl7YT1wKGEpO3ZhciBlPWI7ImZ1bmN0aW9uIj09PXR5cGVvZiBiJiYoZD1iLGU9bnVsbCk7dmFyIGY9VyhlKTtiPWYucGVyc2lzdGVudDtlPWYucmVjdXJzaXZlO2Y9Zi5lbmNvZGluZzt2b2lkIDA9PT1iJiYoYj0hMCk7dm9pZCAwPT09ZSYmKGU9ITEpO3ZhciBoPW5ldyB0aGlzLkZTV2F0Y2hlcjtoLnN0YXJ0KGEsYixlLGYpO2QmJmguYWRkTGlzdGVuZXIoImNoYW5nZSIsZCk7cmV0dXJuIGh9O2EuZmQ9MjE0NzQ4MzY0NztyZXR1cm4gYX0oKTtiLlZvbHVtZT1hO3ZhciBxYT1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe3ZhciBkPWEuY2FsbCh0aGlzKXx8dGhpcztkLm9uSW50ZXJ2YWw9ZnVuY3Rpb24oKXt0cnl7dmFyIGE9ZC52b2wuc3RhdFN5bmMoZC5maWxlbmFtZSk7ZC5oYXNDaGFuZ2VkKGEpJiYoZC5lbWl0KCJjaGFuZ2UiLGEsZC5wcmV2KSxkLnByZXY9YSl9ZmluYWxseXtkLmxvb3AoKX19O2Qudm9sPWI7cmV0dXJuIGR9CmhiKGIsYSk7Yi5wcm90b3R5cGUubG9vcD1mdW5jdGlvbigpe3RoaXMudGltZW91dFJlZj10aGlzLnNldFRpbWVvdXQodGhpcy5vbkludGVydmFsLHRoaXMuaW50ZXJ2YWwpfTtiLnByb3RvdHlwZS5oYXNDaGFuZ2VkPWZ1bmN0aW9uKGEpe3JldHVybiBhLm10aW1lTXM+dGhpcy5wcmV2Lm10aW1lTXN8fGEubmxpbmshPT10aGlzLnByZXYubmxpbms/ITA6ITF9O2IucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGEsYixkKXt2b2lkIDA9PT1iJiYoYj0hMCk7dm9pZCAwPT09ZCYmKGQ9NTAwNyk7dGhpcy5maWxlbmFtZT1wKGEpO3RoaXMuc2V0VGltZW91dD1iP3NldFRpbWVvdXQ6bWYuZGVmYXVsdDt0aGlzLmludGVydmFsPWQ7dGhpcy5wcmV2PXRoaXMudm9sLnN0YXRTeW5jKHRoaXMuZmlsZW5hbWUpO3RoaXMubG9vcCgpfTtiLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFJlZik7WS5kZWZhdWx0Lm5leHRUaWNrKGJjLHRoaXMpfTtyZXR1cm4gYn0oeC5FdmVudEVtaXR0ZXIpOwpiLlN0YXRXYXRjaGVyPXFhO3ZhciBpYTt3Yi5pbmhlcml0cyh0YSxjYS5SZWFkYWJsZSk7Yi5SZWFkU3RyZWFtPXRhO3RhLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLl92b2wub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oYixkKXtiPyhhLmF1dG9DbG9zZSYmYS5kZXN0cm95JiZhLmRlc3Ryb3koKSxhLmVtaXQoImVycm9yIixiKSk6KGEuZmQ9ZCxhLmVtaXQoIm9wZW4iLGQpLGEucmVhZCgpKX0pfTt0YS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oYSl7aWYoIm51bWJlciIhPT10eXBlb2YgdGhpcy5mZClyZXR1cm4gdGhpcy5vbmNlKCJvcGVuIixmdW5jdGlvbigpe3RoaXMuX3JlYWQoYSl9KTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKCFpYXx8MTI4PmlhLmxlbmd0aC1pYS51c2VkKWlhPUouYnVmZmVyQWxsb2NVbnNhZmUodGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrKSxpYS51c2VkPTA7dmFyIGI9aWEsCmQ9TWF0aC5taW4oaWEubGVuZ3RoLWlhLnVzZWQsYSksZT1pYS51c2VkO3ZvaWQgMCE9PXRoaXMucG9zJiYoZD1NYXRoLm1pbih0aGlzLmVuZC10aGlzLnBvcysxLGQpKTtpZigwPj1kKXJldHVybiB0aGlzLnB1c2gobnVsbCk7dmFyIGY9dGhpczt0aGlzLl92b2wucmVhZCh0aGlzLmZkLGlhLGlhLnVzZWQsZCx0aGlzLnBvcyxmdW5jdGlvbihhLGQpe2E/KGYuYXV0b0Nsb3NlJiZmLmRlc3Ryb3kmJmYuZGVzdHJveSgpLGYuZW1pdCgiZXJyb3IiLGEpKTooYT1udWxsLDA8ZCYmKGYuYnl0ZXNSZWFkKz1kLGE9Yi5zbGljZShlLGUrZCkpLGYucHVzaChhKSl9KTt2b2lkIDAhPT10aGlzLnBvcyYmKHRoaXMucG9zKz1kKTtpYS51c2VkKz1kfX07dGEucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGEsYil7dGhpcy5jbG9zZShmdW5jdGlvbihkKXtiKGF8fGQpfSl9O3RhLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKGEpdGhpcy5vbmNlKCJjbG9zZSIsYSk7aWYodGhpcy5jbG9zZWR8fAoibnVtYmVyIiE9PXR5cGVvZiB0aGlzLmZkKXtpZigibnVtYmVyIiE9PXR5cGVvZiB0aGlzLmZkKXt0aGlzLm9uY2UoIm9wZW4iLGJoKTtyZXR1cm59cmV0dXJuIFkuZGVmYXVsdC5uZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBiLmVtaXQoImNsb3NlIil9KX10aGlzLmNsb3NlZD0hMDt0aGlzLl92b2wuY2xvc2UodGhpcy5mZCxmdW5jdGlvbihhKXthP2IuZW1pdCgiZXJyb3IiLGEpOmIuZW1pdCgiY2xvc2UiKX0pO3RoaXMuZmQ9bnVsbH07d2IuaW5oZXJpdHMoWixjYS5Xcml0YWJsZSk7Yi5Xcml0ZVN0cmVhbT1aO1oucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt0aGlzLl92b2wub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oYSxiKXthPyh0aGlzLmF1dG9DbG9zZSYmdGhpcy5kZXN0cm95JiZ0aGlzLmRlc3Ryb3koKSx0aGlzLmVtaXQoImVycm9yIixhKSk6KHRoaXMuZmQ9Yix0aGlzLmVtaXQoIm9wZW4iLGIpKX0uYmluZCh0aGlzKSl9O1oucHJvdG90eXBlLl93cml0ZT0KZnVuY3Rpb24oYSxiLGQpe2lmKCEoYSBpbnN0YW5jZW9mIEouQnVmZmVyKSlyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsRXJyb3IoIkludmFsaWQgZGF0YSIpKTtpZigibnVtYmVyIiE9PXR5cGVvZiB0aGlzLmZkKXJldHVybiB0aGlzLm9uY2UoIm9wZW4iLGZ1bmN0aW9uKCl7dGhpcy5fd3JpdGUoYSxiLGQpfSk7dmFyIGU9dGhpczt0aGlzLl92b2wud3JpdGUodGhpcy5mZCxhLDAsYS5sZW5ndGgsdGhpcy5wb3MsZnVuY3Rpb24oYSxiKXtpZihhKXJldHVybiBlLmF1dG9DbG9zZSYmZS5kZXN0cm95JiZlLmRlc3Ryb3koKSxkKGEpO2UuYnl0ZXNXcml0dGVuKz1iO2QoKX0pO3ZvaWQgMCE9PXRoaXMucG9zJiYodGhpcy5wb3MrPWEubGVuZ3RoKX07Wi5wcm90b3R5cGUuX3dyaXRldj1mdW5jdGlvbihhLGIpe2lmKCJudW1iZXIiIT09dHlwZW9mIHRoaXMuZmQpcmV0dXJuIHRoaXMub25jZSgib3BlbiIsZnVuY3Rpb24oKXt0aGlzLl93cml0ZXYoYSxiKX0pO2Zvcih2YXIgZD10aGlzLGU9CmEubGVuZ3RoLGY9QXJyYXkoZSksaD0wLGc9MDtnPGU7ZysrKXt2YXIgaz1hW2ddLmNodW5rO2ZbZ109aztoKz1rLmxlbmd0aH1lPUouQnVmZmVyLmNvbmNhdChmKTt0aGlzLl92b2wud3JpdGUodGhpcy5mZCxlLDAsZS5sZW5ndGgsdGhpcy5wb3MsZnVuY3Rpb24oYSxlKXtpZihhKXJldHVybiBkLmRlc3Ryb3kmJmQuZGVzdHJveSgpLGIoYSk7ZC5ieXRlc1dyaXR0ZW4rPWU7YigpfSk7dm9pZCAwIT09dGhpcy5wb3MmJih0aGlzLnBvcys9aCl9O1oucHJvdG90eXBlLl9kZXN0cm95PXRhLnByb3RvdHlwZS5fZGVzdHJveTtaLnByb3RvdHlwZS5jbG9zZT10YS5wcm90b3R5cGUuY2xvc2U7Wi5wcm90b3R5cGUuZGVzdHJveVNvb249Wi5wcm90b3R5cGUuZW5kO3ZhciByYT1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe3ZhciBkPWEuY2FsbCh0aGlzKXx8dGhpcztkLl9maWxlbmFtZT0iIjtkLl9maWxlbmFtZUVuY29kZWQ9IiI7ZC5fcmVjdXJzaXZlPSExO2QuX2VuY29kaW5nPW9hLkVOQ09ESU5HX1VURjg7CmQuX29uTm9kZUNoYW5nZT1mdW5jdGlvbigpe2QuX2VtaXQoImNoYW5nZSIpfTtkLl9vblBhcmVudENoaWxkPWZ1bmN0aW9uKGEpe2EuZ2V0TmFtZSgpPT09ZC5fZ2V0TmFtZSgpJiZkLl9lbWl0KCJyZW5hbWUiKX07ZC5fZW1pdD1mdW5jdGlvbihhKXtkLmVtaXQoImNoYW5nZSIsYSxkLl9maWxlbmFtZUVuY29kZWQpfTtkLl9wZXJzaXN0PWZ1bmN0aW9uKCl7ZC5fdGltZXI9c2V0VGltZW91dChkLl9wZXJzaXN0LDFFNil9O2QuX3ZvbD1iO3JldHVybiBkfWhiKGIsYSk7Yi5wcm90b3R5cGUuX2dldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RlcHNbdGhpcy5fc3RlcHMubGVuZ3RoLTFdfTtiLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihhLGIsZCxlKXt2b2lkIDA9PT1iJiYoYj0hMCk7dm9pZCAwPT09ZCYmKGQ9ITEpO3ZvaWQgMD09PWUmJihlPW9hLkVOQ09ESU5HX1VURjgpO3RoaXMuX2ZpbGVuYW1lPXAoYSk7dGhpcy5fc3RlcHM9bih0aGlzLl9maWxlbmFtZSk7dGhpcy5fZmlsZW5hbWVFbmNvZGVkPQpvYS5zdHJUb0VuY29kaW5nKHRoaXMuX2ZpbGVuYW1lKTt0aGlzLl9yZWN1cnNpdmU9ZDt0aGlzLl9lbmNvZGluZz1lO3RyeXt0aGlzLl9saW5rPXRoaXMuX3ZvbC5nZXRMaW5rT3JUaHJvdyh0aGlzLl9maWxlbmFtZSwiRlNXYXRjaGVyIil9Y2F0Y2goZWQpe3Rocm93IGI9RXJyb3IoIndhdGNoICIrdGhpcy5fZmlsZW5hbWUrIiAiK2VkLmNvZGUpLGIuY29kZT1lZC5jb2RlLGIuZXJybm89ZWQuY29kZSxiO310aGlzLl9saW5rLmdldE5vZGUoKS5vbigiY2hhbmdlIix0aGlzLl9vbk5vZGVDaGFuZ2UpO3RoaXMuX2xpbmsub24oImNoaWxkOmFkZCIsdGhpcy5fb25Ob2RlQ2hhbmdlKTt0aGlzLl9saW5rLm9uKCJjaGlsZDpkZWxldGUiLHRoaXMuX29uTm9kZUNoYW5nZSk7aWYoYT10aGlzLl9saW5rLnBhcmVudClhLnNldE1heExpc3RlbmVycyhhLmdldE1heExpc3RlbmVycygpKzEpLGEub24oImNoaWxkOmRlbGV0ZSIsdGhpcy5fb25QYXJlbnRDaGlsZCk7YiYmdGhpcy5fcGVyc2lzdCgpfTsKYi5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO3RoaXMuX2xpbmsuZ2V0Tm9kZSgpLnJlbW92ZUxpc3RlbmVyKCJjaGFuZ2UiLHRoaXMuX29uTm9kZUNoYW5nZSk7dmFyIGE9dGhpcy5fbGluay5wYXJlbnQ7YSYmYS5yZW1vdmVMaXN0ZW5lcigiY2hpbGQ6ZGVsZXRlIix0aGlzLl9vblBhcmVudENoaWxkKX07cmV0dXJuIGJ9KHguRXZlbnRFbWl0dGVyKTtiLkZTV2F0Y2hlcj1yYX0pO1EoUWEpO3ZhciBlaD1RYS5wYXRoVG9GaWxlbmFtZSxmaD1RYS5maWxlbmFtZVRvU3RlcHMscWY9UWEuVm9sdW1lLGdkPUsoZnVuY3Rpb24oYSxiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Yi5mc1Byb3BzPSJjb25zdGFudHMgRl9PSyBSX09LIFdfT0sgWF9PSyBTdGF0cyIuc3BsaXQoIiAiKTtiLmZzU3luY01ldGhvZHM9InJlbmFtZVN5bmMgZnRydW5jYXRlU3luYyB0cnVuY2F0ZVN5bmMgY2hvd25TeW5jIGZjaG93blN5bmMgbGNob3duU3luYyBjaG1vZFN5bmMgZmNobW9kU3luYyBsY2htb2RTeW5jIHN0YXRTeW5jIGxzdGF0U3luYyBmc3RhdFN5bmMgbGlua1N5bmMgc3ltbGlua1N5bmMgcmVhZGxpbmtTeW5jIHJlYWxwYXRoU3luYyB1bmxpbmtTeW5jIHJtZGlyU3luYyBta2RpclN5bmMgbWtkaXJwU3luYyByZWFkZGlyU3luYyBjbG9zZVN5bmMgb3BlblN5bmMgdXRpbWVzU3luYyBmdXRpbWVzU3luYyBmc3luY1N5bmMgd3JpdGVTeW5jIHJlYWRTeW5jIHJlYWRGaWxlU3luYyB3cml0ZUZpbGVTeW5jIGFwcGVuZEZpbGVTeW5jIGV4aXN0c1N5bmMgYWNjZXNzU3luYyBmZGF0YXN5bmNTeW5jIG1rZHRlbXBTeW5jIGNvcHlGaWxlU3luYyBjcmVhdGVSZWFkU3RyZWFtIGNyZWF0ZVdyaXRlU3RyZWFtIi5zcGxpdCgiICIpOwpiLmZzQXN5bmNNZXRob2RzPSJyZW5hbWUgZnRydW5jYXRlIHRydW5jYXRlIGNob3duIGZjaG93biBsY2hvd24gY2htb2QgZmNobW9kIGxjaG1vZCBzdGF0IGxzdGF0IGZzdGF0IGxpbmsgc3ltbGluayByZWFkbGluayByZWFscGF0aCB1bmxpbmsgcm1kaXIgbWtkaXIgbWtkaXJwIHJlYWRkaXIgY2xvc2Ugb3BlbiB1dGltZXMgZnV0aW1lcyBmc3luYyB3cml0ZSByZWFkIHJlYWRGaWxlIHdyaXRlRmlsZSBhcHBlbmRGaWxlIGV4aXN0cyBhY2Nlc3MgZmRhdGFzeW5jIG1rZHRlbXAgY29weUZpbGUgd2F0Y2hGaWxlIHVud2F0Y2hGaWxlIHdhdGNoIi5zcGxpdCgiICIpfSk7UShnZCk7dmFyIHJmPUsoZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYj17Rl9PSzpoLFJfT0s6ayxXX09LOmwsWF9PSzptLGNvbnN0YW50czp1LmNvbnN0YW50cyxTdGF0czplYi5kZWZhdWx0LERpcmVudDokYy5kZWZhdWx0fSxkPTAsZT1mO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcT1lW2RdOyJmdW5jdGlvbiI9PT0KdHlwZW9mIGFbcV0mJihiW3FdPWFbcV0uYmluZChhKSl9ZD0wO2ZvcihlPWc7ZDxlLmxlbmd0aDtkKyspcT1lW2RdLCJmdW5jdGlvbiI9PT10eXBlb2YgYVtxXSYmKGJbcV09YVtxXS5iaW5kKGEpKTtiLlN0YXRXYXRjaGVyPWEuU3RhdFdhdGNoZXI7Yi5GU1dhdGNoZXI9YS5GU1dhdGNoZXI7Yi5Xcml0ZVN0cmVhbT1hLldyaXRlU3RyZWFtO2IuUmVhZFN0cmVhbT1hLlJlYWRTdHJlYW07Yi5wcm9taXNlcz1hLnByb21pc2VzO2IuX3RvVW5peFRpbWVzdGFtcD1RYS50b1VuaXhUaW1lc3RhbXA7cmV0dXJuIGJ9dmFyIGU9TiYmTi5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGEpe2Zvcih2YXIgYixkPTEsZT1hcmd1bWVudHMubGVuZ3RoO2Q8ZTtkKyspe2I9YXJndW1lbnRzW2RdO2Zvcih2YXIgZiBpbiBiKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLGYpJiYoYVtmXT1iW2ZdKX1yZXR1cm4gYX07cmV0dXJuIGUuYXBwbHkodGhpcywKYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBmPWdkLmZzU3luY01ldGhvZHMsZz1nZC5mc0FzeW5jTWV0aG9kcyxoPXUuY29uc3RhbnRzLkZfT0ssaz11LmNvbnN0YW50cy5SX09LLGw9dS5jb25zdGFudHMuV19PSyxtPXUuY29uc3RhbnRzLlhfT0s7Yi5Wb2x1bWU9UWEuVm9sdW1lO2Iudm9sPW5ldyBRYS5Wb2x1bWU7Yi5jcmVhdGVGc0Zyb21Wb2x1bWU9ZDtiLmZzPWQoYi52b2wpO2EuZXhwb3J0cz1lKGUoe30sYS5leHBvcnRzKSxiLmZzKTthLmV4cG9ydHMuc2VtYW50aWM9ITB9KTtRKHJmKTt2YXIgc2Y9cmYuY3JlYXRlRnNGcm9tVm9sdW1lO1dnLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixkLGU9W10sZj0xO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspZVtmLTFdPWFyZ3VtZW50c1tmXTtmPXRoaXMubGlzdGVuZXJzKGEpO3RyeXtmb3IodmFyIGc9cmMoZiksaD1nLm5leHQoKTshaC5kb25lO2g9CmcubmV4dCgpKXt2YXIgaz1oLnZhbHVlO3RyeXtrLmFwcGx5KHZvaWQgMCxKZihlKSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19fWNhdGNoKHQpe2I9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2gmJiFoLmRvbmUmJihkPWcucmV0dXJuKSYmZC5jYWxsKGcpfWZpbmFsbHl7aWYoYil0aHJvdyBiLmVycm9yO319cmV0dXJuIDA8Zi5sZW5ndGh9O3ZhciBnaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt0aGlzLnZvbHVtZT1uZXcgcWY7dGhpcy5mcz1zZih0aGlzLnZvbHVtZSk7dGhpcy5mcm9tSlNPTih7Ii9kZXYvc3RkaW4iOiIiLCIvZGV2L3N0ZG91dCI6IiIsIi9kZXYvc3RkZXJyIjoiIn0pfWEucHJvdG90eXBlLl90b0pTT049ZnVuY3Rpb24oYSxkLGUpe3ZvaWQgMD09PWQmJihkPXt9KTt2YXIgYj0hMCxnO2ZvcihnIGluIGEuY2hpbGRyZW4pe2I9ITE7dmFyIGg9YS5nZXRDaGlsZChnKTtpZihoKXt2YXIgaz1oLmdldE5vZGUoKTtrJiZrLmlzRmlsZSgpPyhoPWguZ2V0UGF0aCgpLAplJiYoaD1QYihlLGgpKSxkW2hdPWsuZ2V0QnVmZmVyKCkpOmsmJmsuaXNEaXJlY3RvcnkoKSYmdGhpcy5fdG9KU09OKGgsZCxlKX19YT1hLmdldFBhdGgoKTtlJiYoYT1QYihlLGEpKTthJiZiJiYoZFthXT1udWxsKTtyZXR1cm4gZH07YS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEsZCxlKXt2YXIgYixnO3ZvaWQgMD09PWQmJihkPXt9KTt2b2lkIDA9PT1lJiYoZT0hMSk7dmFyIGg9W107aWYoYSl7YSBpbnN0YW5jZW9mIEFycmF5fHwoYT1bYV0pO3RyeXtmb3IodmFyIGs9cmMoYSksbD1rLm5leHQoKTshbC5kb25lO2w9ay5uZXh0KCkpe3ZhciBxPWVoKGwudmFsdWUpLG09dGhpcy52b2x1bWUuZ2V0UmVzb2x2ZWRMaW5rKHEpO20mJmgucHVzaChtKX19Y2F0Y2goWmMpe3ZhciBuPXtlcnJvcjpaY319ZmluYWxseXt0cnl7bCYmIWwuZG9uZSYmKGI9ay5yZXR1cm4pJiZiLmNhbGwoayl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3I7fX19ZWxzZSBoLnB1c2godGhpcy52b2x1bWUucm9vdCk7CmlmKCFoLmxlbmd0aClyZXR1cm4gZDt0cnl7Zm9yKHZhciBQPXJjKGgpLHA9UC5uZXh0KCk7IXAuZG9uZTtwPVAubmV4dCgpKW09cC52YWx1ZSx0aGlzLl90b0pTT04obSxkLGU/bS5nZXRQYXRoKCk6IiIpfWNhdGNoKFpjKXt2YXIgdT17ZXJyb3I6WmN9fWZpbmFsbHl7dHJ5e3AmJiFwLmRvbmUmJihnPVAucmV0dXJuKSYmZy5jYWxsKFApfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yO319cmV0dXJuIGR9O2EucHJvdG90eXBlLmZyb21KU09ORml4ZWQ9ZnVuY3Rpb24oYSxkKXtmb3IodmFyIGIgaW4gZCl7dmFyIGY9ZFtiXTtpZihmP251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZik6bnVsbCE9PWYpe3ZhciBnPWZoKGIpOzE8Zy5sZW5ndGgmJihnPSIvIitnLnNsaWNlKDAsZy5sZW5ndGgtMSkuam9pbigiLyIpLGEubWtkaXJwQmFzZShnLDUxMSkpO2Eud3JpdGVGaWxlU3luYyhiLGZ8fCIiKX1lbHNlIGEubWtkaXJwQmFzZShiLDUxMSl9fTthLnByb3RvdHlwZS5mcm9tSlNPTj0KZnVuY3Rpb24oYSl7dGhpcy52b2x1bWU9bmV3IHFmO3RoaXMuZnJvbUpTT05GaXhlZCh0aGlzLnZvbHVtZSxhKTt0aGlzLmZzPXNmKHRoaXMudm9sdW1lKTt0aGlzLnZvbHVtZS5yZWxlYXNlZEZkcz1bMCwxLDJdO2E9dGhpcy52b2x1bWUub3BlblN5bmMoIi9kZXYvc3RkZXJyIiwidyIpO3ZhciBiPXRoaXMudm9sdW1lLm9wZW5TeW5jKCIvZGV2L3N0ZG91dCIsInciKSxlPXRoaXMudm9sdW1lLm9wZW5TeW5jKCIvZGV2L3N0ZGluIiwiciIpO2lmKDIhPT1hKXRocm93IEVycm9yKCJpbnZhbGlkIGhhbmRsZSBmb3Igc3RkZXJyOiAiK2EpO2lmKDEhPT1iKXRocm93IEVycm9yKCJpbnZhbGlkIGhhbmRsZSBmb3Igc3Rkb3V0OiAiK2IpO2lmKDAhPT1lKXRocm93IEVycm9yKCJpbnZhbGlkIGhhbmRsZSBmb3Igc3RkaW46ICIrZSk7fTthLnByb3RvdHlwZS5nZXRTdGRPdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGEsZD10aGlzO3JldHVybiBIZih0aGlzLApmdW5jdGlvbigpe2E9bmV3IFByb21pc2UoZnVuY3Rpb24oYSl7YShkLmZzLnJlYWRGaWxlU3luYygiL2Rldi9zdGRvdXQiLCJ1dGY4IikpfSk7cmV0dXJuWzIsYV19KX0pfTtyZXR1cm4gYX0oKSxkYz12b2lkIDA7Im9iamVjdCI9PT10eXBlb2Ygd2luZG93P2RjPXdpbmRvdy5UZXh0RGVjb2Rlcjoib2JqZWN0Ij09PXR5cGVvZiBzZWxmP2RjPXNlbGYuVGV4dERlY29kZXI6ImZ1bmN0aW9uIj09PXR5cGVvZiByZXF1aXJlJiYoZGM9cmVxdWlyZSgidXRpbCIpLlRleHREZWNvZGVyKTt2YXIgaGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3RoaXMud2FzbUZzPWE7dGhpcy53YXNtRnMudm9sdW1lLm1rZGlyU3luYygiL193YXNtZXIvZGV2L2ZiMCIse3JlY3Vyc2l2ZTohMH0pO3RoaXMud2FzbUZzLnZvbHVtZS53cml0ZUZpbGVTeW5jKCIvX3dhc21lci9kZXYvZmIwL2ZiIiwiIik7dGhpcy53YXNtRnMudm9sdW1lLndyaXRlRmlsZVN5bmMoIi9fd2FzbWVyL2Rldi9mYjAvdmlydHVhbF9zaXplIiwKIiIpO3RoaXMud2FzbUZzLnZvbHVtZS53cml0ZUZpbGVTeW5jKCIvX3dhc21lci9kZXYvZmIwL2RyYXciLCIiKTt0aGlzLndhc21Gcy52b2x1bWUud3JpdGVGaWxlU3luYygiL193YXNtZXIvZGV2L2ZiMC9pbnB1dCIsIiIpO3RoaXMud2luZG93U2l6ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7fTt0aGlzLmJ1ZmZlckluZGV4RGlzcGxheUNhbGxiYWNrPWZ1bmN0aW9uKCl7fTt0aGlzLmlucHV0Q2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXl9O3RoaXMuZmRGcmFtZUJ1ZmZlcj10aGlzLndhc21Gcy52b2x1bWUub3BlblN5bmMoIi9fd2FzbWVyL2Rldi9mYjAvZmIiLCJ3KyIpO3RoaXMuZmRCdWZmZXJJbmRleERpc3BsYXk9dGhpcy53YXNtRnMudm9sdW1lLm9wZW5TeW5jKCIvX3dhc21lci9kZXYvZmIwL2RyYXciLCJ3KyIpO3RoaXMuZmRXaW5kb3dTaXplPXRoaXMud2FzbUZzLmZzLm9wZW5TeW5jKCIvX3dhc21lci9kZXYvZmIwL3ZpcnR1YWxfc2l6ZSIsIncrIik7CnRoaXMuZmRJbnB1dD10aGlzLndhc21Gcy52b2x1bWUub3BlblN5bmMoIi9fd2FzbWVyL2Rldi9mYjAvaW5wdXQiLCJ3KyIpO3ZhciBiPXRoaXMsZT10aGlzLndhc21Gcy52b2x1bWUuZmRzW3RoaXMuZmRJbnB1dF0ubm9kZS5yZWFkO3RoaXMud2FzbUZzLnZvbHVtZS5mZHNbdGhpcy5mZElucHV0XS5ub2RlLnJlYWQ9ZnVuY3Rpb24oKXt2YXIgYT1iLmlucHV0Q2FsbGJhY2soKTtiLndhc21Gcy52b2x1bWUud3JpdGVGaWxlU3luYygiL193YXNtZXIvZGV2L2ZiMC9pbnB1dCIsYSk7YT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBlLmFwcGx5KGIud2FzbUZzLnZvbHVtZS5mZHNbYi5mZElucHV0XS5ub2RlLGEpfTt2YXIgZj10aGlzLndhc21Gcy52b2x1bWUuZmRzW3RoaXMuZmRXaW5kb3dTaXplXS5ub2RlLndyaXRlO3RoaXMud2FzbUZzLnZvbHVtZS5mZHNbdGhpcy5mZFdpbmRvd1NpemVdLm5vZGUud3JpdGU9ZnVuY3Rpb24oKXt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwphPWYuYXBwbHkoYi53YXNtRnMudm9sdW1lLmZkc1tiLmZkV2luZG93U2l6ZV0ubm9kZSxhKTtiLndpbmRvd1NpemVDYWxsYmFjaygpO3JldHVybiBhfTt2YXIgZz10aGlzLndhc21Gcy52b2x1bWUuZmRzW3RoaXMuZmRCdWZmZXJJbmRleERpc3BsYXldLm5vZGUud3JpdGU7dGhpcy53YXNtRnMudm9sdW1lLmZkc1t0aGlzLmZkQnVmZmVySW5kZXhEaXNwbGF5XS5ub2RlLndyaXRlPWZ1bmN0aW9uKCl7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTthPWcuYXBwbHkoYi53YXNtRnMudm9sdW1lLmZkc1tiLmZkQnVmZmVySW5kZXhEaXNwbGF5XS5ub2RlLGEpO2IuYnVmZmVySW5kZXhEaXNwbGF5Q2FsbGJhY2soKTtyZXR1cm4gYX19YS5wcm90b3R5cGUuZ2V0RnJhbWVCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53YXNtRnMuZnMucmVhZEZpbGVTeW5jKCIvX3dhc21lci9kZXYvZmIwL2ZiIil9O2EucHJvdG90eXBlLmdldFdpbmRvd1NpemU9ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy53YXNtRnMuZnMucmVhZEZpbGVTeW5jKCIvX3dhc21lci9kZXYvZmIwL3ZpcnR1YWxfc2l6ZSIpO3JldHVybiAwPGEubGVuZ3RoPyhhPShuZXcgZGMoInV0Zi04IikpLmRlY29kZShhKS5zcGxpdCgieCIpLFtwYXJzZUludChhWzBdLDEwKSxwYXJzZUludChhWzFdLDEwKV0pOlswLDBdfTthLnByb3RvdHlwZS5zZXRXaW5kb3dTaXplQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dGhpcy53aW5kb3dTaXplQ2FsbGJhY2s9YX07YS5wcm90b3R5cGUuc2V0QnVmZmVySW5kZXhEaXNwbGF5Q2FsbGJhY2s9ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXJJbmRleERpc3BsYXlDYWxsYmFjaz1hfTthLnByb3RvdHlwZS5zZXRJbnB1dENhbGxiYWNrPWZ1bmN0aW9uKGEpe3RoaXMuaW5wdXRDYWxsYmFjaz1hfTtyZXR1cm4gYX0oKSxpaD0idW5kZWZpbmVkIiE9PXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPT10eXBlb2YgbmE/bmE6e30sbj0idW5kZWZpbmVkIiE9PXR5cGVvZiBCaWdJbnQ/CkJpZ0ludDppaC5CaWdJbnR8fE51bWJlcixlYz1EYXRhVmlldztlYy5wcm90b3R5cGUuc2V0QmlnVWludDY0fHwoZWMucHJvdG90eXBlLnNldEJpZ1VpbnQ2ND1mdW5jdGlvbihhLGIsZCl7aWYoYjxNYXRoLnBvdygyLDMyKSl7Yj1OdW1iZXIoYik7dmFyIGU9MH1lbHNle2U9Yi50b1N0cmluZygyKTtiPSIiO2Zvcih2YXIgZj0wO2Y8NjQtZS5sZW5ndGg7ZisrKWIrPSIwIjtiKz1lO2U9cGFyc2VJbnQoYi5zdWJzdHJpbmcoMCwzMiksMik7Yj1wYXJzZUludChiLnN1YnN0cmluZygzMiksMil9dGhpcy5zZXRVaW50MzIoYSsoZD8wOjQpLGIsZCk7dGhpcy5zZXRVaW50MzIoYSsoZD80OjApLGUsZCl9LGVjLnByb3RvdHlwZS5nZXRCaWdVaW50NjQ9ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLmdldFVpbnQzMihhKyhiPzA6NCksYik7YT10aGlzLmdldFVpbnQzMihhKyhiPzQ6MCksYik7ZD1kLnRvU3RyaW5nKDIpO2E9YS50b1N0cmluZygyKTtiPSIiO2Zvcih2YXIgZT0wO2U8MzItZC5sZW5ndGg7ZSsrKWIrPQoiMCI7cmV0dXJuIG4oIjBiIithKyhiK2QpKX0pO3ZhciBCYj0idW5kZWZpbmVkIiE9PXR5cGVvZiBuYT9uYToidW5kZWZpbmVkIiE9PXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxlYT1bXSxNPVtdLEpnPSJ1bmRlZmluZWQiIT09dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxTYz0hMSxqaD17fS50b1N0cmluZyxSZT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qaC5jYWxsKGEpfTttLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09QmIuVFlQRURfQVJSQVlfU1VQUE9SVD9CYi5UWVBFRF9BUlJBWV9TVVBQT1JUOiEwO3ZhciBraD1tLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzO20ucG9vbFNpemU9ODE5MjttLl9hdWdtZW50PWZ1bmN0aW9uKGEpe2EuX19wcm90b19fPW0ucHJvdG90eXBlO3JldHVybiBhfTttLmZyb209ZnVuY3Rpb24oYSwKYixkKXtyZXR1cm4gT2UobnVsbCxhLGIsZCl9O20uVFlQRURfQVJSQVlfU1VQUE9SVCYmKG0ucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxtLl9fcHJvdG9fXz1VaW50OEFycmF5KTttLmFsbG9jPWZ1bmN0aW9uKGEsYixkKXtRZShhKTtyZXR1cm4gYT0wPj1hP21hKG51bGwsYSk6dm9pZCAwIT09Yj8ic3RyaW5nIj09PXR5cGVvZiBkP21hKG51bGwsYSkuZmlsbChiLGQpOm1hKG51bGwsYSkuZmlsbChiKTptYShudWxsLGEpfTttLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGEpe3JldHVybiBUYyhudWxsLGEpfTttLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihhKXtyZXR1cm4gVGMobnVsbCxhKX07bS5pc0J1ZmZlcj1ZZTttLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtpZighZmEoYSl8fCFmYShiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoYT09PWIpcmV0dXJuIDA7Zm9yKHZhciBkPWEubGVuZ3RoLGU9Yi5sZW5ndGgsCmY9MCxnPU1hdGgubWluKGQsZSk7ZjxnOysrZilpZihhW2ZdIT09YltmXSl7ZD1hW2ZdO2U9YltmXTticmVha31yZXR1cm4gZDxlPy0xOmU8ZD8xOjB9O20uaXNFbmNvZGluZz1mdW5jdGlvbihhKXtzd2l0Y2goU3RyaW5nKGEpLnRvTG93ZXJDYXNlKCkpe2Nhc2UgImhleCI6Y2FzZSAidXRmOCI6Y2FzZSAidXRmLTgiOmNhc2UgImFzY2lpIjpjYXNlICJsYXRpbjEiOmNhc2UgImJpbmFyeSI6Y2FzZSAiYmFzZTY0IjpjYXNlICJ1Y3MyIjpjYXNlICJ1Y3MtMiI6Y2FzZSAidXRmMTZsZSI6Y2FzZSAidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTttLmNvbmNhdD1mdW5jdGlvbihhLGIpe2lmKCFSZShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWEubGVuZ3RoKXJldHVybiBtLmFsbG9jKDApO3ZhciBkO2lmKHZvaWQgMD09PWIpZm9yKGQ9Yj0wO2Q8YS5sZW5ndGg7KytkKWIrPQphW2RdLmxlbmd0aDtiPW0uYWxsb2NVbnNhZmUoYik7dmFyIGU9MDtmb3IoZD0wO2Q8YS5sZW5ndGg7KytkKXt2YXIgZj1hW2RdO2lmKCFmYShmKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7Zi5jb3B5KGIsZSk7ZSs9Zi5sZW5ndGh9cmV0dXJuIGJ9O20uYnl0ZUxlbmd0aD1QZTttLnByb3RvdHlwZS5faXNCdWZmZXI9ITA7bS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5sZW5ndGg7aWYoMCE9PWElMil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGI9MDtiPGE7Yis9MilNYSh0aGlzLGIsYisxKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5sZW5ndGg7aWYoMCE9PWElNCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTsKZm9yKHZhciBiPTA7YjxhO2IrPTQpTWEodGhpcyxiLGIrMyksTWEodGhpcyxiKzEsYisyKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5sZW5ndGg7aWYoMCE9PWElOCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGI9MDtiPGE7Yis9OClNYSh0aGlzLGIsYis3KSxNYSh0aGlzLGIrMSxiKzYpLE1hKHRoaXMsYisyLGIrNSksTWEodGhpcyxiKzMsYis0KTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmxlbmd0aHwwO3JldHVybiAwPT09YT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9UZSh0aGlzLDAsYSk6SGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfTttLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oYSl7aWYoIWZhKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTsKcmV0dXJuIHRoaXM9PT1hPyEwOjA9PT1tLmNvbXBhcmUodGhpcyxhKX07bS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBhPSIiOzA8dGhpcy5sZW5ndGgmJihhPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLDUwPHRoaXMubGVuZ3RoJiYoYSs9IiAuLi4gIikpO3JldHVybiI8QnVmZmVyICIrYSsiPiJ9O20ucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYSxiLGQsZSxmKXtpZighZmEoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3ZvaWQgMD09PWImJihiPTApO3ZvaWQgMD09PWQmJihkPWE/YS5sZW5ndGg6MCk7dm9pZCAwPT09ZSYmKGU9MCk7dm9pZCAwPT09ZiYmKGY9dGhpcy5sZW5ndGgpO2lmKDA+Ynx8ZD5hLmxlbmd0aHx8MD5lfHxmPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihlPj1mJiZiPj1kKXJldHVybiAwOwppZihlPj1mKXJldHVybi0xO2lmKGI+PWQpcmV0dXJuIDE7Yj4+Pj0wO2Q+Pj49MDtlPj4+PTA7Zj4+Pj0wO2lmKHRoaXM9PT1hKXJldHVybiAwO3ZhciBnPWYtZSxoPWQtYixrPU1hdGgubWluKGcsaCk7ZT10aGlzLnNsaWNlKGUsZik7YT1hLnNsaWNlKGIsZCk7Zm9yKGI9MDtiPGs7KytiKWlmKGVbYl0hPT1hW2JdKXtnPWVbYl07aD1hW2JdO2JyZWFrfXJldHVybiBnPGg/LTE6aDxnPzE6MH07bS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oYSxiLGQpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGEsYixkKX07bS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIFVlKHRoaXMsYSxiLGQsITApfTttLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIFVlKHRoaXMsYSxiLGQsITEpfTttLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihhLGIsZCxlKXtpZih2b2lkIDA9PT1iKWU9InV0ZjgiLGQ9dGhpcy5sZW5ndGgsYj0wO2Vsc2UgaWYodm9pZCAwPT09CmQmJiJzdHJpbmciPT09dHlwZW9mIGIpZT1iLGQ9dGhpcy5sZW5ndGgsYj0wO2Vsc2UgaWYoaXNGaW5pdGUoYikpYnw9MCxpc0Zpbml0ZShkKT8oZHw9MCx2b2lkIDA9PT1lJiYoZT0idXRmOCIpKTooZT1kLGQ9dm9pZCAwKTtlbHNlIHRocm93IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3ZhciBmPXRoaXMubGVuZ3RoLWI7aWYodm9pZCAwPT09ZHx8ZD5mKWQ9ZjtpZigwPGEubGVuZ3RoJiYoMD5kfHwwPmIpfHxiPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO2V8fChlPSJ1dGY4Iik7Zm9yKGY9ITE7Oylzd2l0Y2goZSl7Y2FzZSAiaGV4IjphOntiPU51bWJlcihiKXx8MDtlPXRoaXMubGVuZ3RoLWI7ZD8oZD1OdW1iZXIoZCksZD5lJiYoZD1lKSk6ZD1lO2U9YS5sZW5ndGg7aWYoMCE9PWUlMil0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTsKZD5lLzImJihkPWUvMik7Zm9yKGU9MDtlPGQ7KytlKXtmPXBhcnNlSW50KGEuc3Vic3RyKDIqZSwyKSwxNik7aWYoaXNOYU4oZikpe2E9ZTticmVhayBhfXRoaXNbYitlXT1mfWE9ZX1yZXR1cm4gYTtjYXNlICJ1dGY4IjpjYXNlICJ1dGYtOCI6cmV0dXJuIHViKFhiKGEsdGhpcy5sZW5ndGgtYiksdGhpcyxiLGQpO2Nhc2UgImFzY2lpIjpyZXR1cm4gdWIoWGUoYSksdGhpcyxiLGQpO2Nhc2UgImxhdGluMSI6Y2FzZSAiYmluYXJ5IjpyZXR1cm4gdWIoWGUoYSksdGhpcyxiLGQpO2Nhc2UgImJhc2U2NCI6cmV0dXJuIHViKFNlKGEpLHRoaXMsYixkKTtjYXNlICJ1Y3MyIjpjYXNlICJ1Y3MtMiI6Y2FzZSAidXRmMTZsZSI6Y2FzZSAidXRmLTE2bGUiOmU9YTtmPXRoaXMubGVuZ3RoLWI7Zm9yKHZhciBnPVtdLGg9MDtoPGUubGVuZ3RoJiYhKDA+KGYtPTIpKTsrK2gpe3ZhciBrPWUuY2hhckNvZGVBdChoKTthPWs+Pjg7ayU9MjU2O2cucHVzaChrKTtnLnB1c2goYSl9cmV0dXJuIHViKGcsCnRoaXMsYixkKTtkZWZhdWx0OmlmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPSgiIitlKS50b0xvd2VyQ2FzZSgpO2Y9ITB9fTttLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBXZT00MDk2O20ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5sZW5ndGg7YT1+fmE7Yj12b2lkIDA9PT1iP2Q6fn5iOzA+YT8oYSs9ZCwwPmEmJihhPTApKTphPmQmJihhPWQpOzA+Yj8oYis9ZCwwPmImJihiPTApKTpiPmQmJihiPWQpO2I8YSYmKGI9YSk7aWYobS5UWVBFRF9BUlJBWV9TVVBQT1JUKWI9dGhpcy5zdWJhcnJheShhLGIpLGIuX19wcm90b19fPW0ucHJvdG90eXBlO2Vsc2V7ZD1iLWE7Yj1uZXcgbShkLHZvaWQgMCk7Zm9yKHZhciBlPTA7ZTxkOysrZSliW2VdPXRoaXNbZSthXX1yZXR1cm4gYn07Cm0ucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oYSxiLGQpe2F8PTA7Ynw9MDtkfHxJKGEsYix0aGlzLmxlbmd0aCk7ZD10aGlzW2FdO2Zvcih2YXIgZT0xLGY9MDsrK2Y8YiYmKGUqPTI1Nik7KWQrPXRoaXNbYStmXSplO3JldHVybiBkfTttLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGEsYixkKXthfD0wO2J8PTA7ZHx8SShhLGIsdGhpcy5sZW5ndGgpO2Q9dGhpc1thKy0tYl07Zm9yKHZhciBlPTE7MDxiJiYoZSo9MjU2KTspZCs9dGhpc1thKy0tYl0qZTtyZXR1cm4gZH07bS5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGEsYil7Ynx8SShhLDEsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2FdfTttLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsMix0aGlzLmxlbmd0aCk7cmV0dXJuIHRoaXNbYV18dGhpc1thKzFdPDw4fTttLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsMix0aGlzLmxlbmd0aCk7CnJldHVybiB0aGlzW2FdPDw4fHRoaXNbYSsxXX07bS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGEsYil7Ynx8SShhLDQsdGhpcy5sZW5ndGgpO3JldHVybih0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2KSsxNjc3NzIxNip0aGlzW2ErM119O20ucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihhLGIpe2J8fEkoYSw0LHRoaXMubGVuZ3RoKTtyZXR1cm4gMTY3NzcyMTYqdGhpc1thXSsodGhpc1thKzFdPDwxNnx0aGlzW2ErMl08PDh8dGhpc1thKzNdKX07bS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGEsYixkKXthfD0wO2J8PTA7ZHx8SShhLGIsdGhpcy5sZW5ndGgpO2Q9dGhpc1thXTtmb3IodmFyIGU9MSxmPTA7KytmPGImJihlKj0yNTYpOylkKz10aGlzW2ErZl0qZTtkPj0xMjgqZSYmKGQtPU1hdGgucG93KDIsOCpiKSk7cmV0dXJuIGR9O20ucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihhLGIsZCl7YXw9MDtifD0wO2R8fEkoYSwKYix0aGlzLmxlbmd0aCk7ZD1iO2Zvcih2YXIgZT0xLGY9dGhpc1thKy0tZF07MDxkJiYoZSo9MjU2KTspZis9dGhpc1thKy0tZF0qZTtmPj0xMjgqZSYmKGYtPU1hdGgucG93KDIsOCpiKSk7cmV0dXJuIGZ9O20ucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGEsYil7Ynx8SShhLDEsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2FdJjEyOD8tMSooMjU1LXRoaXNbYV0rMSk6dGhpc1thXX07bS5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsMix0aGlzLmxlbmd0aCk7YT10aGlzW2FdfHRoaXNbYSsxXTw8ODtyZXR1cm4gYSYzMjc2OD9hfDQyOTQ5MDE3NjA6YX07bS5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsMix0aGlzLmxlbmd0aCk7YT10aGlzW2ErMV18dGhpc1thXTw8ODtyZXR1cm4gYSYzMjc2OD9hfDQyOTQ5MDE3NjA6YX07bS5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsNCx0aGlzLmxlbmd0aCk7CnJldHVybiB0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2fHRoaXNbYSszXTw8MjR9O20ucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGEsYil7Ynx8SShhLDQsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2FdPDwyNHx0aGlzW2ErMV08PDE2fHRoaXNbYSsyXTw8OHx0aGlzW2ErM119O20ucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGEsYil7Ynx8SShhLDQsdGhpcy5sZW5ndGgpO3JldHVybiBWYih0aGlzLGEsITAsMjMsNCl9O20ucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGEsYil7Ynx8SShhLDQsdGhpcy5sZW5ndGgpO3JldHVybiBWYih0aGlzLGEsITEsMjMsNCl9O20ucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihhLGIpe2J8fEkoYSw4LHRoaXMubGVuZ3RoKTtyZXR1cm4gVmIodGhpcyxhLCEwLDUyLDgpfTttLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oYSxiKXtifHxJKGEsOCx0aGlzLmxlbmd0aCk7cmV0dXJuIFZiKHRoaXMsCmEsITEsNTIsOCl9O20ucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGEsYixkLGUpe2E9K2E7Ynw9MDtkfD0wO2V8fFYodGhpcyxhLGIsZCxNYXRoLnBvdygyLDgqZCktMSwwKTtlPTE7dmFyIGY9MDtmb3IodGhpc1tiXT1hJjI1NTsrK2Y8ZCYmKGUqPTI1Nik7KXRoaXNbYitmXT1hL2UmMjU1O3JldHVybiBiK2R9O20ucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGEsYixkLGUpe2E9K2E7Ynw9MDtkfD0wO2V8fFYodGhpcyxhLGIsZCxNYXRoLnBvdygyLDgqZCktMSwwKTtlPWQtMTt2YXIgZj0xO2Zvcih0aGlzW2IrZV09YSYyNTU7MDw9LS1lJiYoZio9MjU2KTspdGhpc1tiK2VdPWEvZiYyNTU7cmV0dXJuIGIrZH07bS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihhLGIsZCl7YT0rYTtifD0wO2R8fFYodGhpcyxhLGIsMSwyNTUsMCk7bS5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoYT1NYXRoLmZsb29yKGEpKTt0aGlzW2JdPWEmMjU1O3JldHVybiBiKzF9O20ucHJvdG90eXBlLndyaXRlVUludDE2TEU9CmZ1bmN0aW9uKGEsYixkKXthPSthO2J8PTA7ZHx8Vih0aGlzLGEsYiwyLDY1NTM1LDApO20uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hJjI1NSx0aGlzW2IrMV09YT4+PjgpOlliKHRoaXMsYSxiLCEwKTtyZXR1cm4gYisyfTttLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGEsYixkKXthPSthO2J8PTA7ZHx8Vih0aGlzLGEsYiwyLDY1NTM1LDApO20uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+OCx0aGlzW2IrMV09YSYyNTUpOlliKHRoaXMsYSxiLCExKTtyZXR1cm4gYisyfTttLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGEsYixkKXthPSthO2J8PTA7ZHx8Vih0aGlzLGEsYiw0LDQyOTQ5NjcyOTUsMCk7bS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2IrM109YT4+PjI0LHRoaXNbYisyXT1hPj4+MTYsdGhpc1tiKzFdPWE+Pj44LHRoaXNbYl09YSYyNTUpOlpiKHRoaXMsYSxiLCEwKTtyZXR1cm4gYis0fTttLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPQpmdW5jdGlvbihhLGIsZCl7YT0rYTtifD0wO2R8fFYodGhpcyxhLGIsNCw0Mjk0OTY3Mjk1LDApO20uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+MjQsdGhpc1tiKzFdPWE+Pj4xNix0aGlzW2IrMl09YT4+PjgsdGhpc1tiKzNdPWEmMjU1KTpaYih0aGlzLGEsYiwhMSk7cmV0dXJuIGIrNH07bS5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihhLGIsZCxlKXthPSthO2J8PTA7ZXx8KGU9TWF0aC5wb3coMiw4KmQtMSksVih0aGlzLGEsYixkLGUtMSwtZSkpO2U9MDt2YXIgZj0xLGc9MDtmb3IodGhpc1tiXT1hJjI1NTsrK2U8ZCYmKGYqPTI1Nik7KTA+YSYmMD09PWcmJjAhPT10aGlzW2IrZS0xXSYmKGc9MSksdGhpc1tiK2VdPShhL2Y+PjApLWcmMjU1O3JldHVybiBiK2R9O20ucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oYSxiLGQsZSl7YT0rYTtifD0wO2V8fChlPU1hdGgucG93KDIsOCpkLTEpLFYodGhpcyxhLGIsZCxlLTEsLWUpKTtlPWQtMTt2YXIgZj0KMSxnPTA7Zm9yKHRoaXNbYitlXT1hJjI1NTswPD0tLWUmJihmKj0yNTYpOykwPmEmJjA9PT1nJiYwIT09dGhpc1tiK2UrMV0mJihnPTEpLHRoaXNbYitlXT0oYS9mPj4wKS1nJjI1NTtyZXR1cm4gYitkfTttLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oYSxiLGQpe2E9K2E7Ynw9MDtkfHxWKHRoaXMsYSxiLDEsMTI3LC0xMjgpO20uVFlQRURfQVJSQVlfU1VQUE9SVHx8KGE9TWF0aC5mbG9vcihhKSk7MD5hJiYoYT0yNTUrYSsxKTt0aGlzW2JdPWEmMjU1O3JldHVybiBiKzF9O20ucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihhLGIsZCl7YT0rYTtifD0wO2R8fFYodGhpcyxhLGIsMiwzMjc2NywtMzI3NjgpO20uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hJjI1NSx0aGlzW2IrMV09YT4+PjgpOlliKHRoaXMsYSxiLCEwKTtyZXR1cm4gYisyfTttLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oYSxiLGQpe2E9K2E7Ynw9MDtkfHxWKHRoaXMsYSxiLAoyLDMyNzY3LC0zMjc2OCk7bS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj44LHRoaXNbYisxXT1hJjI1NSk6WWIodGhpcyxhLGIsITEpO3JldHVybiBiKzJ9O20ucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihhLGIsZCl7YT0rYTtifD0wO2R8fFYodGhpcyxhLGIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KTttLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YSYyNTUsdGhpc1tiKzFdPWE+Pj44LHRoaXNbYisyXT1hPj4+MTYsdGhpc1tiKzNdPWE+Pj4yNCk6WmIodGhpcyxhLGIsITApO3JldHVybiBiKzR9O20ucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihhLGIsZCl7YT0rYTtifD0wO2R8fFYodGhpcyxhLGIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KTswPmEmJihhPTQyOTQ5NjcyOTUrYSsxKTttLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjI0LHRoaXNbYisxXT1hPj4+MTYsdGhpc1tiKzJdPWE+Pj44LHRoaXNbYiszXT0KYSYyNTUpOlpiKHRoaXMsYSxiLCExKTtyZXR1cm4gYis0fTttLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oYSxiLGQpe2R8fCRiKHRoaXMsYSxiLDQpO1diKHRoaXMsYSxiLCEwLDIzLDQpO3JldHVybiBiKzR9O20ucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihhLGIsZCl7ZHx8JGIodGhpcyxhLGIsNCk7V2IodGhpcyxhLGIsITEsMjMsNCk7cmV0dXJuIGIrNH07bS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihhLGIsZCl7ZHx8JGIodGhpcyxhLGIsOCk7V2IodGhpcyxhLGIsITAsNTIsOCk7cmV0dXJuIGIrOH07bS5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihhLGIsZCl7ZHx8JGIodGhpcyxhLGIsOCk7V2IodGhpcyxhLGIsITEsNTIsOCk7cmV0dXJuIGIrOH07bS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhLGIsZCxlKXtkfHwoZD0wKTtlfHwwPT09ZXx8KGU9dGhpcy5sZW5ndGgpO2I+PWEubGVuZ3RoJiYoYj1hLmxlbmd0aCk7CmJ8fChiPTApOzA8ZSYmZTxkJiYoZT1kKTtpZihlPT09ZHx8MD09PWEubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoMD5iKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoMD5kfHxkPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKDA+ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtlPnRoaXMubGVuZ3RoJiYoZT10aGlzLmxlbmd0aCk7YS5sZW5ndGgtYjxlLWQmJihlPWEubGVuZ3RoLWIrZCk7dmFyIGY9ZS1kO2lmKHRoaXM9PT1hJiZkPGImJmI8ZSlmb3IoZT1mLTE7MDw9ZTstLWUpYVtlK2JdPXRoaXNbZStkXTtlbHNlIGlmKDFFMz5mfHwhbS5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihlPTA7ZTxmOysrZSlhW2UrYl09dGhpc1tlK2RdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoYSx0aGlzLnN1YmFycmF5KGQsCmQrZiksYik7cmV0dXJuIGZ9O20ucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYSxiLGQsZSl7aWYoInN0cmluZyI9PT10eXBlb2YgYSl7InN0cmluZyI9PT10eXBlb2YgYj8oZT1iLGI9MCxkPXRoaXMubGVuZ3RoKToic3RyaW5nIj09PXR5cGVvZiBkJiYoZT1kLGQ9dGhpcy5sZW5ndGgpO2lmKDE9PT1hLmxlbmd0aCl7dmFyIGY9YS5jaGFyQ29kZUF0KDApOzI1Nj5mJiYoYT1mKX1pZih2b2lkIDAhPT1lJiYic3RyaW5nIiE9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09PXR5cGVvZiBlJiYhbS5pc0VuY29kaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7fWVsc2UibnVtYmVyIj09PXR5cGVvZiBhJiYoYSY9MjU1KTtpZigwPmJ8fHRoaXMubGVuZ3RoPGJ8fHRoaXMubGVuZ3RoPGQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKGQ8PQpiKXJldHVybiB0aGlzO2I+Pj49MDtkPXZvaWQgMD09PWQ/dGhpcy5sZW5ndGg6ZD4+PjA7YXx8KGE9MCk7aWYoIm51bWJlciI9PT10eXBlb2YgYSlmb3IoZT1iO2U8ZDsrK2UpdGhpc1tlXT1hO2Vsc2UgZm9yKGE9ZmEoYSk/YTpYYigobmV3IG0oYSxlKSkudG9TdHJpbmcoKSksZj1hLmxlbmd0aCxlPTA7ZTxkLWI7KytlKXRoaXNbZStiXT1hW2UlZl07cmV0dXJuIHRoaXN9O3ZhciBJZz0vW14rXC8wLTlBLVphLXotX10vZyxmYz1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxJTlNQRUNUX01BWF9CWVRFUzo1MCxrTWF4TGVuZ3RoOmtoLEJ1ZmZlcjptLFNsb3dCdWZmZXI6ZnVuY3Rpb24oYSl7K2EhPWEmJihhPTApO3JldHVybiBtLmFsbG9jKCthKX0saXNCdWZmZXI6WWV9KSxHPW0sZ2M9InVuZGVmaW5lZCIhPT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPT10eXBlb2YgbmE/bmE6InVuZGVmaW5lZCIhPT0KdHlwZW9mIHNlbGY/c2VsZjp7fSxyYT0kZSx5YT1hZjsiZnVuY3Rpb24iPT09dHlwZW9mIEJiLnNldFRpbWVvdXQmJihyYT1zZXRUaW1lb3V0KTsiZnVuY3Rpb24iPT09dHlwZW9mIEJiLmNsZWFyVGltZW91dCYmKHlhPWNsZWFyVGltZW91dCk7dmFyIHNhPVtdLGFiPSExLE5hLGFjPS0xO2VmLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTt2YXIgamI9QmIucGVyZm9ybWFuY2V8fHt9LGxoPWpiLm5vd3x8amIubW96Tm93fHxqYi5tc05vd3x8amIub05vd3x8amIud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfSxtaD1uZXcgRGF0ZSxuaD17bmV4dFRpY2s6ZGYsdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpPYSxhZGRMaXN0ZW5lcjpPYSxvbmNlOk9hLG9mZjpPYSxyZW1vdmVMaXN0ZW5lcjpPYSxyZW1vdmVBbGxMaXN0ZW5lcnM6T2EsCmVtaXQ6T2EsYmluZGluZzpmdW5jdGlvbigpe3Rocm93IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpO30sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbigpe3Rocm93IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKTt9LHVtYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGhydGltZTpmdW5jdGlvbihhKXt2YXIgYj0uMDAxKmxoLmNhbGwoamIpLGQ9TWF0aC5mbG9vcihiKTtiPU1hdGguZmxvb3IoYiUxKjFFOSk7YSYmKGQtPWFbMF0sYi09YVsxXSwwPmImJihkLS0sYis9MUU5KSk7cmV0dXJuW2QsYl19LHBsYXRmb3JtOiJicm93c2VyIixyZWxlYXNlOnt9LGNvbmZpZzp7fSx1cHRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUtbWgpLzFFM319LHRmPVdjKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgZCBpbiBhKWJbZF09YVtkXX1mdW5jdGlvbiBlKGEsYixkKXtyZXR1cm4gZihhLApiLGQpfXZhciBmPWZjLkJ1ZmZlcjtmLmZyb20mJmYuYWxsb2MmJmYuYWxsb2NVbnNhZmUmJmYuYWxsb2NVbnNhZmVTbG93P2EuZXhwb3J0cz1mYzooZChmYyxiKSxiLkJ1ZmZlcj1lKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGYucHJvdG90eXBlKTtkKGYsZSk7ZS5mcm9tPWZ1bmN0aW9uKGEsYixkKXtpZigibnVtYmVyIj09PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGYoYSxiLGQpfTtlLmFsbG9jPWZ1bmN0aW9uKGEsYixkKXtpZigibnVtYmVyIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTthPWYoYSk7dm9pZCAwIT09Yj8ic3RyaW5nIj09PXR5cGVvZiBkP2EuZmlsbChiLGQpOmEuZmlsbChiKTphLmZpbGwoMCk7cmV0dXJuIGF9O2UuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oYSl7aWYoIm51bWJlciIhPT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7CnJldHVybiBmKGEpfTtlLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihhKXtpZigibnVtYmVyIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gZmMuU2xvd0J1ZmZlcihhKX19KSxvaD1XYyhmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoKXt0aHJvdyBFcnJvcigic2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlclxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpO31mdW5jdGlvbiBlKGEsYil7aWYoIm51bWJlciIhPT10eXBlb2YgYXx8YSE9PWEpdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSBudW1iZXIiKTtpZihhPnJ8fDA+YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKGE+bXx8YT5iKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgb3V0IG9mIHJhbmdlIik7Cn1mdW5jdGlvbiBmKGEsYixkKXtpZigibnVtYmVyIiE9PXR5cGVvZiBhfHxhIT09YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihhPnJ8fDA+YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihhK2I+ZHx8YT5tKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIik7fWZ1bmN0aW9uIGcoYSxiLGQsZyl7aWYoIShsLmlzQnVmZmVyKGEpfHxhIGluc3RhbmNlb2YgZ2MuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBiKWc9YixiPTAsZD1hLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PT10eXBlb2YgZClnPWQsZD1hLmxlbmd0aC1iO2Vsc2UgaWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBnKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7CmUoYixhLmxlbmd0aCk7ZihkLGIsYS5sZW5ndGgpO3JldHVybiBoKGEsYixkLGcpfWZ1bmN0aW9uIGgoYSxiLGQsZSl7Yj1uZXcgVWludDhBcnJheShhLmJ1ZmZlcixiLGQpO24uZ2V0UmFuZG9tVmFsdWVzKGIpO2lmKGUpZGYoZnVuY3Rpb24oKXtlKG51bGwsYSl9KTtlbHNlIHJldHVybiBhfWZ1bmN0aW9uIGsoYSxiLGQpeyJ1bmRlZmluZWQiPT09dHlwZW9mIGImJihiPTApO2lmKCEobC5pc0J1ZmZlcihhKXx8YSBpbnN0YW5jZW9mIGdjLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO2UoYixhLmxlbmd0aCk7dm9pZCAwPT09ZCYmKGQ9YS5sZW5ndGgtYik7ZihkLGIsYS5sZW5ndGgpO3JldHVybiBoKGEsYixkKX12YXIgbD10Zi5CdWZmZXIsbT10Zi5rTWF4TGVuZ3RoLG49Z2MuY3J5cHRvfHxnYy5tc0NyeXB0byxyPU1hdGgucG93KDIsMzIpLTE7biYmbi5nZXRSYW5kb21WYWx1ZXM/KGIucmFuZG9tRmlsbD0KZyxiLnJhbmRvbUZpbGxTeW5jPWspOihiLnJhbmRvbUZpbGw9ZCxiLnJhbmRvbUZpbGxTeW5jPWQpfSkscGg9V2MoZnVuY3Rpb24oYSl7YS5leHBvcnRzPW9ofSkucmFuZG9tRmlsbFN5bmMscWg9TWF0aC5mbG9vciguMDAxKihEYXRlLm5vdygpLXBlcmZvcm1hbmNlLm5vdygpKSksQ2I9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9IiIsYj0hMSxkLGU9YXJndW1lbnRzLmxlbmd0aC0xOy0xPD1lJiYhYjtlLS0pe2lmKDA8PWUpdmFyIGY9YXJndW1lbnRzW2VdO2Vsc2Ugdm9pZCAwPT09ZCYmKGQ9bmguY3dkKCkpLGY9ZDtoYShmKTswIT09Zi5sZW5ndGgmJihhPWYrIi8iK2EsYj00Nz09PWYuY2hhckNvZGVBdCgwKSl9YT1mZihhLCFiKTtyZXR1cm4gYj8wPGEubGVuZ3RoPyIvIithOiIvIjowPGEubGVuZ3RoP2E6Ii4ifSxub3JtYWxpemU6ZnVuY3Rpb24oYSl7aGEoYSk7aWYoMD09PWEubGVuZ3RoKXJldHVybiIuIjt2YXIgYj00Nz09PWEuY2hhckNvZGVBdCgwKSxkPTQ3PT09CmEuY2hhckNvZGVBdChhLmxlbmd0aC0xKTthPWZmKGEsIWIpOzAhPT1hLmxlbmd0aHx8Ynx8KGE9Ii4iKTswPGEubGVuZ3RoJiZkJiYoYSs9Ii8iKTtyZXR1cm4gYj8iLyIrYTphfSxpc0Fic29sdXRlOmZ1bmN0aW9uKGEpe2hhKGEpO3JldHVybiAwPGEubGVuZ3RoJiY0Nz09PWEuY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbigpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGEsYj0wO2I8YXJndW1lbnRzLmxlbmd0aDsrK2Ipe3ZhciBkPWFyZ3VtZW50c1tiXTtoYShkKTswPGQubGVuZ3RoJiYoYT12b2lkIDA9PT1hP2Q6YSsoIi8iK2QpKX1yZXR1cm4gdm9pZCAwPT09YT8iLiI6Q2Iubm9ybWFsaXplKGEpfSxyZWxhdGl2ZTpmdW5jdGlvbihhLGIpe2hhKGEpO2hhKGIpO2lmKGE9PT1iKXJldHVybiIiO2E9Q2IucmVzb2x2ZShhKTtiPUNiLnJlc29sdmUoYik7aWYoYT09PWIpcmV0dXJuIiI7Zm9yKHZhciBkPTE7ZDxhLmxlbmd0aCYmNDc9PT1hLmNoYXJDb2RlQXQoZCk7KytkKTsKZm9yKHZhciBlPWEubGVuZ3RoLGY9ZS1kLGc9MTtnPGIubGVuZ3RoJiY0Nz09PWIuY2hhckNvZGVBdChnKTsrK2cpO2Zvcih2YXIgaD1iLmxlbmd0aC1nLGs9ZjxoP2Y6aCxsPS0xLG09MDttPD1rOysrbSl7aWYobT09PWspe2lmKGg+ayl7aWYoNDc9PT1iLmNoYXJDb2RlQXQoZyttKSlyZXR1cm4gYi5zbGljZShnK20rMSk7aWYoMD09PW0pcmV0dXJuIGIuc2xpY2UoZyttKX1lbHNlIGY+ayYmKDQ3PT09YS5jaGFyQ29kZUF0KGQrbSk/bD1tOjA9PT1tJiYobD0wKSk7YnJlYWt9dmFyIG49YS5jaGFyQ29kZUF0KGQrbSkscj1iLmNoYXJDb2RlQXQoZyttKTtpZihuIT09cilicmVhaztlbHNlIDQ3PT09biYmKGw9bSl9Zj0iIjtmb3IobT1kK2wrMTttPD1lOysrbSlpZihtPT09ZXx8NDc9PT1hLmNoYXJDb2RlQXQobSkpZj0wPT09Zi5sZW5ndGg/ZisiLi4iOmYrIi8uLiI7aWYoMDxmLmxlbmd0aClyZXR1cm4gZitiLnNsaWNlKGcrbCk7Zys9bDs0Nz09PWIuY2hhckNvZGVBdChnKSYmKytnOwpyZXR1cm4gYi5zbGljZShnKX0sX21ha2VMb25nOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxkaXJuYW1lOmZ1bmN0aW9uKGEpe2hhKGEpO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBiPWEuY2hhckNvZGVBdCgwKSxkPTQ3PT09YixlPS0xLGY9ITAsZz1hLmxlbmd0aC0xOzE8PWc7LS1nKWlmKGI9YS5jaGFyQ29kZUF0KGcpLDQ3PT09Yil7aWYoIWYpe2U9ZzticmVha319ZWxzZSBmPSExO3JldHVybi0xPT09ZT9kPyIvIjoiLiI6ZCYmMT09PWU/Ii8vIjphLnNsaWNlKDAsZSl9LGJhc2VuYW1lOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YiYmInN0cmluZyIhPT10eXBlb2YgYil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7aGEoYSk7dmFyIGQ9MCxlPS0xLGY9ITAsZztpZih2b2lkIDAhPT1iJiYwPGIubGVuZ3RoJiZiLmxlbmd0aDw9YS5sZW5ndGgpe2lmKGIubGVuZ3RoPT09YS5sZW5ndGgmJmI9PT1hKXJldHVybiIiOwp2YXIgaD1iLmxlbmd0aC0xLGs9LTE7Zm9yKGc9YS5sZW5ndGgtMTswPD1nOy0tZyl7dmFyIGw9YS5jaGFyQ29kZUF0KGcpO2lmKDQ3PT09bCl7aWYoIWYpe2Q9ZysxO2JyZWFrfX1lbHNlLTE9PT1rJiYoZj0hMSxrPWcrMSksMDw9aCYmKGw9PT1iLmNoYXJDb2RlQXQoaCk/LTE9PT0tLWgmJihlPWcpOihoPS0xLGU9aykpfWQ9PT1lP2U9azotMT09PWUmJihlPWEubGVuZ3RoKTtyZXR1cm4gYS5zbGljZShkLGUpfWZvcihnPWEubGVuZ3RoLTE7MDw9ZzstLWcpaWYoNDc9PT1hLmNoYXJDb2RlQXQoZykpe2lmKCFmKXtkPWcrMTticmVha319ZWxzZS0xPT09ZSYmKGY9ITEsZT1nKzEpO3JldHVybi0xPT09ZT8iIjphLnNsaWNlKGQsZSl9LGV4dG5hbWU6ZnVuY3Rpb24oYSl7aGEoYSk7Zm9yKHZhciBiPS0xLGQ9MCxlPS0xLGY9ITAsZz0wLGg9YS5sZW5ndGgtMTswPD1oOy0taCl7dmFyIGs9YS5jaGFyQ29kZUF0KGgpO2lmKDQ3PT09ayl7aWYoIWYpe2Q9aCsxO2JyZWFrfX1lbHNlLTE9PT0KZSYmKGY9ITEsZT1oKzEpLDQ2PT09az8tMT09PWI/Yj1oOjEhPT1nJiYoZz0xKTotMSE9PWImJihnPS0xKX1yZXR1cm4tMT09PWJ8fC0xPT09ZXx8MD09PWd8fDE9PT1nJiZiPT09ZS0xJiZiPT09ZCsxPyIiOmEuc2xpY2UoYixlKX0sZm9ybWF0OmZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hfHwib2JqZWN0IiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBhKTt2YXIgYj1hLmRpcnx8YS5yb290LGQ9YS5iYXNlfHwoYS5uYW1lfHwiIikrKGEuZXh0fHwiIik7cmV0dXJuIGE9Yj9iPT09YS5yb290P2IrZDpiKyIvIitkOmR9LHBhcnNlOmZ1bmN0aW9uKGEpe2hhKGEpO3ZhciBiPXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGI7dmFyIGQ9YS5jaGFyQ29kZUF0KDApLGU9NDc9PT1kO2lmKGUpe2Iucm9vdD0KIi8iO3ZhciBmPTF9ZWxzZSBmPTA7Zm9yKHZhciBnPS0xLGg9MCxrPS0xLGw9ITAsbT1hLmxlbmd0aC0xLG49MDttPj1mOy0tbSlpZihkPWEuY2hhckNvZGVBdChtKSw0Nz09PWQpe2lmKCFsKXtoPW0rMTticmVha319ZWxzZS0xPT09ayYmKGw9ITEsaz1tKzEpLDQ2PT09ZD8tMT09PWc/Zz1tOjEhPT1uJiYobj0xKTotMSE9PWcmJihuPS0xKTstMT09PWd8fC0xPT09a3x8MD09PW58fDE9PT1uJiZnPT09ay0xJiZnPT09aCsxPy0xIT09ayYmKGIuYmFzZT0wPT09aCYmZT9iLm5hbWU9YS5zbGljZSgxLGspOmIubmFtZT1hLnNsaWNlKGgsaykpOigwPT09aCYmZT8oYi5uYW1lPWEuc2xpY2UoMSxnKSxiLmJhc2U9YS5zbGljZSgxLGspKTooYi5uYW1lPWEuc2xpY2UoaCxnKSxiLmJhc2U9YS5zbGljZShoLGspKSxiLmV4dD1hLnNsaWNlKGcsaykpOzA8aD9iLmRpcj1hLnNsaWNlKDAsaC0xKTplJiYoYi5kaXI9Ii8iKTtyZXR1cm4gYn0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwsCnBvc2l4Om51bGx9LHVmPUNiLnBvc2l4PUNiLHJoPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLCJkZWZhdWx0Ijp1ZixfX21vZHVsZUV4cG9ydHM6dWZ9KSx3Zj17aHJ0aW1lOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtiPWEoYik7cmV0dXJuIDFFOSpiWzBdK2JbMV19fShmdW5jdGlvbihhKXt2YXIgYj0uMDAxKnBlcmZvcm1hbmNlLm5vdygpLGQ9TWF0aC5mbG9vcihiKStxaDtiPU1hdGguZmxvb3IoYiUxKjFFOSk7YSYmKGQtPWFbMF0sYi09YVsxXSwwPmImJihkLS0sYis9MUU5KSk7cmV0dXJuW2QsYl19KSxleGl0OmZ1bmN0aW9uKGEpe3Rocm93IG5ldyB2ZihhKTt9LGtpbGw6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IHNoKGEpO30scmFuZG9tRmlsbFN5bmM6cGgsaXNUVFk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scGF0aDpyaCxmczpudWxsfSxDLFJhPW4oMSksQmE9bigyKSxrYj1uKDQpLGxiPW4oOCksQ2E9bigxNiksaGQ9bigzMiksRGE9big2NCksbWI9bigxMjgpLApoYz1uKDI1NiksaWQ9big1MTIpLGpkPW4oMTAyNCksa2Q9bigyMDQ4KSxsZD1uKDQwOTYpLGljPW4oODE5MiksamM9bigxNjM4NCksbWQ9bigzMjc2OCksbmQ9big2NTUzNiksb2Q9bigxMzEwNzIpLHBkPW4oMjYyMTQ0KSxxZD1uKDUyNDI4OCkscmQ9bigxMDQ4NTc2KSxFYT1uKDIwOTcxNTIpLGtjPW4oNDE5NDMwNCksbGM9big4Mzg4NjA4KSxzZD1uKDE2Nzc3MjE2KSx0ZD1uKDMzNTU0NDMyKSx1ZD1uKDY3MTA4ODY0KSxTYT1uKDEzNDIxNzcyOCkseGY9bigyNjg0MzU0NTYpLGNiPVJhfEJhfGtifGxifENhfGhkfERhfG1ifGhjfGlkfGpkfGtkfGxkfGljfGpjfG1kfG5kfG9kfHBkfHFkfHJkfEVhfGxjfGtjfHNkfHVkfHRkfFNhfHhmLGxmPVJhfEJhfGtifGxifENhfGhkfERhfG1ifGhjfEVhfGtjfGxjfFNhLFBnPW4oMCksWWM9bGJ8Q2F8bWJ8aWR8amR8a2R8bGR8aWN8amN8bWR8bmR8b2R8cGR8cWR8cmR8RWF8bGN8c2R8dWR8dGR8U2EsamY9WWN8bGYsa2Y9QmF8bGJ8RGF8RWF8ClNhfHhmLE5nPUJhfGxifERhfEVhfFNhLE9nPW4oMCksTWc9e0UyQklHOjEsRUFDQ0VTOjIsRUFERFJJTlVTRTozLEVBRERSTk9UQVZBSUw6NCxFQUZOT1NVUFBPUlQ6NSxFQUxSRUFEWTo3LEVBR0FJTjo2LEVCQURGOjgsRUJBRE1TRzo5LEVCVVNZOjEwLEVDQU5DRUxFRDoxMSxFQ0hJTEQ6MTIsRUNPTk5BQk9SVEVEOjEzLEVDT05OUkVGVVNFRDoxNCxFQ09OTlJFU0VUOjE1LEVERUFETE9DSzoxNixFREVTVEFERFJSRVE6MTcsRURPTToxOCxFRFFVT1Q6MTksRUVYSVNUOjIwLEVGQVVMVDoyMSxFRkJJRzoyMixFSE9TVERPV046MjMsRUhPU1RVTlJFQUNIOjIzLEVJRFJNOjI0LEVJTFNFUToyNSxFSU5QUk9HUkVTUzoyNixFSU5UUjoyNyxFSU5WQUw6MjgsRUlPOjI5LEVJU0NPTk46MzAsRUlTRElSOjMxLEVMT09QOjMyLEVNRklMRTozMyxFTUxJTks6MzQsRU1TR1NJWkU6MzUsRU1VTFRJSE9QOjM2LEVOQU1FVE9PTE9ORzozNyxFTkVURE9XTjozOCxFTkVUUkVTRVQ6MzksRU5FVFVOUkVBQ0g6NDAsCkVORklMRTo0MSxFTk9CVUZTOjQyLEVOT0RFVjo0MyxFTk9FTlQ6NDQsRU5PRVhFQzo0NSxFTk9MQ0s6NDYsRU5PTElOSzo0NyxFTk9NRU06NDgsRU5PTVNHOjQ5LEVOT1BST1RPT1BUOjUwLEVOT1NQQzo1MSxFTk9TWVM6NTIsRU5PVENPTk46NTMsRU5PVERJUjo1NCxFTk9URU1QVFk6NTUsRU5PVFJFQ09WRVJBQkxFOjU2LEVOT1RTT0NLOjU3LEVOT1RUWTo1OSxFTlhJTzo2MCxFT1ZFUkZMT1c6NjEsRU9XTkVSREVBRDo2MixFUEVSTTo2MyxFUElQRTo2NCxFUFJPVE86NjUsRVBST1RPTk9TVVBQT1JUOjY2LEVQUk9UT1RZUEU6NjcsRVJBTkdFOjY4LEVST0ZTOjY5LEVTUElQRTo3MCxFU1JDSDo3MSxFU1RBTEU6NzIsRVRJTUVET1VUOjczLEVUWFRCU1k6NzQsRVhERVY6NzV9LHlmPShDPXt9LENbNl09IlNJR0hVUCIsQ1s4XT0iU0lHSU5UIixDWzExXT0iU0lHUVVJVCIsQ1s3XT0iU0lHSUxMIixDWzE1XT0iU0lHVFJBUCIsQ1swXT0iU0lHQUJSVCIsQ1syXT0iU0lHQlVTIixDWzVdPQoiU0lHRlBFIixDWzldPSJTSUdLSUxMIixDWzIwXT0iU0lHVVNSMSIsQ1sxMl09IlNJR1NFR1YiLENbMjFdPSJTSUdVU1IyIixDWzEwXT0iU0lHUElQRSIsQ1sxXT0iU0lHQUxSTSIsQ1sxNF09IlNJR1RFUk0iLENbM109IlNJR0NITEQiLENbNF09IlNJR0NPTlQiLENbMTNdPSJTSUdTVE9QIixDWzE2XT0iU0lHVFNUUCIsQ1sxN109IlNJR1RUSU4iLENbMThdPSJTSUdUVE9VIixDWzE5XT0iU0lHVVJHIixDWzIzXT0iU0lHWENQVSIsQ1syNF09IlNJR1hGU1oiLENbMjJdPSJTSUdWVEFMUk0iLEMpLHRoPVJhfEJhfENhfG1ifEVhfFNhLHpmPVJhfERhfENhfG1ifEVhfFNhLFhjPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoZCl7dmFyIGU9YS5jYWxsKHRoaXMpfHx0aGlzO2UuZXJybm89ZDtPYmplY3Quc2V0UHJvdG90eXBlT2YoZSxiLnByb3RvdHlwZSk7cmV0dXJuIGV9UmMoYixhKTtyZXR1cm4gYn0oRXJyb3IpLHZmPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoZCl7dmFyIGU9YS5jYWxsKHRoaXMsCiJXQVNJIEV4aXQgZXJyb3I6ICIrZCl8fHRoaXM7ZS5jb2RlPWQ7T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsYi5wcm90b3R5cGUpO3JldHVybiBlfVJjKGIsYSk7cmV0dXJuIGJ9KEVycm9yKSxzaD1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGQpe3ZhciBlPWEuY2FsbCh0aGlzLCJXQVNJIEtpbGwgc2lnbmFsOiAiK2QpfHx0aGlzO2Uuc2lnbmFsPWQ7T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsYi5wcm90b3R5cGUpO3JldHVybiBlfVJjKGIsYSk7cmV0dXJuIGJ9KEVycm9yKSxBZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7ZnVuY3Rpb24gYihhKXtzd2l0Y2goYSl7Y2FzZSAxOnJldHVybiBBLmhydGltZSgpO2Nhc2UgMDpyZXR1cm4gUGEoRGF0ZS5ub3coKSk7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gQS5ocnRpbWUoKS1JO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGUoYSxiKXthPWdmKGgsYSk7aWYoYiE9PW4oMCkmJihhLnJpZ2h0cy5iYXNlJmIpPT09bigwKSl0aHJvdyBuZXcgWGMoNjMpOwpyZXR1cm4gYX1mdW5jdGlvbiBmKGEsYil7aC5yZWZyZXNoTWVtb3J5KCk7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDpifSxmdW5jdGlvbihiLGQpe2Q9YSs4KmQ7Yj1oLnZpZXcuZ2V0VWludDMyKGQsITApO2Q9aC52aWV3LmdldFVpbnQzMihkKzQsITApO3JldHVybiBuZXcgVWludDhBcnJheShoLm1lbW9yeS5idWZmZXIsYixkKX0pfXZhciBnLGg9dGhpcyxrPXt9O2EmJmEucHJlb3BlbnM/az1hLnByZW9wZW5zOmEmJmEucHJlb3BlbkRpcmVjdG9yaWVzJiYoaz1hLnByZW9wZW5EaXJlY3Rvcmllcyk7dmFyIGw9e307YSYmYS5lbnYmJihsPWEuZW52KTt2YXIgbT1bXTthJiZhLmFyZ3MmJihtPWEuYXJncyk7dmFyIEE9d2Y7YSYmYS5iaW5kaW5ncyYmKEE9YS5iaW5kaW5ncyk7dGhpcy52aWV3PXRoaXMubWVtb3J5PXZvaWQgMDt0aGlzLmJpbmRpbmdzPUE7dGhpcy5GRF9NQVA9bmV3IE1hcChbWzAse3JlYWw6MCxmaWxldHlwZToyLHJpZ2h0czp7YmFzZTp0aCxpbmhlcml0aW5nOm4oMCl9LApwYXRoOnZvaWQgMH1dLFsxLHtyZWFsOjEsZmlsZXR5cGU6MixyaWdodHM6e2Jhc2U6emYsaW5oZXJpdGluZzpuKDApfSxwYXRoOnZvaWQgMH1dLFsyLHtyZWFsOjIsZmlsZXR5cGU6MixyaWdodHM6e2Jhc2U6emYsaW5oZXJpdGluZzpuKDApfSxwYXRoOnZvaWQgMH1dXSk7dmFyIHI9dGhpcy5iaW5kaW5ncy5mcyx1PXRoaXMuYmluZGluZ3MucGF0aDt0cnl7Zm9yKHZhciBwPVNiKE9iamVjdC5lbnRyaWVzKGspKSx4PXAubmV4dCgpOyF4LmRvbmU7eD1wLm5leHQoKSl7dmFyIHk9VGIoeC52YWx1ZSwyKSx6PXlbMF0sQz15WzFdLEQ9ci5vcGVuU3luYyhDLHIuY29uc3RhbnRzLk9fUkRPTkxZKSxFPVViKHRoaXMuRkRfTUFQLmtleXMoKSkucmV2ZXJzZSgpWzBdKzE7dGhpcy5GRF9NQVAuc2V0KEUse3JlYWw6RCxmaWxldHlwZTozLHJpZ2h0czp7YmFzZTpZYyxpbmhlcml0aW5nOmpmfSxmYWtlUGF0aDp6LHBhdGg6Q30pfX1jYXRjaCh3KXt2YXIgSD17ZXJyb3I6d319ZmluYWxseXt0cnl7eCYmCiF4LmRvbmUmJihnPXAucmV0dXJuKSYmZy5jYWxsKHApfWZpbmFsbHl7aWYoSCl0aHJvdyBILmVycm9yO319dmFyIEk9QS5ocnRpbWUoKTt0aGlzLndhc2lJbXBvcnQ9e2FyZ3NfZ2V0OmZ1bmN0aW9uKGEsYil7aC5yZWZyZXNoTWVtb3J5KCk7dmFyIGQ9YSxlPWI7bS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2gudmlldy5zZXRVaW50MzIoZCxlLCEwKTtkKz00O2UrPUcuZnJvbShoLm1lbW9yeS5idWZmZXIpLndyaXRlKGErIlx4MDAiLGUpfSk7cmV0dXJuIDB9LGFyZ3Nfc2l6ZXNfZ2V0OmZ1bmN0aW9uKGEsYil7aC5yZWZyZXNoTWVtb3J5KCk7aC52aWV3LnNldFVpbnQzMihhLG0ubGVuZ3RoLCEwKTthPW0ucmVkdWNlKGZ1bmN0aW9uKGEsYil7cmV0dXJuIGErRy5ieXRlTGVuZ3RoKGIpKzF9LDApO2gudmlldy5zZXRVaW50MzIoYixhLCEwKTtyZXR1cm4gMH0sZW52aXJvbl9nZXQ6ZnVuY3Rpb24oYSxiKXtoLnJlZnJlc2hNZW1vcnkoKTt2YXIgZD1hLGU9YjtPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPQpUYihhLDIpO2E9YlswXTtiPWJbMV07aC52aWV3LnNldFVpbnQzMihkLGUsITApO2QrPTQ7ZSs9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcikud3JpdGUoYSsiPSIrYisiXHgwMCIsZSl9KTtyZXR1cm4gMH0sZW52aXJvbl9zaXplc19nZXQ6ZnVuY3Rpb24oYSxiKXtoLnJlZnJlc2hNZW1vcnkoKTt2YXIgZD1PYmplY3QuZW50cmllcyhsKS5tYXAoZnVuY3Rpb24oYSl7YT1UYihhLDIpO3JldHVybiBhWzBdKyI9IithWzFdKyJceDAwIn0pLGU9ZC5yZWR1Y2UoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYStHLmJ5dGVMZW5ndGgoYil9LDApO2gudmlldy5zZXRVaW50MzIoYSxkLmxlbmd0aCwhMCk7aC52aWV3LnNldFVpbnQzMihiLGUsITApO3JldHVybiAwfSxjbG9ja19yZXNfZ2V0OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciBkPW4oMSk7YnJlYWs7Y2FzZSAwOmQ9bigxRTMpfWgudmlldy5zZXRCaWdVaW50NjQoYixkKTtyZXR1cm4gMH0sY2xvY2tfdGltZV9nZXQ6ZnVuY3Rpb24oYSwKZCxlKXtoLnJlZnJlc2hNZW1vcnkoKTthPWIoYSk7aWYobnVsbD09PWEpcmV0dXJuIDI4O2gudmlldy5zZXRCaWdVaW50NjQoZSxuKGEpLCEwKTtyZXR1cm4gMH0sZmRfYWR2aXNlOkIoZnVuY3Rpb24oYSl7ZShhLG1iKTtyZXR1cm4gNTJ9KSxmZF9hbGxvY2F0ZTpCKGZ1bmN0aW9uKGEpe2UoYSxoYyk7cmV0dXJuIDUyfSksZmRfY2xvc2U6QihmdW5jdGlvbihhKXt2YXIgYj1lKGEsbigwKSk7ci5jbG9zZVN5bmMoYi5yZWFsKTtoLkZEX01BUC5kZWxldGUoYSk7cmV0dXJuIDB9KSxmZF9kYXRhc3luYzpCKGZ1bmN0aW9uKGEpe2E9ZShhLFJhKTtyLmZkYXRhc3luY1N5bmMoYS5yZWFsKTtyZXR1cm4gMH0pLGZkX2Zkc3RhdF9nZXQ6QihmdW5jdGlvbihhLGIpe2E9ZShhLG4oMCkpO2gucmVmcmVzaE1lbW9yeSgpO2gudmlldy5zZXRVaW50OChiLGEuZmlsZXR5cGUpO2gudmlldy5zZXRVaW50MTYoYisyLDAsITApO2gudmlldy5zZXRVaW50MTYoYis0LDAsITApO2gudmlldy5zZXRCaWdVaW50NjQoYisKOCxuKGEucmlnaHRzLmJhc2UpLCEwKTtoLnZpZXcuc2V0QmlnVWludDY0KGIrOCs4LG4oYS5yaWdodHMuaW5oZXJpdGluZyksITApO3JldHVybiAwfSksZmRfZmRzdGF0X3NldF9mbGFnczpCKGZ1bmN0aW9uKGEpe2UoYSxsYik7cmV0dXJuIDUyfSksZmRfZmRzdGF0X3NldF9yaWdodHM6QihmdW5jdGlvbihhLGIsZCl7YT1lKGEsbigwKSk7aWYoKGEucmlnaHRzLmJhc2V8Yik+YS5yaWdodHMuYmFzZXx8KGEucmlnaHRzLmluaGVyaXRpbmd8ZCk+YS5yaWdodHMuaW5oZXJpdGluZylyZXR1cm4gNjM7YS5yaWdodHMuYmFzZT1iO2EucmlnaHRzLmluaGVyaXRpbmc9ZDtyZXR1cm4gMH0pLGZkX2ZpbGVzdGF0X2dldDpCKGZ1bmN0aW9uKGEsYil7YT1lKGEsRWEpO3ZhciBkPXIuZnN0YXRTeW5jKGEucmVhbCk7aC5yZWZyZXNoTWVtb3J5KCk7aC52aWV3LnNldEJpZ1VpbnQ2NChiLG4oZC5kZXYpLCEwKTtiKz04O2gudmlldy5zZXRCaWdVaW50NjQoYixuKGQuaW5vKSwhMCk7Yis9ODtoLnZpZXcuc2V0VWludDgoYiwKYS5maWxldHlwZSk7Yis9ODtoLnZpZXcuc2V0QmlnVWludDY0KGIsbihkLm5saW5rKSwhMCk7Yis9ODtoLnZpZXcuc2V0QmlnVWludDY0KGIsbihkLnNpemUpLCEwKTtiKz04O2gudmlldy5zZXRCaWdVaW50NjQoYixQYShkLmF0aW1lTXMpLCEwKTtiKz04O2gudmlldy5zZXRCaWdVaW50NjQoYixQYShkLm10aW1lTXMpLCEwKTtoLnZpZXcuc2V0QmlnVWludDY0KGIrOCxQYShkLmN0aW1lTXMpLCEwKTtyZXR1cm4gMH0pLGZkX2ZpbGVzdGF0X3NldF9zaXplOkIoZnVuY3Rpb24oYSxiKXthPWUoYSxrYyk7ci5mdHJ1bmNhdGVTeW5jKGEucmVhbCxOdW1iZXIoYikpO3JldHVybiAwfSksZmRfZmlsZXN0YXRfc2V0X3RpbWVzOkIoZnVuY3Rpb24oYSxkLGYsaCl7YT1lKGEsbGMpO3ZhciBnPXIuZnN0YXRTeW5jKGEucmVhbCksaz1nLmF0aW1lO2c9Zy5tdGltZTt2YXIgbD1iYihiKDApKTtpZigzPT09KGgmMyl8fDEyPT09KGgmMTIpKXJldHVybiAyODsxPT09KGgmMSk/az1iYihkKToyPT09CihoJjIpJiYoaz1sKTs0PT09KGgmNCk/Zz1iYihmKTo4PT09KGgmOCkmJihnPWwpO3IuZnV0aW1lc1N5bmMoYS5yZWFsLG5ldyBEYXRlKGspLG5ldyBEYXRlKGcpKTtyZXR1cm4gMH0pLGZkX3ByZXN0YXRfZ2V0OkIoZnVuY3Rpb24oYSxiKXthPWUoYSxuKDApKTtpZighYS5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtoLnZpZXcuc2V0VWludDgoYiwwKTtoLnZpZXcuc2V0VWludDMyKGIrNCxHLmJ5dGVMZW5ndGgoYS5mYWtlUGF0aCksITApO3JldHVybiAwfSksZmRfcHJlc3RhdF9kaXJfbmFtZTpCKGZ1bmN0aW9uKGEsYixkKXthPWUoYSxuKDApKTtpZighYS5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtHLmZyb20oaC5tZW1vcnkuYnVmZmVyKS53cml0ZShhLmZha2VQYXRoLGIsZCwidXRmOCIpO3JldHVybiAwfSksZmRfcHdyaXRlOkIoZnVuY3Rpb24oYSxiLGQsZyxrKXt2YXIgbD1lKGEsRGF8a2IpLG09MDtmKGIsZCkuZm9yRWFjaChmdW5jdGlvbihhKXtmb3IodmFyIGI9CjA7YjxhLmJ5dGVMZW5ndGg7KWIrPXIud3JpdGVTeW5jKGwucmVhbCxhLGIsYS5ieXRlTGVuZ3RoLWIsTnVtYmVyKGcpK20rYik7bSs9Yn0pO2gudmlldy5zZXRVaW50MzIoayxtLCEwKTtyZXR1cm4gMH0pLGZkX3dyaXRlOkIoZnVuY3Rpb24oYSxiLGQsZyl7dmFyIGs9ZShhLERhKSxsPTA7ZihiLGQpLmZvckVhY2goZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7YjxhLmJ5dGVMZW5ndGg7KXt2YXIgZD1yLndyaXRlU3luYyhrLnJlYWwsYSxiLGEuYnl0ZUxlbmd0aC1iLGsub2Zmc2V0P051bWJlcihrLm9mZnNldCk6bnVsbCk7ay5vZmZzZXQmJihrLm9mZnNldCs9bihkKSk7Yis9ZH1sKz1ifSk7aC52aWV3LnNldFVpbnQzMihnLGwsITApO3JldHVybiAwfSksZmRfcHJlYWQ6QihmdW5jdGlvbihhLGIsZCxnLGspe3ZhciBsO2E9ZShhLEJhfGtiKTt2YXIgbT0wO3RyeXt2YXIgdz1TYihmKGIsZCkpLG49dy5uZXh0KCk7YTpmb3IoOyFuLmRvbmU7bj13Lm5leHQoKSl7dmFyIEY9bi52YWx1ZTsKZm9yKGI9MDtiPEYuYnl0ZUxlbmd0aDspe3ZhciBxPUYuYnl0ZUxlbmd0aC1iLHA9ci5yZWFkU3luYyhhLnJlYWwsRixiLEYuYnl0ZUxlbmd0aC1iLE51bWJlcihnKSttK2IpO2IrPXA7bSs9cDtpZigwPT09cHx8cDxxKWJyZWFrIGF9bSs9Yn19Y2F0Y2goTyl7dmFyIHQ9e2Vycm9yOk99fWZpbmFsbHl7dHJ5e24mJiFuLmRvbmUmJihsPXcucmV0dXJuKSYmbC5jYWxsKHcpfWZpbmFsbHl7aWYodCl0aHJvdyB0LmVycm9yO319aC52aWV3LnNldFVpbnQzMihrLG0sITApO3JldHVybiAwfSksZmRfcmVhZDpCKGZ1bmN0aW9uKGEsYixkLGcpe3ZhciBrO2E9ZShhLEJhKTt2YXIgbD0wPT09YS5yZWFsLG09MDt0cnl7dmFyIHc9U2IoZihiLGQpKSxGPXcubmV4dCgpO2E6Zm9yKDshRi5kb25lO0Y9dy5uZXh0KCkpe3ZhciBwPUYudmFsdWU7Zm9yKGI9MDtiPHAuYnl0ZUxlbmd0aDspe3ZhciBxPXAuYnl0ZUxlbmd0aC1iLHQ9ci5yZWFkU3luYyhhLnJlYWwscCxiLHEsbHx8dm9pZCAwPT09YS5vZmZzZXQ/Cm51bGw6TnVtYmVyKGEub2Zmc2V0KSk7bHx8KGEub2Zmc2V0PShhLm9mZnNldD9hLm9mZnNldDpuKDApKStuKHQpKTtiKz10O20rPXQ7aWYoMD09PXR8fHQ8cSlicmVhayBhfX19Y2F0Y2goTyl7dmFyIGJjPXtlcnJvcjpPfX1maW5hbGx5e3RyeXtGJiYhRi5kb25lJiYoaz13LnJldHVybikmJmsuY2FsbCh3KX1maW5hbGx5e2lmKGJjKXRocm93IGJjLmVycm9yO319aC52aWV3LnNldFVpbnQzMihnLG0sITApO3JldHVybiAwfSksZmRfcmVhZGRpcjpCKGZ1bmN0aW9uKGEsYixkLGYsZyl7YT1lKGEsamMpO2gucmVmcmVzaE1lbW9yeSgpO3ZhciBrPXIucmVhZGRpclN5bmMoYS5wYXRoLHt3aXRoRmlsZVR5cGVzOiEwfSksbD1iO2ZvcihmPU51bWJlcihmKTtmPGsubGVuZ3RoO2YrPTEpe3ZhciBtPWtbZl0sdz1HLmJ5dGVMZW5ndGgobS5uYW1lKTtpZihiLWw+ZClicmVhaztoLnZpZXcuc2V0QmlnVWludDY0KGIsbihmKzEpLCEwKTtiKz04O2lmKGItbD5kKWJyZWFrO3ZhciBwPXIuc3RhdFN5bmModS5yZXNvbHZlKGEucGF0aCwKbS5uYW1lKSk7aC52aWV3LnNldEJpZ1VpbnQ2NChiLG4ocC5pbm8pLCEwKTtiKz04O2lmKGItbD5kKWJyZWFrO2gudmlldy5zZXRVaW50MzIoYix3LCEwKTtiKz00O2lmKGItbD5kKWJyZWFrO3N3aXRjaCghMCl7Y2FzZSBwLmlzQmxvY2tEZXZpY2UoKTpwPTE7YnJlYWs7Y2FzZSBwLmlzQ2hhcmFjdGVyRGV2aWNlKCk6cD0yO2JyZWFrO2Nhc2UgcC5pc0RpcmVjdG9yeSgpOnA9MzticmVhaztjYXNlIHAuaXNGSUZPKCk6cD02O2JyZWFrO2Nhc2UgcC5pc0ZpbGUoKTpwPTQ7YnJlYWs7Y2FzZSBwLmlzU29ja2V0KCk6cD02O2JyZWFrO2Nhc2UgcC5pc1N5bWJvbGljTGluaygpOnA9NzticmVhaztkZWZhdWx0OnA9MH1oLnZpZXcuc2V0VWludDgoYixwKTtiKz0xO2IrPTM7aWYoYit3Pj1sK2QpYnJlYWs7Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcikud3JpdGUobS5uYW1lLGIpO2IrPXd9aC52aWV3LnNldFVpbnQzMihnLE1hdGgubWluKGItbCxkKSwhMCk7cmV0dXJuIDB9KSxmZF9yZW51bWJlcjpCKGZ1bmN0aW9uKGEsCmIpe2UoYSxuKDApKTtlKGIsbigwKSk7ci5jbG9zZVN5bmMoaC5GRF9NQVAuZ2V0KGEpLnJlYWwpO2guRkRfTUFQLnNldChhLGguRkRfTUFQLmdldChiKSk7aC5GRF9NQVAuZGVsZXRlKGIpO3JldHVybiAwfSksZmRfc2VlazpCKGZ1bmN0aW9uKGEsYixkLGYpe2E9ZShhLGtiKTtoLnJlZnJlc2hNZW1vcnkoKTtzd2l0Y2goZCl7Y2FzZSAxOmEub2Zmc2V0PShhLm9mZnNldD9hLm9mZnNldDpuKDApKStuKGIpO2JyZWFrO2Nhc2UgMjpkPXIuZnN0YXRTeW5jKGEucmVhbCkuc2l6ZTthLm9mZnNldD1uKGQpK24oYik7YnJlYWs7Y2FzZSAwOmEub2Zmc2V0PW4oYil9aC52aWV3LnNldEJpZ1VpbnQ2NChmLGEub2Zmc2V0LCEwKTtyZXR1cm4gMH0pLGZkX3RlbGw6QihmdW5jdGlvbihhLGIpe2E9ZShhLGhkKTtoLnJlZnJlc2hNZW1vcnkoKTthLm9mZnNldHx8KGEub2Zmc2V0PW4oMCkpO2gudmlldy5zZXRCaWdVaW50NjQoYixhLm9mZnNldCwhMCk7cmV0dXJuIDB9KSxmZF9zeW5jOkIoZnVuY3Rpb24oYSl7YT0KZShhLENhKTtyLmZzeW5jU3luYyhhLnJlYWwpO3JldHVybiAwfSkscGF0aF9jcmVhdGVfZGlyZWN0b3J5OkIoZnVuY3Rpb24oYSxiLGQpe2E9ZShhLGlkKTtpZighYS5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtiPUcuZnJvbShoLm1lbW9yeS5idWZmZXIsYixkKS50b1N0cmluZygpO3IubWtkaXJTeW5jKHUucmVzb2x2ZShhLnBhdGgsYikpO3JldHVybiAwfSkscGF0aF9maWxlc3RhdF9nZXQ6QihmdW5jdGlvbihhLGIsZCxmLGcpe2E9ZShhLHBkKTtpZighYS5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtkPUcuZnJvbShoLm1lbW9yeS5idWZmZXIsZCxmKS50b1N0cmluZygpO2Q9ci5zdGF0U3luYyh1LnJlc29sdmUoYS5wYXRoLGQpKTtoLnZpZXcuc2V0QmlnVWludDY0KGcsbihkLmRldiksITApO2crPTg7aC52aWV3LnNldEJpZ1VpbnQ2NChnLG4oZC5pbm8pLCEwKTtnKz04O2gudmlldy5zZXRVaW50OChnLGhmKGgsdm9pZCAwLGQpLmZpbGV0eXBlKTtnKz0KODtoLnZpZXcuc2V0QmlnVWludDY0KGcsbihkLm5saW5rKSwhMCk7Zys9ODtoLnZpZXcuc2V0QmlnVWludDY0KGcsbihkLnNpemUpLCEwKTtnKz04O2gudmlldy5zZXRCaWdVaW50NjQoZyxQYShkLmF0aW1lTXMpLCEwKTtnKz04O2gudmlldy5zZXRCaWdVaW50NjQoZyxQYShkLm10aW1lTXMpLCEwKTtoLnZpZXcuc2V0QmlnVWludDY0KGcrOCxQYShkLmN0aW1lTXMpLCEwKTtyZXR1cm4gMH0pLHBhdGhfZmlsZXN0YXRfc2V0X3RpbWVzOkIoZnVuY3Rpb24oYSxkLGYsZyxrLGwsbSl7YT1lKGEscmQpO2lmKCFhLnBhdGgpcmV0dXJuIDI4O2gucmVmcmVzaE1lbW9yeSgpO3ZhciBuPXIuZnN0YXRTeW5jKGEucmVhbCk7ZD1uLmF0aW1lO249bi5tdGltZTt2YXIgcD1iYihiKDApKTtpZigzPT09KG0mMyl8fDEyPT09KG0mMTIpKXJldHVybiAyODsxPT09KG0mMSk/ZD1iYihrKToyPT09KG0mMikmJihkPXApOzQ9PT0obSY0KT9uPWJiKGwpOjg9PT0obSY4KSYmKG49cCk7Zj1HLmZyb20oaC5tZW1vcnkuYnVmZmVyLApmLGcpLnRvU3RyaW5nKCk7ci51dGltZXNTeW5jKHUucmVzb2x2ZShhLnBhdGgsZiksbmV3IERhdGUoZCksbmV3IERhdGUobikpO3JldHVybiAwfSkscGF0aF9saW5rOkIoZnVuY3Rpb24oYSxiLGQsZixnLGssbCl7YT1lKGEsa2QpO2c9ZShnLGxkKTtpZighYS5wYXRofHwhZy5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtkPUcuZnJvbShoLm1lbW9yeS5idWZmZXIsZCxmKS50b1N0cmluZygpO2s9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcixrLGwpLnRvU3RyaW5nKCk7ci5saW5rU3luYyh1LnJlc29sdmUoYS5wYXRoLGQpLHUucmVzb2x2ZShnLnBhdGgsaykpO3JldHVybiAwfSkscGF0aF9vcGVuOkIoZnVuY3Rpb24oYSxiLGQsZixnLGssbCxtLHApe2I9ZShhLGljKTtrPW4oayk7bD1uKGwpO2E9KGsmKEJhfGpjKSkhPT1uKDApO3ZhciBxPShrJihSYXxEYXxoY3xrYykpIT09bigwKTtpZihxJiZhKXZhciB3PXIuY29uc3RhbnRzLk9fUkRXUjtlbHNlIGE/dz1yLmNvbnN0YW50cy5PX1JET05MWToKcSYmKHc9ci5jb25zdGFudHMuT19XUk9OTFkpO2E9a3xpYztrfD1sOzAhPT0oZyYxKSYmKHd8PXIuY29uc3RhbnRzLk9fQ1JFQVQsYXw9amQpOzAhPT0oZyYyKSYmKHd8PXIuY29uc3RhbnRzLk9fRElSRUNUT1JZKTswIT09KGcmNCkmJih3fD1yLmNvbnN0YW50cy5PX0VYQ0wpOzAhPT0oZyY4KSYmKHd8PXIuY29uc3RhbnRzLk9fVFJVTkMsYXw9cWQpOzAhPT0obSYxKSYmKHd8PXIuY29uc3RhbnRzLk9fQVBQRU5EKTswIT09KG0mMikmJih3PXIuY29uc3RhbnRzLk9fRFNZTkM/d3xyLmNvbnN0YW50cy5PX0RTWU5DOnd8ci5jb25zdGFudHMuT19TWU5DLGt8PVJhKTswIT09KG0mNCkmJih3fD1yLmNvbnN0YW50cy5PX05PTkJMT0NLKTswIT09KG0mOCkmJih3PXIuY29uc3RhbnRzLk9fUlNZTkM/d3xyLmNvbnN0YW50cy5PX1JTWU5DOnd8ci5jb25zdGFudHMuT19TWU5DLGt8PUNhKTswIT09KG0mMTYpJiYod3w9ci5jb25zdGFudHMuT19TWU5DLGt8PUNhKTtxJiYwPT09KHcmKHIuY29uc3RhbnRzLk9fQVBQRU5EfApyLmNvbnN0YW50cy5PX1RSVU5DKSkmJihrfD1rYik7aC5yZWZyZXNoTWVtb3J5KCk7ZD1HLmZyb20oaC5tZW1vcnkuYnVmZmVyLGQsZikudG9TdHJpbmcoKTtkPXUucmVzb2x2ZShiLnBhdGgsZCk7aWYodS5yZWxhdGl2ZShiLnBhdGgsZCkuc3RhcnRzV2l0aCgiLi4iKSlyZXR1cm4gNzY7dHJ5e3ZhciB0PXIucmVhbHBhdGhTeW5jKGQpO2lmKHUucmVsYXRpdmUoYi5wYXRoLHQpLnN0YXJ0c1dpdGgoIi4uIikpcmV0dXJuIDc2fWNhdGNoKE8pe2lmKCJFTk9FTlQiPT09Ty5jb2RlKXQ9ZDtlbHNlIHRocm93IE87fXRyeXt2YXIgRj1yLnN0YXRTeW5jKHQpLmlzRGlyZWN0b3J5KCl9Y2F0Y2goTyl7fXc9IXEmJkY/ci5vcGVuU3luYyh0LHIuY29uc3RhbnRzLk9fUkRPTkxZKTpyLm9wZW5TeW5jKHQsdyk7Rj1VYihoLkZEX01BUC5rZXlzKCkpLnJldmVyc2UoKVswXSsxO2guRkRfTUFQLnNldChGLHtyZWFsOncsZmlsZXR5cGU6dm9pZCAwLHJpZ2h0czp7YmFzZTphLGluaGVyaXRpbmc6a30sCnBhdGg6dH0pO2dmKGgsRik7aC52aWV3LnNldFVpbnQzMihwLEYsITApO3JldHVybiAwfSkscGF0aF9yZWFkbGluazpCKGZ1bmN0aW9uKGEsYixkLGYsZyxrKXthPWUoYSxtZCk7aWYoIWEucGF0aClyZXR1cm4gMjg7aC5yZWZyZXNoTWVtb3J5KCk7Yj1HLmZyb20oaC5tZW1vcnkuYnVmZmVyLGIsZCkudG9TdHJpbmcoKTtiPXUucmVzb2x2ZShhLnBhdGgsYik7Yj1yLnJlYWRsaW5rU3luYyhiKTtmPUcuZnJvbShoLm1lbW9yeS5idWZmZXIpLndyaXRlKGIsZixnKTtoLnZpZXcuc2V0VWludDMyKGssZiwhMCk7cmV0dXJuIDB9KSxwYXRoX3JlbW92ZV9kaXJlY3Rvcnk6QihmdW5jdGlvbihhLGIsZCl7YT1lKGEsdGQpO2lmKCFhLnBhdGgpcmV0dXJuIDI4O2gucmVmcmVzaE1lbW9yeSgpO2I9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcixiLGQpLnRvU3RyaW5nKCk7ci5ybWRpclN5bmModS5yZXNvbHZlKGEucGF0aCxiKSk7cmV0dXJuIDB9KSxwYXRoX3JlbmFtZTpCKGZ1bmN0aW9uKGEsYixkLApmLGcsayl7YT1lKGEsbmQpO2Y9ZShmLG9kKTtpZighYS5wYXRofHwhZi5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTtiPUcuZnJvbShoLm1lbW9yeS5idWZmZXIsYixkKS50b1N0cmluZygpO2c9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcixnLGspLnRvU3RyaW5nKCk7ci5yZW5hbWVTeW5jKHUucmVzb2x2ZShhLnBhdGgsYiksdS5yZXNvbHZlKGYucGF0aCxnKSk7cmV0dXJuIDB9KSxwYXRoX3N5bWxpbms6QihmdW5jdGlvbihhLGIsZCxmLGcpe2Q9ZShkLHNkKTtpZighZC5wYXRoKXJldHVybiAyODtoLnJlZnJlc2hNZW1vcnkoKTthPUcuZnJvbShoLm1lbW9yeS5idWZmZXIsYSxiKS50b1N0cmluZygpO2Y9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcixmLGcpLnRvU3RyaW5nKCk7ci5zeW1saW5rU3luYyhhLHUucmVzb2x2ZShkLnBhdGgsZikpO3JldHVybiAwfSkscGF0aF91bmxpbmtfZmlsZTpCKGZ1bmN0aW9uKGEsYixkKXthPWUoYSx1ZCk7aWYoIWEucGF0aClyZXR1cm4gMjg7CmgucmVmcmVzaE1lbW9yeSgpO2I9Ry5mcm9tKGgubWVtb3J5LmJ1ZmZlcixiLGQpLnRvU3RyaW5nKCk7ci51bmxpbmtTeW5jKHUucmVzb2x2ZShhLnBhdGgsYikpO3JldHVybiAwfSkscG9sbF9vbmVvZmY6ZnVuY3Rpb24oYSxkLGUsZil7dmFyIGc9MCxrPTA7aC5yZWZyZXNoTWVtb3J5KCk7Zm9yKHZhciBsPTA7bDxlO2wrPTEpe3ZhciBtPWgudmlldy5nZXRCaWdVaW50NjQoYSwhMCk7YSs9ODt2YXIgcD1oLnZpZXcuZ2V0VWludDgoYSk7YSs9MTtzd2l0Y2gocCl7Y2FzZSAwOmErPTc7aC52aWV3LmdldEJpZ1VpbnQ2NChhLCEwKTthKz04O3ZhciBxPWgudmlldy5nZXRVaW50MzIoYSwhMCk7YSs9NDthKz00O3A9aC52aWV3LmdldEJpZ1VpbnQ2NChhLCEwKTthKz04O2gudmlldy5nZXRCaWdVaW50NjQoYSwhMCk7YSs9ODt2YXIgcj1oLnZpZXcuZ2V0VWludDE2KGEsITApO2ErPTI7YSs9Njt2YXIgdD0xPT09cjtyPTA7cT1uKGIocSkpO251bGw9PT1xP3I9Mjg6KHA9dD9wOnErcCxrPQpwPms/cDprKTtoLnZpZXcuc2V0QmlnVWludDY0KGQsbSwhMCk7ZCs9ODtoLnZpZXcuc2V0VWludDE2KGQsciwhMCk7ZCs9MjtoLnZpZXcuc2V0VWludDgoZCwwKTtkKz0xO2QrPTU7Zys9MTticmVhaztjYXNlIDE6Y2FzZSAyOmErPTM7aC52aWV3LmdldFVpbnQzMihhLCEwKTthKz00O2gudmlldy5zZXRCaWdVaW50NjQoZCxtLCEwKTtkKz04O2gudmlldy5zZXRVaW50MTYoZCw1MiwhMCk7ZCs9MjtoLnZpZXcuc2V0VWludDgoZCxwKTtkKz0xO2QrPTU7Zys9MTticmVhaztkZWZhdWx0OnJldHVybiAyOH19Zm9yKGgudmlldy5zZXRVaW50MzIoZixnLCEwKTtBLmhydGltZSgpPGs7KTtyZXR1cm4gMH0scHJvY19leGl0OmZ1bmN0aW9uKGEpe0EuZXhpdChhKTtyZXR1cm4gMH0scHJvY19yYWlzZTpmdW5jdGlvbihhKXtpZighKGEgaW4geWYpKXJldHVybiAyODtBLmtpbGwoeWZbYV0pO3JldHVybiAwfSxyYW5kb21fZ2V0OmZ1bmN0aW9uKGEsYil7aC5yZWZyZXNoTWVtb3J5KCk7QS5yYW5kb21GaWxsU3luYyhuZXcgVWludDhBcnJheShoLm1lbW9yeS5idWZmZXIpLAphLGIpO3JldHVybiAwfSxzY2hlZF95aWVsZDpmdW5jdGlvbigpe3JldHVybiAwfSxzb2NrX3JlY3Y6ZnVuY3Rpb24oKXtyZXR1cm4gNTJ9LHNvY2tfc2VuZDpmdW5jdGlvbigpe3JldHVybiA1Mn0sc29ja19zaHV0ZG93bjpmdW5jdGlvbigpe3JldHVybiA1Mn19O2EudHJhY2VTeXNjYWxscyYmT2JqZWN0LmtleXModGhpcy53YXNpSW1wb3J0KS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWgud2FzaUltcG9ydFthXTtoLndhc2lJbXBvcnRbYV09ZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspZFtlXT1hcmd1bWVudHNbZV07Y29uc29sZS5sb2coIldBU0k6IHdhc2lJbXBvcnQgY2FsbGVkOiAiK2ErIiAoIitkKyIpIik7dHJ5e3ZhciBmPWIuYXBwbHkodm9pZCAwLFViKGQpKTtjb25zb2xlLmxvZygiV0FTSTogID0+ICIrZik7cmV0dXJuIGZ9Y2F0Y2goWil7dGhyb3cgY29uc29sZS5sb2coIkNhdGNoZWQgZXJyb3I6ICIrWiksWjt9fX0pfWEucHJvdG90eXBlLnJlZnJlc2hNZW1vcnk9CmZ1bmN0aW9uKCl7dGhpcy52aWV3JiYwIT09dGhpcy52aWV3LmJ1ZmZlci5ieXRlTGVuZ3RofHwodGhpcy52aWV3PW5ldyBlYyh0aGlzLm1lbW9yeS5idWZmZXIpKX07YS5wcm90b3R5cGUuc2V0TWVtb3J5PWZ1bmN0aW9uKGEpe3RoaXMubWVtb3J5PWF9O2EucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGEpe2E9YS5leHBvcnRzO2lmKG51bGw9PT1hfHwib2JqZWN0IiE9PXR5cGVvZiBhKXRocm93IEVycm9yKCJpbnN0YW5jZS5leHBvcnRzIG11c3QgYmUgYW4gT2JqZWN0LiBSZWNlaXZlZCAiK2ErIi4iKTt2YXIgYj1hLm1lbW9yeTtpZighKGIgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5NZW1vcnkpKXRocm93IEVycm9yKCJpbnN0YW5jZS5leHBvcnRzLm1lbW9yeSBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuTWVtb3J5LiBSZWNjZWl2ZWQgIitiKyIuIik7dGhpcy5zZXRNZW1vcnkoYik7YS5fc3RhcnQmJmEuX3N0YXJ0KCl9O2EucHJvdG90eXBlLmdldEltcG9ydE5hbWVzcGFjZT1mdW5jdGlvbihhKXt2YXIgYiwKZT1udWxsO3RyeXtmb3IodmFyIGY9U2IoV2ViQXNzZW1ibHkuTW9kdWxlLmltcG9ydHMoYSkpLGc9Zi5uZXh0KCk7IWcuZG9uZTtnPWYubmV4dCgpKXt2YXIgaD1nLnZhbHVlO2lmKCJmdW5jdGlvbiI9PT1oLmtpbmQmJmgubW9kdWxlLnN0YXJ0c1dpdGgoIndhc2lfIikpaWYoIWUpZT1oLm1vZHVsZTtlbHNlIGlmKGUhPT1oLm1vZHVsZSl0aHJvdyBFcnJvcigiTXVsdGlwbGUgbmFtZXNwYWNlcyBkZXRlY3RlZC4iKTt9fWNhdGNoKHQpe3ZhciBrPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtnJiYhZy5kb25lJiYoYj1mLnJldHVybikmJmIuY2FsbChmKX1maW5hbGx5e2lmKGspdGhyb3cgay5lcnJvcjt9fXJldHVybiBlfTthLnByb3RvdHlwZS5nZXRJbXBvcnRzPWZ1bmN0aW9uKGEpe3N3aXRjaCh0aGlzLmdldEltcG9ydE5hbWVzcGFjZShhKSl7Y2FzZSAid2FzaV91bnN0YWJsZSI6cmV0dXJue3dhc2lfdW5zdGFibGU6dGhpcy53YXNpSW1wb3J0fTtjYXNlICJ3YXNpX3NuYXBzaG90X3ByZXZpZXcxIjpyZXR1cm57d2FzaV9zbmFwc2hvdF9wcmV2aWV3MTp0aGlzLndhc2lJbXBvcnR9OwpkZWZhdWx0OnRocm93IEVycm9yKCJDYW4ndCBkZXRlY3QgYSBXQVNJIG5hbWVzcGFjZSBmb3IgdGhlIFdlYkFzc2VtYmx5IE1vZHVsZSIpO319O2EuZGVmYXVsdEJpbmRpbmdzPXdmO3JldHVybiBhfSgpLEJmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXt0aGlzLm9wdGlvbnM9YX1hLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oYSl7cmV0dXJuIEViKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBGYih0aGlzLGZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJydW4gbm90IGltcGxlbWVudGVkIGJ5IHRoZSBDb21tYW5kIHN1YmNsYXNzIik7fSl9KX07cmV0dXJuIGF9KCksdWg9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXt2YXIgZD1hLmNhbGwodGhpcyxiKXx8dGhpcztpZighYi5tb2R1bGUpdGhyb3cgRXJyb3IoIkRpZCBub3QgZmluZCBhIFdlYkFzc2VtYmx5Lk1vZHVsZSBmb3IgdGhlIFdBU0kgQ29tbWFuZCIpO3JldHVybiBkfXpkKGIsYSk7Yi5wcm90b3R5cGUucnVuPQpmdW5jdGlvbihhKXtyZXR1cm4gRWIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsZCxnLGg7cmV0dXJuIEZiKHRoaXMsZnVuY3Rpb24oZSl7c3dpdGNoKGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYj17cHJlb3BlbnM6ZGIoeyIuIjoiLiIsIi8iOiIvIn0sdGhpcy5vcHRpb25zLnByZW9wZW5zfHx7fSksZW52OnRoaXMub3B0aW9ucy5lbnYsYXJnczp0aGlzLm9wdGlvbnMuYXJncyxiaW5kaW5nczpkYihkYih7fSxBZi5kZWZhdWx0QmluZGluZ3MpLHtmczphLmZzfSl9LGQ9bmV3IEFmKGIpLGc9dGhpcy5vcHRpb25zLm1vZHVsZSxbNCxXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShnLGRiKHt9LGQuZ2V0SW1wb3J0cyhnKSkpXTtjYXNlIDE6cmV0dXJuIGg9ZS5zZW50KCksZC5zdGFydChoKSxbMl19fSl9KX07cmV0dXJuIGJ9KEJmKSx2aD1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe3ZhciBkPWEuY2FsbCh0aGlzLGIpfHx0aGlzO2lmKCFiLmNhbGxiYWNrKXRocm93IEVycm9yKCJUaGUgQ29tbWFuZCBPcHRpb25zIHByb3ZpZGVkIGFyZSBub3QgZm9yIGEgQ2FsbGJhY2sgQ29tbWFuZCIpOwpkLmNhbGxiYWNrPWIuY2FsbGJhY2s7cmV0dXJuIGR9emQoYixhKTtiLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oYSl7cmV0dXJuIEViKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiO3JldHVybiBGYih0aGlzLGZ1bmN0aW9uKGQpe3N3aXRjaChkLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsUHJvbWlzZS5yZXNvbHZlKHRoaXMuY2FsbGJhY2sodGhpcy5vcHRpb25zLGEpKV07Y2FzZSAxOnJldHVybiBiPWQuc2VudCgpLCJzdHJpbmciPT10eXBlb2YgYiYmYS5mcy53cml0ZUZpbGVTeW5jKCIvZGV2L3N0ZG91dCIsKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGIrIlxuIikpLFsyXX19KX0pfTtyZXR1cm4gYn0oQmYpLHdoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGQsZSxmLGcsaCxrLGwsbSl7dmFyIGI9dGhpczt0aGlzLnN0ZGluUHJvbXB0PSIiO3RoaXMuY29tbWFuZE9wdGlvbnM9YTt0aGlzLndhc21Gcz1uZXcgZ2g7dGhpcy53YXNtRnMuZnJvbUpTT04oZCk7dGhpcy5vcmlnaW5hbFdhc21Gc0pzb249CmQ7dGhpcy5pb0RldmljZXM9bmV3IGhoKHRoaXMud2FzbUZzKTt0aGlzLmlvRGV2aWNlV2luZG93PWg7dGhpcy5pb0RldmljZXMuc2V0V2luZG93U2l6ZUNhbGxiYWNrKGZ1bmN0aW9uKCl7dmFyIGE9Yi5pb0RldmljZXMuZ2V0V2luZG93U2l6ZSgpO2IuaW9EZXZpY2VXaW5kb3cucmVzaXplKGFbMF0sYVsxXSl9KTt0aGlzLmlvRGV2aWNlcy5zZXRCdWZmZXJJbmRleERpc3BsYXlDYWxsYmFjayhmdW5jdGlvbigpe3ZhciBhPWIuaW9EZXZpY2VzLmdldEZyYW1lQnVmZmVyKCk7Yi5pb0RldmljZVdpbmRvdy5kcmF3UmdiYUFycmF5VG9GcmFtZUJ1ZmZlcihhKX0pO3RoaXMuaW9EZXZpY2VzLnNldElucHV0Q2FsbGJhY2soZnVuY3Rpb24oKXtpZihiLnNoYXJlZElvRGV2aWNlSW5wdXQpe2IuaW9EZXZpY2VXaW5kb3cuZ2V0SW5wdXRCdWZmZXIoKTtBdG9taWNzLndhaXQoYi5zaGFyZWRJb0RldmljZUlucHV0LDAsLTEpO3ZhciBhPWIuc2hhcmVkSW9EZXZpY2VJbnB1dFswXTtiLnNoYXJlZElvRGV2aWNlSW5wdXRbMF09Ci0xO2lmKDA8YSl7Zm9yKHZhciBkPW5ldyBVaW50OEFycmF5KGEpLGU9MDtlPGE7ZSsrKWRbZV09Yi5zaGFyZWRJb0RldmljZUlucHV0W2UrMV07cmV0dXJuIGR9cmV0dXJuIG5ldyBVaW50OEFycmF5fXJldHVybiBiLmlvRGV2aWNlV2luZG93LmdldElucHV0QnVmZmVyKCl9KTt0aGlzLmRhdGFDYWxsYmFjaz1lO3RoaXMuZW5kQ2FsbGJhY2s9Zjt0aGlzLmVycm9yQ2FsbGJhY2s9ZztkPXZvaWQgMDtrJiYoZD1uZXcgSW50MzJBcnJheShrKSk7dGhpcy5zaGFyZWRJb0RldmljZUlucHV0PWQ7az12b2lkIDA7bCYmKGs9bmV3IEludDMyQXJyYXkobCkpO3RoaXMuY29tbWFuZD1hLm1vZHVsZT9uZXcgdWgoYSk6bmV3IHZoKGEpO3RoaXMud2FzbUZzLnZvbHVtZS5mZHNbMF0ubm9kZS5yZWFkPXRoaXMuc3RkaW5SZWFkLmJpbmQodGhpcyk7dGhpcy53YXNtRnMudm9sdW1lLmZkc1sxXS5ub2RlLndyaXRlPXRoaXMuc3Rkb3V0V3JpdGUuYmluZCh0aGlzKTt0aGlzLndhc21Gcy52b2x1bWUuZmRzWzJdLm5vZGUud3JpdGU9CnRoaXMuc3Rkb3V0V3JpdGUuYmluZCh0aGlzKTthPXRoaXMud2FzbUZzLnZvbHVtZS5vcGVuU3luYygiL2Rldi90dHkiLCJ3KyIpO3RoaXMud2FzbUZzLnZvbHVtZS5mZHNbYV0ubm9kZS5yZWFkPXRoaXMuc3RkaW5SZWFkLmJpbmQodGhpcyk7dGhpcy53YXNtRnMudm9sdW1lLmZkc1thXS5ub2RlLndyaXRlPXRoaXMuc3Rkb3V0V3JpdGUuYmluZCh0aGlzKTt0aGlzLnNoYXJlZFN0ZGluPWs7dGhpcy5zdGFydFN0ZGluUmVhZENhbGxiYWNrPW07dGhpcy5yZWFkU3RkaW5Db3VudGVyPTA7dGhpcy5waXBlZFN0ZGluPSIifWEucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGEpe3JldHVybiBFYih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYixlLGYsZz10aGlzO3JldHVybiBGYih0aGlzLGZ1bmN0aW9uKGQpe3N3aXRjaChkLmxhYmVsKXtjYXNlIDA6Yj1mdW5jdGlvbigpe2cuaW9EZXZpY2VXaW5kb3cucmVzaXplKDAsMCk7c2V0VGltZW91dChmdW5jdGlvbigpe2cuZW5kQ2FsbGJhY2soZy53YXNtRnMudG9KU09OKCkpfSwKNTApfSxkLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBkLnRyeXMucHVzaChbMSwzLCw0XSksYSYmKHRoaXMucGlwZWRTdGRpbj0obmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpKS5kZWNvZGUoYSkpLFs0LHRoaXMuY29tbWFuZC5ydW4odGhpcy53YXNtRnMpXTtjYXNlIDI6cmV0dXJuIGQuc2VudCgpLGIoKSxbMyw0XTtjYXNlIDM6ZT1kLnNlbnQoKTtpZihlIGluc3RhbmNlb2YgdmYpcmV0dXJuIGIoKSxbMl07Zj0iVW5rbm93biBFcnJvciI7aWYodm9pZCAwIT09ZS5jb2RlKWY9ImV4aXRlZCB3aXRoIGNvZGU6ICIrZS5jb2RlO2Vsc2UgaWYodm9pZCAwIT09ZS5zaWduYWwpZj0ia2lsbGVkIHdpdGggc2lnbmFsOiAiK2Uuc2lnbmFsO2Vsc2UgaWYodm9pZCAwIT09ZS51c2VyKXJldHVybiBiKCksWzJdO2NvbnNvbGUuZXJyb3IoZSk7dGhpcy5lcnJvckNhbGxiYWNrKGYsdGhpcy53YXNtRnMudG9KU09OKCksdm9pZCAwIT09ZS51c2VyKTtyZXR1cm5bMyw0XTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9OwphLnByb3RvdHlwZS5zdGRvdXRXcml0ZT1mdW5jdGlvbihhLGQsZSxmKXt0aGlzLmRhdGFDYWxsYmFjayYmdGhpcy5kYXRhQ2FsbGJhY2soYSk7ZD0obmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpKS5kZWNvZGUoYSkuc3BsaXQoIlxuIik7dGhpcy5zdGRpblByb21wdD0wPGQubGVuZ3RoP2RbZC5sZW5ndGgtMV0ucmVwbGFjZSgvW1x1MDAxQlx1MDA5Ql1bW1xdKCkjOz9dKig/Oig/Oig/OlthLXpBLVpcZF0qKD86O1stYS16QS1aXGRcLyMmLjo9PyVAfl9dKikqKT9cdTAwMDcpfCg/Oig/OlxkezEsNH0oPzo7XGR7MCw0fSkqKT9bXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpL2csIiIpOiIiO3JldHVybiBhLmxlbmd0aH07YS5wcm90b3R5cGUuc3RkaW5SZWFkPWZ1bmN0aW9uKGEsZCxlLGYpe2lmKDAhPT10aGlzLnJlYWRTdGRpbkNvdW50ZXIlMilyZXR1cm4gdGhpcy5yZWFkU3RkaW5Db3VudGVyKyssMDtpZih0aGlzLnBpcGVkU3RkaW4pZD10aGlzLnBpcGVkU3RkaW4sdGhpcy5waXBlZFN0ZGluPQoiIix0aGlzLnJlYWRTdGRpbkNvdW50ZXIrKztlbHNlIGlmKHRoaXMuc2hhcmVkU3RkaW4mJnRoaXMuc3RhcnRTdGRpblJlYWRDYWxsYmFjayl7dGhpcy5zdGFydFN0ZGluUmVhZENhbGxiYWNrKCk7QXRvbWljcy53YWl0KHRoaXMuc2hhcmVkU3RkaW4sMCwtMSk7ZD10aGlzLnNoYXJlZFN0ZGluWzBdO3RoaXMuc2hhcmVkU3RkaW5bMF09LTE7ZT1uZXcgVWludDhBcnJheShkKTtmb3IoZj0wO2Y8ZDtmKyspZVtmXT10aGlzLnNoYXJlZFN0ZGluWzErZl07ZD0obmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpKS5kZWNvZGUoZSl9ZWxzZXtkPXByb21wdCgiUGxlYXNlIGVudGVyIHRleHQgZm9yIHN0ZGluOlxuIit0aGlzLnN0ZGluUHJvbXB0KTtpZihudWxsPT09ZCl0aHJvdyB0aGlzLmRhdGFDYWxsYmFjayYmdGhpcy5kYXRhQ2FsbGJhY2soKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKCJcbiIpKSxhPUVycm9yKCJQcm9jZXNzIGtpbGxlZCBieSB1c2VyIiksYS51c2VyPSEwLGE7ZCs9IlxuIjsKdGhpcy5kYXRhQ2FsbGJhY2smJnRoaXMuZGF0YUNhbGxiYWNrKChuZXcgVGV4dEVuY29kZXIpLmVuY29kZShkKSl9aWYoIWQpcmV0dXJuIDA7ZD0obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZCk7Zm9yKGU9MDtlPGQubGVuZ3RoOysrZSlhW2VdPWRbZV07cmV0dXJuIGQubGVuZ3RofTtyZXR1cm4gYX0oKTttYyh3aCl9KSgpCg=="; return[4,this._getBlobUrlForProcessWorker(b,this.wasmTty)];case 1:return e=c.sent(),f=new Worker(e),h=dc(f,[],void 0),g=new SharedArrayBuffer(8192),k=this.wasmTerminalConfig.wasmFs.toJSON(),q=new SharedArrayBuffer(8192),t=new kg(q),[4,new h(this.commandOptionsForProcessesToRun[a],k,Nb(this._processDataCallback.bind(this,{commandOptionIndex:a,sync:!1})),Nb(this._processEndCallback.bind(this,{commandOptionIndex:a,processWorker:f})),Nb(this._processErrorCallback.bind(this,{commandOptionIndex:a})),Nb(t), q,g,Nb(this._processStartStdinReadCallback.bind(this)))];case 2:return p=c.sent(),u=new Int32Array(g),u[0]=-1,[2,{process:p,commandOptionIndex:a,ioDeviceWindow:t,worker:f,sharedStdin:u}]}})})};a.prototype._spawnProcessAsService=function(a){return Y(this,void 0,void 0,function(){var b,e,f;return Z(this,function(c){b=this.wasmTerminalConfig.wasmFs.toJSON();e=new kg;f=new ti(this.commandOptionsForProcessesToRun[a],b,this._processDataCallback.bind(this,{commandOptionIndex:a,sync:!0}),this._processEndCallback.bind(this, {commandOptionIndex:a}),this._processErrorCallback.bind(this,{commandOptionIndex:a}),e);return[2,{process:f,commandOptionIndex:a,ioDeviceWindow:e}]})})};a.prototype._processDataCallback=function(a,c){var b=a.commandOptionIndex;a=a.sync;this.isRunning&&(bb?this._addStdinToSharedStdin(c,1):(b=new Uint8Array(c.length+ this.pipedStdinDataForNextProcess.length),b.set(this.pipedStdinDataForNextProcess),b.set(c,this.pipedStdinDataForNextProcess.length),this.pipedStdinDataForNextProcess=b):(c=(new TextDecoder("utf-8")).decode(c),this.wasmTty&&this.wasmTty.print(c,a)))};a.prototype._processEndCallback=function(a,c){var b=a.commandOptionIndex;(a=a.processWorker)&&a.terminate();c&&this.wasmTerminalConfig.wasmFs.fromJSON(c);ba&&(a=Math.max(a,-b.wasmTty.getCursor()),b.wasmTty.setCursorDirectly(b.wasmTty.getCursor()+a))};this.handleCursorErase=function(a){a?0>=b.wasmTty.getCursor()||(a=b.wasmTty.getInput().substr(0, b.wasmTty.getCursor()-1)+b.wasmTty.getInput().substr(b.wasmTty.getCursor()),b.wasmTty.clearInput(),b.wasmTty.setCursorDirectly(b.wasmTty.getCursor()-1),b.wasmTty.setInput(a,!0)):(a=b.wasmTty.getInput().substr(0,b.wasmTty.getCursor())+b.wasmTty.getInput().substr(b.wasmTty.getCursor()+1),b.wasmTty.setInput(a))};this.handleCursorInsert=function(a){var c=b.wasmTty.getInput().substr(0,b.wasmTty.getCursor())+a+b.wasmTty.getInput().substr(b.wasmTty.getCursor());b.wasmTty.setCursorDirectly(b.wasmTty.getCursor()+ a.length);b.wasmTty.setInput(c)};this.handleReadComplete=function(){b._activePrompt&&b._activePrompt.resolve&&(b._activePrompt.resolve(b.wasmTty.getInput()),b._activePrompt=void 0);b.wasmTty.print("\r\n");b._active=!1};this.handleTermData=function(a){if(b._active||"\u0003"===a){if(b.wasmTty.getFirstInit()&&b._activePrompt){var c=b.wasmTty.getBuffer().getLine(b.wasmTty.getBuffer().cursorY+b.wasmTty.getBuffer().baseY).translateToString(!1,0,b.wasmTty.getBuffer().cursorX);b._activePrompt.promptPrefix= c;b.wasmTty.setPromptPrefix(c);b.wasmTty.setFirstInit(!1)}b._activeCharPrompt&&b._activeCharPrompt.resolve?(b._activeCharPrompt.resolve(a),b._activeCharPrompt=void 0,b.wasmTty.print("\r\n")):3c||127===c)switch(a){case "\r":case "\n":case "\r":oh(b.wasmTty.getInput())?b.handleCursorInsert("\n"):b.handleReadComplete();break;case "\u007f":case "\b":case "\u0004":b.handleCursorErase(!0);break;case "\t":if(0f&&(f=0);a>document.body.scrollHeight&&(a=document.body.scrollHeight);window.scrollTo(f,a)}};a.prototype.print=function(a,c){var b=this;a=a.replace(/\n\n/g,"\n \n");this.isOpen?this.wasmShell.isPrompting?this.wasmShell.printAndRestartPrompt(function(){b.wasmTty.print(a+"\n",c)}):this.wasmTty.print(a,c):this.pendingPrintOnOpen=this.pendingPrintOnOpen?this.pendingPrintOnOpen+a:a};a.prototype.runCommand=function(a){this.wasmShell.isPrompting()&&(this.wasmTty.setInput(a),this.wasmShell.handleReadComplete())}; a.prototype.destroy=function(){this.xterm.dispose();delete this.xterm};a.prototype.onPaste=function(a){this.wasmTty.print(a)};return a}(),zi=function(a){return Y(void 0,void 0,void 0,function(){var b,c,e,f;return Z(this,function(h){switch(h.label){case 0:return[4,fetch("https://registry.wapm.io/graphql",{method:"POST",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({operationName:"shellGetCommandQuery",query:"query shellGetCommandQuery($command: String!) {\n command: getCommand(name: $command) {\n command\n module {\n abi\n publicUrl\n }\n packageVersion {\n package {\n displayName\n }\n }\n }\n}", variables:{command:a}})})];case 1:return b=h.sent(),[4,b.json()];case 2:c=h.sent();e=function(a,b){a=a[b[0]];b.shift();return a?1